From: Matthieu Bouron <matthieu.bou...@gmail.com> --- libavdevice/avfoundation.m | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/libavdevice/avfoundation.m b/libavdevice/avfoundation.m index 8112229..5bcd6a4 100644 --- a/libavdevice/avfoundation.m +++ b/libavdevice/avfoundation.m @@ -881,9 +881,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; @@ -911,9 +916,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; -- 2.3.2 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel