Loading camera/libcameraservice/CameraService.cpp +5 −2 Original line number Original line Diff line number Diff line Loading @@ -29,6 +29,8 @@ #include <surfaceflinger/ISurface.h> #include <surfaceflinger/ISurface.h> #include <ui/Overlay.h> #include <ui/Overlay.h> #include <hardware/hardware.h> #include <media/mediaplayer.h> #include <media/mediaplayer.h> #include <media/AudioSystem.h> #include <media/AudioSystem.h> #include "CameraService.h" #include "CameraService.h" Loading Loading @@ -606,7 +608,7 @@ status_t CameraService::Client::registerPreviewBuffers() params.getPreviewSize(&w, &h); params.getPreviewSize(&w, &h); ISurface::BufferHeap buffers(w, h, w, h, ISurface::BufferHeap buffers(w, h, w, h, PIXEL_FORMAT_YCbCr_420_SP, HAL_PIXEL_FORMAT_YCbCr_420_SP, mOrientation, mOrientation, 0, 0, mHardware->getPreviewHeap()); mHardware->getPreviewHeap()); Loading Loading @@ -927,7 +929,8 @@ void CameraService::Client::handleShutter( LOGV("Snapshot image width=%d, height=%d", w, h); LOGV("Snapshot image width=%d, height=%d", w, h); } } ISurface::BufferHeap buffers(w, h, w, h, ISurface::BufferHeap buffers(w, h, w, h, PIXEL_FORMAT_YCbCr_420_SP, mOrientation, 0, mHardware->getRawHeap()); HAL_PIXEL_FORMAT_YCbCr_420_SP, mOrientation, 0, mHardware->getRawHeap()); mSurface->registerBuffers(buffers); mSurface->registerBuffers(buffers); } } Loading include/ui/PixelFormat.h +9 −18 Original line number Original line Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include <sys/types.h> #include <sys/types.h> #include <utils/Errors.h> #include <utils/Errors.h> #include <pixelflinger/format.h> #include <pixelflinger/format.h> #include <hardware/hardware.h> namespace android { namespace android { Loading Loading @@ -57,25 +58,18 @@ enum { // real pixel formats supported for rendering ----------------------------- // real pixel formats supported for rendering ----------------------------- PIXEL_FORMAT_RGBA_8888 = GGL_PIXEL_FORMAT_RGBA_8888, // 4x8-bit RGBA PIXEL_FORMAT_RGBA_8888 = HAL_PIXEL_FORMAT_RGBA_8888, // 4x8-bit RGBA PIXEL_FORMAT_RGBX_8888 = GGL_PIXEL_FORMAT_RGBX_8888, // 4x8-bit RGB0 PIXEL_FORMAT_RGBX_8888 = HAL_PIXEL_FORMAT_RGBX_8888, // 4x8-bit RGB0 PIXEL_FORMAT_RGB_888 = GGL_PIXEL_FORMAT_RGB_888, // 3x8-bit RGB PIXEL_FORMAT_RGB_888 = HAL_PIXEL_FORMAT_RGB_888, // 3x8-bit RGB PIXEL_FORMAT_RGB_565 = GGL_PIXEL_FORMAT_RGB_565, // 16-bit RGB PIXEL_FORMAT_RGB_565 = HAL_PIXEL_FORMAT_RGB_565, // 16-bit RGB PIXEL_FORMAT_BGRA_8888 = GGL_PIXEL_FORMAT_BGRA_8888, // 4x8-bit BGRA PIXEL_FORMAT_BGRA_8888 = HAL_PIXEL_FORMAT_BGRA_8888, // 4x8-bit BGRA PIXEL_FORMAT_RGBA_5551 = GGL_PIXEL_FORMAT_RGBA_5551, // 16-bit ARGB PIXEL_FORMAT_RGBA_5551 = HAL_PIXEL_FORMAT_RGBA_5551, // 16-bit ARGB PIXEL_FORMAT_RGBA_4444 = GGL_PIXEL_FORMAT_RGBA_4444, // 16-bit ARGB PIXEL_FORMAT_RGBA_4444 = HAL_PIXEL_FORMAT_RGBA_4444, // 16-bit ARGB PIXEL_FORMAT_A_8 = GGL_PIXEL_FORMAT_A_8, // 8-bit A PIXEL_FORMAT_A_8 = GGL_PIXEL_FORMAT_A_8, // 8-bit A PIXEL_FORMAT_L_8 = GGL_PIXEL_FORMAT_L_8, // 8-bit L (R=G=B=L) PIXEL_FORMAT_L_8 = GGL_PIXEL_FORMAT_L_8, // 8-bit L (R=G=B=L) PIXEL_FORMAT_LA_88 = GGL_PIXEL_FORMAT_LA_88, // 16-bit LA PIXEL_FORMAT_LA_88 = GGL_PIXEL_FORMAT_LA_88, // 16-bit LA PIXEL_FORMAT_RGB_332 = GGL_PIXEL_FORMAT_RGB_332, // 8-bit RGB PIXEL_FORMAT_RGB_332 = GGL_PIXEL_FORMAT_RGB_332, // 8-bit RGB PIXEL_FORMAT_YCbCr_422_SP= GGL_PIXEL_FORMAT_YCbCr_422_SP, PIXEL_FORMAT_YCbCr_420_SP= GGL_PIXEL_FORMAT_YCbCr_420_SP, PIXEL_FORMAT_YCbCr_422_P = GGL_PIXEL_FORMAT_YCbCr_422_P, PIXEL_FORMAT_YCbCr_420_P = GGL_PIXEL_FORMAT_YCbCr_420_P, PIXEL_FORMAT_YCbCr_422_I = GGL_PIXEL_FORMAT_YCbCr_422_I, PIXEL_FORMAT_YCbCr_420_I = GGL_PIXEL_FORMAT_YCbCr_420_I, // New formats can be added if they're also defined in // New formats can be added if they're also defined in // pixelflinger/format.h // pixelflinger/format.h }; }; Loading @@ -96,10 +90,7 @@ struct PixelFormatInfo RGB = 2, RGB = 2, RGBA = 3, RGBA = 3, LUMINANCE = 4, LUMINANCE = 4, LUMINANCE_ALPHA = 5, LUMINANCE_ALPHA = 5 Y_CB_CR_SP = 6, Y_CB_CR_P = 7, Y_CB_CR_I = 8, }; }; struct szinfo { struct szinfo { Loading libs/surfaceflinger/Layer.cpp +9 −9 Original line number Original line Diff line number Diff line Loading @@ -185,20 +185,20 @@ void Layer::reloadTexture(const Region& dirty) if (res == NO_ERROR) { if (res == NO_ERROR) { int bpp = 0; int bpp = 0; switch (t.format) { switch (t.format) { case GGL_PIXEL_FORMAT_RGB_565: case HAL_PIXEL_FORMAT_RGB_565: case GGL_PIXEL_FORMAT_RGBA_4444: case HAL_PIXEL_FORMAT_RGBA_4444: bpp = 2; bpp = 2; break; break; case GGL_PIXEL_FORMAT_RGBA_8888: case HAL_PIXEL_FORMAT_RGBA_8888: case GGL_PIXEL_FORMAT_RGBX_8888: case HAL_PIXEL_FORMAT_RGBX_8888: bpp = 4; bpp = 4; break; break; case GGL_PIXEL_FORMAT_YCbCr_422_SP: default: case GGL_PIXEL_FORMAT_YCbCr_420_SP: if (isSupportedYuvFormat(t.format)) { // just show the Y plane of YUV buffers // just show the Y plane of YUV buffers bpp = 1; bpp = 1; break; break; default: } // oops, we don't handle this format! // oops, we don't handle this format! LOGE("layer %p, texture=%d, using format %d, which is not " LOGE("layer %p, texture=%d, using format %d, which is not " "supported by the GL", this, texture->name, t.format); "supported by the GL", this, texture->name, t.format); Loading libs/surfaceflinger/LayerBase.cpp +25 −12 Original line number Original line Diff line number Diff line Loading @@ -509,6 +509,21 @@ void LayerBase::validateTexture(GLint textureName) const } } } } bool LayerBase::isSupportedYuvFormat(int format) const { switch (format) { case HAL_PIXEL_FORMAT_YCbCr_422_SP: case HAL_PIXEL_FORMAT_YCbCr_420_SP: case HAL_PIXEL_FORMAT_YCbCr_422_P: case HAL_PIXEL_FORMAT_YCbCr_420_P: case HAL_PIXEL_FORMAT_YCbCr_422_I: case HAL_PIXEL_FORMAT_YCbCr_420_I: case HAL_PIXEL_FORMAT_YCrCb_420_SP: return true; } return false; } void LayerBase::loadTexture(Texture* texture, void LayerBase::loadTexture(Texture* texture, const Region& dirty, const GGLSurface& t) const const Region& dirty, const GGLSurface& t) const { { Loading Loading @@ -573,21 +588,20 @@ void LayerBase::loadTexture(Texture* texture, data = t.data; data = t.data; } } if (t.format == GGL_PIXEL_FORMAT_RGB_565) { if (t.format == HAL_PIXEL_FORMAT_RGB_565) { glTexImage2D(GL_TEXTURE_2D, 0, glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texture->potWidth, texture->potHeight, 0, GL_RGB, texture->potWidth, texture->potHeight, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, data); GL_RGB, GL_UNSIGNED_SHORT_5_6_5, data); } else if (t.format == GGL_PIXEL_FORMAT_RGBA_4444) { } else if (t.format == HAL_PIXEL_FORMAT_RGBA_4444) { glTexImage2D(GL_TEXTURE_2D, 0, glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture->potWidth, texture->potHeight, 0, GL_RGBA, texture->potWidth, texture->potHeight, 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, data); GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, data); } else if (t.format == GGL_PIXEL_FORMAT_RGBA_8888 || } else if (t.format == HAL_PIXEL_FORMAT_RGBA_8888 || t.format == GGL_PIXEL_FORMAT_RGBX_8888) { t.format == HAL_PIXEL_FORMAT_RGBX_8888) { glTexImage2D(GL_TEXTURE_2D, 0, glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture->potWidth, texture->potHeight, 0, GL_RGBA, texture->potWidth, texture->potHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); GL_RGBA, GL_UNSIGNED_BYTE, data); } else if ( t.format == GGL_PIXEL_FORMAT_YCbCr_422_SP || } else if (isSupportedYuvFormat(t.format)) { t.format == GGL_PIXEL_FORMAT_YCbCr_420_SP) { // just show the Y plane of YUV buffers // just show the Y plane of YUV buffers glTexImage2D(GL_TEXTURE_2D, 0, glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, texture->potWidth, texture->potHeight, 0, GL_LUMINANCE, texture->potWidth, texture->potHeight, 0, Loading @@ -599,24 +613,23 @@ void LayerBase::loadTexture(Texture* texture, } } } } if (!data) { if (!data) { if (t.format == GGL_PIXEL_FORMAT_RGB_565) { if (t.format == HAL_PIXEL_FORMAT_RGB_565) { glTexSubImage2D(GL_TEXTURE_2D, 0, glTexSubImage2D(GL_TEXTURE_2D, 0, 0, bounds.top, t.width, bounds.height(), 0, bounds.top, t.width, bounds.height(), GL_RGB, GL_UNSIGNED_SHORT_5_6_5, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, t.data + bounds.top*t.stride*2); t.data + bounds.top*t.stride*2); } else if (t.format == GGL_PIXEL_FORMAT_RGBA_4444) { } else if (t.format == HAL_PIXEL_FORMAT_RGBA_4444) { glTexSubImage2D(GL_TEXTURE_2D, 0, glTexSubImage2D(GL_TEXTURE_2D, 0, 0, bounds.top, t.width, bounds.height(), 0, bounds.top, t.width, bounds.height(), GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, t.data + bounds.top*t.stride*2); t.data + bounds.top*t.stride*2); } else if (t.format == GGL_PIXEL_FORMAT_RGBA_8888 || } else if (t.format == HAL_PIXEL_FORMAT_RGBA_8888 || t.format == GGL_PIXEL_FORMAT_RGBX_8888) { t.format == HAL_PIXEL_FORMAT_RGBX_8888) { glTexSubImage2D(GL_TEXTURE_2D, 0, glTexSubImage2D(GL_TEXTURE_2D, 0, 0, bounds.top, t.width, bounds.height(), 0, bounds.top, t.width, bounds.height(), GL_RGBA, GL_UNSIGNED_BYTE, GL_RGBA, GL_UNSIGNED_BYTE, t.data + bounds.top*t.stride*4); t.data + bounds.top*t.stride*4); } else if ( t.format == GGL_PIXEL_FORMAT_YCbCr_422_SP || } else if (isSupportedYuvFormat(t.format)) { t.format == GGL_PIXEL_FORMAT_YCbCr_420_SP) { // just show the Y plane of YUV buffers // just show the Y plane of YUV buffers glTexSubImage2D(GL_TEXTURE_2D, 0, glTexSubImage2D(GL_TEXTURE_2D, 0, 0, bounds.top, t.width, bounds.height(), 0, bounds.top, t.width, bounds.height(), Loading libs/surfaceflinger/LayerBase.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -265,6 +265,7 @@ protected: status_t initializeEglImage( status_t initializeEglImage( const sp<GraphicBuffer>& buffer, Texture* texture); const sp<GraphicBuffer>& buffer, Texture* texture); bool isSupportedYuvFormat(int format) const; sp<SurfaceFlinger> mFlinger; sp<SurfaceFlinger> mFlinger; uint32_t mFlags; uint32_t mFlags; Loading Loading
camera/libcameraservice/CameraService.cpp +5 −2 Original line number Original line Diff line number Diff line Loading @@ -29,6 +29,8 @@ #include <surfaceflinger/ISurface.h> #include <surfaceflinger/ISurface.h> #include <ui/Overlay.h> #include <ui/Overlay.h> #include <hardware/hardware.h> #include <media/mediaplayer.h> #include <media/mediaplayer.h> #include <media/AudioSystem.h> #include <media/AudioSystem.h> #include "CameraService.h" #include "CameraService.h" Loading Loading @@ -606,7 +608,7 @@ status_t CameraService::Client::registerPreviewBuffers() params.getPreviewSize(&w, &h); params.getPreviewSize(&w, &h); ISurface::BufferHeap buffers(w, h, w, h, ISurface::BufferHeap buffers(w, h, w, h, PIXEL_FORMAT_YCbCr_420_SP, HAL_PIXEL_FORMAT_YCbCr_420_SP, mOrientation, mOrientation, 0, 0, mHardware->getPreviewHeap()); mHardware->getPreviewHeap()); Loading Loading @@ -927,7 +929,8 @@ void CameraService::Client::handleShutter( LOGV("Snapshot image width=%d, height=%d", w, h); LOGV("Snapshot image width=%d, height=%d", w, h); } } ISurface::BufferHeap buffers(w, h, w, h, ISurface::BufferHeap buffers(w, h, w, h, PIXEL_FORMAT_YCbCr_420_SP, mOrientation, 0, mHardware->getRawHeap()); HAL_PIXEL_FORMAT_YCbCr_420_SP, mOrientation, 0, mHardware->getRawHeap()); mSurface->registerBuffers(buffers); mSurface->registerBuffers(buffers); } } Loading
include/ui/PixelFormat.h +9 −18 Original line number Original line Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include <sys/types.h> #include <sys/types.h> #include <utils/Errors.h> #include <utils/Errors.h> #include <pixelflinger/format.h> #include <pixelflinger/format.h> #include <hardware/hardware.h> namespace android { namespace android { Loading Loading @@ -57,25 +58,18 @@ enum { // real pixel formats supported for rendering ----------------------------- // real pixel formats supported for rendering ----------------------------- PIXEL_FORMAT_RGBA_8888 = GGL_PIXEL_FORMAT_RGBA_8888, // 4x8-bit RGBA PIXEL_FORMAT_RGBA_8888 = HAL_PIXEL_FORMAT_RGBA_8888, // 4x8-bit RGBA PIXEL_FORMAT_RGBX_8888 = GGL_PIXEL_FORMAT_RGBX_8888, // 4x8-bit RGB0 PIXEL_FORMAT_RGBX_8888 = HAL_PIXEL_FORMAT_RGBX_8888, // 4x8-bit RGB0 PIXEL_FORMAT_RGB_888 = GGL_PIXEL_FORMAT_RGB_888, // 3x8-bit RGB PIXEL_FORMAT_RGB_888 = HAL_PIXEL_FORMAT_RGB_888, // 3x8-bit RGB PIXEL_FORMAT_RGB_565 = GGL_PIXEL_FORMAT_RGB_565, // 16-bit RGB PIXEL_FORMAT_RGB_565 = HAL_PIXEL_FORMAT_RGB_565, // 16-bit RGB PIXEL_FORMAT_BGRA_8888 = GGL_PIXEL_FORMAT_BGRA_8888, // 4x8-bit BGRA PIXEL_FORMAT_BGRA_8888 = HAL_PIXEL_FORMAT_BGRA_8888, // 4x8-bit BGRA PIXEL_FORMAT_RGBA_5551 = GGL_PIXEL_FORMAT_RGBA_5551, // 16-bit ARGB PIXEL_FORMAT_RGBA_5551 = HAL_PIXEL_FORMAT_RGBA_5551, // 16-bit ARGB PIXEL_FORMAT_RGBA_4444 = GGL_PIXEL_FORMAT_RGBA_4444, // 16-bit ARGB PIXEL_FORMAT_RGBA_4444 = HAL_PIXEL_FORMAT_RGBA_4444, // 16-bit ARGB PIXEL_FORMAT_A_8 = GGL_PIXEL_FORMAT_A_8, // 8-bit A PIXEL_FORMAT_A_8 = GGL_PIXEL_FORMAT_A_8, // 8-bit A PIXEL_FORMAT_L_8 = GGL_PIXEL_FORMAT_L_8, // 8-bit L (R=G=B=L) PIXEL_FORMAT_L_8 = GGL_PIXEL_FORMAT_L_8, // 8-bit L (R=G=B=L) PIXEL_FORMAT_LA_88 = GGL_PIXEL_FORMAT_LA_88, // 16-bit LA PIXEL_FORMAT_LA_88 = GGL_PIXEL_FORMAT_LA_88, // 16-bit LA PIXEL_FORMAT_RGB_332 = GGL_PIXEL_FORMAT_RGB_332, // 8-bit RGB PIXEL_FORMAT_RGB_332 = GGL_PIXEL_FORMAT_RGB_332, // 8-bit RGB PIXEL_FORMAT_YCbCr_422_SP= GGL_PIXEL_FORMAT_YCbCr_422_SP, PIXEL_FORMAT_YCbCr_420_SP= GGL_PIXEL_FORMAT_YCbCr_420_SP, PIXEL_FORMAT_YCbCr_422_P = GGL_PIXEL_FORMAT_YCbCr_422_P, PIXEL_FORMAT_YCbCr_420_P = GGL_PIXEL_FORMAT_YCbCr_420_P, PIXEL_FORMAT_YCbCr_422_I = GGL_PIXEL_FORMAT_YCbCr_422_I, PIXEL_FORMAT_YCbCr_420_I = GGL_PIXEL_FORMAT_YCbCr_420_I, // New formats can be added if they're also defined in // New formats can be added if they're also defined in // pixelflinger/format.h // pixelflinger/format.h }; }; Loading @@ -96,10 +90,7 @@ struct PixelFormatInfo RGB = 2, RGB = 2, RGBA = 3, RGBA = 3, LUMINANCE = 4, LUMINANCE = 4, LUMINANCE_ALPHA = 5, LUMINANCE_ALPHA = 5 Y_CB_CR_SP = 6, Y_CB_CR_P = 7, Y_CB_CR_I = 8, }; }; struct szinfo { struct szinfo { Loading
libs/surfaceflinger/Layer.cpp +9 −9 Original line number Original line Diff line number Diff line Loading @@ -185,20 +185,20 @@ void Layer::reloadTexture(const Region& dirty) if (res == NO_ERROR) { if (res == NO_ERROR) { int bpp = 0; int bpp = 0; switch (t.format) { switch (t.format) { case GGL_PIXEL_FORMAT_RGB_565: case HAL_PIXEL_FORMAT_RGB_565: case GGL_PIXEL_FORMAT_RGBA_4444: case HAL_PIXEL_FORMAT_RGBA_4444: bpp = 2; bpp = 2; break; break; case GGL_PIXEL_FORMAT_RGBA_8888: case HAL_PIXEL_FORMAT_RGBA_8888: case GGL_PIXEL_FORMAT_RGBX_8888: case HAL_PIXEL_FORMAT_RGBX_8888: bpp = 4; bpp = 4; break; break; case GGL_PIXEL_FORMAT_YCbCr_422_SP: default: case GGL_PIXEL_FORMAT_YCbCr_420_SP: if (isSupportedYuvFormat(t.format)) { // just show the Y plane of YUV buffers // just show the Y plane of YUV buffers bpp = 1; bpp = 1; break; break; default: } // oops, we don't handle this format! // oops, we don't handle this format! LOGE("layer %p, texture=%d, using format %d, which is not " LOGE("layer %p, texture=%d, using format %d, which is not " "supported by the GL", this, texture->name, t.format); "supported by the GL", this, texture->name, t.format); Loading
libs/surfaceflinger/LayerBase.cpp +25 −12 Original line number Original line Diff line number Diff line Loading @@ -509,6 +509,21 @@ void LayerBase::validateTexture(GLint textureName) const } } } } bool LayerBase::isSupportedYuvFormat(int format) const { switch (format) { case HAL_PIXEL_FORMAT_YCbCr_422_SP: case HAL_PIXEL_FORMAT_YCbCr_420_SP: case HAL_PIXEL_FORMAT_YCbCr_422_P: case HAL_PIXEL_FORMAT_YCbCr_420_P: case HAL_PIXEL_FORMAT_YCbCr_422_I: case HAL_PIXEL_FORMAT_YCbCr_420_I: case HAL_PIXEL_FORMAT_YCrCb_420_SP: return true; } return false; } void LayerBase::loadTexture(Texture* texture, void LayerBase::loadTexture(Texture* texture, const Region& dirty, const GGLSurface& t) const const Region& dirty, const GGLSurface& t) const { { Loading Loading @@ -573,21 +588,20 @@ void LayerBase::loadTexture(Texture* texture, data = t.data; data = t.data; } } if (t.format == GGL_PIXEL_FORMAT_RGB_565) { if (t.format == HAL_PIXEL_FORMAT_RGB_565) { glTexImage2D(GL_TEXTURE_2D, 0, glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texture->potWidth, texture->potHeight, 0, GL_RGB, texture->potWidth, texture->potHeight, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, data); GL_RGB, GL_UNSIGNED_SHORT_5_6_5, data); } else if (t.format == GGL_PIXEL_FORMAT_RGBA_4444) { } else if (t.format == HAL_PIXEL_FORMAT_RGBA_4444) { glTexImage2D(GL_TEXTURE_2D, 0, glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture->potWidth, texture->potHeight, 0, GL_RGBA, texture->potWidth, texture->potHeight, 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, data); GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, data); } else if (t.format == GGL_PIXEL_FORMAT_RGBA_8888 || } else if (t.format == HAL_PIXEL_FORMAT_RGBA_8888 || t.format == GGL_PIXEL_FORMAT_RGBX_8888) { t.format == HAL_PIXEL_FORMAT_RGBX_8888) { glTexImage2D(GL_TEXTURE_2D, 0, glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture->potWidth, texture->potHeight, 0, GL_RGBA, texture->potWidth, texture->potHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); GL_RGBA, GL_UNSIGNED_BYTE, data); } else if ( t.format == GGL_PIXEL_FORMAT_YCbCr_422_SP || } else if (isSupportedYuvFormat(t.format)) { t.format == GGL_PIXEL_FORMAT_YCbCr_420_SP) { // just show the Y plane of YUV buffers // just show the Y plane of YUV buffers glTexImage2D(GL_TEXTURE_2D, 0, glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, texture->potWidth, texture->potHeight, 0, GL_LUMINANCE, texture->potWidth, texture->potHeight, 0, Loading @@ -599,24 +613,23 @@ void LayerBase::loadTexture(Texture* texture, } } } } if (!data) { if (!data) { if (t.format == GGL_PIXEL_FORMAT_RGB_565) { if (t.format == HAL_PIXEL_FORMAT_RGB_565) { glTexSubImage2D(GL_TEXTURE_2D, 0, glTexSubImage2D(GL_TEXTURE_2D, 0, 0, bounds.top, t.width, bounds.height(), 0, bounds.top, t.width, bounds.height(), GL_RGB, GL_UNSIGNED_SHORT_5_6_5, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, t.data + bounds.top*t.stride*2); t.data + bounds.top*t.stride*2); } else if (t.format == GGL_PIXEL_FORMAT_RGBA_4444) { } else if (t.format == HAL_PIXEL_FORMAT_RGBA_4444) { glTexSubImage2D(GL_TEXTURE_2D, 0, glTexSubImage2D(GL_TEXTURE_2D, 0, 0, bounds.top, t.width, bounds.height(), 0, bounds.top, t.width, bounds.height(), GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, t.data + bounds.top*t.stride*2); t.data + bounds.top*t.stride*2); } else if (t.format == GGL_PIXEL_FORMAT_RGBA_8888 || } else if (t.format == HAL_PIXEL_FORMAT_RGBA_8888 || t.format == GGL_PIXEL_FORMAT_RGBX_8888) { t.format == HAL_PIXEL_FORMAT_RGBX_8888) { glTexSubImage2D(GL_TEXTURE_2D, 0, glTexSubImage2D(GL_TEXTURE_2D, 0, 0, bounds.top, t.width, bounds.height(), 0, bounds.top, t.width, bounds.height(), GL_RGBA, GL_UNSIGNED_BYTE, GL_RGBA, GL_UNSIGNED_BYTE, t.data + bounds.top*t.stride*4); t.data + bounds.top*t.stride*4); } else if ( t.format == GGL_PIXEL_FORMAT_YCbCr_422_SP || } else if (isSupportedYuvFormat(t.format)) { t.format == GGL_PIXEL_FORMAT_YCbCr_420_SP) { // just show the Y plane of YUV buffers // just show the Y plane of YUV buffers glTexSubImage2D(GL_TEXTURE_2D, 0, glTexSubImage2D(GL_TEXTURE_2D, 0, 0, bounds.top, t.width, bounds.height(), 0, bounds.top, t.width, bounds.height(), Loading
libs/surfaceflinger/LayerBase.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -265,6 +265,7 @@ protected: status_t initializeEglImage( status_t initializeEglImage( const sp<GraphicBuffer>& buffer, Texture* texture); const sp<GraphicBuffer>& buffer, Texture* texture); bool isSupportedYuvFormat(int format) const; sp<SurfaceFlinger> mFlinger; sp<SurfaceFlinger> mFlinger; uint32_t mFlags; uint32_t mFlags; Loading