diff options
author | Marton Balint <cus@passwd.hu> | 2021-04-24 10:34:39 +0200 |
---|---|---|
committer | Marton Balint <cus@passwd.hu> | 2021-04-28 21:24:44 +0200 |
commit | 3f27021143f1bc6a55be5bac37f4c2d3c742e023 (patch) | |
tree | 9b0554358dfd8753a0700a50dfefe1a16afab776 /libavformat/mpegtsenc.c | |
parent | b9fff6e15e73dc995695db9be8db084238cca14c (diff) | |
download | ffmpeg-3f27021143f1bc6a55be5bac37f4c2d3c742e023.tar.gz |
avformat/mpegtsenc: factorize determining pes stream id
Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'libavformat/mpegtsenc.c')
-rw-r--r-- | libavformat/mpegtsenc.c | 60 |
1 files changed, 35 insertions, 25 deletions
diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index f4a0e5473e..bf93204a5d 100644 --- a/libavformat/mpegtsenc.c +++ b/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) { |