提交 2dffdc44 编写于 作者: Z Zhang Rui

ijkplayer: fix meta retrieve

上级 80f507eb
......@@ -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;
......
......@@ -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;
......
......@@ -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
......
......@@ -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);
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册