Message ID | 20180218235333.6965-3-philipl@overt.org |
---|---|
State | New |
Headers | show |
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]; >
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; + 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];