mpegtsenc: handle multiple language tags per stream
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
This commit is contained in:
parent
89e568feec
commit
435cebd015
@ -283,12 +283,24 @@ static void mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
|
||||
/* write optional descriptors here */
|
||||
switch(st->codec->codec_type) {
|
||||
case AVMEDIA_TYPE_AUDIO:
|
||||
if (lang && strlen(lang->value) == 3) {
|
||||
if (lang) {
|
||||
char *p;
|
||||
char *next = lang->value;
|
||||
uint8_t *len_ptr;
|
||||
|
||||
*q++ = 0x0a; /* ISO 639 language descriptor */
|
||||
*q++ = 4;
|
||||
*q++ = lang->value[0];
|
||||
*q++ = lang->value[1];
|
||||
*q++ = lang->value[2];
|
||||
len_ptr = q++;
|
||||
*len_ptr = 0;
|
||||
|
||||
for (p = lang->value; next && *len_ptr < 255 / 4 * 4; p = next + 1) {
|
||||
next = strchr(p, ',');
|
||||
if (strlen(p) != 3 && (!next || next != p + 3))
|
||||
continue; /* not a 3-letter code */
|
||||
|
||||
*q++ = *p++;
|
||||
*q++ = *p++;
|
||||
*q++ = *p++;
|
||||
|
||||
if (st->disposition & AV_DISPOSITION_CLEAN_EFFECTS)
|
||||
*q++ = 0x01;
|
||||
else if (st->disposition & AV_DISPOSITION_HEARING_IMPAIRED)
|
||||
@ -297,6 +309,12 @@ static void mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
|
||||
*q++ = 0x03;
|
||||
else
|
||||
*q++ = 0; /* undefined type */
|
||||
|
||||
*len_ptr += 4;
|
||||
}
|
||||
|
||||
if (*len_ptr == 0)
|
||||
q -= 2; /* no language codes were written */
|
||||
}
|
||||
break;
|
||||
case AVMEDIA_TYPE_SUBTITLE:
|
||||
|
Loading…
Reference in New Issue
Block a user