+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;
+ }
+}
+