Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH 1/4] avformat/(mpeg|mpegts|mxf|sup)enc: Use const uint8_t* to access pkt data
@ 2022-07-04 10:58 Andreas Rheinhardt
  2022-07-04 11:02 ` [FFmpeg-devel] [PATCH 2/4] avcodec/dcadec: Treat the input packet's data as const Andreas Rheinhardt
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Andreas Rheinhardt @ 2022-07-04 10:58 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

The packets muxers receive are not guaranteed to be writable,
so they must not be modified. Ergo only access the packet's data
via a const uint8_t*.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavformat/mpegenc.c   | 2 +-
 libavformat/mpegtsenc.c | 2 +-
 libavformat/mxfenc.c    | 4 ++--
 libavformat/supenc.c    | 2 +-
 4 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/libavformat/mpegenc.c b/libavformat/mpegenc.c
index 62692bfcd1..3ab4bd3f9b 100644
--- a/libavformat/mpegenc.c
+++ b/libavformat/mpegenc.c
@@ -1145,7 +1145,7 @@ static int mpeg_mux_write_packet(AVFormatContext *ctx, AVPacket *pkt)
 {
     int stream_index = pkt->stream_index;
     int size         = pkt->size;
-    uint8_t *buf     = pkt->data;
+    const uint8_t *buf = pkt->data;
     MpegMuxContext *s = ctx->priv_data;
     AVStream *st      = ctx->streams[stream_index];
     StreamInfo *stream = st->priv_data;
diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c
index 18e8f7e45f..c964d58c8e 100644
--- a/libavformat/mpegtsenc.c
+++ b/libavformat/mpegtsenc.c
@@ -1836,7 +1836,7 @@ static int mpegts_write_packet_internal(AVFormatContext *s, AVPacket *pkt)
 {
     AVStream *st = s->streams[pkt->stream_index];
     int size = pkt->size;
-    uint8_t *buf = pkt->data;
+    const uint8_t *buf = pkt->data;
     uint8_t *data = NULL;
     MpegTSWrite *ts = s->priv_data;
     MpegTSWriteStream *ts_st = st->priv_data;
diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c
index 7041659143..2d08dd6d40 100644
--- a/libavformat/mxfenc.c
+++ b/libavformat/mxfenc.c
@@ -2806,8 +2806,8 @@ static void mxf_write_d10_audio_packet(AVFormatContext *s, AVStream *st, AVPacke
     MXFContext *mxf = s->priv_data;
     AVIOContext *pb = s->pb;
     int frame_size = pkt->size / st->codecpar->block_align;
-    uint8_t *samples = pkt->data;
-    uint8_t *end = pkt->data + pkt->size;
+    const uint8_t *samples = pkt->data;
+    const uint8_t *const end = pkt->data + pkt->size;
     int i;
 
     klv_encode_ber4_length(pb, 4 + frame_size*4*8);
diff --git a/libavformat/supenc.c b/libavformat/supenc.c
index 1ca19fa161..c45d8a5321 100644
--- a/libavformat/supenc.c
+++ b/libavformat/supenc.c
@@ -27,7 +27,7 @@
 
 static int sup_write_packet(AVFormatContext *s, AVPacket *pkt)
 {
-    uint8_t *data = pkt->data;
+    const uint8_t *data = pkt->data;
     size_t size = pkt->size;
     uint32_t pts = 0, dts = 0;
 
-- 
2.34.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [FFmpeg-devel] [PATCH 2/4] avcodec/dcadec: Treat the input packet's data as const
  2022-07-04 10:58 [FFmpeg-devel] [PATCH 1/4] avformat/(mpeg|mpegts|mxf|sup)enc: Use const uint8_t* to access pkt data Andreas Rheinhardt
@ 2022-07-04 11:02 ` Andreas Rheinhardt
  2022-07-04 11:02 ` [FFmpeg-devel] [PATCH 3/4] avcodec/decoders: Use const uint8_t* to access input packet data Andreas Rheinhardt
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Andreas Rheinhardt @ 2022-07-04 11:02 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

A decoder's input packet need not be writable, so we must not modify
the data.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/dca_core.c |  4 ++--
 libavcodec/dca_core.h |  4 ++--
 libavcodec/dca_lbr.c  |  2 +-
 libavcodec/dca_lbr.h  |  2 +-
 libavcodec/dca_xll.c  | 10 +++++-----
 libavcodec/dca_xll.h  |  2 +-
 libavcodec/dcadec.c   |  2 +-
 7 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/libavcodec/dca_core.c b/libavcodec/dca_core.c
index 34b5b63159..2b19807ef4 100644
--- a/libavcodec/dca_core.c
+++ b/libavcodec/dca_core.c
@@ -1797,7 +1797,7 @@ static int parse_optional_info(DCACoreDecoder *s)
     return 0;
 }
 
-int ff_dca_core_parse(DCACoreDecoder *s, uint8_t *data, int size)
+int ff_dca_core_parse(DCACoreDecoder *s, const uint8_t *data, int size)
 {
     int ret;
 
@@ -1830,7 +1830,7 @@ int ff_dca_core_parse(DCACoreDecoder *s, uint8_t *data, int size)
     return 0;
 }
 
-int ff_dca_core_parse_exss(DCACoreDecoder *s, uint8_t *data, DCAExssAsset *asset)
+int ff_dca_core_parse_exss(DCACoreDecoder *s, const uint8_t *data, DCAExssAsset *asset)
 {
     AVCodecContext *avctx = s->avctx;
     DCAContext *dca = avctx->priv_data;
diff --git a/libavcodec/dca_core.h b/libavcodec/dca_core.h
index cb8e38a94b..a01d642e77 100644
--- a/libavcodec/dca_core.h
+++ b/libavcodec/dca_core.h
@@ -245,8 +245,8 @@ static inline void ff_dca_core_dequantize(int32_t *output, const int32_t *input,
     }
 }
 
-int ff_dca_core_parse(DCACoreDecoder *s, uint8_t *data, int size);
-int ff_dca_core_parse_exss(DCACoreDecoder *s, uint8_t *data, DCAExssAsset *asset);
+int ff_dca_core_parse(DCACoreDecoder *s, const uint8_t *data, int size);
+int ff_dca_core_parse_exss(DCACoreDecoder *s, const uint8_t *data, DCAExssAsset *asset);
 int ff_dca_core_filter_fixed(DCACoreDecoder *s, int x96_synth);
 int ff_dca_core_filter_frame(DCACoreDecoder *s, AVFrame *frame);
 av_cold void ff_dca_core_flush(DCACoreDecoder *s);
diff --git a/libavcodec/dca_lbr.c b/libavcodec/dca_lbr.c
index 06c10b96f5..2b8594cd75 100644
--- a/libavcodec/dca_lbr.c
+++ b/libavcodec/dca_lbr.c
@@ -1156,7 +1156,7 @@ static int parse_decoder_init(DCALbrDecoder *s, GetByteContext *gb)
     return 0;
 }
 
-int ff_dca_lbr_parse(DCALbrDecoder *s, uint8_t *data, DCAExssAsset *asset)
+int ff_dca_lbr_parse(DCALbrDecoder *s, const uint8_t *data, DCAExssAsset *asset)
 {
     struct {
         LBRChunk    lfe;
diff --git a/libavcodec/dca_lbr.h b/libavcodec/dca_lbr.h
index db7a676c31..9e1abec0b4 100644
--- a/libavcodec/dca_lbr.h
+++ b/libavcodec/dca_lbr.h
@@ -124,7 +124,7 @@ typedef struct DCALbrDecoder {
     DCADSPContext       *dcadsp;
 } DCALbrDecoder;
 
-int ff_dca_lbr_parse(DCALbrDecoder *s, uint8_t *data, DCAExssAsset *asset);
+int ff_dca_lbr_parse(DCALbrDecoder *s, const uint8_t *data, DCAExssAsset *asset);
 int ff_dca_lbr_filter_frame(DCALbrDecoder *s, AVFrame *frame);
 av_cold void ff_dca_lbr_flush(DCALbrDecoder *s);
 av_cold void ff_dca_lbr_init_tables(void);
diff --git a/libavcodec/dca_xll.c b/libavcodec/dca_xll.c
index aaccb7a43d..17626b3614 100644
--- a/libavcodec/dca_xll.c
+++ b/libavcodec/dca_xll.c
@@ -1040,7 +1040,7 @@ static int parse_band_data(DCAXllDecoder *s)
     return 0;
 }
 
-static int parse_frame(DCAXllDecoder *s, uint8_t *data, int size, DCAExssAsset *asset)
+static int parse_frame(DCAXllDecoder *s, const uint8_t *data, int size, DCAExssAsset *asset)
 {
     int ret;
 
@@ -1067,7 +1067,7 @@ static void clear_pbr(DCAXllDecoder *s)
     s->pbr_delay = 0;
 }
 
-static int copy_to_pbr(DCAXllDecoder *s, uint8_t *data, int size, int delay)
+static int copy_to_pbr(DCAXllDecoder *s, const uint8_t *data, int size, int delay)
 {
     if (size > DCA_XLL_PBR_BUFFER_MAX)
         return AVERROR(ENOSPC);
@@ -1081,7 +1081,7 @@ static int copy_to_pbr(DCAXllDecoder *s, uint8_t *data, int size, int delay)
     return 0;
 }
 
-static int parse_frame_no_pbr(DCAXllDecoder *s, uint8_t *data, int size, DCAExssAsset *asset)
+static int parse_frame_no_pbr(DCAXllDecoder *s, const uint8_t *data, int size, DCAExssAsset *asset)
 {
     int ret = parse_frame(s, data, size, asset);
 
@@ -1119,7 +1119,7 @@ static int parse_frame_no_pbr(DCAXllDecoder *s, uint8_t *data, int size, DCAExss
     return 0;
 }
 
-static int parse_frame_pbr(DCAXllDecoder *s, uint8_t *data, int size, DCAExssAsset *asset)
+static int parse_frame_pbr(DCAXllDecoder *s, const uint8_t *data, int size, DCAExssAsset *asset)
 {
     int ret;
 
@@ -1160,7 +1160,7 @@ fail:
     return ret;
 }
 
-int ff_dca_xll_parse(DCAXllDecoder *s, uint8_t *data, DCAExssAsset *asset)
+int ff_dca_xll_parse(DCAXllDecoder *s, const uint8_t *data, DCAExssAsset *asset)
 {
     int ret;
 
diff --git a/libavcodec/dca_xll.h b/libavcodec/dca_xll.h
index d223133019..d7c1a13ec8 100644
--- a/libavcodec/dca_xll.h
+++ b/libavcodec/dca_xll.h
@@ -139,7 +139,7 @@ typedef struct DCAXllDecoder {
     int32_t *output_samples[DCA_SPEAKER_COUNT];
 } DCAXllDecoder;
 
-int ff_dca_xll_parse(DCAXllDecoder *s, uint8_t *data, DCAExssAsset *asset);
+int ff_dca_xll_parse(DCAXllDecoder *s, const uint8_t *data, DCAExssAsset *asset);
 int ff_dca_xll_filter_frame(DCAXllDecoder *s, AVFrame *frame);
 av_cold void ff_dca_xll_flush(DCAXllDecoder *s);
 av_cold void ff_dca_xll_close(DCAXllDecoder *s);
diff --git a/libavcodec/dcadec.c b/libavcodec/dcadec.c
index 38ea8733e4..498e0c86f3 100644
--- a/libavcodec/dcadec.c
+++ b/libavcodec/dcadec.c
@@ -151,7 +151,7 @@ static int dcadec_decode_frame(AVCodecContext *avctx, AVFrame *frame,
                                int *got_frame_ptr, AVPacket *avpkt)
 {
     DCAContext *s = avctx->priv_data;
-    uint8_t *input = avpkt->data;
+    const uint8_t *input = avpkt->data;
     int input_size = avpkt->size;
     int i, ret, prev_packet = s->packet;
     uint32_t mrk;
-- 
2.34.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [FFmpeg-devel] [PATCH 3/4] avcodec/decoders: Use const uint8_t* to access input packet data
  2022-07-04 10:58 [FFmpeg-devel] [PATCH 1/4] avformat/(mpeg|mpegts|mxf|sup)enc: Use const uint8_t* to access pkt data Andreas Rheinhardt
  2022-07-04 11:02 ` [FFmpeg-devel] [PATCH 2/4] avcodec/dcadec: Treat the input packet's data as const Andreas Rheinhardt
