diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
index 646a3ea..5c32b45 100644
|
a
|
b
|
static const uint8_t mxf_avid_project_name[] = { 0xa5,0xfb,0x7b,0x
|
| 284 | 284 | |
| 285 | 285 | #define IS_KLV_KEY(x, y) (!memcmp(x, y, sizeof(y))) |
| 286 | 286 | |
| 287 | | static void mxf_free_metadataset(MXFMetadataSet **ctx) |
| | 287 | static void mxf_free_metadataset(MXFMetadataSet **ctx, int freectx) |
| 288 | 288 | { |
| 289 | 289 | MXFIndexTableSegment *seg; |
| 290 | 290 | switch ((*ctx)->type) { |
| … |
… |
static void mxf_free_metadataset(MXFMetadataSet **ctx)
|
| 313 | 313 | default: |
| 314 | 314 | break; |
| 315 | 315 | } |
| | 316 | if (freectx) |
| 316 | 317 | av_freep(ctx); |
| 317 | 318 | } |
| 318 | 319 | |
| … |
… |
static int mxf_read_local_tags(MXFContext *mxf, KLVPacket *klv, MXFMetadataReadF
|
| 2213 | 2214 | if (ctx_size && tag == 0x3C0A) { |
| 2214 | 2215 | avio_read(pb, ctx->uid, 16); |
| 2215 | 2216 | } else if ((ret = read_child(ctx, pb, tag, size, uid, -1)) < 0) { |
| 2216 | | mxf_free_metadataset(&ctx); |
| | 2217 | mxf_free_metadataset(&ctx, ctx_size); |
| 2217 | 2218 | return ret; |
| 2218 | 2219 | } |
| 2219 | 2220 | |
| … |
… |
static int mxf_read_local_tags(MXFContext *mxf, KLVPacket *klv, MXFMetadataReadF
|
| 2222 | 2223 | if (avio_tell(pb) > klv_end) { |
| 2223 | 2224 | if (ctx_size) { |
| 2224 | 2225 | ctx->type = type; |
| 2225 | | mxf_free_metadataset(&ctx); |
| | 2226 | mxf_free_metadataset(&ctx, ctx_size); |
| 2226 | 2227 | } |
| 2227 | 2228 | |
| 2228 | 2229 | av_log(mxf->fc, AV_LOG_ERROR, |
| … |
… |
static int mxf_read_close(AVFormatContext *s)
|
| 2918 | 2919 | s->streams[i]->priv_data = NULL; |
| 2919 | 2920 | |
| 2920 | 2921 | for (i = 0; i < mxf->metadata_sets_count; i++) { |
| 2921 | | mxf_free_metadataset(mxf->metadata_sets + i); |
| | 2922 | mxf_free_metadataset(mxf->metadata_sets + i, 1); |
| 2922 | 2923 | } |
| 2923 | 2924 | av_freep(&mxf->partitions); |
| 2924 | 2925 | av_freep(&mxf->metadata_sets); |