matroskadec: decode track private data if needed
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>
Sun, 22 Jun 2008 15:52:28 +0000 (15:52 +0000)
committerAurelien Jacobs <aurel@gnuage.org>
Sun, 22 Jun 2008 15:52:28 +0000 (15:52 +0000)
original patch by Evgeniy Stepanov  eugeni.stepanov _at_ gmail _dot_ com

Originally committed as revision 13892 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/matroskadec.c

index d3777ba..bea76f4 100644 (file)
@@ -1610,6 +1610,23 @@ matroska_add_stream (MatroskaDemuxContext *matroska)
         }
     }
 
+    if (track->codec_priv_size && track->encoding_scope & 2) {
+        uint8_t *orig_priv = track->codec_priv;
+        int offset = matroska_decode_buffer(&track->codec_priv,
+                                            &track->codec_priv_size, track);
+        if (offset > 0) {
+            track->codec_priv = av_malloc(track->codec_priv_size + offset);
+            memcpy(track->codec_priv, track->encoding_settings, offset);
+            memcpy(track->codec_priv+offset, orig_priv, track->codec_priv_size);
+            track->codec_priv_size += offset;
+            av_free(orig_priv);
+        } else if (!offset) {
+            av_free(orig_priv);
+        } else
+            av_log(matroska->ctx, AV_LOG_ERROR,
+                   "Failed to decode codec private data\n");
+    }
+
     if (track->type && matroska->num_tracks < ARRAY_SIZE(matroska->tracks)) {
         matroska->tracks[matroska->num_tracks++] = track;
     } else {