[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