* [FFmpeg-devel] [PATCH] ptrdiff_t related fixes and negative linesizes
@ 2023-09-22 17:37 Paul B Mahol
2023-09-22 17:47 ` Andreas Rheinhardt
0 siblings, 1 reply; 2+ messages in thread
From: Paul B Mahol @ 2023-09-22 17:37 UTC (permalink / raw)
To: FFmpeg development discussions and patches
[-- 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".
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [FFmpeg-devel] [PATCH] ptrdiff_t related fixes and negative linesizes
2023-09-22 17:37 [FFmpeg-devel] [PATCH] ptrdiff_t related fixes and negative linesizes Paul B Mahol
@ 2023-09-22 17:47 ` Andreas Rheinhardt
0 siblings, 0 replies; 2+ messages in thread
From: Andreas Rheinhardt @ 2023-09-22 17:47 UTC (permalink / raw)
To: ffmpeg-devel
Paul B Mahol:
> 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;
Don't use const if you cast it away a few lines below.
> +
> + 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;
> }
> }
_______________________________________________
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] 2+ messages in thread
end of thread, other threads:[~2023-09-22 17:46 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-22 17:37 [FFmpeg-devel] [PATCH] ptrdiff_t related fixes and negative linesizes Paul B Mahol
2023-09-22 17:47 ` Andreas Rheinhardt
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