|
|
|
@@ -432,16 +432,16 @@ static int init_pts(AVFormatContext *s) |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
if (!st->priv_pts) |
|
|
|
st->priv_pts = av_mallocz(sizeof(*st->priv_pts)); |
|
|
|
if (!st->priv_pts) |
|
|
|
if (!st->internal->priv_pts) |
|
|
|
st->internal->priv_pts = av_mallocz(sizeof(*st->internal->priv_pts)); |
|
|
|
if (!st->internal->priv_pts) |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
|
|
|
if (den != AV_NOPTS_VALUE) { |
|
|
|
if (den <= 0) |
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
|
|
|
frac_init(st->priv_pts, 0, 0, den); |
|
|
|
frac_init(st->internal->priv_pts, 0, 0, den); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@@ -601,7 +601,7 @@ static int compute_muxer_pkt_fields(AVFormatContext *s, AVStream *st, AVPacket * |
|
|
|
} |
|
|
|
pkt->dts = |
|
|
|
// pkt->pts= st->cur_dts; |
|
|
|
pkt->pts = st->priv_pts->val; |
|
|
|
pkt->pts = st->internal->priv_pts->val; |
|
|
|
} |
|
|
|
|
|
|
|
//calculate dts from pts |
|
|
|
@@ -638,7 +638,7 @@ static int compute_muxer_pkt_fields(AVFormatContext *s, AVStream *st, AVPacket * |
|
|
|
av_ts2str(pkt->pts), av_ts2str(pkt->dts)); |
|
|
|
|
|
|
|
st->cur_dts = pkt->dts; |
|
|
|
st->priv_pts->val = pkt->dts; |
|
|
|
st->internal->priv_pts->val = pkt->dts; |
|
|
|
|
|
|
|
/* update pts */ |
|
|
|
switch (st->codecpar->codec_type) { |
|
|
|
@@ -650,12 +650,12 @@ static int compute_muxer_pkt_fields(AVFormatContext *s, AVStream *st, AVPacket * |
|
|
|
/* HACK/FIXME, we skip the initial 0 size packets as they are most |
|
|
|
* likely equal to the encoder delay, but it would be better if we |
|
|
|
* had the real timestamps from the encoder */ |
|
|
|
if (frame_size >= 0 && (pkt->size || st->priv_pts->num != st->priv_pts->den >> 1 || st->priv_pts->val)) { |
|
|
|
frac_add(st->priv_pts, (int64_t)st->time_base.den * frame_size); |
|
|
|
if (frame_size >= 0 && (pkt->size || st->internal->priv_pts->num != st->internal->priv_pts->den >> 1 || st->internal->priv_pts->val)) { |
|
|
|
frac_add(st->internal->priv_pts, (int64_t)st->time_base.den * frame_size); |
|
|
|
} |
|
|
|
break; |
|
|
|
case AVMEDIA_TYPE_VIDEO: |
|
|
|
frac_add(st->priv_pts, (int64_t)st->time_base.den * st->time_base.num); |
|
|
|
frac_add(st->internal->priv_pts, (int64_t)st->time_base.den * st->time_base.num); |
|
|
|
break; |
|
|
|
} |
|
|
|
return 0; |
|
|
|
|