[FFmpeg-devel] [PATCH] nuv: Fix playback of RTjpeg from current MythTV,

Reimar Döffinger Reimar.Doeffinger at gmx.de
Tue Jul 31 20:49:22 CEST 2012


The previous validity check seems to work only for some
(presumably older) files, in current versions the first bytes
now contain the data size.

Signed-off-by: Reimar Döffinger <Reimar.Doeffinger at gmx.de>
---
 libavcodec/nuv.c |   11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/libavcodec/nuv.c b/libavcodec/nuv.c
index 17fcb70..00860fe 100644
--- a/libavcodec/nuv.c
+++ b/libavcodec/nuv.c
@@ -191,8 +191,15 @@ retry:
     }
     if (c->codec_frameheader) {
         int w, h, q, res;
-        if (buf_size < 12 || buf[0] != 'V') {
-            av_log(avctx, AV_LOG_ERROR, "invalid nuv video frame (wrong codec_tag?)\n");
+        if (buf_size < 12) {
+            av_log(avctx, AV_LOG_ERROR, "Too small NUV video frame\n");
+            return AVERROR_INVALIDDATA;
+        }
+        // There seem to exist two variants of this header: one starts with 'V'
+        // and 5 bytes unknown, the other matches current MythTV and is 4 bytes size,
+        // 1 byte header size (== 12), 1 byte version (== 0)
+        if (buf[0] != 'V' && AV_RL16(&buf[4]) != 0x000c) {
+            av_log(avctx, AV_LOG_ERROR, "Unknown secondary frame header (wrong codec_tag?)\n");
             return AVERROR_INVALIDDATA;
         }
         w = AV_RL16(&buf[6]);
-- 
1.7.10.4



More information about the ffmpeg-devel mailing list