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

Reimar Döffinger git at videolan.org
Wed Aug 1 19:37:34 CEST 2012


ffmpeg | branch: master | Reimar Döffinger <Reimar.Doeffinger at gmx.de> | Tue Jul 31 20:47:24 2012 +0200| [98b0120668a87837475cc9991eb627165bc28508] | committer: Reimar Döffinger

nuv: Fix playback of RTjpeg from current MythTV,

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>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=98b0120668a87837475cc9991eb627165bc28508
---

 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]);



More information about the ffmpeg-cvslog mailing list