|
|
@@ -558,6 +558,8 @@ static int mov_read_hdlr(MOVContext *c, AVIOContext *pb, MOVAtom atom) |
|
|
AVStream *st; |
|
|
AVStream *st; |
|
|
uint32_t type; |
|
|
uint32_t type; |
|
|
uint32_t av_unused ctype; |
|
|
uint32_t av_unused ctype; |
|
|
|
|
|
int64_t title_size; |
|
|
|
|
|
char *title_str; |
|
|
|
|
|
|
|
|
if (c->fc->nb_streams < 1) // meta before first trak |
|
|
if (c->fc->nb_streams < 1) // meta before first trak |
|
|
return 0; |
|
|
return 0; |
|
|
@@ -587,6 +589,20 @@ static int mov_read_hdlr(MOVContext *c, AVIOContext *pb, MOVAtom atom) |
|
|
avio_rb32(pb); /* component flags */ |
|
|
avio_rb32(pb); /* component flags */ |
|
|
avio_rb32(pb); /* component flags mask */ |
|
|
avio_rb32(pb); /* component flags mask */ |
|
|
|
|
|
|
|
|
|
|
|
title_size = atom.size - 24; |
|
|
|
|
|
if (title_size > 0) { |
|
|
|
|
|
title_str = av_malloc(title_size + 1); /* Add null terminator */ |
|
|
|
|
|
if (!title_str) |
|
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
|
avio_read(pb, title_str, title_size); |
|
|
|
|
|
title_str[title_size] = 0; |
|
|
|
|
|
if (title_str[0]) { |
|
|
|
|
|
int off = (!c->isom && title_str[0] == title_size - 1); |
|
|
|
|
|
av_dict_set(&st->metadata, "handler_name", title_str + off, 0); |
|
|
|
|
|
} |
|
|
|
|
|
av_freep(&title_str); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
return 0; |
|
|
return 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|