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>
27 #include <media_codec_spec_emul.h>
28 #include <media_codec_ini.h>
30 int mc_create(MMHandleType *mediacodec)
32 mc_handle_t *new_mediacodec = NULL;
33 int ret = MC_ERROR_NONE;
35 /* alloc mediacodec structure */
36 new_mediacodec = (mc_handle_t *)g_malloc(sizeof(mc_handle_t));
38 if (!new_mediacodec) {
39 LOGE("Cannot allocate memory for mediacodec");
43 memset(new_mediacodec, 0, sizeof(mc_handle_t));
45 new_mediacodec->is_encoder = false;
46 new_mediacodec->is_video = false;
47 new_mediacodec->is_hw = true;
48 new_mediacodec->is_prepared = false;
49 new_mediacodec->codec_id = MEDIACODEC_NONE;
51 new_mediacodec->ports[0] = NULL;
52 new_mediacodec->ports[1] = NULL;
54 new_mediacodec->num_supported_decoder = 0;
55 new_mediacodec->num_supported_encoder = 0;
57 new_mediacodec->core = NULL;
58 new_mediacodec->ini = &mc_ini;
62 ret = mc_ini_load(&mc_ini);
63 if (ret != MC_ERROR_NONE)
69 _mc_create_codec_map_from_ini(new_mediacodec, spec_emul);
71 /* create decoder map from ini */
72 _mc_create_decoder_map_from_ini(new_mediacodec);
74 /* create encoder map from ini */
75 _mc_create_encoder_map_from_ini(new_mediacodec);
77 *mediacodec = (MMHandleType)new_mediacodec;
83 return MC_INVALID_ARG;
86 int mc_destroy(MMHandleType mediacodec)
88 int ret = MC_ERROR_NONE;
89 mc_handle_t *mc_handle = (mc_handle_t *) mediacodec;
92 LOGE("fail invaild param\n");
93 return MC_INVALID_ARG;
96 LOGD("mediacodec : %p", mediacodec);
98 if (mc_handle->core != NULL) {
99 if (mc_gst_unprepare(mc_handle) != MC_ERROR_NONE) {
100 LOGE("mc_gst_unprepare() failed");
105 mc_handle->is_prepared = false;
107 /* free mediacodec structure */
109 g_free((void *)mc_handle);
116 int mc_set_codec(MMHandleType mediacodec, mediacodec_codec_type_e codec_id, int flags)
118 int ret = MC_ERROR_NONE;
119 mc_handle_t *mc_handle = (mc_handle_t *) mediacodec;
123 LOGE("fail invaild param");
124 return MC_INVALID_ARG;
127 /* Mandatory setting */
128 if (!GET_IS_ENCODER(flags) && !GET_IS_DECODER(flags)) {
129 LOGE("should be encoder or decoder");
130 return MC_PARAM_ERROR;
133 /* if user doesn't set codec-type, s/w codec would be set */
134 if (!GET_IS_HW(flags) && !GET_IS_SW(flags))
135 flags |= MEDIACODEC_SUPPORT_TYPE_SW;
137 for (i = 0; i < mc_handle->ini->num_supported_codecs; i++) {
138 if ((codec_id == spec_emul[i].codec_id) && (flags == spec_emul[i].codec_type))
141 LOGD("support_list : %d, i : %d", mc_handle->ini->num_supported_codecs, i);
143 if (i == mc_handle->ini->num_supported_codecs)
144 return MC_NOT_SUPPORTED;
146 mc_handle->port_type = spec_emul[i].port_type;
148 mc_handle->is_encoder = GET_IS_ENCODER(flags) ? 1 : 0;
149 mc_handle->is_hw = GET_IS_HW(flags) ? 1 : 0;
150 mc_handle->codec_id = codec_id;
151 mc_handle->is_video = CHECK_BIT(codec_id, 13);
153 mc_handle->is_prepared = false;
155 LOGD("encoder : %d, hardware : %d, codec_id : %x, video : %d",
156 mc_handle->is_encoder, mc_handle->is_hw, mc_handle->codec_id, mc_handle->is_video);
161 int mc_set_vdec_info(MMHandleType mediacodec, int width, int height)
163 int ret = MC_ERROR_NONE;
164 mc_handle_t* mc_handle = (mc_handle_t *)mediacodec;
167 LOGE("fail invaild param\n");
168 return MC_INVALID_ARG;
171 if ((width <= 0) || (height <= 0))
172 return MC_PARAM_ERROR;
174 MEDIACODEC_CHECK_CONDITION(mc_handle->codec_id && mc_handle->is_video && !mc_handle->is_encoder,
175 MC_INVALID_ARG, "MEDIACODEC_ERROR_INVALID_PARAMETER");
177 mc_handle->info.decoder.width = width;
178 mc_handle->info.decoder.height = height;
180 mc_handle->is_prepared = true;
185 int mc_set_venc_info(MMHandleType mediacodec, int width, int height, int fps, int target_bits)
187 int ret = MC_ERROR_NONE;
188 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 MC_INVALID_ARG, "MEDIACODEC_ERROR_INVALID_PARAMETER");
201 mc_handle->info.encoder.width = width;
202 mc_handle->info.encoder.height = height;
203 mc_handle->info.encoder.fps = fps;
204 mc_handle->info.encoder.bitrate = target_bits * 1000;
205 mc_handle->is_prepared = true;
210 int mc_set_adec_info(MMHandleType mediacodec, int samplerate, int channel, int bit)
212 int ret = MC_ERROR_NONE;
213 mc_handle_t *mc_handle = (mc_handle_t *) mediacodec;
216 LOGE("fail invaild param\n");
217 return MC_INVALID_ARG;
220 if ((samplerate <= 0) || (channel <= 0) || (bit <= 0))
221 return MC_PARAM_ERROR;
223 MEDIACODEC_CHECK_CONDITION(mc_handle->codec_id && !mc_handle->is_video && !mc_handle->is_encoder,
224 MC_INVALID_ARG, "MEDIACODEC_ERROR_INVALID_PARAMETER");
226 mc_handle->info.decoder.samplerate = samplerate;
227 mc_handle->info.decoder.channel = channel;
228 mc_handle->info.decoder.bit = bit;
229 mc_handle->is_prepared = true;
234 int mc_set_aenc_info(MMHandleType mediacodec, int samplerate, int channel, int bit, int bitrate)
236 int ret = MC_ERROR_NONE;
237 mc_handle_t * mc_handle = (mc_handle_t *) mediacodec;
240 LOGE("fail invaild param\n");
241 return MC_INVALID_ARG;
244 if ((samplerate <= 0) || (channel <= 0) || (bit <= 0))
245 return MC_PARAM_ERROR;
247 MEDIACODEC_CHECK_CONDITION(mc_handle->codec_id && !mc_handle->is_video && mc_handle->is_encoder,
248 MC_INVALID_ARG, "MEDIACODEC_ERROR_INVALID_PARAMETER");
250 mc_handle->info.encoder.samplerate = samplerate;
251 mc_handle->info.encoder.channel = channel;
252 mc_handle->info.encoder.bit = bit;
253 mc_handle->info.encoder.bitrate = bitrate * 1000;
255 mc_handle->is_prepared = true;
260 int mc_prepare(MMHandleType mediacodec)
262 int ret = MC_ERROR_NONE;
263 mc_handle_t *mc_handle = (mc_handle_t *) mediacodec;
266 LOGE("fail invaild param\n");
267 return MC_INVALID_ARG;
270 if (!mc_handle->is_prepared)
271 return MC_NOT_INITIALIZED;
273 /* setting core details */
274 switch (mc_handle->port_type) {
275 case MEDIACODEC_PORT_TYPE_GENERAL:
278 case MEDIACODEC_PORT_TYPE_OMX:
281 case MEDIACODEC_PORT_TYPE_GST:
282 mc_gst_prepare(mc_handle);
292 int mc_unprepare(MMHandleType mediacodec)
294 int ret = MC_ERROR_NONE;
295 mc_handle_t *mc_handle = (mc_handle_t *)mediacodec;
298 LOGE("fail invaild param\n");
299 return MC_INVALID_ARG;
302 /* deinit core details */
303 switch (mc_handle->port_type) {
304 case MEDIACODEC_PORT_TYPE_GENERAL:
307 case MEDIACODEC_PORT_TYPE_OMX:
310 case MEDIACODEC_PORT_TYPE_GST:
311 ret = mc_gst_unprepare(mc_handle);
321 int mc_process_input(MMHandleType mediacodec, media_packet_h inbuf, uint64_t timeOutUs)
323 int ret = MC_ERROR_NONE;
325 mc_handle_t *mc_handle = (mc_handle_t *)mediacodec;
328 LOGE("fail invaild param");
329 return MC_INVALID_ARG;
333 LOGE("invaild input buffer");
334 return MC_INVALID_IN_BUF;
337 switch (mc_handle->port_type) {
338 case MEDIACODEC_PORT_TYPE_GENERAL:
341 case MEDIACODEC_PORT_TYPE_OMX:
344 case MEDIACODEC_PORT_TYPE_GST:
345 ret = mc_gst_process_input(mc_handle, inbuf, timeOutUs);
355 int mc_get_output(MMHandleType mediacodec, media_packet_h *outbuf, uint64_t timeOutUs)
357 int ret = MC_ERROR_NONE;
358 mc_handle_t *mc_handle = (mc_handle_t *) mediacodec;
361 LOGE("fail invaild param\n");
362 return MC_INVALID_ARG;
365 /* setting core details */
366 switch (mc_handle->port_type) {
367 case MEDIACODEC_PORT_TYPE_GENERAL:
370 case MEDIACODEC_PORT_TYPE_OMX:
373 case MEDIACODEC_PORT_TYPE_GST:
374 ret = mc_gst_get_output(mc_handle, outbuf, timeOutUs);
384 int mc_flush_buffers(MMHandleType mediacodec)
386 int ret = MC_ERROR_NONE;
387 mc_handle_t *mc_handle = (mc_handle_t *)mediacodec;
390 LOGE("fail invaild param\n");
391 return MC_INVALID_ARG;
394 /* setting core details */
395 switch (mc_handle->port_type) {
396 case MEDIACODEC_PORT_TYPE_GENERAL:
399 case MEDIACODEC_PORT_TYPE_OMX:
402 case MEDIACODEC_PORT_TYPE_GST:
403 ret = mc_gst_flush_buffers(mc_handle);
413 int mc_get_supported_type(MMHandleType mediacodec, mediacodec_codec_type_e codec_type, bool encoder, int *support_type)
415 int ret = MC_ERROR_NONE;
416 mc_handle_t *mc_handle = (mc_handle_t *)mediacodec;
417 mc_codec_map_t *codec_map;
418 int num_supported_codec = 0;
424 LOGE("fail invaild param\n");
425 return MC_INVALID_ARG;
428 codec_map = encoder ? mc_handle->encoder_map : mc_handle->decoder_map;
429 num_supported_codec = encoder ? mc_handle->num_supported_encoder : mc_handle->num_supported_decoder;
431 for (i = 0; i < num_supported_codec; i++) {
432 if (codec_map[i].id == codec_type) {
433 if (codec_map[i].hardware)
434 *support_type |= MEDIACODEC_SUPPORT_TYPE_HW;
436 *support_type |= MEDIACODEC_SUPPORT_TYPE_SW;
443 int mc_set_empty_buffer_cb(MMHandleType mediacodec, mediacodec_input_buffer_used_cb callback, void *user_data)
445 int ret = MC_ERROR_NONE;
446 mc_handle_t *mc_handle = (mc_handle_t *)mediacodec;
449 LOGE("fail invaild param\n");
450 return MC_INVALID_ARG;
453 if (mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_EMPTYBUFFER]) {
454 LOGE("Already set mediacodec_empty_buffer_cb");
455 return MC_PARAM_ERROR;
458 return MC_INVALID_ARG;
460 LOGD("Set empty buffer callback(cb = %p, data = %p)", callback, user_data);
462 mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_EMPTYBUFFER] = (mc_empty_buffer_cb) callback;
463 mc_handle->user_data[_MEDIACODEC_EVENT_TYPE_EMPTYBUFFER] = user_data;
465 return MC_ERROR_NONE;
471 int mc_unset_empty_buffer_cb(MMHandleType mediacodec)
473 mc_handle_t *mc_handle = (mc_handle_t *)mediacodec;
476 LOGE("fail invaild param\n");
477 return MC_INVALID_ARG;
480 mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_EMPTYBUFFER] = NULL;
481 mc_handle->user_data[_MEDIACODEC_EVENT_TYPE_EMPTYBUFFER] = NULL;
483 return MC_ERROR_NONE;
486 int mc_set_fill_buffer_cb(MMHandleType mediacodec, mediacodec_output_buffer_available_cb callback, void *user_data)
488 int ret = MC_ERROR_NONE;
489 mc_handle_t *mc_handle = (mc_handle_t *)mediacodec;
492 LOGE("fail invaild param\n");
493 return MC_INVALID_ARG;
496 if (mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_FILLBUFFER]) {
497 LOGE("Already set mediacodec_fill_buffer_cb");
498 return MC_PARAM_ERROR;
501 return MC_INVALID_ARG;
503 LOGD("Set fill buffer callback(cb = %p, data = %p)", callback, user_data);
505 mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_FILLBUFFER] = (mc_fill_buffer_cb) callback;
506 mc_handle->user_data[_MEDIACODEC_EVENT_TYPE_FILLBUFFER] = user_data;
507 return MC_ERROR_NONE;
513 int mc_unset_fill_buffer_cb(MMHandleType mediacodec)
515 mc_handle_t *mc_handle = (mc_handle_t *)mediacodec;
518 LOGE("fail invaild param\n");
519 return MC_INVALID_ARG;
522 mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_FILLBUFFER] = NULL;
523 mc_handle->user_data[_MEDIACODEC_EVENT_TYPE_FILLBUFFER] = NULL;
525 return MC_ERROR_NONE;
528 int mc_set_error_cb(MMHandleType mediacodec, mediacodec_error_cb callback, void *user_data)
530 int ret = MC_ERROR_NONE;
531 mc_handle_t *mc_handle = (mc_handle_t *) mediacodec;
534 LOGE("fail invaild param\n");
535 return MC_INVALID_ARG;
538 if (mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_ERROR]) {
539 LOGE("Already set mediacodec_fill_buffer_cb\n");
540 return MC_PARAM_ERROR;
543 return MC_INVALID_ARG;
545 LOGD("Set event handler callback(cb = %p, data = %p)\n", callback, user_data);
547 mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_ERROR] = (mc_error_cb) callback;
548 mc_handle->user_data[_MEDIACODEC_EVENT_TYPE_ERROR] = user_data;
549 return MC_ERROR_NONE;
555 int mc_unset_error_cb(MMHandleType mediacodec)
557 mc_handle_t *mc_handle = (mc_handle_t *)mediacodec;
560 LOGE("fail invaild param");
561 return MC_INVALID_ARG;
564 mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_ERROR] = NULL;
565 mc_handle->user_data[_MEDIACODEC_EVENT_TYPE_ERROR] = NULL;
567 return MC_ERROR_NONE;
570 int mc_set_eos_cb(MMHandleType mediacodec, mediacodec_eos_cb callback, void *user_data)
572 int ret = MC_ERROR_NONE;
573 mc_handle_t *mc_handle = (mc_handle_t *) mediacodec;
576 LOGE("fail invaild param\n");
577 return MC_INVALID_ARG;
580 if (mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_EOS]) {
581 LOGE("Already set mediacodec_fill_buffer_cb");
582 return MC_PARAM_ERROR;
585 return MC_INVALID_ARG;
587 LOGD("Set event handler callback(cb = %p, data = %p)\n", callback, user_data);
589 mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_EOS] = (mc_eos_cb) callback;
590 mc_handle->user_data[_MEDIACODEC_EVENT_TYPE_EOS] = user_data;
591 return MC_ERROR_NONE;
597 int mc_unset_eos_cb(MMHandleType mediacodec)
599 mc_handle_t *mc_handle = (mc_handle_t *)mediacodec;
602 LOGE("fail invaild param\n");
603 return MC_INVALID_ARG;
606 mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_EOS] = NULL;
607 mc_handle->user_data[_MEDIACODEC_EVENT_TYPE_EOS] = NULL;
609 return MC_ERROR_NONE;
612 int mc_set_buffer_status_cb(MMHandleType mediacodec, mediacodec_buffer_status_cb callback, void *user_data)
614 int ret = MC_ERROR_NONE;
615 mc_handle_t *mc_handle = (mc_handle_t *)mediacodec;
618 LOGE("fail invaild param\n");
619 return MC_INVALID_ARG;
622 if (mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_BUFFER_STATUS]) {
623 LOGE("Already set mediacodec_need_data_cb\n");
624 return MC_PARAM_ERROR;
627 return MC_INVALID_ARG;
629 LOGD("Set start feed callback(cb = %p, data = %p)\n", callback, user_data);
631 mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_BUFFER_STATUS] = (mc_buffer_status_cb) callback;
632 mc_handle->user_data[_MEDIACODEC_EVENT_TYPE_BUFFER_STATUS] = user_data;
633 return MC_ERROR_NONE;
639 int mc_unset_buffer_status_cb(MMHandleType mediacodec)
641 mc_handle_t *mc_handle = (mc_handle_t *)mediacodec;
644 LOGE("fail invaild param\n");
645 return MC_INVALID_ARG;
648 mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_BUFFER_STATUS] = NULL;
649 mc_handle->user_data[_MEDIACODEC_EVENT_TYPE_BUFFER_STATUS] = NULL;
651 return MC_ERROR_NONE;
654 int mc_set_supported_codec_cb(MMHandleType mediacodec, mediacodec_supported_codec_cb callback, void *user_data)
656 int ret = MC_ERROR_NONE;
657 mc_handle_t *mc_handle = (mc_handle_t *)mediacodec;
660 LOGE("fail invaild param\n");
661 return MC_INVALID_ARG;
664 if (mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_SUPPORTED_CODEC]) {
665 LOGE("Already set mediacodec_supported_codec_cb\n");
666 return MC_PARAM_ERROR;
669 return MC_INVALID_ARG;
671 LOGD("Set event handler callback(cb = %p, data = %p)", callback, user_data);
673 mc_handle->user_cb[_MEDIACODEC_EVENT_TYPE_SUPPORTED_CODEC] = (mc_supported_codec_cb) callback;
674 mc_handle->user_data[_MEDIACODEC_EVENT_TYPE_SUPPORTED_CODEC] = user_data;
675 return MC_ERROR_NONE;
681 int _mediacodec_foreach_supported_codec(mediacodec_supported_codec_cb callback, void *user_data)
683 int ret = MEDIACODEC_NONE;
687 gboolean codec[CODEC_NR_ITEMS] = {0,};
689 for (i = 0; i < mc_ini.num_supported_codecs; i++) {
690 index = codec_type_to_simple_enumeration(spec_emul[i].codec_id);
694 for (i = 0; i < CODEC_NR_ITEMS; i++) {
696 index = simple_to_codec_type_enumeration(i);
697 if (!callback(index, user_data)) {
703 if (!callback(-1, user_data)) {
704 ret = MEDIACODEC_ERROR_INTERNAL;
709 LOGD("foreach callback returned error");
713 int mc_get_packet_pool(MMHandleType mediacodec, media_packet_pool_h *pool)
715 int ret = MC_ERROR_NONE;
716 mc_handle_t *mc_handle = (mc_handle_t *)mediacodec;
719 LOGE("fail invaild param\n");
720 return MC_INVALID_ARG;
723 /* setting core details */
724 switch (mc_handle->port_type) {
725 case MEDIACODEC_PORT_TYPE_GENERAL:
728 case MEDIACODEC_PORT_TYPE_OMX:
731 case MEDIACODEC_PORT_TYPE_GST:
732 ret = mc_gst_get_packet_pool(mc_handle, pool);
742 void _mc_create_decoder_map_from_ini(mc_handle_t *mediacodec)
744 int indx = 0, count = 0;
745 int codec_list = mediacodec->ini->codec_list;
746 for (indx = 0; indx < codec_list; indx++) {
747 if (strcmp(mediacodec->ini->codec[indx].codec_info[0].name, "")) {
748 mediacodec->decoder_map[count].id = mediacodec->ini->codec[indx].codec_id;
749 mediacodec->decoder_map[count].hardware = 1; /* hardware */
750 mediacodec->decoder_map[count].type.factory_name = mediacodec->ini->codec[indx].codec_info[0].name;
751 mediacodec->decoder_map[count].type.mime = mediacodec->ini->codec[indx].codec_info[0].mime;
752 mediacodec->decoder_map[count].type.out_format =
753 _mc_convert_media_format_str_to_int(mediacodec->ini->codec[indx].codec_info[0].format);
757 if (strcmp(mediacodec->ini->codec[indx].codec_info[2].name, "")) {
758 mediacodec->decoder_map[count].id = mediacodec->ini->codec[indx].codec_id;
759 mediacodec->decoder_map[count].hardware = 0; /* software */
760 mediacodec->decoder_map[count].type.factory_name = mediacodec->ini->codec[indx].codec_info[2].name;
761 mediacodec->decoder_map[count].type.mime = mediacodec->ini->codec[indx].codec_info[2].mime;
762 mediacodec->decoder_map[count].type.out_format =
763 _mc_convert_media_format_str_to_int(mediacodec->ini->codec[indx].codec_info[2].format);
767 mediacodec->num_supported_decoder = count;
772 void _mc_create_encoder_map_from_ini(mc_handle_t *mediacodec)
774 int indx = 0, count = 0;
775 int codec_list = mediacodec->ini->codec_list;
777 for (indx = 0; indx < codec_list; indx++) {
778 if (strcmp(mediacodec->ini->codec[indx].codec_info[1].name, "")) {
779 mediacodec->encoder_map[count].id = mediacodec->ini->codec[indx].codec_id;
780 mediacodec->encoder_map[count].hardware = 1;
781 mediacodec->encoder_map[count].type.factory_name = mediacodec->ini->codec[indx].codec_info[1].name;
782 mediacodec->encoder_map[count].type.mime = mediacodec->ini->codec[indx].codec_info[1].mime;
783 mediacodec->encoder_map[count].type.out_format =
784 _mc_convert_media_format_str_to_int(mediacodec->ini->codec[indx].codec_info[1].format);
788 if (strcmp(mediacodec->ini->codec[indx].codec_info[3].name, "")) {
789 mediacodec->encoder_map[count].id = mediacodec->ini->codec[indx].codec_id;
790 mediacodec->encoder_map[count].hardware = 0;
791 mediacodec->encoder_map[count].type.factory_name = mediacodec->ini->codec[indx].codec_info[3].name;
792 mediacodec->encoder_map[count].type.mime = mediacodec->ini->codec[indx].codec_info[3].mime;
793 mediacodec->encoder_map[count].type.out_format =
794 _mc_convert_media_format_str_to_int(mediacodec->ini->codec[indx].codec_info[3].format);
798 mediacodec->num_supported_encoder = count;
802 void _mc_create_codec_map_from_ini(mc_handle_t *mediacodec, mc_codec_spec_t *spec_emul)
804 int indx = 0, count = 0;
805 int codec_list = mediacodec->ini->codec_list;
807 for (indx = 0; indx < codec_list; indx++) {
808 if (strcmp(mediacodec->ini->codec[indx].codec_info[0].name, "")) {
809 spec_emul[count].codec_id = mediacodec->ini->codec[indx].codec_id;
810 spec_emul[count].codec_type = MEDIACODEC_DECODER | MEDIACODEC_SUPPORT_TYPE_HW;
811 spec_emul[count].port_type = MEDIACODEC_PORT_TYPE_GST;
814 if (strcmp(mediacodec->ini->codec[indx].codec_info[1].name, "")) {
815 spec_emul[count].codec_id = mediacodec->ini->codec[indx].codec_id;
816 spec_emul[count].codec_type = MEDIACODEC_ENCODER | MEDIACODEC_SUPPORT_TYPE_HW;
817 spec_emul[count].port_type = MEDIACODEC_PORT_TYPE_GST;
820 if (strcmp(mediacodec->ini->codec[indx].codec_info[2].name, "")) {
821 spec_emul[count].codec_id = mediacodec->ini->codec[indx].codec_id;
822 spec_emul[count].codec_type = MEDIACODEC_DECODER | MEDIACODEC_SUPPORT_TYPE_SW;
823 spec_emul[count].port_type = MEDIACODEC_PORT_TYPE_GST;
826 if (strcmp(mediacodec->ini->codec[indx].codec_info[3].name, "")) {
827 spec_emul[count].codec_id = mediacodec->ini->codec[indx].codec_id;
828 spec_emul[count].codec_type = MEDIACODEC_ENCODER | MEDIACODEC_SUPPORT_TYPE_SW;
829 spec_emul[count].port_type = MEDIACODEC_PORT_TYPE_GST;
834 mediacodec->ini->num_supported_codecs = count;
835 LOGE("supported codecs :%d", count);
839 void _mc_create_codec_map_from_ini_static(mc_ini_t *ini, mc_codec_spec_t *spec_emul)
841 int indx = 0, count = 0;
842 int codec_list = ini->codec_list;
844 for (indx = 0; indx < codec_list; indx++) {
845 if (strcmp(ini->codec[indx].codec_info[0].name, "")) {
846 spec_emul[count].codec_id = ini->codec[indx].codec_id;
847 spec_emul[count].codec_type = MEDIACODEC_DECODER | MEDIACODEC_SUPPORT_TYPE_HW;
848 spec_emul[count].port_type = MEDIACODEC_PORT_TYPE_GST;
851 if (strcmp(ini->codec[indx].codec_info[1].name, "")) {
852 spec_emul[count].codec_id = ini->codec[indx].codec_id;
853 spec_emul[count].codec_type = MEDIACODEC_ENCODER | MEDIACODEC_SUPPORT_TYPE_HW;
854 spec_emul[count].port_type = MEDIACODEC_PORT_TYPE_GST;
857 if (strcmp(ini->codec[indx].codec_info[2].name, "")) {
858 spec_emul[count].codec_id = ini->codec[indx].codec_id;
859 spec_emul[count].codec_type = MEDIACODEC_DECODER | MEDIACODEC_SUPPORT_TYPE_SW;
860 spec_emul[count].port_type = MEDIACODEC_PORT_TYPE_GST;
863 if (strcmp(ini->codec[indx].codec_info[3].name, "")) {
864 spec_emul[count].codec_id = ini->codec[indx].codec_id;
865 spec_emul[count].codec_type = MEDIACODEC_ENCODER | MEDIACODEC_SUPPORT_TYPE_SW;
866 spec_emul[count].port_type = MEDIACODEC_PORT_TYPE_GST;
871 ini->num_supported_codecs = count;
872 LOGE("supported codecs :%d", count);
876 const int codec_type_to_simple_enumeration(mediacodec_codec_type_e media_codec_id)
878 guint media_codec_id_u = (guint)media_codec_id;
880 switch (media_codec_id_u) {
883 case MEDIACODEC_ALAW:
885 case MEDIACODEC_ULAW:
887 case MEDIACODEC_AMR_NB:
889 case MEDIACODEC_AMR_WB:
891 case MEDIACODEC_G729:
893 case MEDIACODEC_AAC_LC:
895 case MEDIACODEC_AAC_HE:
897 case MEDIACODEC_AAC_HE_PS:
901 case MEDIACODEC_VORBIS:
903 case MEDIACODEC_FLAC:
905 case MEDIACODEC_WMAV1:
907 case MEDIACODEC_WMAV2:
909 case MEDIACODEC_WMAPRO:
911 case MEDIACODEC_WMALSL:
913 case MEDIACODEC_H261:
915 case MEDIACODEC_H263:
917 case MEDIACODEC_H264:
919 case MEDIACODEC_MJPEG:
921 case MEDIACODEC_MPEG1:
923 case MEDIACODEC_MPEG2:
925 case MEDIACODEC_MPEG4:
927 case MEDIACODEC_HEVC:
940 const int simple_to_codec_type_enumeration(codec_type_e codec_id)
942 guint codec_id_u = (guint)codec_id;
944 switch (codec_id_u) {
946 return MEDIACODEC_L16;
948 return MEDIACODEC_ALAW;
950 return MEDIACODEC_ULAW;
952 return MEDIACODEC_AMR_NB;
954 return MEDIACODEC_AMR_WB;
956 return MEDIACODEC_G729;
958 return MEDIACODEC_AAC_LC;
960 return MEDIACODEC_AAC_HE;
962 return MEDIACODEC_AAC_HE_PS;
964 return MEDIACODEC_MP3;
966 return MEDIACODEC_VORBIS;
968 return MEDIACODEC_FLAC;
970 return MEDIACODEC_WMAV1;
972 return MEDIACODEC_WMAV2;
974 return MEDIACODEC_WMAPRO;
976 return MEDIACODEC_WMALSL;
978 return MEDIACODEC_H261;
980 return MEDIACODEC_H263;
982 return MEDIACODEC_H264;
984 return MEDIACODEC_MJPEG;
986 return MEDIACODEC_MPEG1;
988 return MEDIACODEC_MPEG2;
990 return MEDIACODEC_MPEG4;
992 return MEDIACODEC_HEVC;
994 return MEDIACODEC_VP8;
996 return MEDIACODEC_VP9;
998 return MEDIACODEC_VC1;