@ 2022-07-04 11:02 ` Andreas Rheinhardt
  2022-07-04 11:02 ` [FFmpeg-devel] [PATCH 4/4] avcodec/mscc: Don't modify input packet Andreas Rheinhardt
  2022-07-04 11:15 ` [FFmpeg-devel] [PATCH 1/4] avformat/(mpeg|mpegts|mxf|sup)enc: Use const uint8_t* to access pkt data Paul B Mahol
  3 siblings, 0 replies; 5+ messages in thread
From: Andreas Rheinhardt @ 2022-07-04 11:02 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

These packets need not be writable, so we must not modify them.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/ansi.c           | 2 +-
 libavcodec/cllc.c           | 2 +-
 libavcodec/diracdec.c       | 2 +-
 libavcodec/fic.c            | 8 ++++----
 libavcodec/hqx.c            | 2 +-
 libavcodec/hqx.h            | 2 +-
 libavcodec/libdavs2.c       | 2 +-
 libavcodec/libjxldec.c      | 2 +-
 libavcodec/libopenjpegdec.c | 2 +-
 libavcodec/msrle.c          | 2 +-
 libavcodec/mwsc.c           | 2 +-
 libavcodec/v410dec.c        | 4 ++--
 libavcodec/y41pdec.c        | 2 +-
 13 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/libavcodec/ansi.c b/libavcodec/ansi.c
index 909ebe7396..ff4437cc61 100644
--- a/libavcodec/ansi.c
+++ b/libavcodec/ansi.c
@@ -358,7 +358,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe,
                         int *got_frame, AVPacket *avpkt)
 {
     AnsiContext *s = avctx->priv_data;
-    uint8_t *buf = avpkt->data;
+    const uint8_t *buf = avpkt->data;
     int buf_size = avpkt->size;
     const uint8_t *buf_end   = buf+buf_size;
     int ret, i, count;
diff --git a/libavcodec/cllc.c b/libavcodec/cllc.c
index f7283ca4f8..4866c5b2d4 100644
--- a/libavcodec/cllc.c
+++ b/libavcodec/cllc.c
@@ -359,7 +359,7 @@ static int cllc_decode_frame(AVCodecContext *avctx, AVFrame *pic,
                              int *got_picture_ptr, AVPacket *avpkt)
 {
     CLLCContext *ctx = avctx->priv_data;
-    uint8_t *src = avpkt->data;
+    const uint8_t *src = avpkt->data;
     uint32_t info_tag, info_offset;
     int data_size;
     GetBitContext gb;
diff --git a/libavcodec/diracdec.c b/libavcodec/diracdec.c
index 9f3c930913..50d1d2e1d3 100644
--- a/libavcodec/diracdec.c
+++ b/libavcodec/diracdec.c
@@ -2264,7 +2264,7 @@ static int dirac_decode_frame(AVCodecContext *avctx, AVFrame *picture,
                               int *got_frame, AVPacket *pkt)
 {
     DiracContext *s     = avctx->priv_data;
-    uint8_t *buf        = pkt->data;
+    const uint8_t *buf  = pkt->data;
     int buf_size        = pkt->size;
     int i, buf_idx      = 0;
     int ret;
diff --git a/libavcodec/fic.c b/libavcodec/fic.c
index e56a1a323c..491f63ea0c 100644
--- a/libavcodec/fic.c
+++ b/libavcodec/fic.c
@@ -32,7 +32,7 @@
 
 typedef struct FICThreadContext {
     DECLARE_ALIGNED(16, int16_t, block)[64];
-    uint8_t *src;
+    const uint8_t *src;
     int slice_h;
     int src_size;
     int y_off;
@@ -174,7 +174,7 @@ static int fic_decode_slice(AVCodecContext *avctx, void *tdata)
     FICContext *ctx        = avctx->priv_data;
     FICThreadContext *tctx = tdata;
     GetBitContext gb;
-    uint8_t *src = tctx->src;
+    const uint8_t *src = tctx->src;
     int slice_h  = tctx->slice_h;
     int src_size = tctx->src_size;
     int y_off    = tctx->y_off;
@@ -271,14 +271,14 @@ static int fic_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
                             int *got_frame, AVPacket *avpkt)
 {
     FICContext *ctx = avctx->priv_data;
-    uint8_t *src = avpkt->data;
+    const uint8_t *src = avpkt->data;
     int ret;
     int slice, nslices;
     int msize;
     int tsize;
     int cur_x, cur_y;
     int skip_cursor = ctx->skip_cursor;
-    uint8_t *sdata;
+    const uint8_t *sdata;
 
     if ((ret = ff_reget_buffer(avctx, ctx->frame, 0)) < 0)
         return ret;
diff --git a/libavcodec/hqx.c b/libavcodec/hqx.c
index c41fe61387..596b8a7ed3 100644
--- a/libavcodec/hqx.c
+++ b/libavcodec/hqx.c
@@ -404,7 +404,7 @@ static int hqx_decode_frame(AVCodecContext *avctx, AVFrame *frame,
                             int *got_picture_ptr, AVPacket *avpkt)
 {
     HQXContext *ctx = avctx->priv_data;
-    uint8_t *src = avpkt->data;
+    const uint8_t *src = avpkt->data;
     uint32_t info_tag;
     int data_start;
     int i, ret;
diff --git a/libavcodec/hqx.h b/libavcodec/hqx.h
index 3eddaafb29..155ec7f84f 100644
--- a/libavcodec/hqx.h
+++ b/libavcodec/hqx.h
@@ -70,7 +70,7 @@ typedef struct HQXContext {
     int format, dcb, width, height;
     int interlaced;
 
-    uint8_t *src;
+    const uint8_t *src;
     unsigned int data_size;
     uint32_t slice_off[17];
 
diff --git a/libavcodec/libdavs2.c b/libavcodec/libdavs2.c
index c2040775ae..918e48502c 100644
--- a/libavcodec/libdavs2.c
+++ b/libavcodec/libdavs2.c
@@ -190,7 +190,7 @@ static int davs2_decode_frame(AVCodecContext *avctx, AVFrame *frame,
 {
     DAVS2Context *cad      = avctx->priv_data;
     int           buf_size = avpkt->size;
-    uint8_t      *buf_ptr  = avpkt->data;
+    const uint8_t *buf_ptr = avpkt->data;
     int           ret      = DAVS2_DEFAULT;
 
     /* end of stream, output what is still in the buffers */
diff --git a/libavcodec/libjxldec.c b/libavcodec/libjxldec.c
index d516d3b0ac..829478bbde 100644
--- a/libavcodec/libjxldec.c
+++ b/libavcodec/libjxldec.c
@@ -321,7 +321,7 @@ static int libjxl_color_encoding_event(AVCodecContext *avctx, AVFrame *frame)
 static int libjxl_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *avpkt)
 {
     LibJxlDecodeContext *ctx = avctx->priv_data;
-    uint8_t *buf = avpkt->data;
+    const uint8_t *buf = avpkt->data;
     size_t remaining = avpkt->size;
     JxlDecoderStatus jret;
     int ret;
diff --git a/libavcodec/libopenjpegdec.c b/libavcodec/libopenjpegdec.c
index 58715b43ee..58ac6c413a 100644
--- a/libavcodec/libopenjpegdec.c
+++ b/libavcodec/libopenjpegdec.c
@@ -321,7 +321,7 @@ static av_cold int libopenjpeg_decode_init(AVCodecContext *avctx)
 static int libopenjpeg_decode_frame(AVCodecContext *avctx, AVFrame *picture,
                                     int *got_frame, AVPacket *avpkt)
 {
-    uint8_t *buf            = avpkt->data;
+    const uint8_t *buf      = avpkt->data;
     int buf_size            = avpkt->size;
     LibOpenJPEGContext *ctx = avctx->priv_data;
     const AVPixFmtDescriptor *desc;
diff --git a/libavcodec/msrle.c b/libavcodec/msrle.c
index 041d0c9493..f9d7141c03 100644
--- a/libavcodec/msrle.c
+++ b/libavcodec/msrle.c
@@ -108,7 +108,7 @@ static int msrle_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
     if (avctx->height * istride == avpkt->size) { /* assume uncompressed */
         int linesize = av_image_get_linesize(avctx->pix_fmt, avctx->width, 0);
         uint8_t *ptr = s->frame->data[0];
-        uint8_t *buf = avpkt->data + (avctx->height-1)*istride;
+        const uint8_t *buf = avpkt->data + (avctx->height-1)*istride;
         int i, j;
 
         if (linesize < 0)
diff --git a/libavcodec/mwsc.c b/libavcodec/mwsc.c
index d89fbde4e2..499b220a07 100644
--- a/libavcodec/mwsc.c
+++ b/libavcodec/mwsc.c
@@ -92,7 +92,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
 {
     MWSCContext *s = avctx->priv_data;
     z_stream *const zstream = &s->zstream.zstream;
-    uint8_t *buf = avpkt->data;
+    const uint8_t *buf = avpkt->data;
     int buf_size = avpkt->size;
     GetByteContext gb;
     GetByteContext gbp;
diff --git a/libavcodec/v410dec.c b/libavcodec/v410dec.c
index f6d675c508..e67cb820ba 100644
--- a/libavcodec/v410dec.c
+++ b/libavcodec/v410dec.c
@@ -28,7 +28,7 @@
 
 typedef struct ThreadData {
     AVFrame *frame;
-    uint8_t *buf;
+    const uint8_t *buf;
     int stride;
 } ThreadData;
 
@@ -89,7 +89,7 @@ static int v410_decode_frame(AVCodecContext *avctx, AVFrame *pic,
                              int *got_frame, AVPacket *avpkt)
 {
     ThreadData td;
-    uint8_t *src = avpkt->data;
+    const uint8_t *src = avpkt->data;
     int ret;
     int thread_count = av_clip(avctx->thread_count, 1, avctx->height/4);
 
diff --git a/libavcodec/y41pdec.c b/libavcodec/y41pdec.c
index ca81dda0e8..4b1e64aff9 100644
--- a/libavcodec/y41pdec.c
+++ b/libavcodec/y41pdec.c
@@ -39,7 +39,7 @@ static av_cold int y41p_decode_init(AVCodecContext *avctx)
 static int y41p_decode_frame(AVCodecContext *avctx, AVFrame *pic,
                              int *got_frame, AVPacket *avpkt)
 {
-    uint8_t *src = avpkt->data;
+    const uint8_t *src = avpkt->data;
     uint8_t *y, *u, *v;
     int i, j, ret;
 
-- 
2.34.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [FFmpeg-devel] [PATCH 4/4] avcodec/mscc: Don't modify input packet
  2022-07-04 10:58 [FFmpeg-devel] [PATCH 1/4] avformat/(mpeg|mpegts|mxf|sup)enc: Use const uint8_t* to access pkt data Andreas Rheinhardt
  2022-07-04 11:02 ` [FFmpeg-devel] [PATCH 2/4] avcodec/dcadec: Treat the input packet's data as const Andreas Rheinhardt
  2022-07-04 11:02 ` [FFmpeg-devel] [PATCH 3/4] avcodec/decoders: Use const uint8_t* to access input packet data Andreas Rheinhardt
@ 2022-07-04 11:02 ` Andreas Rheinhardt
  2022-07-04 11:15 ` [FFmpeg-devel] [PATCH 1/4] avformat/(mpeg|mpegts|mxf|sup)enc: Use const uint8_t* to access pkt data Paul B Mahol
  3 siblings, 0 replies; 5+ messages in thread
From: Andreas Rheinhardt @ 2022-07-04 11:02 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Andreas Rheinhardt

This packet may not be writable, hence we must not write to it.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/mscc.c | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/libavcodec/mscc.c b/libavcodec/mscc.c
index ac67ec9c47..3666b881a1 100644
--- a/libavcodec/mscc.c
+++ b/libavcodec/mscc.c
@@ -134,7 +134,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
 {
     MSCCContext *s = avctx->priv_data;
     z_stream *const zstream = &s->zstream.zstream;
-    uint8_t *buf = avpkt->data;
+    const uint8_t *buf = avpkt->data;
     int buf_size = avpkt->size;
     GetByteContext gb;
     PutByteContext pb;
@@ -146,12 +146,6 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
     if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
         return ret;
 
-    if (avctx->codec_id == AV_CODEC_ID_MSCC) {
-        avpkt->data[2] ^= avpkt->data[0];
-        buf += 2;
-        buf_size -= 2;
-    }
-
     if (avctx->pix_fmt == AV_PIX_FMT_PAL8) {
         size_t size;
         const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, &size);
@@ -172,12 +166,25 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
         av_log(avctx, AV_LOG_ERROR, "Inflate reset error: %d\n", ret);
         return AVERROR_UNKNOWN;
     }
-    zstream->next_in   = buf;
-    zstream->avail_in  = buf_size;
     zstream->next_out  = s->decomp_buf;
     zstream->avail_out = s->decomp_size;
+    if (avctx->codec_id == AV_CODEC_ID_MSCC) {
+        const uint8_t start = avpkt->data[2] ^ avpkt->data[0];
+
+        zstream->next_in  = &start;
+        zstream->avail_in = 1;
+        ret = inflate(zstream, Z_NO_FLUSH);
+        if (ret != Z_OK || zstream->avail_in != 0)
+            goto inflate_error;
+
+        buf      += 3;
+        buf_size -= 3;
+    }
+    zstream->next_in   = buf;
+    zstream->avail_in  = buf_size;
     ret = inflate(zstream, Z_FINISH);
     if (ret != Z_STREAM_END) {
+inflate_error:
         av_log(avctx, AV_LOG_ERROR, "Inflate error: %d\n", ret);
         return AVERROR_UNKNOWN;
     }
-- 
2.34.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [FFmpeg-devel] [PATCH 1/4] avformat/(mpeg|mpegts|mxf|sup)enc: Use const uint8_t* to access pkt data
  2022-07-04 10:58 [FFmpeg-devel] [PATCH 1/4] avformat/(mpeg|mpegts|mxf|sup)enc: Use const uint8_t* to access pkt data Andreas Rheinhardt
                   ` (2 preceding siblings ...)
  2022-07-04 11:02 ` [FFmpeg-devel] [PATCH 4/4] avcodec/mscc: Don't modify input packet Andreas Rheinhardt
@ 2022-07-04 11:15 ` Paul B Mahol
  3 siblings, 0 replies; 5+ messages in thread
From: Paul B Mahol @ 2022-07-04 11:15 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Andreas Rheinhardt

lgtm for set
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-07-04 11:12 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-04 10:58 [FFmpeg-devel] [PATCH 1/4] avformat/(mpeg|mpegts|mxf|sup)enc: Use const uint8_t* to access pkt data Andreas Rheinhardt
2022-07-04 11:02 ` [FFmpeg-devel] [PATCH 2/4] avcodec/dcadec: Treat the input packet's data as const Andreas Rheinhardt
2022-07-04 11:02 ` [FFmpeg-devel] [PATCH 3/4] avcodec/decoders: Use const uint8_t* to access input packet data Andreas Rheinhardt
2022-07-04 11:02 ` [FFmpeg-devel] [PATCH 4/4] avcodec/mscc: Don't modify input packet Andreas Rheinhardt
2022-07-04 11:15 ` [FFmpeg-devel] [PATCH 1/4] avformat/(mpeg|mpegts|mxf|sup)enc: Use const uint8_t* to access pkt data Paul B Mahol

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git