Mercurial > libavformat.hg
comparison mpegtsenc.c @ 4220:443927a154f1 libavformat
use delay for subs and dirac too
author | bcoudurier |
---|---|
date | Thu, 15 Jan 2009 01:47:24 +0000 |
parents | 3bfd8604f480 |
children | 77e0c7511d41 |
comparison
equal
deleted
inserted
replaced
4219:3bfd8604f480 | 4220:443927a154f1 |
---|---|
694 uint8_t *data= NULL; | 694 uint8_t *data= NULL; |
695 MpegTSWriteStream *ts_st = st->priv_data; | 695 MpegTSWriteStream *ts_st = st->priv_data; |
696 int len, max_payload_size; | 696 int len, max_payload_size; |
697 const uint8_t *access_unit_index = NULL; | 697 const uint8_t *access_unit_index = NULL; |
698 const uint64_t delay = av_rescale(s->max_delay, 90000, AV_TIME_BASE); | 698 const uint64_t delay = av_rescale(s->max_delay, 90000, AV_TIME_BASE); |
699 int64_t dts = AV_NOPTS_VALUE, pts = AV_NOPTS_VALUE; | |
700 | |
701 if (pkt->pts != AV_NOPTS_VALUE) | |
702 pts = pkt->pts + delay; | |
703 if (pkt->dts != AV_NOPTS_VALUE) | |
704 dts = pkt->dts + delay; | |
699 | 705 |
700 if (st->codec->codec_type == CODEC_TYPE_SUBTITLE) { | 706 if (st->codec->codec_type == CODEC_TYPE_SUBTITLE) { |
701 /* for subtitle, a single PES packet must be generated */ | 707 /* for subtitle, a single PES packet must be generated */ |
702 mpegts_write_pes(s, st, buf, size, pkt->pts, AV_NOPTS_VALUE); | 708 mpegts_write_pes(s, st, buf, size, pts, AV_NOPTS_VALUE); |
703 return 0; | 709 return 0; |
704 } | 710 } |
705 | 711 |
706 if (st->codec->codec_id == CODEC_ID_DIRAC) { | 712 if (st->codec->codec_id == CODEC_ID_DIRAC) { |
707 /* for Dirac, a single PES packet must be generated */ | 713 /* for Dirac, a single PES packet must be generated */ |
708 mpegts_write_pes(s, st, buf, size, pkt->pts, pkt->dts); | 714 mpegts_write_pes(s, st, buf, size, pts, dts); |
709 return 0; | 715 return 0; |
710 } | 716 } |
711 max_payload_size = DEFAULT_PES_PAYLOAD_SIZE; | 717 max_payload_size = DEFAULT_PES_PAYLOAD_SIZE; |
712 if (st->codec->codec_id == CODEC_ID_MPEG2VIDEO || | 718 if (st->codec->codec_id == CODEC_ID_MPEG2VIDEO || |
713 st->codec->codec_id == CODEC_ID_MPEG1VIDEO) { | 719 st->codec->codec_id == CODEC_ID_MPEG1VIDEO) { |
756 size -= len; | 762 size -= len; |
757 ts_st->payload_index += len; | 763 ts_st->payload_index += len; |
758 if (access_unit_index && access_unit_index < buf && | 764 if (access_unit_index && access_unit_index < buf && |
759 ts_st->payload_pts == AV_NOPTS_VALUE && | 765 ts_st->payload_pts == AV_NOPTS_VALUE && |
760 ts_st->payload_dts == AV_NOPTS_VALUE) { | 766 ts_st->payload_dts == AV_NOPTS_VALUE) { |
761 ts_st->payload_dts = pkt->dts + delay; | 767 ts_st->payload_dts = dts; |
762 ts_st->payload_pts = pkt->pts + delay; | 768 ts_st->payload_pts = pts; |
763 } | 769 } |
764 if (ts_st->payload_index >= max_payload_size) { | 770 if (ts_st->payload_index >= max_payload_size) { |
765 mpegts_write_pes(s, st, ts_st->payload, ts_st->payload_index, | 771 mpegts_write_pes(s, st, ts_st->payload, ts_st->payload_index, |
766 ts_st->payload_pts, ts_st->payload_dts); | 772 ts_st->payload_pts, ts_st->payload_dts); |
767 ts_st->payload_pts = AV_NOPTS_VALUE; | 773 ts_st->payload_pts = AV_NOPTS_VALUE; |