diff --git a/ijkmedia/ijkplayer/ff_ffplay.c b/ijkmedia/ijkplayer/ff_ffplay.c index c9bc01615baa52528989bc89122612ecc9bdc09e..87aa9c365a7e3ac0c988820bb426209bbb45a393 100644 --- a/ijkmedia/ijkplayer/ff_ffplay.c +++ b/ijkmedia/ijkplayer/ff_ffplay.c @@ -2320,9 +2320,9 @@ static int read_thread(void *arg) #endif av_dump_format(ic, 0, is->filename, 0); ijkmeta_set_avformat_context_l(ffp->meta, ic); - if (st_index[AVMEDIA_TYPE_VIDEO] > 0) + if (st_index[AVMEDIA_TYPE_VIDEO] >= 0) ijkmeta_set_int64_l(ffp->meta, IJKM_KEY_VIDEO_STREAM, st_index[AVMEDIA_TYPE_VIDEO]); - if (st_index[AVMEDIA_TYPE_AUDIO] > 0) + if (st_index[AVMEDIA_TYPE_AUDIO] >= 0) ijkmeta_set_int64_l(ffp->meta, IJKM_KEY_AUDIO_STREAM, st_index[AVMEDIA_TYPE_AUDIO]); is->show_mode = ffp->show_mode; diff --git a/ijkmedia/ijkplayer/ijkmeta.c b/ijkmedia/ijkplayer/ijkmeta.c index 6c55bde2a60b162f71ab861ca90ac4cae10837b5..d3feed0a4df2002f021e5eece0190d394baa0080 100644 --- a/ijkmedia/ijkplayer/ijkmeta.c +++ b/ijkmedia/ijkplayer/ijkmeta.c @@ -252,9 +252,9 @@ void ijkmeta_set_avformat_context_l(IjkMediaMeta *meta, AVFormatContext *ic) } } -char *ijkmeta_get_string_l(IjkMediaMeta *meta, const char *name) +const char *ijkmeta_get_string_l(IjkMediaMeta *meta, const char *name) { - if (!meta || meta->dict) + if (!meta || !meta->dict) return NULL; AVDictionaryEntry *entry = av_dict_get(meta->dict, name, NULL, 0); @@ -266,7 +266,7 @@ char *ijkmeta_get_string_l(IjkMediaMeta *meta, const char *name) int64_t ijkmeta_get_int64_l(IjkMediaMeta *meta, const char *name, int64_t defaultValue) { - if (!meta || meta->dict) + if (!meta || !meta->dict) return defaultValue; AVDictionaryEntry *entry = av_dict_get(meta->dict, name, NULL, 0); @@ -278,7 +278,7 @@ int64_t ijkmeta_get_int64_l(IjkMediaMeta *meta, const char *name, int64_t defaul size_t ijkmeta_get_children_count_l(IjkMediaMeta *meta) { - if (!meta || meta->children) + if (!meta || !meta->children) return 0; return meta->children_count; diff --git a/ijkmedia/ijkplayer/ijkmeta.h b/ijkmedia/ijkplayer/ijkmeta.h index cec298c83a89d40724027ac1b95f84e1a35ef704..9f04448214492bb7a11ba0db69168617b85c570e 100644 --- a/ijkmedia/ijkplayer/ijkmeta.h +++ b/ijkmedia/ijkplayer/ijkmeta.h @@ -73,7 +73,7 @@ void ijkmeta_set_string_l(IjkMediaMeta *meta, const char *name, const char *valu void ijkmeta_set_avformat_context_l(IjkMediaMeta *meta, AVFormatContext *ic); // must be freed with free(); -char *ijkmeta_get_string_l(IjkMediaMeta *meta, const char *name); +const char *ijkmeta_get_string_l(IjkMediaMeta *meta, const char *name); int64_t ijkmeta_get_int64_l(IjkMediaMeta *meta, const char *name, int64_t defaultValue); size_t ijkmeta_get_children_count_l(IjkMediaMeta *meta); // do not free diff --git a/ios/IJKMediaPlayer/IJKMediaPlayer/IJKFFMoviePlayerController.m b/ios/IJKMediaPlayer/IJKMediaPlayer/IJKFFMoviePlayerController.m index 283350c6958b7a6d441d5f419e11f11f786b35a1..084dce3465c6659089d16312ac1b5e65d9a98f61 100644 --- a/ios/IJKMediaPlayer/IJKMediaPlayer/IJKFFMoviePlayerController.m +++ b/ios/IJKMediaPlayer/IJKMediaPlayer/IJKFFMoviePlayerController.m @@ -426,10 +426,9 @@ inline static void fillMetaInternal(NSMutableDictionary *meta, IjkMediaMeta *raw return; NSString *key = [NSString stringWithUTF8String:name]; - char *value = ijkmeta_get_string_l(rawMeta, name); + const char *value = ijkmeta_get_string_l(rawMeta, name); if (value) { [meta setObject:[NSString stringWithUTF8String:value] forKey:key]; - free(value); } else if (defaultValue){ [meta setObject:defaultValue forKey:key]; } else { @@ -477,8 +476,8 @@ inline static void fillMetaInternal(NSMutableDictionary *meta, IjkMediaMeta *raw fillMetaInternal(newMediaMeta, rawMeta, IJKM_KEY_START_US, nil); fillMetaInternal(newMediaMeta, rawMeta, IJKM_KEY_BITRATE, nil); - fillMetaInternal(newMediaMeta, rawMeta, IJKM_KEY_VIDEO_STREAM, @"-1"); - fillMetaInternal(newMediaMeta, rawMeta, IJKM_KEY_AUDIO_STREAM, @"-1"); + fillMetaInternal(newMediaMeta, rawMeta, IJKM_KEY_VIDEO_STREAM, nil); + fillMetaInternal(newMediaMeta, rawMeta, IJKM_KEY_AUDIO_STREAM, nil); int64_t video_stream = ijkmeta_get_int64_l(rawMeta, IJKM_KEY_VIDEO_STREAM, -1); int64_t audio_stream = ijkmeta_get_int64_l(rawMeta, IJKM_KEY_AUDIO_STREAM, -1); @@ -492,26 +491,28 @@ inline static void fillMetaInternal(NSMutableDictionary *meta, IjkMediaMeta *raw if (streamRawMeta) { fillMetaInternal(streamMeta, streamRawMeta, IJKM_KEY_TYPE, k_IJKM_VAL_TYPE__UNKNOWN); - char *type = ijkmeta_get_string_l(rawMeta, IJKM_KEY_TYPE); + const char *type = ijkmeta_get_string_l(streamRawMeta, IJKM_KEY_TYPE); if (type) { - fillMetaInternal(streamMeta, streamRawMeta, IJKM_KEY_CODEC_NAME, @""); - fillMetaInternal(streamMeta, streamRawMeta, IJKM_KEY_CODEC_PROFILE, @""); + fillMetaInternal(streamMeta, streamRawMeta, IJKM_KEY_CODEC_NAME, nil); + fillMetaInternal(streamMeta, streamRawMeta, IJKM_KEY_CODEC_PROFILE, nil); + fillMetaInternal(streamMeta, streamRawMeta, IJKM_KEY_CODEC_LONG_NAME, nil); + fillMetaInternal(streamMeta, streamRawMeta, IJKM_KEY_BITRATE, nil); if (0 == strcmp(type, IJKM_VAL_TYPE__VIDEO)) { - fillMetaInternal(streamMeta, rawMeta, IJKM_KEY_WIDTH, @""); - fillMetaInternal(streamMeta, rawMeta, IJKM_KEY_HEIGHT, @""); - fillMetaInternal(streamMeta, rawMeta, IJKM_KEY_FPS_NUM, @""); - fillMetaInternal(streamMeta, rawMeta, IJKM_KEY_FPS_DEN, @""); - fillMetaInternal(streamMeta, rawMeta, IJKM_KEY_TBR_NUM, @""); - fillMetaInternal(streamMeta, rawMeta, IJKM_KEY_TBR_DEN, @""); - fillMetaInternal(streamMeta, rawMeta, IJKM_KEY_SAR_NUM, @""); - fillMetaInternal(streamMeta, rawMeta, IJKM_KEY_SAR_DEN, @""); - - if (video_stream > 0 && video_stream == i) { + fillMetaInternal(streamMeta, streamRawMeta, IJKM_KEY_WIDTH, nil); + fillMetaInternal(streamMeta, streamRawMeta, IJKM_KEY_HEIGHT, nil); + fillMetaInternal(streamMeta, streamRawMeta, IJKM_KEY_FPS_NUM, nil); + fillMetaInternal(streamMeta, streamRawMeta, IJKM_KEY_FPS_DEN, nil); + fillMetaInternal(streamMeta, streamRawMeta, IJKM_KEY_TBR_NUM, nil); + fillMetaInternal(streamMeta, streamRawMeta, IJKM_KEY_TBR_DEN, nil); + fillMetaInternal(streamMeta, streamRawMeta, IJKM_KEY_SAR_NUM, nil); + fillMetaInternal(streamMeta, streamRawMeta, IJKM_KEY_SAR_DEN, nil); + + if (video_stream == i) { _videoMeta = streamMeta; - int64_t fps_num = ijkmeta_get_int64_l(rawMeta, IJKM_KEY_FPS_NUM, 0); - int64_t fps_den = ijkmeta_get_int64_l(rawMeta, IJKM_KEY_FPS_DEN, 0); + int64_t fps_num = ijkmeta_get_int64_l(streamRawMeta, IJKM_KEY_FPS_NUM, 0); + int64_t fps_den = ijkmeta_get_int64_l(streamRawMeta, IJKM_KEY_FPS_DEN, 0); if (fps_num > 0 && fps_den > 0) { _fpsInMeta = ((CGFloat)(fps_num)) / fps_den; NSLog(@"fps in meta %f\n", _fpsInMeta); @@ -519,17 +520,14 @@ inline static void fillMetaInternal(NSMutableDictionary *meta, IjkMediaMeta *raw } } else if (0 == strcmp(type, IJKM_VAL_TYPE__AUDIO)) { - fillMetaInternal(streamMeta, rawMeta, IJKM_KEY_SAMPLE_RATE, @""); - fillMetaInternal(streamMeta, rawMeta, IJKM_KEY_CHANNEL_LAYOUT, @""); + fillMetaInternal(streamMeta, streamRawMeta, IJKM_KEY_SAMPLE_RATE, nil); + fillMetaInternal(streamMeta, streamRawMeta, IJKM_KEY_CHANNEL_LAYOUT, nil); - if (audio_stream > 0 && audio_stream == i) { + if (audio_stream == i) { _audioMeta = streamMeta; } - } else { - } - free(type); } }