From: Sejun Park Date: Fri, 10 Jun 2016 04:29:52 +0000 (+0900) Subject: move ini paring func. to mediacodec_port X-Git-Tag: submit/tizen/20160613.070227^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=39a8119d7c392a708dddf758f87152a05bca0ac5;p=platform%2Fcore%2Fapi%2Fmediacodec.git move ini paring func. to mediacodec_port Change-Id: I7717353245573132d26d034dd64c9278891f5f3d --- diff --git a/include/media_codec_ini.h b/include/media_codec_ini.h index 75553dc..b51404e 100755 --- a/include/media_codec_ini.h +++ b/include/media_codec_ini.h @@ -19,6 +19,8 @@ #include #include +#include + #ifdef __cplusplus extern "C" { @@ -34,32 +36,42 @@ extern "C" { #define MEDIA_CODEC_MAX_VIDEO_CODEC 100 #define MEDIA_CODEC_MAX_AUDIO_CODEC 100 +typedef struct _codec_list_t codec_list_t; +typedef struct _codec_info_t codec_info_t; +typedef struct _codec_t codec_t; +typedef struct _mc_ini_t mc_ini_t; + +struct _codec_list_t { + gchar cname[MEDIA_CODEC_INI_MAX_STRLEN]; + mediacodec_codec_type_e ctype; +}; typedef enum { - GST_PORT = 0, - FFMPEG_PORT, - CUSTOM_PORT, + GST_PORT = 0, + FFMPEG_PORT, + CUSTOM_PORT, } port_mode; -typedef struct { - gchar name[MEDIA_CODEC_INI_MAX_STRLEN]; - gchar mime[MEDIA_CODEC_INI_MAX_STRLEN]; - gchar format[MEDIA_CODEC_INI_MAX_STRLEN]; -} codec_info_t; +struct _codec_info_t { + gchar name[MEDIA_CODEC_INI_MAX_STRLEN]; + gchar mime[MEDIA_CODEC_INI_MAX_STRLEN]; + gchar format[MEDIA_CODEC_INI_MAX_STRLEN]; +}; -typedef struct { - gint codec_id; - codec_info_t codec_info[MEDIA_CODEC_MAX_CODEC_ROLE]; -} codec_t; +struct _codec_t { + gint codec_id; + codec_info_t codec_info[MEDIA_CODEC_MAX_CODEC_ROLE]; +}; /* @ mark means the item has tested */ -typedef struct __mc_ini { - port_mode port_type; - /* general */ - gchar port_name[MEDIA_CODEC_INI_MAX_STRLEN]; - codec_t codec[MEDIA_CODEC_MAX_CODEC_TYPE]; -} mc_ini_t; +struct _mc_ini_t { + int codec_list; + port_mode port_type; + /* general */ + gchar port_name[MEDIA_CODEC_INI_MAX_STRLEN]; + codec_t codec[MEDIA_CODEC_MAX_CODEC_TYPE]; +}; /*Default sink ini values*/ /* General*/ @@ -68,7 +80,7 @@ typedef struct __mc_ini { /* FIXIT : need smarter way to generate default ini file. */ /* FIXIT : finally, it should be an external file */ #define MEDIA_CODEC_DEFAULT_INI \ - "\ +"\ [general] \n\ \n\ ;Add general config parameters here\n\ @@ -96,6 +108,8 @@ media_codec_port = GST_PORT \n\ " int mc_ini_load(mc_ini_t *ini); +media_format_mimetype_e _mc_convert_media_format_str_to_int(char *sformat); + #ifdef __cplusplus } diff --git a/include/media_codec_port.h b/include/media_codec_port.h index 5d3975c..e31dfd8 100755 --- a/include/media_codec_port.h +++ b/include/media_codec_port.h @@ -257,6 +257,10 @@ int mc_unset_buffer_status_cb(MMHandleType mediacodec); int mc_set_supported_codec_cb(MMHandleType mediacodec, mediacodec_supported_codec_cb callback, void* user_data); int _mediacodec_foreach_supported_codec(MMHandleType mediacodec, mediacodec_supported_codec_cb callback, void* user_data); +void _mc_create_codec_map_from_ini(mc_handle_t *mc_handle, mc_codec_spec_t *spec_emul); +void _mc_create_decoder_map_from_ini(mc_handle_t *mc_handle); +void _mc_create_encoder_map_from_ini(mc_handle_t *mc_handle); + #ifdef __cplusplus } #endif diff --git a/src/media_codec_ini.c b/src/media_codec_ini.c index 79d5ccc..1bc2c86 100755 --- a/src/media_codec_ini.c +++ b/src/media_codec_ini.c @@ -48,11 +48,6 @@ #define CNAME_SIZE 512 -typedef struct { - gchar cname[MEDIA_CODEC_INI_MAX_STRLEN]; - mediacodec_codec_type_e ctype; -} codec_list_t; - static codec_list_t general_codec_list[] = { {"h261", MEDIACODEC_H261}, {"h263", MEDIACODEC_H263}, @@ -302,7 +297,10 @@ int mc_ini_load(mc_ini_t *ini) int i = 0; dictionary *dict = NULL; - static const int codec_list = sizeof(general_codec_list) / sizeof(general_codec_list[0]); + /* get ini values */ + memset(ini, 0, sizeof(mc_ini_t)); + + ini->codec_list = sizeof(general_codec_list) / sizeof(general_codec_list[0]); _mc_ini_check_ini_status(); @@ -325,14 +323,12 @@ int mc_ini_load(mc_ini_t *ini) #endif } - /* get ini values */ - memset(ini, 0, sizeof(mc_ini_t)); if (dict) {/* if dict is available */ /* general */ MEDIA_CODEC_INI_GET_STRING(dict, ini->port_name, "port_in_use:media_codec_port", DEFAULT_PORT); /* codec */ - for (i = 0; i < codec_list; i++) { + for (i = 0; i < ini->codec_list; i++) { memset(cname, 0x00, CNAME_SIZE); snprintf(cname, CNAME_SIZE, "%s", general_codec_list[i].cname); int len = strlen(cname); @@ -351,7 +347,7 @@ int mc_ini_load(mc_ini_t *ini) LOGW("failed to load ini. using hardcoded default\n"); /* general */ snprintf(ini->port_name, sizeof(ini->port_name), "%s", DEFAULT_PORT); - for (i = 0; i < codec_list; i++) { + for (i = 0; i < ini->codec_list; i++) { MEDIA_CODEC_GET_DEFAULT_LIST(ini->codec[i].codec_info[0].name, DEFAULT_HW_DECODER_NAME); MEDIA_CODEC_GET_DEFAULT_LIST(ini->codec[i].codec_info[0].mime, DEFAULT_HW_DECODER_MIME); MEDIA_CODEC_GET_DEFAULT_LIST(ini->codec[i].codec_info[0].format, DEFAULT_HW_DECODER_FORMAT); @@ -379,7 +375,7 @@ int mc_ini_load(mc_ini_t *ini) } LOGD("The port is set to [%s] [%d]\n", ini->port_name, ini->port_type); - for (i = 0; i < codec_list; i++) { + for (i = 0; i < ini->codec_list; i++) { memset(cname, 0x00, CNAME_SIZE); snprintf(cname, CNAME_SIZE, "%s", general_codec_list[i].cname); int len = strlen(cname); @@ -449,100 +445,4 @@ static gboolean _generate_default_ini(void) return TRUE; } #endif - -void _mc_create_decoder_map_from_ini(mc_handle_t *mediacodec) -{ - int indx = 0, count = 0; - int codec_list = sizeof(general_codec_list) / sizeof(general_codec_list[0]); - for (indx = 0; indx < codec_list; indx++) { - if (strcmp(mediacodec->ini.codec[indx].codec_info[0].name, "")) { - mediacodec->decoder_map[count].id = mediacodec->ini.codec[indx].codec_id; - mediacodec->decoder_map[count].hardware = 1; /* hardware */ - mediacodec->decoder_map[count].type.factory_name = mediacodec->ini.codec[indx].codec_info[0].name; - mediacodec->decoder_map[count].type.mime = mediacodec->ini.codec[indx].codec_info[0].mime; - mediacodec->decoder_map[count].type.out_format = - _mc_convert_media_format_str_to_int(mediacodec->ini.codec[indx].codec_info[0].format); - count++; - } - - if (strcmp(mediacodec->ini.codec[indx].codec_info[2].name, "")) { - mediacodec->decoder_map[count].id = mediacodec->ini.codec[indx].codec_id; - mediacodec->decoder_map[count].hardware = 0; /* software */ - mediacodec->decoder_map[count].type.factory_name = mediacodec->ini.codec[indx].codec_info[2].name; - mediacodec->decoder_map[count].type.mime = mediacodec->ini.codec[indx].codec_info[2].mime; - mediacodec->decoder_map[count].type.out_format = - _mc_convert_media_format_str_to_int(mediacodec->ini.codec[indx].codec_info[2].format); - count++; - } - } - mediacodec->num_supported_decoder = count; - return; - -} - -void _mc_create_encoder_map_from_ini(mc_handle_t *mediacodec) -{ - int indx = 0, count = 0; - int codec_list = sizeof(general_codec_list) / sizeof(general_codec_list[0]); - - for (indx = 0; indx < codec_list; indx++) { - if (strcmp(mediacodec->ini.codec[indx].codec_info[1].name, "")) { - mediacodec->encoder_map[count].id = mediacodec->ini.codec[indx].codec_id; - mediacodec->encoder_map[count].hardware = 1; - mediacodec->encoder_map[count].type.factory_name = mediacodec->ini.codec[indx].codec_info[1].name; - mediacodec->encoder_map[count].type.mime = mediacodec->ini.codec[indx].codec_info[1].mime; - mediacodec->encoder_map[count].type.out_format = - _mc_convert_media_format_str_to_int(mediacodec->ini.codec[indx].codec_info[1].format); - count++; - } - - if (strcmp(mediacodec->ini.codec[indx].codec_info[3].name, "")) { - mediacodec->encoder_map[count].id = mediacodec->ini.codec[indx].codec_id; - mediacodec->encoder_map[count].hardware = 0; - mediacodec->encoder_map[count].type.factory_name = mediacodec->ini.codec[indx].codec_info[3].name; - mediacodec->encoder_map[count].type.mime = mediacodec->ini.codec[indx].codec_info[3].mime; - mediacodec->encoder_map[count].type.out_format = - _mc_convert_media_format_str_to_int(mediacodec->ini.codec[indx].codec_info[3].format); - count++; - } - } - mediacodec->num_supported_encoder = count; - return; - -} -void _mc_create_codec_map_from_ini(mc_handle_t *mediacodec, mc_codec_spec_t *spec_emul) -{ - int indx = 0, count = 0; - int codec_list = sizeof(general_codec_list) / sizeof(general_codec_list[0]); - for (indx = 0; indx < codec_list; indx++) { - if (strcmp(mediacodec->ini.codec[indx].codec_info[0].name, "")) { - spec_emul[count].codec_id = mediacodec->ini.codec[indx].codec_id; - spec_emul[count].codec_type = MEDIACODEC_DECODER | MEDIACODEC_SUPPORT_TYPE_HW; - spec_emul[count].port_type = MEDIACODEC_PORT_TYPE_GST; - count++; - } - if (strcmp(mediacodec->ini.codec[indx].codec_info[1].name, "")) { - spec_emul[count].codec_id = mediacodec->ini.codec[indx].codec_id; - spec_emul[count].codec_type = MEDIACODEC_ENCODER | MEDIACODEC_SUPPORT_TYPE_HW; - spec_emul[count].port_type = MEDIACODEC_PORT_TYPE_GST; - count++; - } - if (strcmp(mediacodec->ini.codec[indx].codec_info[2].name, "")) { - spec_emul[count].codec_id = mediacodec->ini.codec[indx].codec_id; - spec_emul[count].codec_type = MEDIACODEC_DECODER | MEDIACODEC_SUPPORT_TYPE_SW; - spec_emul[count].port_type = MEDIACODEC_PORT_TYPE_GST; - count++; - } - if (strcmp(mediacodec->ini.codec[indx].codec_info[3].name, "")) { - spec_emul[count].codec_id = mediacodec->ini.codec[indx].codec_id; - spec_emul[count].codec_type = MEDIACODEC_ENCODER | MEDIACODEC_SUPPORT_TYPE_SW; - spec_emul[count].port_type = MEDIACODEC_PORT_TYPE_GST; - count++; - } - } - - mediacodec->num_supported_codecs = count; - return; -} - #endif /* #ifdef _MEDIA_CODEC_INI_C_ */ diff --git a/src/media_codec_port.c b/src/media_codec_port.c index 4e94746..468efde 100755 --- a/src/media_codec_port.c +++ b/src/media_codec_port.c @@ -749,5 +749,101 @@ int mc_get_packet_pool(MMHandleType mediacodec, media_packet_pool_h *pool) return ret; } +void _mc_create_decoder_map_from_ini(mc_handle_t *mediacodec) +{ + int indx = 0, count = 0; + int codec_list = mediacodec->ini.codec_list; + for (indx = 0; indx < codec_list; indx++) { + if (strcmp(mediacodec->ini.codec[indx].codec_info[0].name, "")) { + mediacodec->decoder_map[count].id = mediacodec->ini.codec[indx].codec_id; + mediacodec->decoder_map[count].hardware = 1; /* hardware */ + mediacodec->decoder_map[count].type.factory_name = mediacodec->ini.codec[indx].codec_info[0].name; + mediacodec->decoder_map[count].type.mime = mediacodec->ini.codec[indx].codec_info[0].mime; + mediacodec->decoder_map[count].type.out_format = + _mc_convert_media_format_str_to_int(mediacodec->ini.codec[indx].codec_info[0].format); + count++; + } + + if (strcmp(mediacodec->ini.codec[indx].codec_info[2].name, "")) { + mediacodec->decoder_map[count].id = mediacodec->ini.codec[indx].codec_id; + mediacodec->decoder_map[count].hardware = 0; /* software */ + mediacodec->decoder_map[count].type.factory_name = mediacodec->ini.codec[indx].codec_info[2].name; + mediacodec->decoder_map[count].type.mime = mediacodec->ini.codec[indx].codec_info[2].mime; + mediacodec->decoder_map[count].type.out_format = + _mc_convert_media_format_str_to_int(mediacodec->ini.codec[indx].codec_info[2].format); + count++; + } + } + mediacodec->num_supported_decoder = count; + return; + +} + +void _mc_create_encoder_map_from_ini(mc_handle_t *mediacodec) +{ + int indx = 0, count = 0; + int codec_list = mediacodec->ini.codec_list; + + for (indx = 0; indx < codec_list; indx++) { + if (strcmp(mediacodec->ini.codec[indx].codec_info[1].name, "")) { + mediacodec->encoder_map[count].id = mediacodec->ini.codec[indx].codec_id; + mediacodec->encoder_map[count].hardware = 1; + mediacodec->encoder_map[count].type.factory_name = mediacodec->ini.codec[indx].codec_info[1].name; + mediacodec->encoder_map[count].type.mime = mediacodec->ini.codec[indx].codec_info[1].mime; + mediacodec->encoder_map[count].type.out_format = + _mc_convert_media_format_str_to_int(mediacodec->ini.codec[indx].codec_info[1].format); + count++; + } + + if (strcmp(mediacodec->ini.codec[indx].codec_info[3].name, "")) { + mediacodec->encoder_map[count].id = mediacodec->ini.codec[indx].codec_id; + mediacodec->encoder_map[count].hardware = 0; + mediacodec->encoder_map[count].type.factory_name = mediacodec->ini.codec[indx].codec_info[3].name; + mediacodec->encoder_map[count].type.mime = mediacodec->ini.codec[indx].codec_info[3].mime; + mediacodec->encoder_map[count].type.out_format = + _mc_convert_media_format_str_to_int(mediacodec->ini.codec[indx].codec_info[3].format); + count++; + } + } + mediacodec->num_supported_encoder = count; + return; + +} +void _mc_create_codec_map_from_ini(mc_handle_t *mediacodec, mc_codec_spec_t *spec_emul) +{ + int indx = 0, count = 0; + int codec_list = mediacodec->ini.codec_list; + + for (indx = 0; indx < codec_list; indx++) { + if (strcmp(mediacodec->ini.codec[indx].codec_info[0].name, "")) { + spec_emul[count].codec_id = mediacodec->ini.codec[indx].codec_id; + spec_emul[count].codec_type = MEDIACODEC_DECODER | MEDIACODEC_SUPPORT_TYPE_HW; + spec_emul[count].port_type = MEDIACODEC_PORT_TYPE_GST; + count++; + } + if (strcmp(mediacodec->ini.codec[indx].codec_info[1].name, "")) { + spec_emul[count].codec_id = mediacodec->ini.codec[indx].codec_id; + spec_emul[count].codec_type = MEDIACODEC_ENCODER | MEDIACODEC_SUPPORT_TYPE_HW; + spec_emul[count].port_type = MEDIACODEC_PORT_TYPE_GST; + count++; + } + if (strcmp(mediacodec->ini.codec[indx].codec_info[2].name, "")) { + spec_emul[count].codec_id = mediacodec->ini.codec[indx].codec_id; + spec_emul[count].codec_type = MEDIACODEC_DECODER | MEDIACODEC_SUPPORT_TYPE_SW; + spec_emul[count].port_type = MEDIACODEC_PORT_TYPE_GST; + count++; + } + if (strcmp(mediacodec->ini.codec[indx].codec_info[3].name, "")) { + spec_emul[count].codec_id = mediacodec->ini.codec[indx].codec_id; + spec_emul[count].codec_type = MEDIACODEC_ENCODER | MEDIACODEC_SUPPORT_TYPE_SW; + spec_emul[count].port_type = MEDIACODEC_PORT_TYPE_GST; + count++; + } + } + + mediacodec->num_supported_codecs = count; + LOGE("supported codecs :%d", count); + return; +}