2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
23 #include <media_codec.h>
24 #include <media_codec_private.h>
25 #include <media_codec_port.h>
26 #include <media_codec_port_gst.h>
28 #include <media_codec_spec_emul.h>
30 static int sort(gpointer p1, gpointer p2)
34 a = GPOINTER_TO_INT(p1);
35 b = GPOINTER_TO_INT(p2);
37 return (a > b ? 1 : a == b ? 0 : 1);
40 int mc_create(MMHandleType *mediacodec)
42 mc_handle_t* new_mediacodec = NULL;
43 int ret = MC_ERROR_NONE;
45 int support_list = sizeof(spec_emul) / sizeof(spec_emul[0]);
48 /* alloc mediacodec structure */
49 new_mediacodec = (mc_handle_t*)g_malloc(sizeof(mc_handle_t));
50 if ( ! new_mediacodec )
52 LOGE("Cannot allocate memory for player\n");
56 memset(new_mediacodec, 0, sizeof(mc_handle_t));
58 new_mediacodec->is_encoder = false;
59 new_mediacodec->is_video = false;
60 new_mediacodec->is_hw = true;
61 new_mediacodec->is_prepared = false;
62 new_mediacodec->codec_id = MEDIACODEC_NONE;
64 new_mediacodec->ports[0] = NULL;
65 new_mediacodec->ports[1] = NULL;
67 new_mediacodec->core = NULL;
69 for(i=0; i<support_list; i++)
71 new_mediacodec->supported_codecs = g_list_append(new_mediacodec->supported_codecs, GINT_TO_POINTER(spec_emul[i].codec_id));
73 new_mediacodec->supported_codecs = g_list_sort(new_mediacodec->supported_codecs, sort);
76 for(i=0; i<support_list; i++)
78 p1 = g_list_nth_data(list, i);
79 LOGD("list_sort :%d(%x)",i, GPOINTER_TO_INT(p1));
83 g_mutex_init(&new_mediacodec->cmd_lock);
85 *mediacodec = (MMHandleType)new_mediacodec;
93 new_mediacodec = NULL;
96 return MC_INVALID_ARG;
99 int mc_destroy(MMHandleType mediacodec)
101 int ret = MC_ERROR_NONE;
102 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
106 LOGE("fail invaild param\n");
107 return MC_INVALID_ARG;
110 MEDIACODEC_CMD_LOCK( mediacodec );
112 LOGD("mediacodec : %p", mediacodec);
114 if(mc_handle->core != NULL)
116 if(mc_gst_unprepare(mc_handle) != MC_ERROR_NONE)
118 LOGE("mc_gst_unprepare() failed");
123 mc_handle->is_prepared = false;
124 g_list_free(mc_handle->supported_codecs);
126 MEDIACODEC_CMD_UNLOCK( mediacodec );
128 /* free mediacodec structure */
130 g_free( (void*)mc_handle );
136 int mc_set_codec(MMHandleType mediacodec, mediacodec_codec_type_e codec_id, mediacodec_support_type_e flags)
138 int ret = MC_ERROR_NONE;
139 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
140 static const int support_list = sizeof(spec_emul) / sizeof(spec_emul[0]);
145 LOGE("fail invaild param\n");
146 return MC_INVALID_ARG;
149 /* Mandatory setting */
150 if ( !GET_IS_ENCODER(flags) && !GET_IS_DECODER(flags) )
152 LOGE("should be encoder or decoder\n");
153 return MC_PARAM_ERROR;
156 for(i = 0; i < support_list; i++)
158 if((codec_id == spec_emul[i].codec_id) && (flags == spec_emul[i].codec_type))
164 LOGD("support_list : %d, i : %d", support_list, i);
166 if(i == support_list)
167 return MC_NOT_SUPPORTED;
169 mc_handle->port_type = spec_emul[i].port_type;
171 mc_handle->is_encoder = GET_IS_ENCODER(flags) ? 1 : 0;
172 mc_handle->is_hw = GET_IS_HW(flags) ? 1 : 0;
173 mc_handle->codec_id = codec_id;
174 mc_handle->is_video = CHECK_BIT(codec_id, 13);
176 mc_handle->is_prepared = false;
178 LOGD("encoder : %d, hardware : %d, codec_id : %x, video : %d",
179 mc_handle->is_encoder, mc_handle->is_hw, mc_handle->codec_id, mc_handle->is_video);
184 int mc_set_vdec_info(MMHandleType mediacodec, int width, int height)
186 int ret = MC_ERROR_NONE;
187 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
191 LOGE("fail invaild param\n");
192 return MC_INVALID_ARG;
195 if ((width <= 0) || (height <= 0))
196 return MC_PARAM_ERROR;
198 MEDIACODEC_CHECK_CONDITION(mc_handle->codec_id && mc_handle->is_video && !mc_handle->is_encoder,
199 MEDIACODEC_ERROR_INVALID_PARAMETER,"MEDIACODEC_ERROR_INVALID_PARAMETER");
201 mc_handle->info.decoder.width = width;
202 mc_handle->info.decoder.height = height;
204 mc_handle->is_prepared = true;
206 switch ( mc_handle->codec_id )
208 case MEDIACODEC_H264:
209 mc_sniff_bitstream = mc_sniff_h264_bitstream;
210 LOGD("mc_sniff_h264_bitstream");
212 case MEDIACODEC_MPEG4:
213 mc_sniff_bitstream = mc_sniff_mpeg4_bitstream;
215 case MEDIACODEC_H263:
216 mc_sniff_bitstream = mc_sniff_h263_bitstream;
219 LOGE("NOT SUPPORTED!!!!");
226 int mc_set_venc_info(MMHandleType mediacodec, int width, int height, int fps, int target_bits)
228 int ret = MC_ERROR_NONE;
229 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
233 LOGE("fail invaild param\n");
234 return MC_INVALID_ARG;
237 if ((width <= 0) || (height <= 0))
238 return MC_PARAM_ERROR;
240 MEDIACODEC_CHECK_CONDITION(mc_handle->codec_id && mc_handle->is_video && mc_handle->is_encoder,
241 MEDIACODEC_ERROR_INVALID_PARAMETER, "MEDIACODEC_ERROR_INVALID_PARAMETER");
243 mc_handle->info.encoder.width = width;
244 mc_handle->info.encoder.height = height;
245 mc_handle->info.encoder.fps = fps;
246 mc_handle->info.encoder.bitrate = target_bits;
248 mc_handle->is_prepared = true;
250 mc_sniff_bitstream = mc_sniff_yuv;
254 int mc_set_adec_info(MMHandleType mediacodec, int samplerate, int channel, int bit)
256 int ret = MC_ERROR_NONE;
257 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
261 LOGE("fail invaild param\n");
262 return MC_INVALID_ARG;
265 if ((samplerate <= 0) || (channel <= 0) || (bit <= 0))
266 return MC_PARAM_ERROR;
268 MEDIACODEC_CHECK_CONDITION(mc_handle->codec_id && !mc_handle->is_video && !mc_handle->is_encoder,
269 MEDIACODEC_ERROR_INVALID_PARAMETER, "MEDIACODEC_ERROR_INVALID_PARAMETER");
271 mc_handle->info.decoder.samplerate = samplerate;
272 mc_handle->info.decoder.channel = channel;
273 mc_handle->info.decoder.bit = bit;
275 mc_handle->is_prepared = true;
280 int mc_set_aenc_info(MMHandleType mediacodec, int samplerate, int channel, int bit, int bitrate)
282 int ret = MC_ERROR_NONE;
283 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
287 LOGE("fail invaild param\n");
288 return MC_INVALID_ARG;
291 if ((samplerate <= 0) || (channel <= 0) || (bit <= 0))
292 return MC_PARAM_ERROR;
294 MEDIACODEC_CHECK_CONDITION(mc_handle->codec_id && !mc_handle->is_video && mc_handle->is_encoder,
295 MEDIACODEC_ERROR_INVALID_PARAMETER, "MEDIACODEC_ERROR_INVALID_PARAMETER");
297 mc_handle->info.encoder.samplerate = samplerate;
298 mc_handle->info.encoder.channel = channel;
299 mc_handle->info.encoder.bit = bit;
300 mc_handle->info.encoder.bitrate = bitrate;
302 mc_handle->is_prepared = true;
307 int mc_prepare(MMHandleType mediacodec)
309 int ret = MC_ERROR_NONE;
310 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
314 LOGE("fail invaild param\n");
315 return MC_INVALID_ARG;
318 if(!mc_handle->is_prepared)
319 return MC_NOT_INITIALIZED;
321 MEDIACODEC_CMD_LOCK( mediacodec );
323 /* setting core details */
324 switch ( mc_handle->port_type )
326 case MEDIACODEC_PORT_TYPE_GENERAL:
331 case MEDIACODEC_PORT_TYPE_OMX:
336 case MEDIACODEC_PORT_TYPE_GST:
338 mc_gst_prepare(mc_handle);
346 MEDIACODEC_CMD_UNLOCK( mediacodec );
351 int mc_unprepare(MMHandleType mediacodec)
353 int ret = MC_ERROR_NONE;
354 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
358 LOGE("fail invaild param\n");
359 return MC_INVALID_ARG;
362 MEDIACODEC_CMD_LOCK( mediacodec );
364 /* deinit core details */
365 switch ( mc_handle->port_type )
367 case MEDIACODEC_PORT_TYPE_GENERAL:
372 case MEDIACODEC_PORT_TYPE_OMX:
377 case MEDIACODEC_PORT_TYPE_GST:
379 ret = mc_gst_unprepare(mc_handle);
387 MEDIACODEC_CMD_UNLOCK( mediacodec );
392 int mc_process_input(MMHandleType mediacodec, media_packet_h inbuf, uint64_t timeOutUs )
394 int ret = MC_ERROR_NONE;
395 uint64_t buf_size = 0;
396 void *buf_data = NULL;
399 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
403 LOGE("fail invaild param\n");
404 return MC_INVALID_ARG;
407 if ( mc_handle->is_video) {
408 if ((ret = mc_sniff_bitstream(mc_handle, inbuf)) != MC_ERROR_NONE ) {
409 return MC_INVALID_IN_BUF;
413 ret = media_packet_get_buffer_size(inbuf, &buf_size);
414 if (ret != MEDIA_PACKET_ERROR_NONE)
416 LOGE("invaild input buffer");
417 return MC_INVALID_IN_BUF;
420 ret = media_packet_get_buffer_data_ptr(inbuf, &buf_data);
421 if (ret != MEDIA_PACKET_ERROR_NONE)
423 LOGE("invaild input buffer");
424 return MC_INVALID_IN_BUF;
427 ret = media_packet_is_end_of_stream(inbuf, &eos);
428 if (ret != MEDIA_PACKET_ERROR_NONE)
430 LOGE("invaild input buffer");
431 return MC_INVALID_IN_BUF;
436 if((buf_data == NULL) || (buf_size == 0))
438 LOGE("invaild input buffer");
439 return MC_INVALID_IN_BUF;
443 MEDIACODEC_CMD_LOCK( mediacodec );
445 switch ( mc_handle->port_type )
447 case MEDIACODEC_PORT_TYPE_GENERAL:
450 case MEDIACODEC_PORT_TYPE_OMX:
453 case MEDIACODEC_PORT_TYPE_GST:
455 ret = mc_gst_process_input(mc_handle, inbuf, timeOutUs);
463 MEDIACODEC_CMD_UNLOCK( mediacodec );
468 int mc_get_output(MMHandleType mediacodec, media_packet_h *outbuf, uint64_t timeOutUs)
470 int ret = MC_ERROR_NONE;
471 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
475 LOGE("fail invaild param\n");
476 return MC_INVALID_ARG;
479 MEDIACODEC_CMD_LOCK( mediacodec );
481 /* setting core details */
482 switch ( mc_handle->port_type )
484 case MEDIACODEC_PORT_TYPE_GENERAL:
487 case MEDIACODEC_PORT_TYPE_OMX:
490 case MEDIACODEC_PORT_TYPE_GST:
492 ret = mc_gst_get_output(mc_handle, outbuf, timeOutUs);
500 MEDIACODEC_CMD_UNLOCK( mediacodec );
505 int mc_flush_buffers(MMHandleType mediacodec)
507 int ret = MC_ERROR_NONE;
508 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
512 LOGE("fail invaild param\n");
513 return MC_INVALID_ARG;
516 MEDIACODEC_CMD_LOCK( mediacodec );
518 /* setting core details */
519 switch ( mc_handle->port_type )
521 case MEDIACODEC_PORT_TYPE_GENERAL:
524 case MEDIACODEC_PORT_TYPE_OMX:
527 case MEDIACODEC_PORT_TYPE_GST:
529 ret = mc_gst_flush_buffers(mc_handle);
537 MEDIACODEC_CMD_UNLOCK( mediacodec );
541 int mc_get_supported_type(MMHandleType mediacodec, mediacodec_codec_type_e codec_type, bool encoder, int *support_type)
543 int ret = MC_ERROR_NONE;
544 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
545 static const mc_codec_map_t *codec_map;
552 LOGE("fail invaild param\n");
553 return MC_INVALID_ARG;
556 const int codec_list = encoder ? (sizeof(encoder_map) / sizeof(encoder_map[0])) : (sizeof(decoder_map) / sizeof(decoder_map[0]));
558 codec_map = encoder ? encoder_map : decoder_map;
561 for(i = 0; i < codec_list; i++)
563 if(codec_type == codec_map[i].id)
565 if(codec_map[i].hardware)
566 *support_type |=MEDIACODEC_SUPPORT_TYPE_HW;
568 *support_type |=MEDIACODEC_SUPPORT_TYPE_SW;
576 int mc_set_empty_buffer_cb(MMHandleType mediacodec, mediacodec_input_buffer_used_cb callback, void* user_data)
578 int ret = MC_ERROR_NONE;
579 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
583 LOGE("fail invaild param\n");
584 return MC_INVALID_ARG;
587 if(mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_EMPTYBUFFER])
589 LOGE("Already set mediacodec_empty_buffer_cb\n");
590 return MC_PARAM_ERROR;
596 return MC_INVALID_ARG;
599 LOGD("Set empty buffer callback(cb = %p, data = %p)\n", callback, user_data);
601 mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_EMPTYBUFFER] = (mc_empty_buffer_cb) callback;
602 mc_handle->user_data[_MEDIACODEC_EVENT_TYPE_EMPTYBUFFER] = user_data;
603 return MC_ERROR_NONE;
609 int mc_unset_empty_buffer_cb(MMHandleType mediacodec)
611 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
615 LOGE("fail invaild param\n");
616 return MC_INVALID_ARG;
619 mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_EMPTYBUFFER] = NULL;
620 mc_handle->user_data[_MEDIACODEC_EVENT_TYPE_EMPTYBUFFER] = NULL;
622 return MC_ERROR_NONE;
625 int mc_set_fill_buffer_cb(MMHandleType mediacodec, mediacodec_output_buffer_available_cb callback, void* user_data)
627 int ret = MC_ERROR_NONE;
628 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
632 LOGE("fail invaild param\n");
633 return MC_INVALID_ARG;
636 if(mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_FILLBUFFER])
638 LOGE("Already set mediacodec_fill_buffer_cb\n");
639 return MC_PARAM_ERROR;
644 return MC_INVALID_ARG;
647 LOGD("Set fill buffer callback(cb = %p, data = %p)\n", callback, user_data);
649 mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_FILLBUFFER] = (mc_fill_buffer_cb) callback;
650 mc_handle->user_data[_MEDIACODEC_EVENT_TYPE_FILLBUFFER] = user_data;
651 return MC_ERROR_NONE;
657 int mc_unset_fill_buffer_cb(MMHandleType mediacodec)
659 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
663 LOGE("fail invaild param\n");
664 return MC_INVALID_ARG;
667 mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_FILLBUFFER] = NULL;
668 mc_handle->user_data[_MEDIACODEC_EVENT_TYPE_FILLBUFFER] = NULL;
670 return MC_ERROR_NONE;
673 int mc_set_error_cb(MMHandleType mediacodec, mediacodec_error_cb callback, void* user_data)
675 int ret = MC_ERROR_NONE;
676 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
680 LOGE("fail invaild param\n");
681 return MC_INVALID_ARG;
684 if(mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_ERROR])
686 LOGE("Already set mediacodec_fill_buffer_cb\n");
687 return MC_PARAM_ERROR;
692 return MC_INVALID_ARG;
695 LOGD("Set event handler callback(cb = %p, data = %p)\n", callback, user_data);
697 mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_ERROR] = (mc_error_cb) callback;
698 mc_handle->user_data[_MEDIACODEC_EVENT_TYPE_ERROR] = user_data;
699 return MC_ERROR_NONE;
705 int mc_unset_error_cb(MMHandleType mediacodec)
707 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
711 LOGE("fail invaild param\n");
712 return MC_INVALID_ARG;
715 mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_ERROR] = NULL;
716 mc_handle->user_data[_MEDIACODEC_EVENT_TYPE_ERROR] = NULL;
718 return MC_ERROR_NONE;
721 int mc_set_eos_cb(MMHandleType mediacodec, mediacodec_eos_cb callback, void* user_data)
723 int ret = MC_ERROR_NONE;
724 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
728 LOGE("fail invaild param\n");
729 return MC_INVALID_ARG;
732 if(mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_EOS])
734 LOGE("Already set mediacodec_fill_buffer_cb\n");
735 return MC_PARAM_ERROR;
740 return MC_INVALID_ARG;
743 LOGD("Set event handler callback(cb = %p, data = %p)\n", callback, user_data);
745 mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_EOS] = (mc_eos_cb) callback;
746 mc_handle->user_data[_MEDIACODEC_EVENT_TYPE_EOS] = user_data;
747 return MC_ERROR_NONE;
753 int mc_unset_eos_cb(MMHandleType mediacodec)
755 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
759 LOGE("fail invaild param\n");
760 return MC_INVALID_ARG;
763 mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_EOS] = NULL;
764 mc_handle->user_data[_MEDIACODEC_EVENT_TYPE_EOS] = NULL;
766 return MC_ERROR_NONE;
769 int mc_set_buffer_status_cb(MMHandleType mediacodec, mediacodec_buffer_status_cb callback, void* user_data)
771 int ret = MC_ERROR_NONE;
772 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
776 LOGE("fail invaild param\n");
777 return MC_INVALID_ARG;
780 if(mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_BUFFER_STATUS])
782 LOGE("Already set mediacodec_need_data_cb\n");
783 return MC_PARAM_ERROR;
788 return MC_INVALID_ARG;
791 LOGD("Set start feed callback(cb = %p, data = %p)\n", callback, user_data);
793 mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_BUFFER_STATUS] = (mc_buffer_status_cb) callback;
794 mc_handle->user_data[_MEDIACODEC_EVENT_TYPE_BUFFER_STATUS] = user_data;
795 return MC_ERROR_NONE;
801 int mc_unset_buffer_status_cb(MMHandleType mediacodec)
803 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
807 LOGE("fail invaild param\n");
808 return MC_INVALID_ARG;
811 mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_BUFFER_STATUS] = NULL;
812 mc_handle->user_data[_MEDIACODEC_EVENT_TYPE_BUFFER_STATUS] = NULL;
814 return MC_ERROR_NONE;
817 int mc_set_supported_codec_cb(MMHandleType mediacodec, mediacodec_supported_codec_cb callback, void* user_data)
819 int ret = MC_ERROR_NONE;
820 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
824 LOGE("fail invaild param\n");
825 return MC_INVALID_ARG;
828 if(mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_SUPPORTED_CODEC])
830 LOGE("Already set mediacodec_supported_codec_cb\n");
831 return MC_PARAM_ERROR;
836 return MC_INVALID_ARG;
839 LOGD("Set event handler callback(cb = %p, data = %p)\n", callback, user_data);
841 mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_SUPPORTED_CODEC] = (mc_supported_codec_cb) callback;
842 mc_handle->user_data[_MEDIACODEC_EVENT_TYPE_SUPPORTED_CODEC] = user_data;
843 return MC_ERROR_NONE;
846 return MC_ERROR_NONE;
849 int _mediacodec_foreach_supported_codec(MMHandleType mediacodec, mediacodec_supported_codec_cb callback, void* user_data)
851 int ret = MC_ERROR_NONE;
852 mc_handle_t* mc_handle = (mc_handle_t*) mediacodec;
858 LOGE("fail invaild param\n");
859 return MC_INVALID_ARG;
862 if(mc_handle->supported_codecs)
864 codecs_num = g_list_length(mc_handle->supported_codecs);
865 LOGD("supported_codecs : %d", codecs_num);
869 tmp = g_list_nth_data(mc_handle->supported_codecs, codecs_num -1);
872 if(!callback(GPOINTER_TO_INT(tmp), user_data))
874 ret = MEDIACODEC_ERROR_INTERNAL;
881 if(!callback(-1, user_data))
883 ret = MEDIACODEC_ERROR_INTERNAL;
889 LOGD("foreach callback returned error");
893 int mc_sniff_h264_bitstream(mc_handle_t *handle, media_packet_h pkt)
895 int ret = MC_ERROR_NONE;
896 void *buf_data = NULL;
897 void *codec_data = NULL;
898 int codec_data_size = 0;
899 uint64_t buf_size = 0;
901 bool codec_config = false;
903 media_packet_get_buffer_size(pkt, &buf_size);
904 media_packet_get_buffer_data_ptr(pkt, &buf_data);
905 media_packet_get_codec_data(pkt, &codec_data, &codec_data_size);
906 media_packet_is_end_of_stream(pkt, &eos);
907 media_packet_is_codec_config(pkt, &codec_config);
909 LOGD("codec_data_size : %d, buf_size : %d, codec_config : %d, eos : %d",
910 codec_data_size, (int)buf_size, codec_config, eos);
912 if ( codec_config ) {
913 if ( codec_data_size == 0 )
914 ret = _mc_check_bytestream (pkt, buf_data, (int)buf_size, NULL, NULL);
920 int mc_sniff_mpeg4_bitstream(mc_handle_t *handle, media_packet_h pkt)
922 int ret = MC_ERROR_NONE;
926 int mc_sniff_h263_bitstream(mc_handle_t *handle, media_packet_h pkt)
928 int ret = MC_ERROR_NONE;
932 int mc_sniff_yuv(mc_handle_t *handle, media_packet_h pkt)
934 int ret = MC_ERROR_NONE;
936 #if 0 /* libtbm, media-tool should be updated */
937 uint64_t buf_size = 0;
939 int padded_width = 0;
940 int padded_height = 0;
941 int allocated_buffer = 0;
944 media_packet_get_buffer_size(pkt, &buf_size);
945 media_packet_get_video_number_of_planes(pkt, &plane_num);
947 for ( index = 0; index < plane_num; index++) {
948 media_packet_get_video_stride_width(pkt, index, &padded_width);
949 media_packet_get_video_stride_height(pkt, index, &padded_height);
950 allocated_buffer += padded_width * padded_height;
952 LOGD("%d plane size : %d", padded_width * padded_height);
955 if ( buf_size > allocated_buffer ) {
956 LOGE("Buffer exceeds maximum size [buf_size: %d, allocated_size :%d", (int)buf_size, allocated_buffer);
957 ret = MC_INVALID_IN_BUF;