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;