Modify media_packet creation for invalid operation error 11/160411/3 accepted/tizen/unified/20171120.065131 submit/tizen/20171120.011858
authorJiyong Min <jiyong.min@samsung.com>
Thu, 16 Nov 2017 05:28:16 +0000 (14:28 +0900)
committerJiyong Min <jiyong.min@samsung.com>
Thu, 16 Nov 2017 22:52:22 +0000 (07:52 +0900)
[Problem]
Rarely, invalid operation was returned

[Cause]
Because of the difference between tbm buffer and gstreamer buffer,
the size of packet was not same with the size of buffer.

[Solution]
Use smaller size of buffer than others.

Change-Id: I3f32ef0396f26bada0df6dc907777dd325776924
Signed-off-by: Jiyong Min <jiyong.min@samsung.com>
imgp/mm_util_imgp.c

index d285879253ead119606034685c20a601bf0d14cf..d847b47ea29dd40e75a3932bf8587a68a5382765 100755 (executable)
@@ -21,6 +21,7 @@
 
 #include <gmodule.h>
 #include <limits.h>
+#include <inttypes.h>
 #include "mm_util_private.h"
 #include "mm_util_imgp.h"
 #include "mm_util_imgp_internal.h"
@@ -1260,7 +1261,8 @@ static int __mm_create_media_format(mm_util_img_format format, unsigned int widt
 static int __mm_create_media_packet_with_buffer(media_format_h fmt, void *buffer, guint buffer_size, media_packet_h *pkt)
 {
        int err = MEDIA_PACKET_ERROR_NONE;
-       uint64_t size = 0;
+       uint64_t packet_buffer_size = 0;
+       size_t size = 0;
        void *ptr = NULL;
 
        if ((fmt == NULL) || (pkt == NULL) || (buffer == NULL) || (buffer_size == 0)) {
@@ -1274,29 +1276,36 @@ static int __mm_create_media_packet_with_buffer(media_format_h fmt, void *buffer
                return MM_UTIL_ERROR_INVALID_OPERATION;
        }
 
-       err = media_packet_get_buffer_size(*pkt, &size);
+       err = media_packet_get_buffer_size(*pkt, &packet_buffer_size);
        if (err != MEDIA_PACKET_ERROR_NONE) {
                mm_util_error("media_packet_get_buffer_size failed (%d)", err);
                media_packet_destroy(*pkt);
                return MM_UTIL_ERROR_INVALID_OPERATION;
        }
 
-       if (size < (uint64_t)buffer_size) {
-               mm_util_error("The buffer(%lu) of media_packet is smaller than result(%u)", size, buffer_size);
+       err = media_packet_get_buffer_data_ptr(*pkt, &ptr);
+       if (err != MM_UTIL_ERROR_NONE) {
+               mm_util_error("media_packet_get_buffer_data_ptr failed (%d)", err);
                media_packet_destroy(*pkt);
                return MM_UTIL_ERROR_INVALID_OPERATION;
        }
 
-       err = media_packet_get_buffer_data_ptr(*pkt, &ptr);
-       if (err != MM_UTIL_ERROR_NONE) {
-               mm_util_error("media_packet_get_buffer_data_ptr failed (%d)", err);
+       if (ptr == NULL || packet_buffer_size == 0) {
+               mm_util_error("The ptr(%p) and size(%" PRIu64 ") was wrong", ptr, packet_buffer_size);
                media_packet_destroy(*pkt);
                return MM_UTIL_ERROR_INVALID_OPERATION;
        }
 
-       mm_util_debug("Success - media_packet is created (%p, %lu)", *pkt, size);
+       if ((uint64_t)buffer_size < packet_buffer_size) {
+               size = (size_t)buffer_size;
+       } else {
+               size = (size_t)packet_buffer_size;
+       }
+
+       mm_util_error("Size: result(%u) media_packet(%" PRIu64 ") use(%zu)", buffer_size, packet_buffer_size, size);
+       mm_util_debug("Success - media_packet is created (%p, %" PRIu64 ")", *pkt, packet_buffer_size);
 
-       memcpy(ptr, buffer, buffer_size);
+       memcpy(ptr, buffer, size);
 
        return MM_UTIL_ERROR_NONE;
 }