[FFmpeg-devel] [PATCH 4/4] libavdevice/avfoundation: use pts/dts provided by the CMSampleBuffer API

Matthieu Bouron matthieu.bouron at gmail.com
Wed Mar 18 09:37:26 CET 2015


On Fri, Mar 13, 2015 at 8:16 PM, <matthieu.bouron at gmail.com> wrote:

> From: Matthieu Bouron <matthieu.bouron at 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
>
>
ping


More information about the ffmpeg-devel mailing list