[FFmpeg-cvslog] avcodec/ffv1dec: don't check chroma_planes for f->colorspace > 0
James Almer
git at videolan.org
Tue Jul 22 18:41:45 EEST 2025
ffmpeg | branch: master | James Almer <jamrial at gmail.com> | Tue Jul 22 11:57:13 2025 -0300| [86670fec9cc83d634f39d23fdfcfcee253594b0b] | committer: James Almer
avcodec/ffv1dec: don't check chroma_planes for f->colorspace > 0
It's RGB, so check instead if it's packed or planar.
Fixes: libavcodec/ffv1dec.c:461:43: runtime error: applying zero offset to null pointer
Signed-off-by: James Almer <jamrial at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=86670fec9cc83d634f39d23fdfcfcee253594b0b
---
libavcodec/ffv1dec.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/libavcodec/ffv1dec.c b/libavcodec/ffv1dec.c
index 312b1163fc..3d67798961 100644
--- a/libavcodec/ffv1dec.c
+++ b/libavcodec/ffv1dec.c
@@ -447,22 +447,20 @@ static int decode_slice(AVCodecContext *c, void *arg)
decode_plane(f, sc, &gb, p->data[0] + ps*x + y*p->linesize[0] , width, height, p->linesize[0], 0, 0, 2, ac);
decode_plane(f, sc, &gb, p->data[0] + ps*x + y*p->linesize[0] + (ps>>1), width, height, p->linesize[0], 1, 1, 2, ac);
} else if (f->use32bit) {
- uint8_t *planes[4] = { p->data[0] + ps * x + y * p->linesize[0] };
- if (f->chroma_planes) {
- planes[1] = p->data[1] + ps * x + y * p->linesize[1];
- planes[2] = p->data[2] + ps * x + y * p->linesize[2];
- }
+ uint8_t *planes[4] = { p->data[0] + ps * x + y * p->linesize[0],
+ p->data[1] + ps * x + y * p->linesize[1],
+ p->data[2] + ps * x + y * p->linesize[2] };
if (f->transparency)
planes[3] = p->data[3] + ps * x + y * p->linesize[3];
decode_rgb_frame32(f, sc, &gb, planes, width, height, p->linesize);
} else {
uint8_t *planes[4] = { p->data[0] + ps * x + y * p->linesize[0] };
- if (f->chroma_planes) {
+ if (f->avctx->bits_per_raw_sample > 8) {
planes[1] = p->data[1] + ps * x + y * p->linesize[1];
planes[2] = p->data[2] + ps * x + y * p->linesize[2];
+ if (f->transparency)
+ planes[3] = p->data[3] + ps * x + y * p->linesize[3];
}
- if (f->transparency)
- planes[3] = p->data[3] + ps * x + y * p->linesize[3];
decode_rgb_frame(f, sc, &gb, planes, width, height, p->linesize);
}
if (ac != AC_GOLOMB_RICE && f->version > 2) {
More information about the ffmpeg-cvslog
mailing list