|  | @@ -94,6 +94,10 @@ typedef struct MpegTSWrite { | 
														
													
														
															
																|  |  | int pmt_start_pid; |  |  | int pmt_start_pid; | 
														
													
														
															
																|  |  | int start_pid; |  |  | int start_pid; | 
														
													
														
															
																|  |  | int m2ts_mode; |  |  | int m2ts_mode; | 
														
													
														
															
																|  |  |  |  |  | int m2ts_video_pid; | 
														
													
														
															
																|  |  |  |  |  | int m2ts_audio_pid; | 
														
													
														
															
																|  |  |  |  |  | int m2ts_pgssub_pid; | 
														
													
														
															
																|  |  |  |  |  | int m2ts_textsub_pid; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | int pcr_period_ms; |  |  | int pcr_period_ms; | 
														
													
														
															
																|  |  | #define MPEGTS_FLAG_REEMIT_PAT_PMT  0x01 |  |  | #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 */ |  |  | if (s->max_delay < 0) /* Not set by the caller */ | 
														
													
														
															
																|  |  | s->max_delay = 0; |  |  | 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 |  |  | /* MPEG pid values < 16 are reserved. Applications which set st->id in | 
														
													
														
															
																|  |  | * this range are assigned a calculated pid. */ |  |  | * this range are assigned a calculated pid. */ | 
														
													
														
															
																|  |  | if (st->id < 16) { |  |  | 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 { |  |  | } else { | 
														
													
														
															
																|  |  | ts_st->pid = st->id; |  |  | ts_st->pid = st->id; | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
												
													
														
															
																|  | 
 |