[FFmpeg-devel] [PATCH 1/4] avformat/flvenc: Forward errors from allocating keyframe index
Andreas Rheinhardt
andreas.rheinhardt at gmail.com
Sat Oct 26 05:55:35 EEST 2019
On Fri, Oct 25, 2019 at 11:12 PM Michael Niedermayer <michael at niedermayer.cc>
wrote:
> On Fri, Oct 25, 2019 at 10:52:19AM +0200, Andreas Rheinhardt wrote:
> > While the function adding a new element to the keyframe index checked
> > the allocation, the caller didn't check the return value. This has been
> > changed. To do so, the return value has been changed to an ordinary ret
> > instead of pb->error. This doesn't pose a problem, as write_packet() in
> > mux.c already checks for write errors (since 9ad1e0c1).
> >
> > Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> > ---
> > libavformat/flvenc.c | 16 +++++++++-------
> > 1 file changed, 9 insertions(+), 7 deletions(-)
> >
> > diff --git a/libavformat/flvenc.c b/libavformat/flvenc.c
> > index fb1dede7ae..e327545dcf 100644
> > --- a/libavformat/flvenc.c
> > +++ b/libavformat/flvenc.c
> > @@ -887,7 +887,7 @@ static int flv_write_packet(AVFormatContext *s,
> AVPacket *pkt)
> > unsigned ts;
> > int size = pkt->size;
> > uint8_t *data = NULL;
> > - int flags = -1, flags_size, ret;
> > + int flags = -1, flags_size, ret = 0;
> > int64_t cur_offset = avio_tell(pb);
> >
> > if (par->codec_type == AVMEDIA_TYPE_AUDIO && !pkt->size) {
> > @@ -1055,15 +1055,17 @@ static int flv_write_packet(AVFormatContext *s,
> AVPacket *pkt)
> > case AVMEDIA_TYPE_VIDEO:
> > flv->videosize += (avio_tell(pb) - cur_offset);
> > flv->lasttimestamp = flv->acurframeindex /
> flv->framerate;
> > + flv->acurframeindex++;
> > if (pkt->flags & AV_PKT_FLAG_KEY) {
> > - double ts = flv->acurframeindex / flv->framerate;
> > + double ts = flv->lasttimestamp;
> > int64_t pos = cur_offset;
> >
> > - flv->lastkeyframetimestamp = flv->acurframeindex /
> flv->framerate;
> > + flv->lastkeyframetimestamp = ts;
> > flv->lastkeyframelocation = pos;
> > - flv_append_keyframe_info(s, flv, ts, pos);
> > + ret = flv_append_keyframe_info(s, flv, ts, pos);
> > + if (ret < 0)
> > + goto fail;
> > }
> > - flv->acurframeindex++;
> > break;
>
> Some of these changes look like unrelated simplifications
> that makes it a hair harder to see the actual change
>
The earlier code incremented flv->acurframeindex even when the index
allocation failed.
I wanted to keep it that way and the easiest way to do so is to move the
code incrementing
it before flv_append_keyframe_info(). But this would change the values of
ts and
flv->lastkeyframetimestamp, so one has to change how they are derived, too.
- Andreas
More information about the ffmpeg-devel
mailing list