tizencamerasrc: Use bytesused field for non-TBM preview and capture buffer 60/301160/1
authorJeongmo Yang <jm80.yang@samsung.com>
Fri, 10 Nov 2023 01:32:25 +0000 (10:32 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Fri, 10 Nov 2023 01:33:16 +0000 (10:33 +0900)
In case of encoded format(ex:H.264), the actual data size is not sent.
As a result, the application received invalid data size.

[Version] 1.20.0-23
[Issue Type] Bug fix

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

index 7b29788..b5f969f 100644 (file)
@@ -5,7 +5,7 @@
 Name:       gst-plugins-tizen
 Version:    1.20.0
 Summary:    GStreamer tizen plugins (common)
-Release:    22
+Release:    23
 Group:      Multimedia/Framework
 Url:        http://gstreamer.freedesktop.org/
 License:    LGPL-2.1+
index 95f5a29..de0b79d 100644 (file)
@@ -259,6 +259,9 @@ static GstBuffer *gst_tizencamerasrc_buffer_new(GstTizenCameraSrc *camerasrc, ca
   gsize maxsize = 0;
   gboolean is_tbm_used = FALSE;
   gboolean is_delta_frame = FALSE;
+  int i = 0;
+  uint32_t actual_size_total = 0;
+  size_t actual_size_plane = 0;
 
   GstTizenCameraBuffer *new_buffer = NULL;
   GstMemory *memory = NULL;
@@ -366,12 +369,12 @@ static GstBuffer *gst_tizencamerasrc_buffer_new(GstTizenCameraSrc *camerasrc, ca
         camerasrc->pix_format == CAMERA_PIXEL_FORMAT_VP8 ||
         camerasrc->pix_format == CAMERA_PIXEL_FORMAT_VP9) {
       /* memory copy for h264/mjpeg/vp8/vp9 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;
+        actual_size_plane = buffer->planes[i].bytesused > 0 ? buffer->planes[i].bytesused : buffer->planes[i].size;
+        memcpy(new_buffer->copied_data + actual_size_total, buffer->planes[i].data, actual_size_plane);
+        actual_size_total += actual_size_plane;
       }
     } else {
       new_buffer->copied_data = g_memdup2(buffer->planes[0].data, buffer->total_size);
@@ -387,7 +390,7 @@ static GstBuffer *gst_tizencamerasrc_buffer_new(GstTizenCameraSrc *camerasrc, ca
       new_buffer->copied_data,
       buffer->total_size,
       0,
-      buffer->total_size,
+      actual_size_total,
       (gpointer)new_buffer,
       (GDestroyNotify)gst_tizencamerasrc_buffer_finalize);
   }
@@ -1053,7 +1056,7 @@ static GstSample *__create_buffer_sample(GstTizenCameraSrc *camerasrc, camera_bu
     cam_buffer->planes[0].data,
     cam_buffer->planes[0].size,
     0,
-    cam_buffer->planes[0].bytesused,
+    (cam_buffer->planes[0].bytesused > 0 ? cam_buffer->planes[0].bytesused : cam_buffer->planes[0].size),
     NULL, NULL);
   if (!gst_buffer) {
     GST_ERROR_OBJECT(camerasrc, "failed to allocate gst buffer for %p", cam_buffer);