From: Jiyong Min Date: Thu, 16 Nov 2017 05:28:16 +0000 (+0900) Subject: Modify media_packet creation for invalid operation error X-Git-Tag: submit/tizen/20171120.011858^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ccb4600275e8f546961d2fe73b645505c99d2c71;p=platform%2Fcore%2Fmultimedia%2Flibmm-utility.git Modify media_packet creation for invalid operation error [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 --- diff --git a/imgp/mm_util_imgp.c b/imgp/mm_util_imgp.c index d285879..d847b47 100755 --- a/imgp/mm_util_imgp.c +++ b/imgp/mm_util_imgp.c @@ -21,6 +21,7 @@ #include #include +#include #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; }