From 2dffdc4455fe0dc2797ec5ec2cf382f374c92368 Mon Sep 17 00:00:00 2001 From: Zhang Rui Date: Tue, 30 Dec 2014 03:56:08 +0800 Subject: [PATCH] ijkplayer: fix meta retrieve --- ijkmedia/ijkplayer/ff_ffplay.c | 4 +- ijkmedia/ijkplayer/ijkmeta.c | 8 ++-- ijkmedia/ijkplayer/ijkmeta.h | 2 +- .../IJKFFMoviePlayerController.m | 48 +++++++++---------- 4 files changed, 30 insertions(+), 32 deletions(-) diff --git a/ijkmedia/ijkplayer/ff_ffplay.c b/ijkmedia/ijkplayer/ff_ffplay.c index c9bc0161..87aa9c36 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 6c55bde2..d3feed0a 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 cec298c8..9f044482 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 283350c6..084dce34 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); } } -- GitLab