From: Paul B Mahol <onemda@gmail.com> To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Subject: [FFmpeg-devel] [PATCH] ptrdiff_t related fixes and negative linesizes Date: Fri, 22 Sep 2023 19:37:58 +0200 Message-ID: <CAPYw7P7WJsL5LBP+wHifeTb3j7A9ApTRYEp2JdZOQomyU=y8Ew@mail.gmail.com> (raw) [-- Attachment #1: Type: text/plain, Size: 23 bytes --] Hi, Patches attached. [-- Attachment #2: 0001-avfilter-avcodec-use-ptrdiff_t-instead-of-int-for-li.patch --] [-- Type: text/x-patch, Size: 59551 bytes --] From c5ae33c4e36a476c44ee4c64b5889ade2ecfe701 Mon Sep 17 00:00:00 2001 From: Paul B Mahol <onemda@gmail.com> Date: Fri, 22 Sep 2023 09:15:13 +0200 Subject: [PATCH 1/3] avfilter/avcodec: use ptrdiff_t instead of int for linesize Signed-off-by: Paul B Mahol <onemda@gmail.com> --- libavcodec/aic.c | 2 +- libavcodec/argo.c | 10 ++++----- libavcodec/bink.c | 6 ++--- libavcodec/cdgraphics.c | 6 ++--- libavcodec/cfhd.c | 4 ++-- libavcodec/dxtory.c | 22 +++++++++---------- libavcodec/fic.c | 2 +- libavcodec/gif.c | 18 +++++++-------- libavcodec/gifdec.c | 7 +++--- libavcodec/ljpegenc.c | 8 ++++--- libavcodec/magicyuvenc.c | 4 ++-- libavcodec/mdec.c | 2 +- libavcodec/roqvideo.c | 10 +++++---- libavcodec/roqvideoenc.c | 2 +- libavcodec/smc.c | 21 ++++++++---------- libavfilter/vf_codecview.c | 12 +++++----- libavfilter/vf_colorcontrast.c | 16 +++++++------- libavfilter/vf_colorcorrect.c | 36 +++++++++++++++--------------- libavfilter/vf_colorize.c | 12 +++++----- libavfilter/vf_fillborders.c | 28 ++++++++++++------------ libavfilter/vf_huesaturation.c | 2 +- libavfilter/vf_lut3d.c | 14 ++++++------ libavfilter/vf_monochrome.c | 20 ++++++++--------- libavfilter/vf_paletteuse.c | 2 +- libavfilter/vf_vibrance.c | 40 +++++++++++++++++----------------- libavfilter/vsrc_gradients.c | 12 +++++----- libavfilter/vsrc_testsrc.c | 38 ++++++++++++++++---------------- 27 files changed, 179 insertions(+), 177 deletions(-) diff --git a/libavcodec/aic.c b/libavcodec/aic.c index f8b0f60354..8f44e8031a 100644 --- a/libavcodec/aic.c +++ b/libavcodec/aic.c @@ -320,7 +320,7 @@ static int aic_decode_slice(AICContext *ctx, int mb_x, int mb_y, int16_t *base_c = ctx->data_ptr[COEFF_CHROMA]; int16_t *ext_y = ctx->data_ptr[COEFF_LUMA_EXT]; int16_t *ext_c = ctx->data_ptr[COEFF_CHROMA_EXT]; - const int ystride = ctx->frame->linesize[0]; + const ptrdiff_t ystride = ctx->frame->linesize[0]; if (last_row) { y_pos = (ctx->avctx->height - 16); diff --git a/libavcodec/argo.c b/libavcodec/argo.c index 589feed410..139d36b7b7 100644 --- a/libavcodec/argo.c +++ b/libavcodec/argo.c @@ -65,7 +65,7 @@ static int decode_avcf(AVCodecContext *avctx, AVFrame *frame) { ArgoContext *s = avctx->priv_data; GetByteContext *gb = &s->gb; - const int l = frame->linesize[0]; + const ptrdiff_t l = frame->linesize[0]; const uint8_t *map = gb->buffer; uint8_t *dst = frame->data[0]; @@ -95,7 +95,7 @@ static int decode_alcd(AVCodecContext *avctx, AVFrame *frame) ArgoContext *s = avctx->priv_data; GetByteContext *gb = &s->gb; GetByteContext sb; - const int l = frame->linesize[0]; + const ptrdiff_t l = frame->linesize[0]; const uint8_t *map = gb->buffer; uint8_t *dst = frame->data[0]; uint8_t codes = 0; @@ -144,7 +144,7 @@ static int decode_mad1(AVCodecContext *avctx, AVFrame *frame) GetByteContext *gb = &s->gb; const int w = frame->width; const int h = frame->height; - const int l = frame->linesize[0]; + const ptrdiff_t l = frame->linesize[0]; while (bytestream2_get_bytes_left(gb) > 0) { int size, type, pos, dy; @@ -354,7 +354,7 @@ static int decode_mad1_24(AVCodecContext *avctx, AVFrame *frame) GetByteContext *gb = &s->gb; const int w = frame->width; const int h = frame->height; - const int l = frame->linesize[0] / 4; + const ptrdiff_t l = frame->linesize[0] / 4; while (bytestream2_get_bytes_left(gb) > 0) { int osize, type, pos, dy, di, bcode, value, v14; @@ -562,7 +562,7 @@ static int decode_rle(AVCodecContext *avctx, AVFrame *frame) GetByteContext *gb = &s->gb; const int w = frame->width; const int h = frame->height; - const int l = frame->linesize[0]; + const ptrdiff_t l = frame->linesize[0]; uint8_t *dst = frame->data[0]; int pos = 0, y = 0; diff --git a/libavcodec/bink.c b/libavcodec/bink.c index 804c141981..0fcefd67eb 100644 --- a/libavcodec/bink.c +++ b/libavcodec/bink.c @@ -865,13 +865,13 @@ static int binkb_decode_plane(BinkContext *c, AVFrame *frame, GetBitContext *gb, int ybias = is_key ? -15 : 0; int qp, quant_idx, coef_count, coef_idx[64]; - const int stride = frame->linesize[plane_idx]; + const ptrdiff_t stride = frame->linesize[plane_idx]; int bw = is_chroma ? (c->avctx->width + 15) >> 4 : (c->avctx->width + 7) >> 3; int bh = is_chroma ? (c->avctx->height + 15) >> 4 : (c->avctx->height + 7) >> 3; binkb_init_bundles(c); ref_start = frame->data[plane_idx]; - ref_end = frame->data[plane_idx] + ((bh - 1) * frame->linesize[plane_idx] + bw - 1) * 8; + ref_end = frame->data[plane_idx] + ((bh - 1) * stride + bw - 1) * 8; for (i = 0; i < 64; i++) coordmap[i] = (i & 7) + (i >> 3) * stride; @@ -1031,7 +1031,7 @@ static int bink_decode_plane(BinkContext *c, AVFrame *frame, GetBitContext *gb, LOCAL_ALIGNED_16(int32_t, dctblock, [64]); int coordmap[64], quant_idx, coef_count, coef_idx[64]; - const int stride = frame->linesize[plane_idx]; + const ptrdiff_t stride = frame->linesize[plane_idx]; int bw = is_chroma ? (c->avctx->width + 15) >> 4 : (c->avctx->width + 7) >> 3; int bh = is_chroma ? (c->avctx->height + 15) >> 4 : (c->avctx->height + 7) >> 3; int width = c->avctx->width >> is_chroma; diff --git a/libavcodec/cdgraphics.c b/libavcodec/cdgraphics.c index 7b0666a3e2..3e5c485b9b 100644 --- a/libavcodec/cdgraphics.c +++ b/libavcodec/cdgraphics.c @@ -91,7 +91,7 @@ static av_cold int cdg_decode_init(AVCodecContext *avctx) static void cdg_border_preset(CDGraphicsContext *cc, uint8_t *data) { int y; - int lsize = cc->frame->linesize[0]; + ptrdiff_t lsize = cc->frame->linesize[0]; uint8_t *buf = cc->frame->data[0]; int color = data[0] & 0x0F; @@ -138,7 +138,7 @@ static int cdg_tile_block(CDGraphicsContext *cc, uint8_t *data, int b) int color; int x, y; int ai; - int stride = cc->frame->linesize[0]; + ptrdiff_t stride = cc->frame->linesize[0]; uint8_t *buf = cc->frame->data[0]; ri = (data[2] & 0x1F) * CDG_TILE_HEIGHT + cc->vscroll; @@ -210,7 +210,7 @@ static void cdg_scroll(CDGraphicsContext *cc, uint8_t *data, int color; int hscmd, h_off, hinc, vscmd, v_off, vinc; int y; - int stride = cc->frame->linesize[0]; + ptrdiff_t stride = cc->frame->linesize[0]; uint8_t *in = cc->frame->data[0]; uint8_t *out = new_frame->data[0]; diff --git a/libavcodec/cfhd.c b/libavcodec/cfhd.c index 42d7dcc3f6..4877a48336 100644 --- a/libavcodec/cfhd.c +++ b/libavcodec/cfhd.c @@ -151,7 +151,7 @@ static inline void process_alpha(int16_t *alpha, int width) static inline void process_bayer(AVFrame *frame, int bpc) { - const int linesize = frame->linesize[0]; + const ptrdiff_t linesize = frame->linesize[0]; uint16_t *r = (uint16_t *)frame->data[0]; uint16_t *g1 = (uint16_t *)(frame->data[0] + 2); uint16_t *g2 = (uint16_t *)(frame->data[0] + frame->linesize[0]); @@ -194,7 +194,7 @@ static inline void process_bayer(AVFrame *frame, int bpc) } static inline void interlaced_vertical_filter(int16_t *output, int16_t *low, int16_t *high, - int width, int linesize, int plane) + int width, ptrdiff_t linesize, int plane) { int i; int16_t even, odd; diff --git a/libavcodec/dxtory.c b/libavcodec/dxtory.c index f36420cdd9..cbc5356e63 100644 --- a/libavcodec/dxtory.c +++ b/libavcodec/dxtory.c @@ -491,7 +491,7 @@ static int dx2_decode_slice_5x5(GetBitContext *gb, AVFrame *frame, int x, y; int r, g, b; int width = frame->width; - int stride = frame->linesize[0]; + ptrdiff_t stride = frame->linesize[0]; uint8_t *dst = frame->data[0] + stride * line; for (y = 0; y < left && get_bits_left(gb) >= 3 * width; y++) { @@ -558,7 +558,7 @@ static int dx2_decode_slice_rgb(GetBitContext *gb, AVFrame *frame, { int x, y; int width = frame->width; - int stride = frame->linesize[0]; + ptrdiff_t stride = frame->linesize[0]; uint8_t *dst = frame->data[0] + stride * line; for (y = 0; y < left && get_bits_left(gb) >= 3 * width; y++) { @@ -599,9 +599,9 @@ static int dx2_decode_slice_410(GetBitContext *gb, AVFrame *frame, int x, y, i, j; int width = frame->width; - int ystride = frame->linesize[0]; - int ustride = frame->linesize[1]; - int vstride = frame->linesize[2]; + ptrdiff_t ystride = frame->linesize[0]; + ptrdiff_t ustride = frame->linesize[1]; + ptrdiff_t vstride = frame->linesize[2]; uint8_t *Y = frame->data[0] + ystride * line; uint8_t *U = frame->data[1] + (ustride >> 2) * line; @@ -679,9 +679,9 @@ static int dx2_decode_slice_420(GetBitContext *gb, AVFrame *frame, int width = frame->width; - int ystride = frame->linesize[0]; - int ustride = frame->linesize[1]; - int vstride = frame->linesize[2]; + ptrdiff_t ystride = frame->linesize[0]; + ptrdiff_t ustride = frame->linesize[1]; + ptrdiff_t vstride = frame->linesize[2]; uint8_t *Y = frame->data[0] + ystride * line; uint8_t *U = frame->data[1] + (ustride >> 1) * line; @@ -751,9 +751,9 @@ static int dx2_decode_slice_444(GetBitContext *gb, AVFrame *frame, int width = frame->width; - int ystride = frame->linesize[0]; - int ustride = frame->linesize[1]; - int vstride = frame->linesize[2]; + ptrdiff_t ystride = frame->linesize[0]; + ptrdiff_t ustride = frame->linesize[1]; + ptrdiff_t vstride = frame->linesize[2]; uint8_t *Y = frame->data[0] + ystride * line; uint8_t *U = frame->data[1] + ustride * line; diff --git a/libavcodec/fic.c b/libavcodec/fic.c index fb99802137..6010a111a0 100644 --- a/libavcodec/fic.c +++ b/libavcodec/fic.c @@ -185,7 +185,7 @@ static int fic_decode_slice(AVCodecContext *avctx, void *tdata) return ret; for (p = 0; p < 3; p++) { - int stride = ctx->frame->linesize[p]; + ptrdiff_t stride = ctx->frame->linesize[p]; uint8_t* dst = ctx->frame->data[p] + (y_off >> !!p) * stride; for (y = 0; y < (slice_h >> !!p); y += 8) { diff --git a/libavcodec/gif.c b/libavcodec/gif.c index 11add64468..e4083e266a 100644 --- a/libavcodec/gif.c +++ b/libavcodec/gif.c @@ -84,8 +84,8 @@ static void shrink_palette(const uint32_t *src, uint8_t *map, *palette_count = colors_seen; } -static void remap_frame_to_palette(const uint8_t *src, int src_linesize, - uint8_t *dst, int dst_linesize, +static void remap_frame_to_palette(const uint8_t *src, const ptrdiff_t src_linesize, + uint8_t *dst, const ptrdiff_t dst_linesize, int w, int h, uint8_t *map) { for (int i = 0; i < h; i++) @@ -94,7 +94,7 @@ static void remap_frame_to_palette(const uint8_t *src, int src_linesize, } static int is_image_translucent(AVCodecContext *avctx, - const uint8_t *buf, const int linesize) + const uint8_t *buf, const ptrdiff_t linesize) { GIFContext *s = avctx->priv_data; int trans = s->transparent_index; @@ -132,7 +132,7 @@ static int get_palette_transparency_index(const uint32_t *palette) return smallest_alpha < 128 ? transparent_color_index : -1; } -static int pick_palette_entry(const uint8_t *buf, int linesize, int w, int h) +static int pick_palette_entry(const uint8_t *buf, ptrdiff_t linesize, int w, int h) { int histogram[AVPALETTE_COUNT] = {0}; int x, y, i; @@ -149,7 +149,7 @@ static int pick_palette_entry(const uint8_t *buf, int linesize, int w, int h) } static void gif_crop_translucent(AVCodecContext *avctx, - const uint8_t *buf, const int linesize, + const uint8_t *buf, const ptrdiff_t linesize, int *width, int *height, int *x_start, int *y_start) { @@ -229,7 +229,7 @@ static void gif_crop_translucent(AVCodecContext *avctx, static void gif_crop_opaque(AVCodecContext *avctx, const uint32_t *palette, - const uint8_t *buf, const int linesize, + const uint8_t *buf, const ptrdiff_t linesize, int *width, int *height, int *x_start, int *y_start) { GIFContext *s = avctx->priv_data; @@ -237,7 +237,7 @@ static void gif_crop_opaque(AVCodecContext *avctx, /* Crop image */ if ((s->flags & GF_OFFSETTING) && s->last_frame && !palette) { const uint8_t *ref = s->last_frame->data[0]; - const int ref_linesize = s->last_frame->linesize[0]; + const ptrdiff_t ref_linesize = s->last_frame->linesize[0]; int x_end = avctx->width - 1, y_end = avctx->height - 1; @@ -289,7 +289,7 @@ static void gif_crop_opaque(AVCodecContext *avctx, static int gif_image_write_image(AVCodecContext *avctx, uint8_t **bytestream, uint8_t *end, const uint32_t *palette, - const uint8_t *buf, const int linesize, + const uint8_t *buf, const ptrdiff_t linesize, AVPacket *pkt) { GIFContext *s = avctx->priv_data; @@ -411,7 +411,7 @@ static int gif_image_write_image(AVCodecContext *avctx, ptr = buf + y_start*linesize + x_start; } if (honor_transparency) { - const int ref_linesize = s->last_frame->linesize[0]; + const ptrdiff_t ref_linesize = s->last_frame->linesize[0]; const uint8_t *ref = s->last_frame->data[0] + y_start*ref_linesize + x_start; for (y = 0; y < height; y++) { diff --git a/libavcodec/gifdec.c b/libavcodec/gifdec.c index 86aaa8881c..d90e467cac 100644 --- a/libavcodec/gifdec.c +++ b/libavcodec/gifdec.c @@ -95,7 +95,7 @@ static void gif_fill(AVFrame *picture, uint32_t color) static void gif_fill_rect(AVFrame *picture, uint32_t color, int l, int t, int w, int h) { - const int linesize = picture->linesize[0] / sizeof(uint32_t); + const ptrdiff_t linesize = picture->linesize[0] / sizeof(uint32_t); const uint32_t *py = (uint32_t *)picture->data[0] + t * linesize; const uint32_t *pr, *pb = py + h * linesize; uint32_t *px; @@ -110,7 +110,7 @@ static void gif_fill_rect(AVFrame *picture, uint32_t color, int l, int t, int w, } static void gif_copy_img_rect(const uint32_t *src, uint32_t *dst, - int linesize, int l, int t, int w, int h) + ptrdiff_t linesize, int l, int t, int w, int h) { const int y_start = t * linesize; const uint32_t *src_px, @@ -130,7 +130,8 @@ static void gif_copy_img_rect(const uint32_t *src, uint32_t *dst, static int gif_read_image(GifState *s, AVFrame *frame) { int left, top, width, height, bits_per_pixel, code_size, flags, pw; - int is_interleaved, has_local_palette, y, pass, y1, linesize, pal_size, lzwed_len; + int is_interleaved, has_local_palette, y, pass, y1, pal_size, lzwed_len; + ptrdiff_t linesize; uint32_t *ptr, *pal, *px, *pr, *ptr1; int ret; uint8_t *idx; diff --git a/libavcodec/ljpegenc.c b/libavcodec/ljpegenc.c index aa62beac71..f112f8549e 100644 --- a/libavcodec/ljpegenc.c +++ b/libavcodec/ljpegenc.c @@ -62,7 +62,7 @@ static int ljpeg_encode_bgr(AVCodecContext *avctx, PutBitContext *pb, LJpegEncContext *s = avctx->priv_data; const int width = frame->width; const int height = frame->height; - const int linesize = frame->linesize[0]; + const ptrdiff_t linesize = frame->linesize[0]; uint16_t (*buffer)[4] = s->scratch; int left[4], top[4], topleft[4]; int x, y, i; @@ -127,7 +127,8 @@ static inline void ljpeg_encode_yuv_mb(LJpegEncContext *s, PutBitContext *pb, if (mb_x == 0 || mb_y == 0) { for (i = 0; i < 3; i++) { const uint8_t *ptr; - int x, y, h, v, linesize; + ptrdiff_t linesize; + int x, y, h, v; h = s->hsample[i]; v = s->vsample[i]; linesize = frame->linesize[i]; @@ -161,7 +162,8 @@ static inline void ljpeg_encode_yuv_mb(LJpegEncContext *s, PutBitContext *pb, } else { for (i = 0; i < 3; i++) { const uint8_t *ptr; - int x, y, h, v, linesize; + ptrdiff_t linesize; + int x, y, h, v; h = s->hsample[i]; v = s->vsample[i]; linesize = frame->linesize[i]; diff --git a/libavcodec/magicyuvenc.c b/libavcodec/magicyuvenc.c index ccd6a54936..0cf9f299c9 100644 --- a/libavcodec/magicyuvenc.c +++ b/libavcodec/magicyuvenc.c @@ -504,11 +504,11 @@ static int predict_slice(AVCodecContext *avctx, void *tdata, if (s->correlate) { uint8_t *decorrelated[2] = { s->decorrelate_buf[0] + n * slice_height * aligned_width, s->decorrelate_buf[1] + n * slice_height * aligned_width }; - const int decorrelate_linesize = aligned_width; + const ptrdiff_t decorrelate_linesize = aligned_width; const uint8_t *const data[4] = { decorrelated[0], frame->data[0] + n * slice_height * frame->linesize[0], decorrelated[1], s->planes == 4 ? frame->data[3] + n * slice_height * frame->linesize[3] : NULL }; const uint8_t *r, *g, *b; - const int linesize[4] = { decorrelate_linesize, frame->linesize[0], + const ptrdiff_t linesize[4] = { decorrelate_linesize, frame->linesize[0], decorrelate_linesize, frame->linesize[3] }; g = frame->data[0] + n * slice_height * frame->linesize[0]; diff --git a/libavcodec/mdec.c b/libavcodec/mdec.c index 44b12471a9..666e02de8a 100644 --- a/libavcodec/mdec.c +++ b/libavcodec/mdec.c @@ -149,7 +149,7 @@ static inline int decode_mb(MDECContext *a, int16_t block[6][64]) static inline void idct_put(MDECContext *a, AVFrame *frame, int mb_x, int mb_y) { int16_t (*block)[64] = a->block; - int linesize = frame->linesize[0]; + const ptrdiff_t linesize = frame->linesize[0]; uint8_t *dest_y = frame->data[0] + (mb_y * 16* linesize ) + mb_x * 16; uint8_t *dest_cb = frame->data[1] + (mb_y * 8 * frame->linesize[1]) + mb_x * 8; diff --git a/libavcodec/roqvideo.c b/libavcodec/roqvideo.c index f9a3c8e083..eda4e90e2e 100644 --- a/libavcodec/roqvideo.c +++ b/libavcodec/roqvideo.c @@ -42,7 +42,8 @@ static inline void block_copy(unsigned char *out, unsigned char *in, void ff_apply_vector_2x2(RoqContext *ri, int x, int y, roq_cell *cell) { unsigned char *bptr; - int boffs,stride; + ptrdiff_t stride; + int boffs; stride = ri->current_frame->linesize[0]; boffs = y*stride + x; @@ -72,7 +73,8 @@ void ff_apply_vector_2x2(RoqContext *ri, int x, int y, roq_cell *cell) void ff_apply_vector_4x4(RoqContext *ri, int x, int y, roq_cell *cell) { unsigned char *bptr; - int boffs,stride; + ptrdiff_t stride; + int boffs; stride = ri->current_frame->linesize[0]; boffs = y*stride + x; @@ -122,8 +124,8 @@ static inline void apply_motion_generic(RoqContext *ri, int x, int y, int deltax } for(cp = 0; cp < 3; cp++) { - int outstride = ri->current_frame->linesize[cp]; - int instride = ri->last_frame ->linesize[cp]; + ptrdiff_t outstride = ri->current_frame->linesize[cp]; + ptrdiff_t instride = ri->last_frame ->linesize[cp]; block_copy(ri->current_frame->data[cp] + y*outstride + x, ri->last_frame->data[cp] + my*instride + mx, outstride, instride, sz); diff --git a/libavcodec/roqvideoenc.c b/libavcodec/roqvideoenc.c index c25aa39b73..57cbf0d959 100644 --- a/libavcodec/roqvideoenc.c +++ b/libavcodec/roqvideoenc.c @@ -297,7 +297,7 @@ static void get_frame_mb(const AVFrame *frame, int x, int y, uint8_t mb[], int d int i, j, cp; for (cp=0; cp<3; cp++) { - int stride = frame->linesize[cp]; + ptrdiff_t stride = frame->linesize[cp]; for (i=0; i<dim; i++) for (j=0; j<dim; j++) *mb++ = frame->data[cp][(y+i)*stride + x + j]; diff --git a/libavcodec/smc.c b/libavcodec/smc.c index 3e8a89ced1..f5fbed407a 100644 --- a/libavcodec/smc.c +++ b/libavcodec/smc.c @@ -77,7 +77,7 @@ static int smc_decode_stream(SmcContext *s, GetByteContext *gb) { int width = s->avctx->width; int height = s->avctx->height; - int stride = s->frame->linesize[0]; + ptrdiff_t stride = s->frame->linesize[0]; int i; int chunk_size; int buf_size = bytestream2_size(gb); @@ -90,14 +90,14 @@ static int smc_decode_stream(SmcContext *s, GetByteContext *gb) uint8_t * const pixels = s->frame->data[0]; - int image_size = height * s->frame->linesize[0]; - int row_ptr = 0; - int pixel_ptr = 0; + ptrdiff_t image_size = height * stride; + ptrdiff_t row_ptr = 0; + ptrdiff_t pixel_ptr = 0; int pixel_x, pixel_y; - int row_inc = stride - 4; - int block_ptr; - int prev_block_ptr; - int prev_block_ptr1, prev_block_ptr2; + ptrdiff_t row_inc = stride - 4; + ptrdiff_t block_ptr; + ptrdiff_t prev_block_ptr; + ptrdiff_t prev_block_ptr1, prev_block_ptr2; int prev_block_flag; int total_blocks; int color_table_index; /* indexes to color pair, quad, or octet tables */ @@ -123,11 +123,8 @@ static int smc_decode_stream(SmcContext *s, GetByteContext *gb) while (total_blocks) { /* sanity checks */ /* make sure the row pointer hasn't gone wild */ - if (row_ptr >= image_size) { - av_log(s->avctx, AV_LOG_ERROR, "just went out of bounds (row ptr = %d, height = %d)\n", - row_ptr, image_size); + if (row_ptr >= image_size) return AVERROR_INVALIDDATA; - } if (bytestream2_get_bytes_left(gb) < 1) { av_log(s->avctx, AV_LOG_ERROR, "input too small\n"); return AVERROR_INVALIDDATA; diff --git a/libavfilter/vf_codecview.c b/libavfilter/vf_codecview.c index 0c1ef21e28..55d9c8c04f 100644 --- a/libavfilter/vf_codecview.c +++ b/libavfilter/vf_codecview.c @@ -111,7 +111,7 @@ static int clip_line(int *sx, int *sy, int *ex, int *ey, int maxx) * @param color color of the arrow */ static void draw_line(uint8_t *buf, int sx, int sy, int ex, int ey, - int w, int h, int stride, int color) + int w, int h, ptrdiff_t stride, int color) { int x, y, fr, f; @@ -169,7 +169,7 @@ static void draw_line(uint8_t *buf, int sx, int sy, int ex, int ey, * @param color color of the arrow */ static void draw_arrow(uint8_t *buf, int sx, int sy, int ex, - int ey, int w, int h, int stride, int color, int tail, int direction) + int ey, int w, int h, ptrdiff_t stride, int color, int tail, int direction) { int dx,dy; @@ -206,7 +206,7 @@ static void draw_arrow(uint8_t *buf, int sx, int sy, int ex, draw_line(buf, sx, sy, ex, ey, w, h, stride, color); } -static void draw_block_rectangle(uint8_t *buf, int sx, int sy, int w, int h, int stride, int color) +static void draw_block_rectangle(uint8_t *buf, int sx, int sy, int w, int h, ptrdiff_t stride, int color) { for (int x = sx; x < sx + w; x++) buf[x] = color; @@ -244,8 +244,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) const int h = AV_CEIL_RSHIFT(frame->height, s->vsub); uint8_t *pu = frame->data[1]; uint8_t *pv = frame->data[2]; - const int lzu = frame->linesize[1]; - const int lzv = frame->linesize[2]; + const ptrdiff_t lzu = frame->linesize[1]; + const ptrdiff_t lzv = frame->linesize[2]; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { @@ -263,7 +263,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) AVFrameSideData *sd = av_frame_get_side_data(frame, AV_FRAME_DATA_VIDEO_ENC_PARAMS); if (sd) { AVVideoEncParams *par = (AVVideoEncParams*)sd->data; - const int stride = frame->linesize[0]; + const ptrdiff_t stride = frame->linesize[0]; if (par->nb_blocks) { for (int block_idx = 0; block_idx < par->nb_blocks; block_idx++) { diff --git a/libavfilter/vf_colorcontrast.c b/libavfilter/vf_colorcontrast.c index f05701c1a5..b086de71e5 100644 --- a/libavfilter/vf_colorcontrast.c +++ b/libavfilter/vf_colorcontrast.c @@ -96,9 +96,9 @@ static int colorcontrast_slice8(AVFilterContext *ctx, void *arg, int jobnr, int const int height = frame->height; const int slice_start = (height * jobnr) / nb_jobs; const int slice_end = (height * (jobnr + 1)) / nb_jobs; - const int glinesize = frame->linesize[0]; - const int blinesize = frame->linesize[1]; - const int rlinesize = frame->linesize[2]; + const ptrdiff_t glinesize = frame->linesize[0]; + const ptrdiff_t blinesize = frame->linesize[1]; + const ptrdiff_t rlinesize = frame->linesize[2]; uint8_t *gptr = frame->data[0] + slice_start * glinesize; uint8_t *bptr = frame->data[1] + slice_start * blinesize; uint8_t *rptr = frame->data[2] + slice_start * rlinesize; @@ -150,9 +150,9 @@ static int colorcontrast_slice16(AVFilterContext *ctx, void *arg, int jobnr, int const int height = frame->height; const int slice_start = (height * jobnr) / nb_jobs; const int slice_end = (height * (jobnr + 1)) / nb_jobs; - const int glinesize = frame->linesize[0] / 2; - const int blinesize = frame->linesize[1] / 2; - const int rlinesize = frame->linesize[2] / 2; + const ptrdiff_t glinesize = frame->linesize[0] / 2; + const ptrdiff_t blinesize = frame->linesize[1] / 2; + const ptrdiff_t rlinesize = frame->linesize[2] / 2; uint16_t *gptr = (uint16_t *)frame->data[0] + slice_start * glinesize; uint16_t *bptr = (uint16_t *)frame->data[1] + slice_start * blinesize; uint16_t *rptr = (uint16_t *)frame->data[2] + slice_start * rlinesize; @@ -203,7 +203,7 @@ static int colorcontrast_slice8p(AVFilterContext *ctx, void *arg, int jobnr, int const int height = frame->height; const int slice_start = (height * jobnr) / nb_jobs; const int slice_end = (height * (jobnr + 1)) / nb_jobs; - const int linesize = frame->linesize[0]; + const ptrdiff_t linesize = frame->linesize[0]; const uint8_t roffset = s->rgba_map[R]; const uint8_t goffset = s->rgba_map[G]; const uint8_t boffset = s->rgba_map[B]; @@ -255,7 +255,7 @@ static int colorcontrast_slice16p(AVFilterContext *ctx, void *arg, int jobnr, in const int height = frame->height; const int slice_start = (height * jobnr) / nb_jobs; const int slice_end = (height * (jobnr + 1)) / nb_jobs; - const int linesize = frame->linesize[0] / 2; + const ptrdiff_t linesize = frame->linesize[0] / 2; const uint8_t roffset = s->rgba_map[R]; const uint8_t goffset = s->rgba_map[G]; const uint8_t boffset = s->rgba_map[B]; diff --git a/libavfilter/vf_colorcorrect.c b/libavfilter/vf_colorcorrect.c index 0f2fe33c0f..1c4dea531b 100644 --- a/libavfilter/vf_colorcorrect.c +++ b/libavfilter/vf_colorcorrect.c @@ -69,8 +69,8 @@ static int average_slice8(AVFilterContext *ctx, void *arg, int jobnr, int nb_job const int height = s->planeheight[1]; const int slice_start = (height * jobnr) / nb_jobs; const int slice_end = (height * (jobnr + 1)) / nb_jobs; - const int ulinesize = frame->linesize[1]; - const int vlinesize = frame->linesize[2]; + const ptrdiff_t ulinesize = frame->linesize[1]; + const ptrdiff_t vlinesize = frame->linesize[2]; const uint8_t *uptr = (const uint8_t *)frame->data[1] + slice_start * ulinesize; const uint8_t *vptr = (const uint8_t *)frame->data[2] + slice_start * vlinesize; int sum_u = 0, sum_v = 0; @@ -100,8 +100,8 @@ static int average_slice16(AVFilterContext *ctx, void *arg, int jobnr, int nb_jo const int height = s->planeheight[1]; const int slice_start = (height * jobnr) / nb_jobs; const int slice_end = (height * (jobnr + 1)) / nb_jobs; - const int ulinesize = frame->linesize[1] / 2; - const int vlinesize = frame->linesize[2] / 2; + const ptrdiff_t ulinesize = frame->linesize[1] / 2; + const ptrdiff_t vlinesize = frame->linesize[2] / 2; const uint16_t *uptr = (const uint16_t *)frame->data[1] + slice_start * ulinesize; const uint16_t *vptr = (const uint16_t *)frame->data[2] + slice_start * vlinesize; int64_t sum_u = 0, sum_v = 0; @@ -131,8 +131,8 @@ static int minmax_slice8(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs const int height = s->planeheight[1]; const int slice_start = (height * jobnr) / nb_jobs; const int slice_end = (height * (jobnr + 1)) / nb_jobs; - const int ulinesize = frame->linesize[1]; - const int vlinesize = frame->linesize[2]; + const ptrdiff_t ulinesize = frame->linesize[1]; + const ptrdiff_t vlinesize = frame->linesize[2]; const uint8_t *uptr = (const uint8_t *)frame->data[1] + slice_start * ulinesize; const uint8_t *vptr = (const uint8_t *)frame->data[2] + slice_start * vlinesize; int min_u = 255, min_v = 255; @@ -167,8 +167,8 @@ static int minmax_slice16(AVFilterContext *ctx, void *arg, int jobnr, int nb_job const int height = s->planeheight[1]; const int slice_start = (height * jobnr) / nb_jobs; const int slice_end = (height * (jobnr + 1)) / nb_jobs; - const int ulinesize = frame->linesize[1] / 2; - const int vlinesize = frame->linesize[2] / 2; + const ptrdiff_t ulinesize = frame->linesize[1] / 2; + const ptrdiff_t vlinesize = frame->linesize[2] / 2; const uint16_t *uptr = (const uint16_t *)frame->data[1] + slice_start * ulinesize; const uint16_t *vptr = (const uint16_t *)frame->data[2] + slice_start * vlinesize; int min_u = INT_MAX, min_v = INT_MAX; @@ -201,8 +201,8 @@ static int median_8(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs) const float imax = s->imax; const int width = s->planewidth[1]; const int height = s->planeheight[1]; - const int ulinesize = frame->linesize[1]; - const int vlinesize = frame->linesize[2]; + const ptrdiff_t ulinesize = frame->linesize[1]; + const ptrdiff_t vlinesize = frame->linesize[2]; const uint8_t *uptr = (const uint8_t *)frame->data[1]; const uint8_t *vptr = (const uint8_t *)frame->data[2]; unsigned *uhistogram = s->uhistogram; @@ -255,8 +255,8 @@ static int median_16(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs) const float imax = s->imax; const int width = s->planewidth[1]; const int height = s->planeheight[1]; - const int ulinesize = frame->linesize[1] / 2; - const int vlinesize = frame->linesize[2] / 2; + const ptrdiff_t ulinesize = frame->linesize[1] / 2; + const ptrdiff_t vlinesize = frame->linesize[2] / 2; const uint16_t *uptr = (const uint16_t *)frame->data[1]; const uint16_t *vptr = (const uint16_t *)frame->data[2]; unsigned *uhistogram = s->uhistogram; @@ -323,9 +323,9 @@ static int colorcorrect_slice8(AVFilterContext *ctx, void *arg, int jobnr, int n const int height = s->planeheight[1]; const int slice_start = (height * jobnr) / nb_jobs; const int slice_end = (height * (jobnr + 1)) / nb_jobs; - const int ylinesize = frame->linesize[0]; - const int ulinesize = frame->linesize[1]; - const int vlinesize = frame->linesize[2]; + const ptrdiff_t ylinesize = frame->linesize[0]; + const ptrdiff_t ulinesize = frame->linesize[1]; + const ptrdiff_t vlinesize = frame->linesize[2]; uint8_t *yptr = frame->data[0] + slice_start * chroma_h * ylinesize; uint8_t *uptr = frame->data[1] + slice_start * ulinesize; uint8_t *vptr = frame->data[2] + slice_start * vlinesize; @@ -364,9 +364,9 @@ static int colorcorrect_slice16(AVFilterContext *ctx, void *arg, int jobnr, int const int height = s->planeheight[1]; const int slice_start = (height * jobnr) / nb_jobs; const int slice_end = (height * (jobnr + 1)) / nb_jobs; - const int ylinesize = frame->linesize[0] / 2; - const int ulinesize = frame->linesize[1] / 2; - const int vlinesize = frame->linesize[2] / 2; + const ptrdiff_t ylinesize = frame->linesize[0] / 2; + const ptrdiff_t ulinesize = frame->linesize[1] / 2; + const ptrdiff_t vlinesize = frame->linesize[2] / 2; uint16_t *yptr = (uint16_t *)frame->data[0] + slice_start * chroma_h * ylinesize; uint16_t *uptr = (uint16_t *)frame->data[1] + slice_start * ulinesize; uint16_t *vptr = (uint16_t *)frame->data[2] + slice_start * vlinesize; diff --git a/libavfilter/vf_colorize.c b/libavfilter/vf_colorize.c index ed14be9459..e6c563e3e2 100644 --- a/libavfilter/vf_colorize.c +++ b/libavfilter/vf_colorize.c @@ -52,7 +52,7 @@ static int colorizey_slice8(AVFilterContext *ctx, void *arg, int jobnr, int nb_j const int height = s->planeheight[0]; const int slice_start = (height * jobnr) / nb_jobs; const int slice_end = (height * (jobnr + 1)) / nb_jobs; - const int ylinesize = frame->linesize[0]; + const ptrdiff_t ylinesize = frame->linesize[0]; uint8_t *yptr = frame->data[0] + slice_start * ylinesize; const int yv = s->c[0]; const float mix = s->mix; @@ -75,7 +75,7 @@ static int colorizey_slice16(AVFilterContext *ctx, void *arg, int jobnr, int nb_ const int height = s->planeheight[0]; const int slice_start = (height * jobnr) / nb_jobs; const int slice_end = (height * (jobnr + 1)) / nb_jobs; - const int ylinesize = frame->linesize[0] / 2; + const ptrdiff_t ylinesize = frame->linesize[0] / 2; uint16_t *yptr = (uint16_t *)frame->data[0] + slice_start * ylinesize; const int yv = s->c[0]; const float mix = s->mix; @@ -98,8 +98,8 @@ static int colorize_slice8(AVFilterContext *ctx, void *arg, int jobnr, int nb_jo const int height = s->planeheight[1]; const int slice_start = (height * jobnr) / nb_jobs; const int slice_end = (height * (jobnr + 1)) / nb_jobs; - const int ulinesize = frame->linesize[1]; - const int vlinesize = frame->linesize[2]; + const ptrdiff_t ulinesize = frame->linesize[1]; + const ptrdiff_t vlinesize = frame->linesize[2]; uint8_t *uptr = frame->data[1] + slice_start * ulinesize; uint8_t *vptr = frame->data[2] + slice_start * vlinesize; const int u = s->c[1]; @@ -126,8 +126,8 @@ static int colorize_slice16(AVFilterContext *ctx, void *arg, int jobnr, int nb_j const int height = s->planeheight[1]; const int slice_start = (height * jobnr) / nb_jobs; const int slice_end = (height * (jobnr + 1)) / nb_jobs; - const int ulinesize = frame->linesize[1] / 2; - const int vlinesize = frame->linesize[2] / 2; + const ptrdiff_t ulinesize = frame->linesize[1] / 2; + const ptrdiff_t vlinesize = frame->linesize[2] / 2; uint16_t *uptr = (uint16_t *)frame->data[1] + slice_start * ulinesize; uint16_t *vptr = (uint16_t *)frame->data[2] + slice_start * vlinesize; const int u = s->c[1]; diff --git a/libavfilter/vf_fillborders.c b/libavfilter/vf_fillborders.c index 32ca7219bb..34e7b5f637 100644 --- a/libavfilter/vf_fillborders.c +++ b/libavfilter/vf_fillborders.c @@ -82,7 +82,7 @@ static void smear_borders8(FillBordersContext *s, AVFrame *frame) for (p = 0; p < s->nb_planes; p++) { uint8_t *ptr = frame->data[p]; - int linesize = frame->linesize[p]; + ptrdiff_t linesize = frame->linesize[p]; for (y = s->borders[p].top; y < s->planeheight[p] - s->borders[p].bottom; y++) { memset(ptr + y * linesize, @@ -112,7 +112,7 @@ static void smear_borders16(FillBordersContext *s, AVFrame *frame) for (p = 0; p < s->nb_planes; p++) { uint16_t *ptr = (uint16_t *)frame->data[p]; - int linesize = frame->linesize[p] / 2; + ptrdiff_t linesize = frame->linesize[p] / 2; for (y = s->borders[p].top; y < s->planeheight[p] - s->borders[p].bottom; y++) { for (x = 0; x < s->borders[p].left; x++) { @@ -144,7 +144,7 @@ static void mirror_borders8(FillBordersContext *s, AVFrame *frame) for (p = 0; p < s->nb_planes; p++) { uint8_t *ptr = frame->data[p]; - int linesize = frame->linesize[p]; + ptrdiff_t linesize = frame->linesize[p]; for (y = s->borders[p].top; y < s->planeheight[p] - s->borders[p].bottom; y++) { for (x = 0; x < s->borders[p].left; x++) { @@ -177,7 +177,7 @@ static void mirror_borders16(FillBordersContext *s, AVFrame *frame) for (p = 0; p < s->nb_planes; p++) { uint16_t *ptr = (uint16_t *)frame->data[p]; - int linesize = frame->linesize[p] / 2; + ptrdiff_t linesize = frame->linesize[p] / 2; for (y = s->borders[p].top; y < s->planeheight[p] - s->borders[p].bottom; y++) { for (x = 0; x < s->borders[p].left; x++) { @@ -211,7 +211,7 @@ static void fixed_borders8(FillBordersContext *s, AVFrame *frame) for (p = 0; p < s->nb_planes; p++) { uint8_t *ptr = frame->data[p]; uint8_t fill = s->fill[p]; - int linesize = frame->linesize[p]; + ptrdiff_t linesize = frame->linesize[p]; for (y = s->borders[p].top; y < s->planeheight[p] - s->borders[p].bottom; y++) { memset(ptr + y * linesize, fill, s->borders[p].left); @@ -236,7 +236,7 @@ static void fixed_borders16(FillBordersContext *s, AVFrame *frame) for (p = 0; p < s->nb_planes; p++) { uint16_t *ptr = (uint16_t *)frame->data[p]; uint16_t fill = s->fill[p] << (s->depth - 8); - int linesize = frame->linesize[p] / 2; + ptrdiff_t linesize = frame->linesize[p] / 2; for (y = s->borders[p].top; y < s->planeheight[p] - s->borders[p].bottom; y++) { for (x = 0; x < s->borders[p].left; x++) { @@ -268,7 +268,7 @@ static void reflect_borders8(FillBordersContext *s, AVFrame *frame) for (p = 0; p < s->nb_planes; p++) { uint8_t *ptr = frame->data[p]; - int linesize = frame->linesize[p]; + ptrdiff_t linesize = frame->linesize[p]; for (y = s->borders[p].top; y < s->planeheight[p] - s->borders[p].bottom; y++) { for (x = 0; x < s->borders[p].left; x++) { @@ -301,7 +301,7 @@ static void reflect_borders16(FillBordersContext *s, AVFrame *frame) for (p = 0; p < s->nb_planes; p++) { uint16_t *ptr = (uint16_t *)frame->data[p]; - int linesize = frame->linesize[p] / 2; + ptrdiff_t linesize = frame->linesize[p] / 2; for (y = s->borders[p].top; y < s->planeheight[p] - s->borders[p].bottom; y++) { for (x = 0; x < s->borders[p].left; x++) { @@ -334,7 +334,7 @@ static void wrap_borders8(FillBordersContext *s, AVFrame *frame) for (p = 0; p < s->nb_planes; p++) { uint8_t *ptr = frame->data[p]; - int linesize = frame->linesize[p]; + ptrdiff_t linesize = frame->linesize[p]; for (y = s->borders[p].top; y < s->planeheight[p] - s->borders[p].bottom; y++) { for (x = 0; x < s->borders[p].left; x++) { @@ -367,7 +367,7 @@ static void wrap_borders16(FillBordersContext *s, AVFrame *frame) for (p = 0; p < s->nb_planes; p++) { uint16_t *ptr = (uint16_t *)frame->data[p]; - int linesize = frame->linesize[p] / 2; + ptrdiff_t linesize = frame->linesize[p] / 2; for (y = s->borders[p].top; y < s->planeheight[p] - s->borders[p].bottom; y++) { for (x = 0; x < s->borders[p].left; x++) { @@ -411,7 +411,7 @@ static void fade_borders8(FillBordersContext *s, AVFrame *frame) for (p = 0; p < s->nb_planes; p++) { uint8_t *ptr = frame->data[p]; const uint8_t fill = s->fill[p]; - const int linesize = frame->linesize[p]; + const ptrdiff_t linesize = frame->linesize[p]; const int start_left = s->borders[p].left; const int start_right = s->planewidth[p] - s->borders[p].right; const int start_top = s->borders[p].top; @@ -453,7 +453,7 @@ static void fade_borders16(FillBordersContext *s, AVFrame *frame) for (p = 0; p < s->nb_planes; p++) { uint16_t *ptr = (uint16_t *)frame->data[p]; const uint16_t fill = s->fill[p] << (depth - 8); - const int linesize = frame->linesize[p] / 2; + const ptrdiff_t linesize = frame->linesize[p] / 2; const int start_left = s->borders[p].left; const int start_right = s->planewidth[p] - s->borders[p].right; const int start_top = s->borders[p].top; @@ -491,7 +491,7 @@ static void margins_borders8(FillBordersContext *s, AVFrame *frame) { for (int p = 0; p < s->nb_planes; p++) { uint8_t *ptr = (uint8_t *)frame->data[p]; - const int linesize = frame->linesize[p]; + const ptrdiff_t linesize = frame->linesize[p]; const int left = s->borders[p].left; const int right = s->borders[p].right; const int top = s->borders[p].top; @@ -536,7 +536,7 @@ static void margins_borders16(FillBordersContext *s, AVFrame *frame) { for (int p = 0; p < s->nb_planes; p++) { uint16_t *ptr = (uint16_t *)frame->data[p]; - const int linesize = frame->linesize[p] / 2; + const ptrdiff_t linesize = frame->linesize[p] / 2; const int left = s->borders[p].left; const int right = s->borders[p].right; const int top = s->borders[p].top; diff --git a/libavfilter/vf_huesaturation.c b/libavfilter/vf_huesaturation.c index 8dd81ad1a4..bdee961daa 100644 --- a/libavfilter/vf_huesaturation.c +++ b/libavfilter/vf_huesaturation.c @@ -105,7 +105,7 @@ static int do_slice_##name##_##xall(AVFilterContext *ctx, \ const int process_h = frame->height; \ const int slice_start = (process_h * jobnr ) / nb_jobs; \ const int slice_end = (process_h * (jobnr+1)) / nb_jobs; \ - const int linesize = frame->linesize[0] / sizeof(type); \ + const ptrdiff_t linesize = frame->linesize[0] / sizeof(type); \ type *row = (type *)frame->data[0] + linesize * slice_start; \ const uint8_t offset_r = s->rgba_map[R]; \ const uint8_t offset_g = s->rgba_map[G]; \ diff --git a/libavfilter/vf_lut3d.c b/libavfilter/vf_lut3d.c index db38d41932..4edcc2c7a7 100644 --- a/libavfilter/vf_lut3d.c +++ b/libavfilter/vf_lut3d.c @@ -1321,7 +1321,7 @@ const AVFilter ff_vf_lut3d = { static void update_clut_packed(LUT3DContext *lut3d, const AVFrame *frame) { const uint8_t *data = frame->data[0]; - const int linesize = frame->linesize[0]; + const ptrdiff_t linesize = frame->linesize[0]; const int w = lut3d->clut_width; const int step = lut3d->clut_step; const uint8_t *rgba_map = lut3d->clut_rgba_map; @@ -1360,9 +1360,9 @@ static void update_clut_planar(LUT3DContext *lut3d, const AVFrame *frame) const uint8_t *datag = frame->data[0]; const uint8_t *datab = frame->data[1]; const uint8_t *datar = frame->data[2]; - const int glinesize = frame->linesize[0]; - const int blinesize = frame->linesize[1]; - const int rlinesize = frame->linesize[2]; + const ptrdiff_t glinesize = frame->linesize[0]; + const ptrdiff_t blinesize = frame->linesize[1]; + const ptrdiff_t rlinesize = frame->linesize[2]; const int w = lut3d->clut_width; const int level = lut3d->lutsize; const int level2 = lut3d->lutsize2; @@ -1407,9 +1407,9 @@ static void update_clut_float(LUT3DContext *lut3d, const AVFrame *frame) const uint8_t *datag = frame->data[0]; const uint8_t *datab = frame->data[1]; const uint8_t *datar = frame->data[2]; - const int glinesize = frame->linesize[0]; - const int blinesize = frame->linesize[1]; - const int rlinesize = frame->linesize[2]; + const ptrdiff_t glinesize = frame->linesize[0]; + const ptrdiff_t blinesize = frame->linesize[1]; + const ptrdiff_t rlinesize = frame->linesize[2]; const int w = lut3d->clut_width; const int level = lut3d->lutsize; const int level2 = lut3d->lutsize2; diff --git a/libavfilter/vf_monochrome.c b/libavfilter/vf_monochrome.c index 0e184e08b3..05c001707a 100644 --- a/libavfilter/vf_monochrome.c +++ b/libavfilter/vf_monochrome.c @@ -89,9 +89,9 @@ static int monochrome_slice8(AVFilterContext *ctx, void *arg, int jobnr, int nb_ const int height = frame->height; const int slice_start = (height * jobnr) / nb_jobs; const int slice_end = (height * (jobnr + 1)) / nb_jobs; - const int ylinesize = frame->linesize[0]; - const int ulinesize = frame->linesize[1]; - const int vlinesize = frame->linesize[2]; + const ptrdiff_t ylinesize = frame->linesize[0]; + const ptrdiff_t ulinesize = frame->linesize[1]; + const ptrdiff_t vlinesize = frame->linesize[2]; uint8_t *yptr = frame->data[0] + slice_start * ylinesize; const float ihigh = 1.f - s->high; const float size = 1.f / s->size; @@ -128,9 +128,9 @@ static int monochrome_slice16(AVFilterContext *ctx, void *arg, int jobnr, int nb const int height = frame->height; const int slice_start = (height * jobnr) / nb_jobs; const int slice_end = (height * (jobnr + 1)) / nb_jobs; - const int ylinesize = frame->linesize[0] / 2; - const int ulinesize = frame->linesize[1] / 2; - const int vlinesize = frame->linesize[2] / 2; + const ptrdiff_t ylinesize = frame->linesize[0] / 2; + const ptrdiff_t ulinesize = frame->linesize[1] / 2; + const ptrdiff_t vlinesize = frame->linesize[2] / 2; uint16_t *yptr = (uint16_t *)frame->data[0] + slice_start * ylinesize; const float ihigh = 1.f - s->high; const float size = 1.f / s->size; @@ -166,8 +166,8 @@ static int clear_slice8(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs) const int height = AV_CEIL_RSHIFT(frame->height, subh); const int slice_start = (height * jobnr) / nb_jobs; const int slice_end = (height * (jobnr + 1)) / nb_jobs; - const int ulinesize = frame->linesize[1]; - const int vlinesize = frame->linesize[2]; + const ptrdiff_t ulinesize = frame->linesize[1]; + const ptrdiff_t vlinesize = frame->linesize[2]; for (int y = slice_start; y < slice_end; y++) { uint8_t *uptr = frame->data[1] + y * ulinesize; @@ -192,8 +192,8 @@ static int clear_slice16(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs const int height = AV_CEIL_RSHIFT(frame->height, subh); const int slice_start = (height * jobnr) / nb_jobs; const int slice_end = (height * (jobnr + 1)) / nb_jobs; - const int ulinesize = frame->linesize[1] / 2; - const int vlinesize = frame->linesize[2] / 2; + const ptrdiff_t ulinesize = frame->linesize[1] / 2; + const ptrdiff_t vlinesize = frame->linesize[2] / 2; for (int y = slice_start; y < slice_end; y++) { uint16_t *uptr = (uint16_t *)frame->data[1] + y * ulinesize; diff --git a/libavfilter/vf_paletteuse.c b/libavfilter/vf_paletteuse.c index bc767c508c..0f813bae70 100644 --- a/libavfilter/vf_paletteuse.c +++ b/libavfilter/vf_paletteuse.c @@ -845,7 +845,7 @@ static void load_palette(PaletteUseContext *s, const AVFrame *palette_frame) { int i, x, y; const uint32_t *p = (const uint32_t *)palette_frame->data[0]; - const int p_linesize = palette_frame->linesize[0] >> 2; + const ptrdiff_t p_linesize = palette_frame->linesize[0] >> 2; s->transparency_index = -1; diff --git a/libavfilter/vf_vibrance.c b/libavfilter/vf_vibrance.c index e17fce07c0..e1d6e64aeb 100644 --- a/libavfilter/vf_vibrance.c +++ b/libavfilter/vf_vibrance.c @@ -77,14 +77,14 @@ static int vibrance_slice8(AVFilterContext *avctx, void *arg, int jobnr, int nb_ const float srintensity = alternate * FFSIGN(rintensity); const int slice_start = (height * jobnr) / nb_jobs; const int slice_end = (height * (jobnr + 1)) / nb_jobs; - const int glinesize = frame->linesize[0]; - const int blinesize = frame->linesize[1]; - const int rlinesize = frame->linesize[2]; - const int alinesize = frame->linesize[3]; - const int gslinesize = in->linesize[0]; - const int bslinesize = in->linesize[1]; - const int rslinesize = in->linesize[2]; - const int aslinesize = in->linesize[3]; + const ptrdiff_t glinesize = frame->linesize[0]; + const ptrdiff_t blinesize = frame->linesize[1]; + const ptrdiff_t rlinesize = frame->linesize[2]; + const ptrdiff_t alinesize = frame->linesize[3]; + const ptrdiff_t gslinesize = in->linesize[0]; + const ptrdiff_t bslinesize = in->linesize[1]; + const ptrdiff_t rslinesize = in->linesize[2]; + const ptrdiff_t aslinesize = in->linesize[3]; const uint8_t *gsrc = in->data[0] + slice_start * glinesize; const uint8_t *bsrc = in->data[1] + slice_start * blinesize; const uint8_t *rsrc = in->data[2] + slice_start * rlinesize; @@ -154,14 +154,14 @@ static int vibrance_slice16(AVFilterContext *avctx, void *arg, int jobnr, int nb const float srintensity = alternate * FFSIGN(rintensity); const int slice_start = (height * jobnr) / nb_jobs; const int slice_end = (height * (jobnr + 1)) / nb_jobs; - const int gslinesize = in->linesize[0] / 2; - const int bslinesize = in->linesize[1] / 2; - const int rslinesize = in->linesize[2] / 2; - const int aslinesize = in->linesize[3] / 2; - const int glinesize = frame->linesize[0] / 2; - const int blinesize = frame->linesize[1] / 2; - const int rlinesize = frame->linesize[2] / 2; - const int alinesize = frame->linesize[3] / 2; + const ptrdiff_t gslinesize = in->linesize[0] / 2; + const ptrdiff_t bslinesize = in->linesize[1] / 2; + const ptrdiff_t rslinesize = in->linesize[2] / 2; + const ptrdiff_t aslinesize = in->linesize[3] / 2; + const ptrdiff_t glinesize = frame->linesize[0] / 2; + const ptrdiff_t blinesize = frame->linesize[1] / 2; + const ptrdiff_t rlinesize = frame->linesize[2] / 2; + const ptrdiff_t alinesize = frame->linesize[3] / 2; const uint16_t *gsrc = (const uint16_t *)in->data[0] + slice_start * gslinesize; const uint16_t *bsrc = (const uint16_t *)in->data[1] + slice_start * bslinesize; const uint16_t *rsrc = (const uint16_t *)in->data[2] + slice_start * rslinesize; @@ -234,8 +234,8 @@ static int vibrance_slice8p(AVFilterContext *avctx, void *arg, int jobnr, int nb const float srintensity = alternate * FFSIGN(rintensity); const int slice_start = (height * jobnr) / nb_jobs; const int slice_end = (height * (jobnr + 1)) / nb_jobs; - const int linesize = frame->linesize[0]; - const int slinesize = in->linesize[0]; + const ptrdiff_t linesize = frame->linesize[0]; + const ptrdiff_t slinesize = in->linesize[0]; const uint8_t *src = in->data[0] + slice_start * slinesize; uint8_t *ptr = frame->data[0] + slice_start * linesize; @@ -300,8 +300,8 @@ static int vibrance_slice16p(AVFilterContext *avctx, void *arg, int jobnr, int n const float srintensity = alternate * FFSIGN(rintensity); const int slice_start = (height * jobnr) / nb_jobs; const int slice_end = (height * (jobnr + 1)) / nb_jobs; - const int linesize = frame->linesize[0] / 2; - const int slinesize = in->linesize[0] / 2; + const ptrdiff_t linesize = frame->linesize[0] / 2; + const ptrdiff_t slinesize = in->linesize[0] / 2; const uint16_t *src = (const uint16_t *)in->data[0] + slice_start * slinesize; uint16_t *ptr = (uint16_t *)frame->data[0] + slice_start * linesize; diff --git a/libavfilter/vsrc_gradients.c b/libavfilter/vsrc_gradients.c index 10510c08bd..39e2670703 100644 --- a/libavfilter/vsrc_gradients.c +++ b/libavfilter/vsrc_gradients.c @@ -248,7 +248,7 @@ static int draw_gradients_slice(AVFilterContext *ctx, void *arg, int job, int nb const int height = frame->height; const int start = (height * job ) / nb_jobs; const int end = (height * (job+1)) / nb_jobs; - const int linesize = frame->linesize[0] / 4; + const ptrdiff_t linesize = frame->linesize[0] / 4; uint32_t *dst = (uint32_t *)frame->data[0] + start * linesize; const int type = s->type; @@ -272,7 +272,7 @@ static int draw_gradients_slice16(AVFilterContext *ctx, void *arg, int job, int const int height = frame->height; const int start = (height * job ) / nb_jobs; const int end = (height * (job+1)) / nb_jobs; - const int linesize = frame->linesize[0] / 8; + const ptrdiff_t linesize = frame->linesize[0] / 8; uint64_t *dst = (uint64_t *)frame->data[0] + start * linesize; const int type = s->type; @@ -296,10 +296,10 @@ static int draw_gradients_slice32_planar(AVFilterContext *ctx, void *arg, int jo const int height = frame->height; const int start = (height * job ) / nb_jobs; const int end = (height * (job+1)) / nb_jobs; - const int linesize_g = frame->linesize[0] / 4; - const int linesize_b = frame->linesize[1] / 4; - const int linesize_r = frame->linesize[2] / 4; - const int linesize_a = frame->linesize[3] / 4; + const ptrdiff_t linesize_g = frame->linesize[0] / 4; + const ptrdiff_t linesize_b = frame->linesize[1] / 4; + const ptrdiff_t linesize_r = frame->linesize[2] / 4; + const ptrdiff_t linesize_a = frame->linesize[3] / 4; float *dst_g = (float *)frame->data[0] + start * linesize_g; float *dst_b = (float *)frame->data[1] + start * linesize_b; float *dst_r = (float *)frame->data[2] + start * linesize_r; diff --git a/libavfilter/vsrc_testsrc.c b/libavfilter/vsrc_testsrc.c index 5e41416464..9081b55f1c 100644 --- a/libavfilter/vsrc_testsrc.c +++ b/libavfilter/vsrc_testsrc.c @@ -328,7 +328,7 @@ static void haldclutsrc_fill_picture(AVFilterContext *ctx, AVFrame *frame) const int w = frame->width; const int h = frame->height; uint8_t *data = frame->data[0]; - const int linesize = frame->linesize[0]; + const ptrdiff_t linesize = frame->linesize[0]; const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(frame->format); const int depth = desc->comp[0].depth; const int planar = desc->flags & AV_PIX_FMT_FLAG_PLANAR; @@ -510,7 +510,7 @@ AVFILTER_DEFINE_CLASS(testsrc); * @param w width of the rectangle to draw, expressed as a number of segment_width units * @param h height of the rectangle to draw, expressed as a number of segment_width units */ -static void draw_rectangle(unsigned val, uint8_t *dst, int dst_linesize, int segment_width, +static void draw_rectangle(unsigned val, uint8_t *dst, ptrdiff_t dst_linesize, int segment_width, int x, int y, int w, int h) { int i; @@ -525,7 +525,7 @@ static void draw_rectangle(unsigned val, uint8_t *dst, int dst_linesize, int seg } } -static void draw_digit(int digit, uint8_t *dst, int dst_linesize, +static void draw_digit(int digit, uint8_t *dst, ptrdiff_t dst_linesize, int segment_width) { #define TOP_HBAR 1 @@ -1004,7 +1004,7 @@ static void rgbtest_put_pixel(uint8_t *dstp[4], int dst_linesizep[4], uint8_t rgba_map[4]) { uint8_t *dst = dstp[0]; - int dst_linesize = dst_linesizep[0]; + ptrdiff_t dst_linesize = dst_linesizep[0]; uint32_t v; uint8_t *p; uint16_t *p16; @@ -1031,7 +1031,7 @@ static void rgbtest_put_pixel(uint8_t *dstp[4], int dst_linesizep[4], AV_WL32(p, v); break; case AV_PIX_FMT_GBRP: - p = dstp[0] + x + y * dst_linesizep[0]; + p = dstp[0] + x + y * dst_linesize; p[0] = g; p = dstp[1] + x + y * dst_linesizep[1]; p[0] = b; @@ -1160,9 +1160,9 @@ static void yuvtest_fill_picture8(AVFilterContext *ctx, AVFrame *frame) uint8_t *ydst = frame->data[0]; uint8_t *udst = frame->data[1]; uint8_t *vdst = frame->data[2]; - int ylinesize = frame->linesize[0]; - int ulinesize = frame->linesize[1]; - int vlinesize = frame->linesize[2]; + ptrdiff_t ylinesize = frame->linesize[0]; + ptrdiff_t ulinesize = frame->linesize[1]; + ptrdiff_t vlinesize = frame->linesize[2]; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { @@ -1217,9 +1217,9 @@ static void yuvtest_fill_picture16(AVFilterContext *ctx, AVFrame *frame) uint16_t *ydst = (uint16_t *)frame->data[0]; uint16_t *udst = (uint16_t *)frame->data[1]; uint16_t *vdst = (uint16_t *)frame->data[2]; - int ylinesize = frame->linesize[0] / 2; - int ulinesize = frame->linesize[1] / 2; - int vlinesize = frame->linesize[2] / 2; + ptrdiff_t ylinesize = frame->linesize[0] / 2; + ptrdiff_t ulinesize = frame->linesize[1] / 2; + ptrdiff_t vlinesize = frame->linesize[2] / 2; for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { @@ -1394,7 +1394,7 @@ static void draw_bar(TestSourceContext *test, const uint8_t color[4], for (plane = 0; frame->data[plane]; plane++) { const int c = color[plane]; - const int linesize = frame->linesize[plane]; + const ptrdiff_t linesize = frame->linesize[plane]; int i, px, py, pw, ph; if (plane == 1 || plane == 2) { @@ -1702,9 +1702,9 @@ AVFILTER_DEFINE_CLASS_EXT(allyuv_allrgb, "allyuv/allrgb", static void allyuv_fill_picture(AVFilterContext *ctx, AVFrame *frame) { - const int ys = frame->linesize[0]; - const int us = frame->linesize[1]; - const int vs = frame->linesize[2]; + const ptrdiff_t ys = frame->linesize[0]; + const ptrdiff_t us = frame->linesize[1]; + const ptrdiff_t vs = frame->linesize[2]; int x, y, j; for (y = 0; y < 4096; y++) { @@ -1763,7 +1763,7 @@ const AVFilter ff_vsrc_allyuv = { static void allrgb_fill_picture(AVFilterContext *ctx, AVFrame *frame) { unsigned x, y; - const int linesize = frame->linesize[0]; + const ptrdiff_t linesize = frame->linesize[0]; uint8_t *line = frame->data[0]; for (y = 0; y < 4096; y++) { @@ -2102,9 +2102,9 @@ static int zoneplate_fill_slice_##name(AVFilterContext *ctx, \ const int nkt2t = kt2 * t * t, nktt = kt * t; \ const int start = (h * job ) / nb_jobs; \ const int end = (h * (job+1)) / nb_jobs; \ - const int ylinesize = frame->linesize[0] / sizeof(type); \ - const int ulinesize = frame->linesize[1] / sizeof(type); \ - const int vlinesize = frame->linesize[2] / sizeof(type); \ + const ptrdiff_t ylinesize = frame->linesize[0] / sizeof(type); \ + const ptrdiff_t ulinesize = frame->linesize[1] / sizeof(type); \ + const ptrdiff_t vlinesize = frame->linesize[2] / sizeof(type); \ const int xreset = -(w / 2) - test->xo; \ const int yreset = -(h / 2) - test->yo + start; \ const int kU = test->kU, kV = test->kV; \ -- 2.42.0 [-- Attachment #3: 0002-avcodec-eamad-do-not-use-unsigned-for-offset.patch --] [-- Type: text/x-patch, Size: 1701 bytes --] From c869cb2572bbca4b2f8c941abb98d33a8e73a0be Mon Sep 17 00:00:00 2001 From: Paul B Mahol <onemda@gmail.com> Date: Fri, 22 Sep 2023 19:12:09 +0200 Subject: [PATCH 2/3] avcodec/eamad: do not use unsigned for offset Signed-off-by: Paul B Mahol <onemda@gmail.com> --- libavcodec/eamad.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavcodec/eamad.c b/libavcodec/eamad.c index 287575e073..18249cecc7 100644 --- a/libavcodec/eamad.c +++ b/libavcodec/eamad.c @@ -91,7 +91,7 @@ static inline void comp_block(MadContext *t, AVFrame *frame, int j, int mv_x, int mv_y, int add) { if (j < 4) { - unsigned offset = (mb_y*16 + ((j&2)<<2) + mv_y)*t->last_frame->linesize[0] + mb_x*16 + ((j&1)<<3) + mv_x; + ptrdiff_t offset = (mb_y*16 + ((j&2)<<2) + mv_y)*t->last_frame->linesize[0] + mb_x*16 + ((j&1)<<3) + mv_x; if (offset >= (t->avctx->height - 7) * t->last_frame->linesize[0] - 7) return; comp(frame->data[0] + (mb_y*16 + ((j&2)<<2))*frame->linesize[0] + mb_x*16 + ((j&1)<<3), @@ -100,7 +100,7 @@ static inline void comp_block(MadContext *t, AVFrame *frame, t->last_frame->linesize[0], add); } else if (!(t->avctx->flags & AV_CODEC_FLAG_GRAY)) { int index = j - 3; - unsigned offset = (mb_y * 8 + (mv_y/2))*t->last_frame->linesize[index] + mb_x * 8 + (mv_x/2); + ptrdiff_t offset = (mb_y * 8 + (mv_y/2))*t->last_frame->linesize[index] + mb_x * 8 + (mv_x/2); if (offset >= (t->avctx->height/2 - 7) * t->last_frame->linesize[index] - 7) return; comp(frame->data[index] + (mb_y*8)*frame->linesize[index] + mb_x * 8, -- 2.42.0 [-- Attachment #4: 0003-avcodec-gifdec-rewrite-functions-that-fill-block-fra.patch --] [-- Type: text/x-patch, Size: 1984 bytes --] From 9381993c4ce1a9b3958d9de6ce7ef4fb4113ea41 Mon Sep 17 00:00:00 2001 From: Paul B Mahol <onemda@gmail.com> Date: Fri, 22 Sep 2023 19:31:47 +0200 Subject: [PATCH 3/3] avcodec/gifdec: rewrite functions that fill block/frame Signed-off-by: Paul B Mahol <onemda@gmail.com> --- libavcodec/gifdec.c | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/libavcodec/gifdec.c b/libavcodec/gifdec.c index d90e467cac..fb0b335088 100644 --- a/libavcodec/gifdec.c +++ b/libavcodec/gifdec.c @@ -86,26 +86,29 @@ static void gif_read_palette(GifState *s, uint32_t *pal, int nb) static void gif_fill(AVFrame *picture, uint32_t color) { - uint32_t *p = (uint32_t *)picture->data[0]; - uint32_t *p_end = p + (picture->linesize[0] / sizeof(uint32_t)) * picture->height; - - for (; p < p_end; p++) - *p = color; + const ptrdiff_t linesize = picture->linesize[0]; + const uint8_t *py = picture->data[0]; + const int w = picture->width; + const int h = picture->height; + + for (int y = 0; y < h; y++) { + uint32_t *px = (uint32_t *)py; + for (int x = 0; x < w; x++) + px[x] = color; + py += linesize; + } } static void gif_fill_rect(AVFrame *picture, uint32_t color, int l, int t, int w, int h) { - const ptrdiff_t linesize = picture->linesize[0] / sizeof(uint32_t); - const uint32_t *py = (uint32_t *)picture->data[0] + t * linesize; - const uint32_t *pr, *pb = py + h * linesize; - uint32_t *px; - - for (; py < pb; py += linesize) { - px = (uint32_t *)py + l; - pr = px + w; - - for (; px < pr; px++) - *px = color; + const ptrdiff_t linesize = picture->linesize[0]; + const uint8_t *py = picture->data[0] + t * linesize; + + for (int y = 0; y < h; y++) { + uint32_t *px = ((uint32_t *)py) + l; + for (int x = 0; x < w; x++) + px[x] = color; + py += linesize; } } -- 2.42.0 [-- Attachment #5: Type: text/plain, Size: 251 bytes --] _______________________________________________ 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".
next reply other threads:[~2023-09-22 17:38 UTC|newest] Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-09-22 17:37 Paul B Mahol [this message] 2023-09-22 17:47 ` Andreas Rheinhardt
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to='CAPYw7P7WJsL5LBP+wHifeTb3j7A9ApTRYEp2JdZOQomyU=y8Ew@mail.gmail.com' \ --to=onemda@gmail.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
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