avformat/mpegtsenc: use standard pids for m2ts

Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
Marton Balint
2019-11-11 00:06:01 +01:00
parent 561ba15c97
commit 422f0a6136
3 changed files with 57 additions and 3 deletions

View File

@@ -94,6 +94,10 @@ typedef struct MpegTSWrite {
int pmt_start_pid;
int start_pid;
int m2ts_mode;
int m2ts_video_pid;
int m2ts_audio_pid;
int m2ts_pgssub_pid;
int m2ts_textsub_pid;
int pcr_period_ms;
#define MPEGTS_FLAG_REEMIT_PAT_PMT 0x01
@@ -860,6 +864,14 @@ static int mpegts_init(AVFormatContext *s)
}
}
ts->m2ts_video_pid = M2TS_VIDEO_PID;
ts->m2ts_audio_pid = M2TS_AUDIO_START_PID;
ts->m2ts_pgssub_pid = M2TS_PGSSUB_START_PID;
ts->m2ts_textsub_pid = M2TS_TEXTSUB_PID;
if (ts->m2ts_mode)
ts->pmt_start_pid = M2TS_PMT_PID;
if (s->max_delay < 0) /* Not set by the caller */
s->max_delay = 0;
@@ -923,7 +935,37 @@ static int mpegts_init(AVFormatContext *s)
/* MPEG pid values < 16 are reserved. Applications which set st->id in
* this range are assigned a calculated pid. */
if (st->id < 16) {
ts_st->pid = ts->start_pid + i;
if (ts->m2ts_mode) {
switch (st->codecpar->codec_type) {
case AVMEDIA_TYPE_VIDEO:
ts_st->pid = ts->m2ts_video_pid++;
break;
case AVMEDIA_TYPE_AUDIO:
ts_st->pid = ts->m2ts_audio_pid++;
break;
case AVMEDIA_TYPE_SUBTITLE:
switch (st->codecpar->codec_id) {
case AV_CODEC_ID_HDMV_PGS_SUBTITLE:
ts_st->pid = ts->m2ts_pgssub_pid++;
break;
case AV_CODEC_ID_HDMV_TEXT_SUBTITLE:
ts_st->pid = ts->m2ts_textsub_pid++;
break;
}
break;
}
if (ts->m2ts_video_pid > M2TS_VIDEO_PID + 1 ||
ts->m2ts_audio_pid > M2TS_AUDIO_START_PID + 32 ||
ts->m2ts_pgssub_pid > M2TS_PGSSUB_START_PID + 32 ||
ts->m2ts_textsub_pid > M2TS_TEXTSUB_PID + 1 ||
ts_st->pid < 16) {
av_log(s, AV_LOG_ERROR, "Cannot automatically assign PID for stream %d\n", st->index);
ret = AVERROR(EINVAL);
goto fail;
}
} else {
ts_st->pid = ts->start_pid + i;
}
} else {
ts_st->pid = st->id;
}