[FFmpeg-cvslog] libavdevice/avfoundation: use pts/dts provided by the CMSampleBuffer API
Matthieu Bouron
git at videolan.org
Sun Mar 29 04:16:03 CEST 2015
ffmpeg | branch: master | Matthieu Bouron <matthieu.bouron at gmail.com> | Fri Mar 13 20:16:55 2015 +0100| [cf16b459a873b990efc10d93e9912ab01b8a0fba] | committer: Michael Niedermayer
libavdevice/avfoundation: use pts/dts provided by the CMSampleBuffer API
Reviewed-by: Thilo Borgmann <thilo.borgmann at mail.de>
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=cf16b459a873b990efc10d93e9912ab01b8a0fba
---
libavdevice/avfoundation.m | 21 +++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/libavdevice/avfoundation.m b/libavdevice/avfoundation.m
index 52e686a..5140ecb 100644
--- a/libavdevice/avfoundation.m
+++ b/libavdevice/avfoundation.m
@@ -908,9 +908,14 @@ static int avf_read_packet(AVFormatContext *s, AVPacket *pkt)
return AVERROR(EIO);
}
- pkt->pts = pkt->dts = av_rescale_q(av_gettime() - ctx->first_pts,
- AV_TIME_BASE_Q,
- avf_time_base_q);
+ CMItemCount count;
+ CMSampleTimingInfo timing_info;
+
+ if (CMSampleBufferGetOutputSampleTimingInfoArray(ctx->current_frame, 1, &timing_info, &count) == noErr) {
+ AVRational timebase_q = av_make_q(1, timing_info.presentationTimeStamp.timescale);
+ pkt->pts = pkt->dts = av_rescale_q(timing_info.presentationTimeStamp.value, timebase_q, avf_time_base_q);
+ }
+
pkt->stream_index = ctx->video_stream_index;
pkt->flags |= AV_PKT_FLAG_KEY;
@@ -938,9 +943,13 @@ static int avf_read_packet(AVFormatContext *s, AVPacket *pkt)
return AVERROR(EIO);
}
- pkt->pts = pkt->dts = av_rescale_q(av_gettime() - ctx->first_audio_pts,
- AV_TIME_BASE_Q,
- avf_time_base_q);
+ CMItemCount count;
+ CMSampleTimingInfo timing_info;
+
+ if (CMSampleBufferGetOutputSampleTimingInfoArray(ctx->current_audio_frame, 1, &timing_info, &count) == noErr) {
+ AVRational timebase_q = av_make_q(1, timing_info.presentationTimeStamp.timescale);
+ pkt->pts = pkt->dts = av_rescale_q(timing_info.presentationTimeStamp.value, timebase_q, avf_time_base_q);
+ }
pkt->stream_index = ctx->audio_stream_index;
pkt->flags |= AV_PKT_FLAG_KEY;
More information about the ffmpeg-cvslog
mailing list