Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
avformat/mpegts: set AV_DISPOSITION_DESCRIPTIONS for OIPF cases
1. an audio component with an ISO_639_language_descriptor in the PMT with the
audio_type field set to 0x03
2. a supplementary_audio_descriptor with the editorial_classification field set
to 0x01
3. an ac-3_descriptor or an enhanced_ac-3_descriptor with a component_type field
with the service_type flags set to Visually Impaired

Tested-by: Łukasz Krzciuk <lkrzciuk@vewd.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
  • Loading branch information
Łukasz Krzciuk authored and michaelni committed Apr 26, 2018
1 parent 05c0f62 commit 4833050
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions libavformat/mpegts.c
Expand Up @@ -1835,6 +1835,7 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type
break;
case 0x03:
st->disposition |= AV_DISPOSITION_VISUAL_IMPAIRED;
st->disposition |= AV_DISPOSITION_DESCRIPTIONS;
break;
}
}
Expand Down Expand Up @@ -1910,6 +1911,7 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type
switch ((flags >> 2) & 0x1F) { /* editorial_classification */
case 0x01:
st->disposition |= AV_DISPOSITION_VISUAL_IMPAIRED;
st->disposition |= AV_DISPOSITION_DESCRIPTIONS;
break;
case 0x02:
st->disposition |= AV_DISPOSITION_HEARING_IMPAIRED;
Expand All @@ -1934,6 +1936,34 @@ int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type
}
}
break;
case 0x6a: /* ac-3_descriptor */
{
int component_type_flag = get8(pp, desc_end) & (1 << 7);
if (component_type_flag) {
int component_type = get8(pp, desc_end);
int service_type_mask = 0x38; // 0b00111000
int service_type = ((component_type & service_type_mask) >> 3);
if (service_type == 0x02 /* 0b010 */) {
st->disposition |= AV_DISPOSITION_DESCRIPTIONS;
av_log(ts->stream, AV_LOG_DEBUG, "New track disposition for id %u: %u\n", st->id, st->disposition);
}
}
}
break;
case 0x7a: /* enhanced_ac-3_descriptor */
{
int component_type_flag = get8(pp, desc_end) & (1 << 7);
if (component_type_flag) {
int component_type = get8(pp, desc_end);
int service_type_mask = 0x38; // 0b00111000
int service_type = ((component_type & service_type_mask) >> 3);
if (service_type == 0x02 /* 0b010 */) {
st->disposition |= AV_DISPOSITION_DESCRIPTIONS;
av_log(ts->stream, AV_LOG_DEBUG, "New track disposition for id %u: %u\n", st->id, st->disposition);
}
}
}
break;
default:
break;
}
Expand Down

0 comments on commit 4833050

Please sign in to comment.