Revert "[tizencamerasrc] h264 stream memory copy code revert" 97/219497/1
authorJeongmo Yang <jm80.yang@samsung.com>
Thu, 5 Dec 2019 05:35:23 +0000 (14:35 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Thu, 5 Dec 2019 09:21:10 +0000 (18:21 +0900)
This reverts commit c209019b6847a5589e60be59611357009170f816.

[Version] 1.0.0-91
[Profile] Common
[Issue Type] Revert

Change-Id: I1a1eac7132b186ce1a175be31f282ca2e6604e4a
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
packaging/gst-plugins-tizen.spec
tizencamerasrc/src/gsttizencamerasrc.c
tizencamerasrc/src/include/gsttizencamerasrc.h

index ee8b18e..895e1f7 100644 (file)
@@ -5,7 +5,7 @@
 Name:       gst-plugins-tizen
 Version:    1.0.0
 Summary:    GStreamer tizen plugins (common)
-Release:    90
+Release:    91
 Group:      Multimedia/Framework
 Url:        http://gstreamer.freedesktop.org/
 License:    LGPL-2.1+
index 2a710c6..9c2b0aa 100644 (file)
@@ -282,9 +282,31 @@ static GstBuffer *gst_tizencamerasrc_buffer_new(GstTizenCameraSrc *camerasrc, ca
       (gpointer)new_buffer,
       (GDestroyNotify)gst_tizencamerasrc_buffer_finalize);
   } else {
+    gpointer pdata = NULL;
     GST_DEBUG_OBJECT(camerasrc, "TBM is NOT used - size %u", buffer->total_size);
+
+    if (camerasrc->pix_format == CAMERA_PIXEL_FORMAT_H264) {
+    /* memory copy for h264 stream */
+      int i = 0;
+      uint32_t total_size = 0;
+      new_buffer->copied_data = g_malloc(buffer->total_size);
+      for (i = 0 ; i < buffer->num_planes ; i++) {
+        memcpy(new_buffer->copied_data + total_size, buffer->planes[i].data, buffer->planes[i].size);
+        total_size += buffer->planes[i].size;
+      }
+      pdata = (gpointer)new_buffer->copied_data;
+
+      if (type == BUFFER_TYPE_PREVIEW) {
+        camera_hal_interface_release_preview_buffer(camerasrc->hal_intf_handle, buffer->index);
+      } else if (type == BUFFER_TYPE_VIDEO) {
+        camera_hal_interface_release_video_buffer(camerasrc->hal_intf_handle, buffer->index);
+      }
+    } else {
+      pdata = (gpointer)buffer->planes[0].data;
+    }
+
     memory = gst_memory_new_wrapped(0,
-      (gpointer)buffer->planes[0].data,
+      pdata,
       buffer->total_size,
       0,
       buffer->total_size,
@@ -333,7 +355,8 @@ static void gst_tizencamerasrc_buffer_finalize(GstTizenCameraBuffer *buffer)
   camerasrc = buffer->camerasrc;
 
   if (buffer->type == BUFFER_TYPE_PREVIEW) {
-    camera_hal_interface_release_preview_buffer(camerasrc->hal_intf_handle, buffer->index);
+    if (!buffer->copied_data)
+      camera_hal_interface_release_preview_buffer(camerasrc->hal_intf_handle, buffer->index);
 
     g_mutex_lock(&camerasrc->preview_buffer_lock);
     camerasrc->preview_live_buffers--;
@@ -341,7 +364,8 @@ static void gst_tizencamerasrc_buffer_finalize(GstTizenCameraBuffer *buffer)
     g_cond_broadcast(&camerasrc->preview_buffer_cond);
     g_mutex_unlock(&camerasrc->preview_buffer_lock);
   } else if (buffer->type == BUFFER_TYPE_VIDEO) {
-    camera_hal_interface_release_video_buffer(camerasrc->hal_intf_handle, buffer->index);
+    if (!buffer->copied_data)
+      camera_hal_interface_release_video_buffer(camerasrc->hal_intf_handle, buffer->index);
 
     g_mutex_lock(&camerasrc->video_buffer_lock);
     camerasrc->video_live_buffers--;
@@ -356,6 +380,7 @@ static void gst_tizencamerasrc_buffer_finalize(GstTizenCameraBuffer *buffer)
     tbm_surface_destroy(buffer->t_surface);
     buffer->t_surface = NULL;
   }
+  g_free(buffer->copied_data);
   gst_object_unref(camerasrc);
   g_free(buffer);
 
index 95655c6..0c52079 100644 (file)
@@ -70,6 +70,7 @@ struct _GstTizenCameraBuffer {
   GstTizenCameraBufferType type;
   int index;
   tbm_surface_h t_surface;
+  gchar *copied_data;
 };
 
 struct _GstTizenCameraSrc