comparison mpegtsenc.c @ 4212:3aaa3da02aea libavformat

use delay to avoid negative dts
author bcoudurier
date Wed, 14 Jan 2009 22:14:35 +0000
parents 5e5654752973
children 461f23728a14
comparison
equal deleted inserted replaced
4211:5e5654752973 4212:3aaa3da02aea
670 int size= pkt->size; 670 int size= pkt->size;
671 uint8_t *buf= pkt->data; 671 uint8_t *buf= pkt->data;
672 MpegTSWriteStream *ts_st = st->priv_data; 672 MpegTSWriteStream *ts_st = st->priv_data;
673 int len, max_payload_size; 673 int len, max_payload_size;
674 const uint8_t *access_unit_index = NULL; 674 const uint8_t *access_unit_index = NULL;
675 const uint64_t delay = av_rescale(s->max_delay, 90000, AV_TIME_BASE);
675 676
676 if (st->codec->codec_type == CODEC_TYPE_SUBTITLE) { 677 if (st->codec->codec_type == CODEC_TYPE_SUBTITLE) {
677 /* for subtitle, a single PES packet must be generated */ 678 /* for subtitle, a single PES packet must be generated */
678 mpegts_write_pes(s, st, buf, size, pkt->pts, AV_NOPTS_VALUE); 679 mpegts_write_pes(s, st, buf, size, pkt->pts, AV_NOPTS_VALUE);
679 return 0; 680 return 0;
715 size -= len; 716 size -= len;
716 ts_st->payload_index += len; 717 ts_st->payload_index += len;
717 if (access_unit_index && access_unit_index < buf && 718 if (access_unit_index && access_unit_index < buf &&
718 ts_st->payload_pts == AV_NOPTS_VALUE && 719 ts_st->payload_pts == AV_NOPTS_VALUE &&
719 ts_st->payload_dts == AV_NOPTS_VALUE) { 720 ts_st->payload_dts == AV_NOPTS_VALUE) {
720 ts_st->payload_dts = pkt->dts; 721 ts_st->payload_dts = pkt->dts + delay;
721 ts_st->payload_pts = pkt->pts; 722 ts_st->payload_pts = pkt->pts + delay;
722 } 723 }
723 if (ts_st->payload_index >= max_payload_size) { 724 if (ts_st->payload_index >= max_payload_size) {
724 mpegts_write_pes(s, st, ts_st->payload, ts_st->payload_index, 725 mpegts_write_pes(s, st, ts_st->payload, ts_st->payload_index,
725 ts_st->payload_pts, ts_st->payload_dts); 726 ts_st->payload_pts, ts_st->payload_dts);
726 ts_st->payload_pts = AV_NOPTS_VALUE; 727 ts_st->payload_pts = AV_NOPTS_VALUE;