libavdevice/avfoundation: use pts/dts provided by the CMSampleBuffer API

Reviewed-by: Thilo Borgmann <thilo.borgmann@mail.de>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Matthieu Bouron 2015-03-13 20:16:55 +01:00 committed by Michael Niedermayer
parent 021b023751
commit cf16b459a8

View File

@ -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;