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