diff mbox

[FFmpeg-devel] lavf/vc1dec: Reduce probe score for streams with invalid frames

Message ID CAB0OVGpTQ8ZZYnkkkUas7zZPF6iZ5=bwvvqwZXCKMNwR07vUrg@mail.gmail.com
State Accepted
Headers show

Commit Message

Carl Eugen Hoyos April 17, 2019, 10:53 p.m. UTC
Hi!

Attached patch fixes ticket #7853.

Please comment, Carl Eugen

Comments

Carl Eugen Hoyos April 19, 2019, 12:09 p.m. UTC | #1
2019-04-18 0:53 GMT+02:00, Carl Eugen Hoyos <ceffmpeg@gmail.com>:

> Attached patch fixes ticket #7853.

Patch applied.

Carl Eugen
diff mbox

Patch

From 55851640fa9e4d23c6c32bf33a46927815544040 Mon Sep 17 00:00:00 2001
From: Carl Eugen Hoyos <ceffmpeg@gmail.com>
Date: Thu, 18 Apr 2019 00:50:48 +0200
Subject: [PATCH] lavf/vc1dec: Reduce probe score for streams with invalid
 frames.

Fixes ticket 7853.
---
 libavformat/vc1dec.c |   11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/libavformat/vc1dec.c b/libavformat/vc1dec.c
index f4101ae..5da5eb6 100644
--- a/libavformat/vc1dec.c
+++ b/libavformat/vc1dec.c
@@ -26,7 +26,7 @@ 
 
 static int vc1_probe(const AVProbeData *p)
 {
-    int seq = 0, entry = 0, frame = 0, i;
+    int seq = 0, entry = 0, invalid = 0, frame = 0, i;
 
     for (i = 0; i < p->buf_size + 5; i++) {
         uint32_t code = AV_RB32(p->buf + i);
@@ -39,16 +39,19 @@  static int vc1_probe(const AVProbeData *p)
                 profile = (p->buf[i] & 0xc0) >> 6;
                 if (profile != PROFILE_ADVANCED) {
                     seq = 0;
+                    invalid++;
                     continue;
                 }
                 level = (p->buf[i] & 0x38) >> 3;
                 if (level >= 5) {
                     seq = 0;
+                    invalid++;
                     continue;
                 }
                 chromaformat = (p->buf[i] & 0x6) >> 1;
                 if (chromaformat != 1) {
                     seq = 0;
+                    invalid++;
                     continue;
                 }
                 seq++;
@@ -56,8 +59,10 @@  static int vc1_probe(const AVProbeData *p)
                 break;
             }
             case VC1_CODE_ENTRYPOINT:
-                if (!seq)
+                if (!seq) {
+                    invalid++;
                     continue;
+                }
                 entry++;
                 i += 2;
                 break;
@@ -71,7 +76,7 @@  static int vc1_probe(const AVProbeData *p)
         }
     }
 
-    if (frame > 1)
+    if (frame > 1 && frame >> 1 > invalid)
         return AVPROBE_SCORE_EXTENSION / 2 + 1;
     if (frame == 1)
         return AVPROBE_SCORE_EXTENSION / 4;
-- 
1.7.10.4