marucodec: Added rgb pixel formats.
authorKitae Kim <kt920.kim@samsung.com>
Mon, 21 Jan 2013 12:29:51 +0000 (21:29 +0900)
committerKitae Kim <kt920.kim@samsung.com>
Mon, 21 Jan 2013 12:35:51 +0000 (21:35 +0900)
There is no routine for calculating the other pixel formats.

Signed-off-by: Kitae Kim <kt920.kim@samsung.com>
tizen/src/hw/maru_codec.c

index 6412206..f5b238a 100644 (file)
@@ -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)
-