|
|
|
@ -891,7 +891,8 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type |
|
|
|
|
{ |
|
|
|
|
const uint8_t *desc_end; |
|
|
|
|
int desc_len, desc_tag; |
|
|
|
|
char language[4]; |
|
|
|
|
char language[252]; |
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
desc_tag = get8(pp, desc_list_end); |
|
|
|
|
if (desc_tag < 0) |
|
|
|
@ -960,16 +961,21 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type |
|
|
|
|
av_metadata_set2(&st->metadata, "language", language, 0); |
|
|
|
|
break; |
|
|
|
|
case 0x0a: /* ISO 639 language descriptor */ |
|
|
|
|
language[0] = get8(pp, desc_end); |
|
|
|
|
language[1] = get8(pp, desc_end); |
|
|
|
|
language[2] = get8(pp, desc_end); |
|
|
|
|
language[3] = 0; |
|
|
|
|
av_metadata_set2(&st->metadata, "language", language, 0); |
|
|
|
|
for (i = 0; i + 4 <= desc_len; i += 4) { |
|
|
|
|
language[i + 0] = get8(pp, desc_end); |
|
|
|
|
language[i + 1] = get8(pp, desc_end); |
|
|
|
|
language[i + 2] = get8(pp, desc_end); |
|
|
|
|
language[i + 3] = ','; |
|
|
|
|
switch (get8(pp, desc_end)) { |
|
|
|
|
case 0x01: st->disposition |= AV_DISPOSITION_CLEAN_EFFECTS; break; |
|
|
|
|
case 0x02: st->disposition |= AV_DISPOSITION_HEARING_IMPAIRED; break; |
|
|
|
|
case 0x03: st->disposition |= AV_DISPOSITION_VISUAL_IMPAIRED; break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (i) { |
|
|
|
|
language[i - 1] = 0; |
|
|
|
|
av_metadata_set2(&st->metadata, "language", language, 0); |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
case 0x05: /* registration descriptor */ |
|
|
|
|
st->codec->codec_tag = bytestream_get_le32(pp); |
|
|
|
|