Re: [FFmpeg-devel] [PATCH] Fix segment muxer

2019-10-27 Thread Marton Balint



On Mon, 7 Oct 2019, just.one@yandex.ru wrote:

Please use a proper commit title: e.g:

avformat/segment: fix non-zero start pts

Also make sure you provide the author name you want when you send the 
patch email. (you only provided an email address in the From field, not a 
full name, I guess this is not intentional).



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, >frames, >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) {


What happens if the first packet is not from a reference stream? As far as 
I see in that case the output packet timestamp will be 0 based until we 
get a packet from the refence stream... Maybe you should accept a packet 
from any stream here?



+// 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);
+}
}
}


Regards,
Marton
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Re: [FFmpeg-devel] [PATCH] Fix segment muxer

2019-10-27 Thread Vasily
Can anyone answer me?.. :(

чт, 17 окт. 2019 г., 12:24 Vasily :

> Can I have _any_ response please? It was more than a week of silence... :(
>
> Thanks,
> Vasily
>
> чт, 10 окт. 2019 г., 13:05 Vasily :
>
>> Anything else I have to do to make this patch eventually taken in?
>>
>> Thanks,
>> Vasily
>>
>> пн, 7 окт. 2019 г. в 15:54, :
>>
>>> 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, >frames, >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" :
>>> > just.one@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@ffmpeg.org
>>> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>> >
>>> > To unsubscribe, visit link above, or email
>>> > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
>>> ___
>>> ffmpeg-devel mailing list
>>> ffmpeg-devel@ffmpeg.org
>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>
>>> To unsubscribe, visit link above, or email
>>> ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
>>
>>
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Re: [FFmpeg-devel] [PATCH] Fix segment muxer

2019-10-17 Thread Vasily
Can I have _any_ response please? It was more than a week of silence... :(

Thanks,
Vasily

чт, 10 окт. 2019 г., 13:05 Vasily :

> Anything else I have to do to make this patch eventually taken in?
>
> Thanks,
> Vasily
>
> пн, 7 окт. 2019 г. в 15:54, :
>
>> 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, >frames, >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" :
>> > just.one@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@ffmpeg.org
>> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>> >
>> > To unsubscribe, visit link above, or email
>> > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
>> ___
>> ffmpeg-devel mailing list
>> ffmpeg-devel@ffmpeg.org
>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>> To unsubscribe, visit link above, or email
>> ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
>
>
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Re: [FFmpeg-devel] [PATCH] Fix segment muxer

2019-10-10 Thread Vasily
Anything else I have to do to make this patch eventually taken in?

Thanks,
Vasily

пн, 7 окт. 2019 г. в 15:54, :

> 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, >frames, >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" :
> > just.one@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@ffmpeg.org
> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> >
> > To unsubscribe, visit link above, or email
> > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
> ___
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Re: [FFmpeg-devel] [PATCH] Fix segment muxer

2019-10-07 Thread just . one . man
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, >frames, >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" :
> just.one@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@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Re: [FFmpeg-devel] [PATCH] Fix segment muxer

2019-10-07 Thread Nicolas George
just.one@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


signature.asc
Description: PGP signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Re: [FFmpeg-devel] [PATCH] Fix segment muxer

2019-10-07 Thread just . one . man
Updated patch
---

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, >frames, >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


06.10.2019, 14:38, "Vasily" :
> I used that value somewhere during patch development, but I eventually
> settled on -1, because that "start_pts" and "end_pts" are using some other
> units, not the unit used by pkt->pts.
>
> So I wanted to make a distinction. Though a possibility of negative
> timestamps didn't come to me, so I probably have to change it back to
> AV_NOPTS_VALUE.
>
> P.S. Thanks for reviewing my patch!
>
> вс, 6 окт. 2019 г., 13:56 Marton Balint :
>
>>  On Thu, 3 Oct 2019, just.one@yandex.ru wrote:
>>
>>  > It seems that my first attempt to send the patch failed (probably
>>  because my box where I executed "git send-email" failed reverse smtp
>>  check), so I'm going to re-send it to this same thread.
>>  >
>>  > ---
>>  >
>>  > 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..2478d8f 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, >frames, >nb_frames,
>>  seg->frames_str)) < 0)
>>  > return ret;
>>  > } else {
>>  > + seg->start_pts = -1;
>>
>>  AV_NOPTS_VALUE would be probably better for this purpose, even if the
>>  muxer won't get negative timestamps unless allowed by the
>>  AVFMT_TS_NEGATIVE flag.
>>
>>  Regards,
>>  Marton
>>
>>  > /* 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 != -1) {
>>  > + end_pts = seg->start_pts + seg->time *
>>  

Re: [FFmpeg-devel] [PATCH] Fix segment muxer

2019-10-06 Thread Vasily
I used that value somewhere during patch development, but I eventually
settled on -1, because that "start_pts" and "end_pts" are using some other
units, not the unit used by pkt->pts.

So I wanted to make a distinction. Though a possibility of negative
timestamps didn't come to me, so I probably have to change it back to
AV_NOPTS_VALUE.

P.S. Thanks for reviewing my patch!


вс, 6 окт. 2019 г., 13:56 Marton Balint :

>
>
> On Thu, 3 Oct 2019, just.one@yandex.ru wrote:
>
> > It seems that my first attempt to send the patch failed (probably
> because my box where I executed "git send-email" failed reverse smtp
> check), so I'm going to re-send it to this same thread.
> >
> > ---
> >
> > 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..2478d8f 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, >frames, >nb_frames,
> seg->frames_str)) < 0)
> > return ret;
> > } else {
> > +seg->start_pts = -1;
>
> AV_NOPTS_VALUE would be probably better for this purpose, even if the
> muxer won't get negative timestamps unless allowed by the
> AVFMT_TS_NEGATIVE flag.
>
> Regards,
> Marton
>
> > /* 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 != -1) {
> > +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
> > ___
> > ffmpeg-devel mailing list
> > ffmpeg-devel@ffmpeg.org
> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> >
> > To unsubscribe, visit link above, or email
> > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
> ___
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Re: [FFmpeg-devel] [PATCH] Fix segment muxer

2019-10-06 Thread Marton Balint



On Thu, 3 Oct 2019, just.one@yandex.ru wrote:


It seems that my first attempt to send the patch failed (probably because my box where I 
executed "git send-email" failed reverse smtp check), so I'm going to re-send 
it to this same thread.

---

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..2478d8f 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, >frames, >nb_frames, 
seg->frames_str)) < 0)
return ret;
} else {
+seg->start_pts = -1;


AV_NOPTS_VALUE would be probably better for this purpose, even if the 
muxer won't get negative timestamps unless allowed by the 
AVFMT_TS_NEGATIVE flag.


Regards,
Marton


/* 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 != -1) {
+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
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Re: [FFmpeg-devel] [PATCH] Fix segment muxer

2019-10-03 Thread just . one . man
It seems that my first attempt to send the patch failed (probably because my 
box where I executed "git send-email" failed reverse smtp check), so I'm going 
to re-send it to this same thread.

---

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..2478d8f 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, >frames, >nb_frames, 
seg->frames_str)) < 0)
 return ret;
 } else {
+seg->start_pts = -1;
 /* 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 != -1) {
+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
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Re: [FFmpeg-devel] [PATCH] Fix segment muxer

2019-10-02 Thread just . one . man
Note that the second e-mail contains a more full version of patch which also 
updates times used to generate the playlist, so playlist is now also correct.

---
Thanks,
Vasily

02.10.2019, 14:22, "Vasily" :
> 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..2478d8f 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, >frames, >nb_frames, 
> seg->frames_str)) < 0)
>  return ret;
>  } else {
> + seg->start_pts = -1;
>  /* 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 != -1) {
> + 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
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".