From: Tomas Härdin <[email protected]>

---
 libavformat/mxfdec.c |   26 ++++++++++++++++----------
 1 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
index 448eb46..934135a 100644
--- a/libavformat/mxfdec.c
+++ b/libavformat/mxfdec.c
@@ -150,6 +150,7 @@ typedef struct {
     int *slice;
     int *element_delta;
     int nb_delta_entries;
+    int8_t *temporal_offset_entries;
     int *flag_entries;
     uint64_t *stream_offset_entries;
     uint32_t **slice_offset_entries;
@@ -708,19 +709,22 @@ static int mxf_read_index_entry_array(AVIOContext *pb, 
MXFIndexTableSegment *seg
     segment->nb_index_entries = avio_rb32(pb);
     length = avio_rb32(pb);
 
-    segment->flag_entries          = av_mallocz(segment->nb_index_entries *
-                                                
sizeof(*segment->flag_entries));
-    segment->stream_offset_entries = av_mallocz(segment->nb_index_entries *
-                                       
sizeof(*segment->stream_offset_entries));
-    segment->slice_offset_entries  = av_mallocz(segment->nb_index_entries *
-                                       sizeof(*segment->slice_offset_entries));
-
-    if (!segment->flag_entries || !segment->stream_offset_entries ||
-        !segment->slice_offset_entries)
+    segment->temporal_offset_entries = av_mallocz(segment->nb_index_entries *
+                                 sizeof(*segment->temporal_offset_entries));
+    segment->flag_entries            = av_mallocz(segment->nb_index_entries *
+                                 sizeof(*segment->flag_entries));
+    segment->stream_offset_entries   = av_mallocz(segment->nb_index_entries *
+                                 sizeof(*segment->stream_offset_entries));
+    segment->slice_offset_entries    = av_mallocz(segment->nb_index_entries *
+                                 sizeof(*segment->slice_offset_entries));
+
+    if (!segment->flag_entries         || !segment->stream_offset_entries ||
+        !segment->slice_offset_entries || !segment->temporal_offset_entries)
         goto errmem;
 
     for (i = 0; i < segment->nb_index_entries; i++) {
-        avio_rb16(pb);  /* TemporalOffset and KeyFrameOffset */
+        segment->temporal_offset_entries[i] = avio_r8(pb);
+        avio_r8(pb);                                        /* KeyFrameOffset 
*/
         segment->flag_entries[i] = avio_r8(pb);
         segment->stream_offset_entries[i] = avio_rb64(pb);
         if (segment->slice_count) {
@@ -744,6 +748,7 @@ errmem:
     av_freep(&segment->flag_entries);
     av_freep(&segment->stream_offset_entries);
     av_freep(&segment->slice_offset_entries);
+    av_freep(&segment->temporal_offset_entries);
     return AVERROR(ENOMEM);
 }
 
@@ -1605,6 +1610,7 @@ static int mxf_read_close(AVFormatContext *s)
                 av_freep(&seg->slice_offset_entries[j]);
             av_freep(&seg->slice);
             av_freep(&seg->element_delta);
+            av_freep(&seg->temporal_offset_entries);
             av_freep(&seg->flag_entries);
             av_freep(&seg->stream_offset_entries);
             av_freep(&seg->slice_offset_entries);
-- 
1.7.8

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to