[FFmpeg-devel] [PATCH] Fix segment muxer
Vasily
just.one.man at yandex.ru
Thu Oct 17 12:24:41 EEST 2019
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