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

Thilo Borgmann thilo.borgmann at mail.de
Sun Mar 29 00:26:31 CET 2015


Am 21.03.15 um 18:45 schrieb Thilo Borgmann:
> Am 18.03.15 um 09:37 schrieb Matthieu Bouron:
>> 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
> 
> Ok if tested.

Please apply.

Thanks,
Thilo



More information about the ffmpeg-devel mailing list