[FFmpeg-devel] [PATCH 2/3] avcodec/mjpeg: Pass full buffer to hwaccel start_frame
James Almer
jamrial at gmail.com
Mon Feb 19 05:37:40 EET 2018
On 2/18/2018 8:53 PM, Philip Langdale wrote:
> ---
> libavcodec/mjpegdec.c | 6 ++++--
> libavcodec/mjpegdec.h | 5 +++--
> 2 files changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c
> index 9a7a329b19..b41d2ce467 100644
> --- a/libavcodec/mjpegdec.c
> +++ b/libavcodec/mjpegdec.c
> @@ -715,8 +715,8 @@ unk_pixfmt:
> if (!s->hwaccel_picture_private)
> return AVERROR(ENOMEM);
>
> - ret = s->avctx->hwaccel->start_frame(s->avctx, s->raw_buffer,
> - s->raw_buffer_size);
> + ret = s->avctx->hwaccel->start_frame(s->avctx, s->raw_packet->data,
> + s->raw_packet->size);
> if (ret < 0)
> return ret;
> }
> @@ -2242,6 +2242,8 @@ int ff_mjpeg_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
> int ret = 0;
> int is16bit;
>
> + s->raw_packet = avpkt;
Shouldn't you create a reference instead? Not sure how safe this is
otherwise. But then again, raw_buffer is using the same buffer.
If there's no risk for the packet to be unreferenced and the buffer
freed before you get to call start_frame() then it should be ok.
> +
> av_dict_free(&s->exif_metadata);
> av_freep(&s->stereo3d);
> s->adobe_transform = -1;
> diff --git a/libavcodec/mjpegdec.h b/libavcodec/mjpegdec.h
> index 11dfdbf62b..b47f54a5b9 100644
> --- a/libavcodec/mjpegdec.h
> +++ b/libavcodec/mjpegdec.h
> @@ -139,8 +139,9 @@ typedef struct MJpegDecodeContext {
> int iccread;
>
> // Raw stream data for hwaccel use.
> - const uint8_t *raw_buffer;
> - size_t raw_buffer_size;
> + const AVPacket *raw_packet;
> + const uint8_t *raw_buffer;
> + size_t raw_buffer_size;
>
> uint8_t raw_huffman_lengths[2][4][16];
> uint8_t raw_huffman_values[2][4][256];
>
More information about the ffmpeg-devel
mailing list