Seperate decode and picture_copy if no pix_fmt is specified 49/26949/1
authorSeokYeon Hwang <syeon.hwang@samsung.com>
Tue, 2 Sep 2014 06:00:39 +0000 (15:00 +0900)
committerSeokYeon Hwang <syeon.hwang@samsung.com>
Tue, 2 Sep 2014 06:00:39 +0000 (15:00 +0900)
Change-Id: Ic4daf789b4d0b45bf0e78f141fb2c1cb0174c992
Signed-off-by: SeokYeon Hwang <syeon.hwang@samsung.com>
src/gstmaru.h
src/gstmaruinterface.c
src/gstmaruinterface.h

index 30d5e18..caaf02d 100644 (file)
@@ -80,7 +80,7 @@ enum codec_log_level {
 #define ROUND_UP_8(x) ROUND_UP_X(x, 3)
 #define DIV_ROUND_UP_X(v, x) (((v) + GEN_MASK(x)) >> (x))
 
-static inline bool use_new_decode_api(void) {
+static inline bool can_use_new_decode_api(void) {
     if (CHECK_VERSION(3)) {
         return true;
     }
index 9b47239..c9bc312 100644 (file)
@@ -145,11 +145,17 @@ codec_buffer_free (gpointer start)
 {
   CODEC_LOG (DEBUG, "enter: %s\n", __func__);
 
-  if (use_new_decode_api()) {
-    release_device_mem (device_fd, start - OFFSET_PICTURE_BUFFER); // FIXME
-  } else {
-    release_device_mem (device_fd, start);
-  }
+  release_device_mem (device_fd, start);
+
+  CODEC_LOG (DEBUG, "leave: %s\n", __func__);
+}
+
+static void
+codec_buffer_free2 (gpointer start)
+{
+  CODEC_LOG (DEBUG, "enter: %s\n", __func__);
+
+  release_device_mem (device_fd, start - OFFSET_PICTURE_BUFFER);
 
   CODEC_LOG (DEBUG, "leave: %s\n", __func__);
 }
@@ -173,7 +179,7 @@ codec_buffer_alloc_and_copy (GstPad *pad, guint64 offset, guint size,
   ctx = marudec->context;
   dev = marudec->dev;
 
-  if (use_new_decode_api()) {
+  if (marudec->is_using_new_decode_api) {
     is_last_buffer = marudec->is_last_buffer;
     mem_offset = marudec->mem_offset;
   } else {
@@ -200,7 +206,7 @@ codec_buffer_alloc_and_copy (GstPad *pad, guint64 offset, guint size,
 
     GST_BUFFER_FREE_FUNC (*buf) = g_free;
 
-    if (use_new_decode_api()) {
+    if (marudec->is_using_new_decode_api) {
       memcpy (buffer, device_mem + mem_offset + OFFSET_PICTURE_BUFFER, size);
     } else {
       memcpy (buffer, device_mem + mem_offset, size);
@@ -210,18 +216,19 @@ codec_buffer_alloc_and_copy (GstPad *pad, guint64 offset, guint size,
     GST_DEBUG ("secured last buffer!! Use heap buffer");
   } else {
     // address of "device_mem" and "opaque" is aleady aligned.
-    if (use_new_decode_api()) {
+    if (marudec->is_using_new_decode_api) {
       buffer = (gpointer)(device_mem + mem_offset + OFFSET_PICTURE_BUFFER);
+      GST_BUFFER_FREE_FUNC (*buf) = codec_buffer_free2;
     } else {
       buffer = (gpointer)(device_mem + mem_offset);
+      GST_BUFFER_FREE_FUNC (*buf) = codec_buffer_free;
     }
 
-    GST_BUFFER_FREE_FUNC (*buf) = codec_buffer_free;
 
     GST_DEBUG ("device memory start: 0x%p, offset 0x%x", (intptr_t)buffer, mem_offset);
   }
 
-  GST_BUFFER_DATA (*buf) = GST_BUFFER_MALLOCDATA (*buf) = buffer;
+  GST_BUFFER_DATA (*buf) = GST_BUFFER_MALLOCDATA (*buf) = (void *)buffer;
   GST_BUFFER_SIZE (*buf) = size;
   GST_BUFFER_OFFSET (*buf) = offset;
 
@@ -328,10 +335,14 @@ codec_decode_video (GstMaruDec *marudec, uint8_t *in_buf, int in_size,
   codec_decode_video_data_to (in_size, idx, in_offset, in_buf, buffer);
 
   opaque.buffer_index = ctx->index;
-  if (use_new_decode_api()) {
+
+  marudec->is_using_new_decode_api = (can_use_new_decode_api() && (ctx->video.pix_fmt != -1));
+
+  if (marudec->is_using_new_decode_api) {
     int picture_size = gst_maru_avpicture_size (ctx->video.pix_fmt,
         ctx->video.width, ctx->video.height);
     if (picture_size < 0) {
+      GST_ERROR ("Check about it"); // FIXME
       opaque.buffer_size = SMALLDATA;
     } else {
       opaque.buffer_size = picture_size;
@@ -359,7 +370,7 @@ codec_decode_video (GstMaruDec *marudec, uint8_t *in_buf, int in_size,
     return len;
   }
 
-  if (use_new_decode_api()) {
+  if (marudec->is_using_new_decode_api) {
     marudec->is_last_buffer = ret;
     marudec->mem_offset = opaque.buffer_size;
   } else {
index cc0cbd8..81c412e 100644 (file)
@@ -100,6 +100,7 @@ typedef struct _GstMaruDec
   // decode result
   bool is_last_buffer;
   int mem_offset;
+  bool is_using_new_decode_api;
 } GstMaruDec;
 
 int