summaryrefslogtreecommitdiff
path: root/libavformat/mxfenc.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-12-05 00:39:28 +0100
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2021-02-16 22:51:11 +0100
commitc38ab8f30fde3155c2be790bf9d2ee1886e196ae (patch)
tree5d79154ce49d0fe96c0d4fc81a2331cca1069f1b /libavformat/mxfenc.c
parent8de5d196d152f9392304b144a2e66f603a239ca7 (diff)
avformat/mxfenc: Discard audio until valid video has been received
Normally, video packets are muxed before audio packets for mxf (there is a dedicated interleave function for this); furthermore the first (video) packet triggers writing the actual header. Yet when the first video packet fails the checks performed on it, it will be an audio packet that leads to writing the header and codec_ul (a value set based upon properties of the bitstream which necessitates actually inspecting packets) may be wrong. Therefore this commit discards audio packets until a valid video packet has been received. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Diffstat (limited to 'libavformat/mxfenc.c')
-rw-r--r--libavformat/mxfenc.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c
index 72edaa9e30..1c668998e2 100644
--- a/libavformat/mxfenc.c
+++ b/libavformat/mxfenc.c
@@ -2887,6 +2887,13 @@ static int mxf_write_packet(AVFormatContext *s, AVPacket *pkt)
MXFIndexEntry ie = {0};
int err;
+ if (!mxf->header_written && pkt->stream_index != 0 &&
+ s->oformat != &ff_mxf_opatom_muxer) {
+ av_log(s, AV_LOG_ERROR, "Received non-video packet before "
+ "header has been written\n");
+ return AVERROR_INVALIDDATA;
+ }
+
if (!mxf->cbr_index && !mxf->edit_unit_byte_count && !(mxf->edit_units_count % EDIT_UNITS_PER_BODY)) {
if ((err = av_reallocp_array(&mxf->index_entries, mxf->edit_units_count
+ EDIT_UNITS_PER_BODY, sizeof(*mxf->index_entries))) < 0) {