ffmpeg | branch: master | James Almer <jamr...@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 <jamr...@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) {

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

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

Reply via email to