diff options
author | Mathias Agopian <mathias@google.com> | 2010-02-16 17:33:37 -0800 |
---|---|---|
committer | Mathias Agopian <mathias@google.com> | 2010-02-16 17:33:37 -0800 |
commit | 54ed4f6282bdea251455f39b978626026affdbef (patch) | |
tree | 157d34806bbfab22e433c1eafe0e2bf72f832af2 | |
parent | 39696474d715de575949a9cdf12e7ff339896f8d (diff) | |
download | frameworks_native-54ed4f6282bdea251455f39b978626026affdbef.zip frameworks_native-54ed4f6282bdea251455f39b978626026affdbef.tar.gz frameworks_native-54ed4f6282bdea251455f39b978626026affdbef.tar.bz2 |
get rid off the YUV formats at the libui layer
-rw-r--r-- | camera/libcameraservice/CameraService.cpp | 7 | ||||
-rw-r--r-- | include/ui/PixelFormat.h | 27 | ||||
-rw-r--r-- | libs/surfaceflinger/Layer.cpp | 18 | ||||
-rw-r--r-- | libs/surfaceflinger/LayerBase.cpp | 37 | ||||
-rw-r--r-- | libs/surfaceflinger/LayerBase.h | 1 | ||||
-rw-r--r-- | libs/ui/PixelFormat.cpp | 3 | ||||
-rw-r--r-- | opengl/libagl/copybit.cpp | 15 |
7 files changed, 50 insertions, 58 deletions
diff --git a/camera/libcameraservice/CameraService.cpp b/camera/libcameraservice/CameraService.cpp index 86a6fac..f66a2d3 100644 --- a/camera/libcameraservice/CameraService.cpp +++ b/camera/libcameraservice/CameraService.cpp @@ -29,6 +29,8 @@ #include <surfaceflinger/ISurface.h> #include <ui/Overlay.h> +#include <hardware/hardware.h> + #include <media/mediaplayer.h> #include <media/AudioSystem.h> #include "CameraService.h" @@ -606,7 +608,7 @@ status_t CameraService::Client::registerPreviewBuffers() params.getPreviewSize(&w, &h); ISurface::BufferHeap buffers(w, h, w, h, - PIXEL_FORMAT_YCbCr_420_SP, + HAL_PIXEL_FORMAT_YCbCr_420_SP, mOrientation, 0, mHardware->getPreviewHeap()); @@ -927,7 +929,8 @@ void CameraService::Client::handleShutter( LOGV("Snapshot image width=%d, height=%d", 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); } diff --git a/include/ui/PixelFormat.h b/include/ui/PixelFormat.h index 6d87321b..607155c 100644 --- a/include/ui/PixelFormat.h +++ b/include/ui/PixelFormat.h @@ -30,6 +30,7 @@ #include <sys/types.h> #include <utils/Errors.h> #include <pixelflinger/format.h> +#include <hardware/hardware.h> namespace android { @@ -57,25 +58,18 @@ enum { // real pixel formats supported for rendering ----------------------------- - PIXEL_FORMAT_RGBA_8888 = GGL_PIXEL_FORMAT_RGBA_8888, // 4x8-bit RGBA - PIXEL_FORMAT_RGBX_8888 = GGL_PIXEL_FORMAT_RGBX_8888, // 4x8-bit RGB0 - PIXEL_FORMAT_RGB_888 = GGL_PIXEL_FORMAT_RGB_888, // 3x8-bit RGB - PIXEL_FORMAT_RGB_565 = GGL_PIXEL_FORMAT_RGB_565, // 16-bit RGB - PIXEL_FORMAT_BGRA_8888 = GGL_PIXEL_FORMAT_BGRA_8888, // 4x8-bit BGRA - PIXEL_FORMAT_RGBA_5551 = GGL_PIXEL_FORMAT_RGBA_5551, // 16-bit ARGB - PIXEL_FORMAT_RGBA_4444 = GGL_PIXEL_FORMAT_RGBA_4444, // 16-bit ARGB + PIXEL_FORMAT_RGBA_8888 = HAL_PIXEL_FORMAT_RGBA_8888, // 4x8-bit RGBA + PIXEL_FORMAT_RGBX_8888 = HAL_PIXEL_FORMAT_RGBX_8888, // 4x8-bit RGB0 + PIXEL_FORMAT_RGB_888 = HAL_PIXEL_FORMAT_RGB_888, // 3x8-bit RGB + PIXEL_FORMAT_RGB_565 = HAL_PIXEL_FORMAT_RGB_565, // 16-bit RGB + PIXEL_FORMAT_BGRA_8888 = HAL_PIXEL_FORMAT_BGRA_8888, // 4x8-bit BGRA + PIXEL_FORMAT_RGBA_5551 = HAL_PIXEL_FORMAT_RGBA_5551, // 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_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_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 // pixelflinger/format.h }; @@ -96,10 +90,7 @@ struct PixelFormatInfo RGB = 2, RGBA = 3, LUMINANCE = 4, - LUMINANCE_ALPHA = 5, - Y_CB_CR_SP = 6, - Y_CB_CR_P = 7, - Y_CB_CR_I = 8, + LUMINANCE_ALPHA = 5 }; struct szinfo { diff --git a/libs/surfaceflinger/Layer.cpp b/libs/surfaceflinger/Layer.cpp index f38efab..c080513 100644 --- a/libs/surfaceflinger/Layer.cpp +++ b/libs/surfaceflinger/Layer.cpp @@ -185,20 +185,20 @@ void Layer::reloadTexture(const Region& dirty) if (res == NO_ERROR) { int bpp = 0; switch (t.format) { - case GGL_PIXEL_FORMAT_RGB_565: - case GGL_PIXEL_FORMAT_RGBA_4444: + case HAL_PIXEL_FORMAT_RGB_565: + case HAL_PIXEL_FORMAT_RGBA_4444: bpp = 2; break; - case GGL_PIXEL_FORMAT_RGBA_8888: - case GGL_PIXEL_FORMAT_RGBX_8888: + case HAL_PIXEL_FORMAT_RGBA_8888: + case HAL_PIXEL_FORMAT_RGBX_8888: bpp = 4; break; - case GGL_PIXEL_FORMAT_YCbCr_422_SP: - case GGL_PIXEL_FORMAT_YCbCr_420_SP: - // just show the Y plane of YUV buffers - bpp = 1; - break; default: + if (isSupportedYuvFormat(t.format)) { + // just show the Y plane of YUV buffers + bpp = 1; + break; + } // oops, we don't handle this format! LOGE("layer %p, texture=%d, using format %d, which is not " "supported by the GL", this, texture->name, t.format); diff --git a/libs/surfaceflinger/LayerBase.cpp b/libs/surfaceflinger/LayerBase.cpp index 4d7bef8..5b96e9d 100644 --- a/libs/surfaceflinger/LayerBase.cpp +++ b/libs/surfaceflinger/LayerBase.cpp @@ -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, const Region& dirty, const GGLSurface& t) const { @@ -573,21 +588,20 @@ void LayerBase::loadTexture(Texture* texture, data = t.data; } - if (t.format == GGL_PIXEL_FORMAT_RGB_565) { + if (t.format == HAL_PIXEL_FORMAT_RGB_565) { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texture->potWidth, texture->potHeight, 0, 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, GL_RGBA, texture->potWidth, texture->potHeight, 0, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, data); - } else if (t.format == GGL_PIXEL_FORMAT_RGBA_8888 || - t.format == GGL_PIXEL_FORMAT_RGBX_8888) { + } else if (t.format == HAL_PIXEL_FORMAT_RGBA_8888 || + t.format == HAL_PIXEL_FORMAT_RGBX_8888) { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture->potWidth, texture->potHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); - } else if ( t.format == GGL_PIXEL_FORMAT_YCbCr_422_SP || - t.format == GGL_PIXEL_FORMAT_YCbCr_420_SP) { + } else if (isSupportedYuvFormat(t.format)) { // just show the Y plane of YUV buffers glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, texture->potWidth, texture->potHeight, 0, @@ -599,24 +613,23 @@ void LayerBase::loadTexture(Texture* texture, } } if (!data) { - if (t.format == GGL_PIXEL_FORMAT_RGB_565) { + if (t.format == HAL_PIXEL_FORMAT_RGB_565) { glTexSubImage2D(GL_TEXTURE_2D, 0, 0, bounds.top, t.width, bounds.height(), GL_RGB, GL_UNSIGNED_SHORT_5_6_5, 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, 0, bounds.top, t.width, bounds.height(), GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, t.data + bounds.top*t.stride*2); - } else if (t.format == GGL_PIXEL_FORMAT_RGBA_8888 || - t.format == GGL_PIXEL_FORMAT_RGBX_8888) { + } else if (t.format == HAL_PIXEL_FORMAT_RGBA_8888 || + t.format == HAL_PIXEL_FORMAT_RGBX_8888) { glTexSubImage2D(GL_TEXTURE_2D, 0, 0, bounds.top, t.width, bounds.height(), GL_RGBA, GL_UNSIGNED_BYTE, t.data + bounds.top*t.stride*4); - } else if ( t.format == GGL_PIXEL_FORMAT_YCbCr_422_SP || - t.format == GGL_PIXEL_FORMAT_YCbCr_420_SP) { + } else if (isSupportedYuvFormat(t.format)) { // just show the Y plane of YUV buffers glTexSubImage2D(GL_TEXTURE_2D, 0, 0, bounds.top, t.width, bounds.height(), diff --git a/libs/surfaceflinger/LayerBase.h b/libs/surfaceflinger/LayerBase.h index a49faf7..d1bbd04 100644 --- a/libs/surfaceflinger/LayerBase.h +++ b/libs/surfaceflinger/LayerBase.h @@ -265,6 +265,7 @@ protected: status_t initializeEglImage( const sp<GraphicBuffer>& buffer, Texture* texture); + bool isSupportedYuvFormat(int format) const; sp<SurfaceFlinger> mFlinger; uint32_t mFlags; diff --git a/libs/ui/PixelFormat.cpp b/libs/ui/PixelFormat.cpp index b65ed97..3f76e1a 100644 --- a/libs/ui/PixelFormat.cpp +++ b/libs/ui/PixelFormat.cpp @@ -69,9 +69,6 @@ status_t getPixelFormatInfo(PixelFormat format, PixelFormatInfo* info) COMPONENT(RGBA) COMPONENT(LUMINANCE) COMPONENT(LUMINANCE_ALPHA) - COMPONENT(Y_CB_CR_SP) - COMPONENT(Y_CB_CR_P) - COMPONENT(Y_CB_CR_I) default: return BAD_INDEX; } diff --git a/opengl/libagl/copybit.cpp b/opengl/libagl/copybit.cpp index 4cacc11..67d1ce7 100644 --- a/opengl/libagl/copybit.cpp +++ b/opengl/libagl/copybit.cpp @@ -48,19 +48,8 @@ static void textureToCopyBitImage( const GGLSurface* surface, int32_t opFormat, android_native_buffer_t* buffer, copybit_image_t* img) { - uint32_t vstride = 0; - if (opFormat == COPYBIT_FORMAT_YCbCr_422_SP || - opFormat == COPYBIT_FORMAT_YCbCr_420_SP) { - // NOTE: this static_cast is really not safe b/c we can't know for - // sure the buffer passed is of the right type. - // However, since we do this only for YUV formats, we should be safe - // since only SurfaceFlinger makes use of them. - GraphicBuffer* graphicBuffer = static_cast<GraphicBuffer*>(buffer); - vstride = graphicBuffer->getVerticalStride(); - } - img->w = surface->stride; - img->h = vstride ? vstride : surface->height; + img->h = surface->height; img->format = opFormat; img->base = surface->data; img->handle = (native_handle_t *)buffer->handle; @@ -98,8 +87,6 @@ static bool supportedCopybitsFormat(int format) { case COPYBIT_FORMAT_BGRA_8888: case COPYBIT_FORMAT_RGBA_5551: case COPYBIT_FORMAT_RGBA_4444: - case COPYBIT_FORMAT_YCbCr_422_SP: - case COPYBIT_FORMAT_YCbCr_420_SP: return true; default: return false; |