static int __pkt_create_from_tbm_surface(media_format_h fmt, tbm_surface_h surface, void *cb, void *cb_data, media_packet_h *packet, bool is_from_new);
static int __pkt_create_from_external_memory(media_format_h fmt, void *mem_ptr, uint64_t size, void *cb, void *cb_data, media_packet_h *packet, bool is_from_new);
static int __pkt_destroy(media_packet_s *handle);
+static int __pkt_get_tbm_surface_info(media_packet_s *handle, int plane_idx, int *num_planes, int *stride_width, int *stride_height, void **data_ptr);
static size_t __pkt_calculate_video_buffer_size(media_packet_s *pkt);
static size_t __pkt_calculate_audio_buffer_size(media_packet_s *pkt);
static size_t __pkt_calculate_text_buffer_size(media_packet_s *pkt);
MEDIA_PACKET_INSTANCE_CHECK(fmt);
MEDIA_PACKET_NULL_ARG_CHECK(mem_ptr);
MEDIA_PACKET_NULL_ARG_CHECK(packet);
- MEDIA_PACKET_CHECK_CONDITION(size > 0, "invalid size", MEDIA_PACKET_ERROR_INVALID_PARAMETER);
+ MEDIA_PACKET_CHECK_CONDITION(size > 0, MEDIA_PACKET_ERROR_INVALID_PARAMETER, "invalid size");
ret = __pkt_init(MEDIA_BUFFER_TYPE_EXTERNAL_MEMORY, fmt, cb, cb_data, is_from_new, &handle);
if (ret != MEDIA_PACKET_ERROR_NONE) {
}
+static int __pkt_get_tbm_surface_info(media_packet_s *handle, int plane_idx, int *num_planes, int *stride_width, int *stride_height, void **data_ptr)
+{
+ tbm_surface_info_s surface_info;
+ int ret = 0;
+
+ MEDIA_PACKET_INSTANCE_CHECK(handle);
+ MEDIA_PACKET_CHECK_CONDITION(handle->surface_data, MEDIA_PACKET_ERROR_INVALID_OPERATION, "NULL surface data");
+
+ ret = tbm_surface_get_info((tbm_surface_h)handle->surface_data, &surface_info);
+ if (ret != TBM_SURFACE_ERROR_NONE) {
+ if (num_planes)
+ *num_planes = 0;
+
+ if (stride_width)
+ *stride_width = 0;
+
+ if (stride_height)
+ *stride_height = 0;
+
+ if (data_ptr)
+ *data_ptr = NULL;
+
+ LOGE("tbm_surface_get_info() failed[0x%x", ret);
+
+ return MEDIA_PACKET_ERROR_INVALID_OPERATION;
+ }
+
+ if (plane_idx < 0 || plane_idx >= surface_info.num_planes) {
+ LOGE("invalid plane_idx[%d](num_planes:%d)", plane_idx, surface_info.num_planes);
+ return MEDIA_PACKET_ERROR_INVALID_PARAMETER;
+ }
+
+ if (num_planes) {
+ *num_planes = surface_info.num_planes;
+ LOGD("plane[%d] number of planes[%d]", plane_idx, *num_planes);
+ }
+
+ if (stride_width) {
+ *stride_width = surface_info.planes[plane_idx].stride;
+ LOGD("plane[%d] stride width[%d]", plane_idx, *stride_width);
+ }
+
+ if (stride_height) {
+ *stride_height = surface_info.planes[plane_idx].size / surface_info.planes[plane_idx].stride;
+ LOGD("plane[%d] stride height[%d]", plane_idx, *stride_height);
+ }
+
+ if (data_ptr) {
+ *data_ptr = surface_info.planes[plane_idx].ptr;
+ LOGD("plane[%d] data ptr[%p]", plane_idx, *data_ptr);
+ }
+
+ return MEDIA_PACKET_ERROR_NONE;
+}
+
+
int media_packet_create(media_format_h fmt, media_packet_finalize_cb fcb, void *fcb_data, media_packet_h *packet)
{
MEDIA_PACKET_INSTANCE_CHECK(fmt);
int media_packet_get_number_of_video_planes(media_packet_h packet, uint32_t *num)
{
- media_packet_s *handle;
- int ret = MEDIA_PACKET_ERROR_NONE;
- bool has_tbm;
-
- MEDIA_PACKET_INSTANCE_CHECK(packet);
MEDIA_PACKET_NULL_ARG_CHECK(num);
- handle = (media_packet_s *)packet;
-
- media_packet_has_tbm_surface_buffer(packet, &has_tbm);
-
- if (has_tbm) {
- tbm_surface_info_s surface_info;
- int err = tbm_surface_get_info((tbm_surface_h)handle->surface_data, &surface_info);
- if (err == TBM_SURFACE_ERROR_NONE) {
- *num = surface_info.num_planes;
- LOGD(" surface_info the number of planes = %d", (int)surface_info.num_planes);
- } else {
- *num = 0;
- LOGE("tbm_surface_get_info() is failed.. 0x%08x", err); //LCOV_EXCL_LINE
- ret = MEDIA_PACKET_ERROR_INVALID_OPERATION;
- }
- } else {
- *num = 0;
- LOGE("The packet handle doesn't have tbm_surface buffer type");
- ret = MEDIA_PACKET_ERROR_INVALID_OPERATION;
-
- }
-
- return ret;
+ return __pkt_get_tbm_surface_info((media_packet_s *)packet, 0, num, NULL, NULL, NULL);
}
int media_packet_get_video_stride_width(media_packet_h packet, int plane_idx, int *stride_width)
{
- media_packet_s *handle;
- int ret = MEDIA_PACKET_ERROR_NONE;
- bool has_tbm;
-
- MEDIA_PACKET_INSTANCE_CHECK(packet);
MEDIA_PACKET_NULL_ARG_CHECK(stride_width);
- if (plane_idx < 0) {
- LOGE("Invalid plane_idx : %d, must not be negative number", plane_idx);
- return MEDIA_PACKET_ERROR_INVALID_PARAMETER;
- }
-
- handle = (media_packet_s *)packet;
- media_packet_has_tbm_surface_buffer(packet, &has_tbm);
-
- if (has_tbm) {
- tbm_surface_info_s surface_info;
- int err = tbm_surface_get_info((tbm_surface_h)handle->surface_data, &surface_info);
- if (err == TBM_SURFACE_ERROR_NONE) {
-
- if (surface_info.num_planes > plane_idx) {
- *stride_width = surface_info.planes[plane_idx].stride;
- } else {
- LOGE("the plane_idx is invalid, The number of planes = %lu", surface_info.num_planes);
- *stride_width = 0;
- ret = MEDIA_PACKET_ERROR_INVALID_PARAMETER;
- }
- } else {
- *stride_width = 0;
- LOGE("tbm_surface_get_info() is failed.. 0x%08x", err); //LCOV_EXCL_LINE
- ret = MEDIA_PACKET_ERROR_INVALID_OPERATION;
- }
- } else {
- LOGE("The packet handle doesn't have tbm_surface buffer type");
- *stride_width = 0;
- ret = MEDIA_PACKET_ERROR_INVALID_OPERATION;
- }
-
- return ret;
+ return __pkt_get_tbm_surface_info((media_packet_s *)packet, plane_idx, NULL, stride_width, NULL, NULL);
}
int media_packet_get_video_stride_height(media_packet_h packet, int plane_idx, int *stride_height)
{
- media_packet_s *handle;
- int ret = MEDIA_PACKET_ERROR_NONE;
- bool has_tbm;
-
- MEDIA_PACKET_INSTANCE_CHECK(packet);
MEDIA_PACKET_NULL_ARG_CHECK(stride_height);
- if (plane_idx < 0) {
- LOGE("Invalid plane_idx : %d, must not be negative number", plane_idx); //LCOV_EXCL_LINE
- return MEDIA_PACKET_ERROR_INVALID_PARAMETER;
- }
-
- handle = (media_packet_s *)packet;
-
- media_packet_has_tbm_surface_buffer(packet, &has_tbm);
-
- if (has_tbm) {
- tbm_surface_info_s surface_info;
- int err = tbm_surface_get_info((tbm_surface_h)handle->surface_data, &surface_info);
- if (err == TBM_SURFACE_ERROR_NONE) {
- if (surface_info.num_planes > plane_idx) {
- *stride_height = surface_info.planes[plane_idx].size / surface_info.planes[plane_idx].stride;
- } else {
- LOGE("the plane_idx is invalid, The number of planes = %lu", surface_info.num_planes); //LCOV_EXCL_LINE
- *stride_height = 0;
- ret = MEDIA_PACKET_ERROR_INVALID_PARAMETER;
- }
- } else {
- *stride_height = 0;
- LOGE("tbm_surface_get_info() is failed.. 0x%08x", err); //LCOV_EXCL_LINE
- ret = MEDIA_PACKET_ERROR_INVALID_OPERATION;
- }
- } else {
- LOGE("The packet handle doesn't have tbm_surface buffer type");
- *stride_height = 0;
- ret = MEDIA_PACKET_ERROR_INVALID_OPERATION;
- }
-
- return ret;
+ return __pkt_get_tbm_surface_info((media_packet_s *)packet, plane_idx, NULL, NULL, stride_height, NULL);
}
int media_packet_get_video_plane_data_ptr(media_packet_h packet, int plane_idx, void **plane_data_ptr)
{
- media_packet_s *handle;
- int ret = MEDIA_PACKET_ERROR_NONE;
- bool has_tbm;
-
- MEDIA_PACKET_INSTANCE_CHECK(packet);
MEDIA_PACKET_NULL_ARG_CHECK(plane_data_ptr);
- if (plane_idx < 0) {
- LOGE("Invalid plane_idx : %d, must not be negative number", plane_idx); //LCOV_EXCL_LINE
- return MEDIA_PACKET_ERROR_INVALID_PARAMETER;
- }
-
- handle = (media_packet_s *)packet;
-
- media_packet_has_tbm_surface_buffer(packet, &has_tbm);
-
- if (has_tbm) {
- tbm_surface_info_s surface_info;
- int err = tbm_surface_get_info((tbm_surface_h)handle->surface_data, &surface_info);
- if (err == TBM_SURFACE_ERROR_NONE) {
- if (surface_info.num_planes > plane_idx) {
- *plane_data_ptr = surface_info.planes[plane_idx].ptr;
- LOGD("the tbm_surface_info.planes[%d].ptr = %p", plane_idx, surface_info.planes[plane_idx].ptr);
- } else {
- LOGE("the plane_idx is invalid, The number of planes = %lu", surface_info.num_planes); //LCOV_EXCL_LINE
- *plane_data_ptr = NULL;
- ret = MEDIA_PACKET_ERROR_INVALID_PARAMETER;
- }
- } else {
- LOGE("tbm_surface_get_info() is failed.. 0x%08x", err); //LCOV_EXCL_LINE
- *plane_data_ptr = NULL;
- ret = MEDIA_PACKET_ERROR_INVALID_OPERATION;
- }
- } else {
- LOGI("The packet handle doesn't have tbm_surface buffer type");
- *plane_data_ptr = NULL;
- ret = MEDIA_PACKET_ERROR_INVALID_OPERATION;
- }
- return ret;
+ return __pkt_get_tbm_surface_info((media_packet_s *)packet, plane_idx, NULL, NULL, NULL, plane_data_ptr);
}
int media_packet_get_codec_data(media_packet_h packet, void **codec_data, unsigned int *codec_data_size)