[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