提交 32aeba12 编写于 作者: K Kifayat ullah 提交者: Michael Niedermayer

mpegtsenc: Fix AC3 Sound issue with Blu-ray Players.

Signed-off-by: NMichael Niedermayer <michaelni@gmx.at>
上级 93d42895
......@@ -921,6 +921,10 @@ static void mpegts_write_pes(AVFormatContext *s, AVStream *st,
st->codec->codec_id == CODEC_ID_MP3 ||
st->codec->codec_id == CODEC_ID_AAC)) {
*q++ = 0xc0;
} else if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO &&
st->codec->codec_id == CODEC_ID_AC3 &&
ts->m2ts_mode) {
*q++ = 0xfd;
} else {
*q++ = 0xbd;
if (st->codec->codec_type == AVMEDIA_TYPE_SUBTITLE) {
......@@ -950,6 +954,17 @@ static void mpegts_write_pes(AVFormatContext *s, AVStream *st,
*/
header_len += 3;
}
/* for Blu-ray AC3 Audio the PES Extension flag should be as follow
* otherwise it will not play sound on blu-ray
*/
if (ts->m2ts_mode &&
st->codec->codec_type == AVMEDIA_TYPE_AUDIO &&
st->codec->codec_id == CODEC_ID_AC3) {
/* set PES_extension_flag */
pes_extension = 1;
flags |= 0x01;
header_len += 3;
}
len = payload_size + header_len + 3;
if (private_code != 0)
len++;
......@@ -982,6 +997,17 @@ static void mpegts_write_pes(AVFormatContext *s, AVStream *st,
*/
*q++ = 0x00 | 0x60;
}
/* For Blu-ray AC3 Audio Setting extended flags */
if (ts->m2ts_mode &&
pes_extension &&
st->codec->codec_id == CODEC_ID_AC3) {
flags = 0x01; /* set PES_extension_flag_2 */
*q++ = flags;
*q++ = 0x80 | 0x01; /* marker bit + extension length */
*q++ = 0x00 | 0x71; /* for AC3 Audio (specifically on blue-rays) */
}
if (private_code != 0)
*q++ = private_code;
is_start = 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册