[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