[FFmpeg-devel] [PATCH v2 5/6] avcodec/cbs_jpeg: Use memcpy when writing pictures

Andreas Rheinhardt andreas.rheinhardt at gmail.com
Mon Nov 18 04:54:59 EET 2019


On Mon, Nov 18, 2019 at 1:02 AM Mark Thompson <sw at jkqxz.net> wrote:

> On 17/11/2019 07:34, Andreas Rheinhardt wrote:
> > This is possible because the size of a scan header is always a multiple
> > of a byte.
> >
> > Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> > ---
> >  libavcodec/cbs_jpeg.c | 10 +++++++---
> >  1 file changed, 7 insertions(+), 3 deletions(-)
> >
> > diff --git a/libavcodec/cbs_jpeg.c b/libavcodec/cbs_jpeg.c
> > index b189cbd9b7..64fe70beab 100644
> > --- a/libavcodec/cbs_jpeg.c
> > +++ b/libavcodec/cbs_jpeg.c
> > @@ -330,7 +330,7 @@ static int cbs_jpeg_write_scan(CodedBitstreamContext
> *ctx,
> >                                 PutBitContext *pbc)
> >  {
> >      JPEGRawScan *scan = unit->content;
> > -    int i, err;
> > +    int err;
> >
> >      err = cbs_jpeg_write_scan_header(ctx, pbc, &scan->header);
> >      if (err < 0)
> > @@ -340,8 +340,12 @@ static int
> cbs_jpeg_write_scan(CodedBitstreamContext *ctx,
> >          if (scan->data_size * 8 > put_bits_left(pbc))
> >              return AVERROR(ENOSPC);
> >
> > -        for (i = 0; i < scan->data_size; i++)
> > -            put_bits(pbc, 8, scan->data[i]);
> > +        av_assert0(put_bits_count(pbc) % 8 == 0);
> > +
> > +        flush_put_bits(pbc);
>
> Doesn't this pad to a word boundary?  (It looks like that's coincidentally
> fine for a 3-component JPEG, but not in general.)
>
>
No, it doesn't. It just writes everything in its cache, filling any unset
bits in the last byte with zero. And it does so by writing single bytes at
a time.

- Andreas


More information about the ffmpeg-devel mailing list