diff options
author | Baptiste Coudurier <baptiste.coudurier@gmail.com> | 2009-05-10 01:57:21 +0000 |
---|---|---|
committer | Baptiste Coudurier <baptiste.coudurier@gmail.com> | 2009-05-10 01:57:21 +0000 |
commit | b69017af874c9e2c2249b94fa2cbefdbf7c43684 (patch) | |
tree | 69f4681f481a00fa79ea5da086955026de0343f5 | |
parent | 1e8857882bbb982000844c7756824e484971837c (diff) | |
download | ffmpeg-b69017af874c9e2c2249b94fa2cbefdbf7c43684.tar.gz |
ensure first pts is set, according to specs
Originally committed as revision 18781 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavformat/mpegtsenc.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index 8abbb52de7..b3d973e1a4 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -173,6 +173,7 @@ typedef struct MpegTSWriteStream { int pid; /* stream associated pid */ int cc; int payload_index; + int first_pts_check; ///< first pts check needed int64_t payload_pts; int64_t payload_dts; uint8_t payload[DEFAULT_PES_PAYLOAD_SIZE]; @@ -419,6 +420,7 @@ static int mpegts_write_header(AVFormatContext *s) ts_st->pid = DEFAULT_START_PID + i; ts_st->payload_pts = AV_NOPTS_VALUE; ts_st->payload_dts = AV_NOPTS_VALUE; + ts_st->first_pts_check = 1; /* update PCR pid by using the first video stream */ if (st->codec->codec_type == CODEC_TYPE_VIDEO && service->pcr_pid == 0x1fff) @@ -701,6 +703,12 @@ static int mpegts_write_packet(AVFormatContext *s, AVPacket *pkt) if (pkt->dts != AV_NOPTS_VALUE) dts = pkt->dts + delay; + if (ts_st->first_pts_check && pts == AV_NOPTS_VALUE) { + av_log(s, AV_LOG_ERROR, "first pts value must set\n"); + return -1; + } + ts_st->first_pts_check = 0; + if (st->codec->codec_type == CODEC_TYPE_SUBTITLE) { /* for subtitle, a single PES packet must be generated */ mpegts_write_pes(s, st, buf, size, pts, AV_NOPTS_VALUE); |