[FFmpeg-devel] [PATCH] Fix segment muxer
Vasily
just.one.man at yandex.ru
Sun Oct 27 11:38:18 EET 2019
Can anyone answer me?.. :(
чт, 17 окт. 2019 г., 12:24 Vasily <just.one.man at yandex.ru>:
> Can I have _any_ response please? It was more than a week of silence... :(
>
> Thanks,
> Vasily
>
> чт, 10 окт. 2019 г., 13:05 Vasily <just.one.man at yandex.ru>:
>
>> Anything else I have to do to make this patch eventually taken in?
>>
>> Thanks,
>> Vasily
>>
>> пн, 7 окт. 2019 г. в 15:54, <just.one.man at yandex.ru>:
>>
>>> When incoming media has non-zero start PTS,
>>> segment muxer would fail to correctly calculate
>>> the point where to chunk segments, as it always
>>> assumed that media starts with PTS==0.
>>>
>>> This change removes this assumption by remembering
>>> the PTS of the very first frame passed through the muxer.
>>>
>>> Also fix starting points of first segment
>>> ---
>>> libavformat/segment.c | 12 +++++++++++-
>>> 1 file changed, 11 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/libavformat/segment.c b/libavformat/segment.c
>>> index e308206..8b985df 100644
>>> --- a/libavformat/segment.c
>>> +++ b/libavformat/segment.c
>>> @@ -87,6 +87,7 @@ typedef struct SegmentContext {
>>> int64_t last_val; ///< remember last time for wrap around
>>> detection
>>> int cut_pending;
>>> int header_written; ///< whether we've already called
>>> avformat_write_header
>>> + int64_t start_pts; ///< pts of the very first packet processed,
>>> used to compute correct segment length
>>>
>>> char *entry_prefix; ///< prefix to add to list entry filenames
>>> int list_type; ///< set the list type
>>> @@ -702,6 +703,7 @@ static int seg_init(AVFormatContext *s)
>>> if ((ret = parse_frames(s, &seg->frames, &seg->nb_frames,
>>> seg->frames_str)) < 0)
>>> return ret;
>>> } else {
>>> + seg->start_pts = AV_NOPTS_VALUE;
>>> /* set default value if not specified */
>>> if (!seg->time_str)
>>> seg->time_str = av_strdup("2");
>>> @@ -914,7 +916,15 @@ calc_times:
>>> seg->cut_pending = 1;
>>> seg->last_val = wrapped_val;
>>> } else {
>>> - end_pts = seg->time * (seg->segment_count + 1);
>>> + if (seg->start_pts != AV_NOPTS_VALUE) {
>>> + end_pts = seg->start_pts + seg->time *
>>> (seg->segment_count + 1);
>>> + } else if (pkt->stream_index == seg->reference_stream_index
>>> && pkt->pts != AV_NOPTS_VALUE) {
>>> + // this is the first packet of the reference stream we
>>> see, initialize start point
>>> + seg->start_pts = av_rescale_q(pkt->pts, st->time_base,
>>> AV_TIME_BASE_Q);
>>> + seg->cur_entry.start_time = (double)pkt->pts *
>>> av_q2d(st->time_base);
>>> + seg->cur_entry.start_pts = seg->start_pts;
>>> + end_pts = seg->start_pts + seg->time *
>>> (seg->segment_count + 1);
>>> + }
>>> }
>>> }
>>>
>>> --
>>> 1.7.9.5
>>>
>>> Now I tried to re-format as Nicolas George said, hopefully this is okay
>>> and won't make a third entry in patchwork (if it does - how do I stop it
>>> from doing so?)
>>>
>>> 07.10.2019, 15:15, "Nicolas George" <george at nsup.org>:
>>> > just.one.man at yandex.ru (12019-10-07):
>>> >> Updated patch
>>> >
>>> > This should be after the triple dash, because it does not belong in the
>>> > commit message.
>>> >
>>> >> ---
>>> >>
>>> >> When incoming media has non-zero start PTS,
>>> >> segment muxer would fail to correctly calculate
>>> >> the point where to chunk segments, as it always
>>> >> assumed that media starts with PTS==0.
>>> >>
>>> >> This change removes this assumption by remembering
>>> >> the PTS of the very first frame passed through the muxer.
>>> >>
>>> >> Also fix starting points of first segment
>>> >> ---
>>> >
>>> > This should be before the triple dash, because it does belong in the
>>> > commit message.
>>> >
>>> > I did not look at the code.
>>> >
>>> > Regards,
>>> >
>>> > --
>>> > Nicolas George
>>> > ,
>>> >
>>> > _______________________________________________
>>> > ffmpeg-devel mailing list
>>> > ffmpeg-devel at ffmpeg.org
>>> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>> >
>>> > To unsubscribe, visit link above, or email
>>> > ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>>> _______________________________________________
>>> ffmpeg-devel mailing list
>>> ffmpeg-devel at ffmpeg.org
>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>
>>> To unsubscribe, visit link above, or email
>>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>>
>>
More information about the ffmpeg-devel
mailing list