avformat/mpegtsenc: factorize determining pes stream id

Signed-off-by: Marton Balint <cus@passwd.hu>
pull/362/head
Marton Balint 4 years ago
parent b9fff6e15e
commit 3f27021143
  1. 60
      libavformat/mpegtsenc.c

@ -1288,6 +1288,36 @@ static uint8_t *get_ts_payload_start(uint8_t *pkt)
return pkt + 4;
}
static int get_pes_stream_id(AVFormatContext *s, AVStream *st, int stream_id, int *async)
{
MpegTSWrite *ts = s->priv_data;
*async = 0;
if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
if (st->codecpar->codec_id == AV_CODEC_ID_DIRAC)
return STREAM_ID_EXTENDED_STREAM_ID;
else
return STREAM_ID_VIDEO_STREAM_0;
} else if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO &&
(st->codecpar->codec_id == AV_CODEC_ID_MP2 ||
st->codecpar->codec_id == AV_CODEC_ID_MP3 ||
st->codecpar->codec_id == AV_CODEC_ID_AAC)) {
return STREAM_ID_AUDIO_STREAM_0;
} else if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO &&
st->codecpar->codec_id == AV_CODEC_ID_AC3 &&
ts->m2ts_mode) {
return STREAM_ID_EXTENDED_STREAM_ID;
} else if (st->codecpar->codec_type == AVMEDIA_TYPE_DATA &&
st->codecpar->codec_id == AV_CODEC_ID_TIMED_ID3) {
return STREAM_ID_PRIVATE_STREAM_1;
} else if (st->codecpar->codec_type == AVMEDIA_TYPE_DATA) {
if (stream_id == STREAM_ID_PRIVATE_STREAM_1) /* asynchronous KLV */
*async = 1;
return stream_id != -1 ? stream_id : STREAM_ID_METADATA_STREAM;
} else {
return STREAM_ID_PRIVATE_STREAM_1;
}
}
/* Add a PES header to the front of the payload, and segment into an integer
* number of TS packets. The final TS packet is padded using an oversized
* adaptation header to exactly fill the last TS packet.
@ -1410,35 +1440,15 @@ static void mpegts_write_pes(AVFormatContext *s, AVStream *st,
if (is_start) {
int pes_extension = 0;
int pes_header_stuffing_bytes = 0;
int async;
/* write PES header */
*q++ = 0x00;
*q++ = 0x00;
*q++ = 0x01;
if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
if (st->codecpar->codec_id == AV_CODEC_ID_DIRAC)
*q++ = STREAM_ID_EXTENDED_STREAM_ID;
else
*q++ = STREAM_ID_VIDEO_STREAM_0;
} else if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO &&
(st->codecpar->codec_id == AV_CODEC_ID_MP2 ||
st->codecpar->codec_id == AV_CODEC_ID_MP3 ||
st->codecpar->codec_id == AV_CODEC_ID_AAC)) {
*q++ = STREAM_ID_AUDIO_STREAM_0;
} else if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO &&
st->codecpar->codec_id == AV_CODEC_ID_AC3 &&
ts->m2ts_mode) {
*q++ = STREAM_ID_EXTENDED_STREAM_ID;
} else if (st->codecpar->codec_type == AVMEDIA_TYPE_DATA &&
st->codecpar->codec_id == AV_CODEC_ID_TIMED_ID3) {
*q++ = STREAM_ID_PRIVATE_STREAM_1;
} else if (st->codecpar->codec_type == AVMEDIA_TYPE_DATA) {
*q++ = stream_id != -1 ? stream_id : STREAM_ID_METADATA_STREAM;
if (stream_id == STREAM_ID_PRIVATE_STREAM_1) /* asynchronous KLV */
pts = dts = AV_NOPTS_VALUE;
} else {
*q++ = STREAM_ID_PRIVATE_STREAM_1;
}
*q++ = stream_id = get_pes_stream_id(s, st, stream_id, &async);
if (async)
pts = dts = AV_NOPTS_VALUE;
header_len = 0;
flags = 0;
if (pts != AV_NOPTS_VALUE) {

Loading…
Cancel
Save