From a273bea77619ffb8ceedfae319b96bd5e22d4a69 Mon Sep 17 00:00:00 2001 From: Kitae Kim Date: Mon, 21 Jan 2013 21:29:51 +0900 Subject: [PATCH] marucodec: Added rgb pixel formats. There is no routine for calculating the other pixel formats. Signed-off-by: Kitae Kim --- tizen/src/hw/maru_codec.c | 83 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 71 insertions(+), 12 deletions(-) diff --git a/tizen/src/hw/maru_codec.c b/tizen/src/hw/maru_codec.c index 6412206..f5b238a 100644 --- a/tizen/src/hw/maru_codec.c +++ b/tizen/src/hw/maru_codec.c @@ -399,6 +399,22 @@ static void qemu_init_pix_fmt_info(void) pix_fmt_info[PIX_FMT_YUV411P].x_chroma_shift = 2; pix_fmt_info[PIX_FMT_YUV411P].y_chroma_shift = 0; + + /* RGB formats */ + pix_fmt_info[PIX_FMT_RGB24].x_chroma_shift = 0; + pix_fmt_info[PIX_FMT_RGB24].y_chroma_shift = 0; + + pix_fmt_info[PIX_FMT_BGR24].x_chroma_shift = 0; + pix_fmt_info[PIX_FMT_BGR24].y_chroma_shift = 0; + + pix_fmt_info[PIX_FMT_RGB32].x_chroma_shift = 0; + pix_fmt_info[PIX_FMT_RGB32].y_chroma_shift = 0; + + pix_fmt_info[PIX_FMT_RGB565].x_chroma_shift = 0; + pix_fmt_info[PIX_FMT_RGB565].y_chroma_shift = 0; + + pix_fmt_info[PIX_FMT_RGB555].x_chroma_shift = 0; + pix_fmt_info[PIX_FMT_RGB555].y_chroma_shift = 0; } static int qemu_avpicture_fill(AVPicture *picture, uint8_t *ptr, @@ -428,17 +444,6 @@ static int qemu_avpicture_fill(AVPicture *picture, uint8_t *ptr, fsize = size + 2 * size2; TRACE("stride: %d, stride2: %d, size: %d, size2: %d, fsize: %d\n", stride, stride2, size, size2, fsize); - if (!encode && !ptr) { - TRACE("allocate a buffer for a decoded picture.\n"); - ptr = av_mallocz(fsize); - if (!ptr) { - ERR("failed to allocate memory.\n"); - return -1; - } - } else { - TRACE("calculate encoded picture.\n"); - } - picture->data[0] = ptr; picture->data[1] = picture->data[0] + size; picture->data[2] = picture->data[1] + size2; @@ -450,6 +455,48 @@ static int qemu_avpicture_fill(AVPicture *picture, uint8_t *ptr, TRACE("planes %d %d %d", 0, size, size + size2); TRACE("strides %d %d %d", stride, stride2, stride2); break; + case PIX_FMT_RGB24: + case PIX_FMT_BGR24: + stride = ROUND_UP_4 (width * 3); + size = stride * height; + picture->data[0] = ptr; + picture->data[1] = NULL; + picture->data[2] = NULL; + picture->data[3] = NULL; + picture->linesize[0] = stride; + picture->linesize[1] = 0; + picture->linesize[2] = 0; + picture->linesize[3] = 0; + TRACE("stride: %d, size: %d\n", stride, size); + fsize = size; + break; + case PIX_FMT_RGB32: + stride = width * 4; + size = stride * height; + picture->data[0] = ptr; + picture->data[1] = NULL; + picture->data[2] = NULL; + picture->data[3] = NULL; + picture->linesize[0] = stride; + picture->linesize[1] = 0; + picture->linesize[2] = 0; + picture->linesize[3] = 0; + fsize = size; + break; + case PIX_FMT_RGB555: + case PIX_FMT_RGB565: + stride = ROUND_UP_4 (width * 2); + size = stride * height; + picture->data[0] = ptr; + picture->data[1] = NULL; + picture->data[2] = NULL; + picture->data[3] = NULL; + picture->linesize[0] = stride; + picture->linesize[1] = 0; + picture->linesize[2] = 0; + picture->linesize[3] = 0; + fsize = size; + break; default: picture->data[0] = NULL; picture->data[1] = NULL; @@ -459,6 +506,19 @@ static int qemu_avpicture_fill(AVPicture *picture, uint8_t *ptr, ERR("pixel format: %d was wrong.\n", pix_fmt); } + if (fsize > 0) { + if (!encode && !ptr) { + TRACE("allocate a buffer for a decoded picture.\n"); + ptr = av_mallocz(fsize); + if (!ptr) { + ERR("failed to allocate memory.\n"); + return -1; + } + } else { + TRACE("calculate encoded picture.\n"); + } + } + return fsize; } @@ -1505,4 +1565,3 @@ static void codec_register_types(void) } type_init(codec_register_types) - -- 2.7.4