fre 2019-07-26 klockan 18:45 +0200 skrev Nicolas Gaullier: > @@ -1951,6 +1951,13 @@ typedef struct AVFormatContext { > * - decoding: set by user > */ > int skip_estimate_duration_from_pts; > + > + /** > + * Probe dolby_e in PCM streams > + * - encoding: unused > + * - decoding: set by user > + */ > + int dolby_e_probe;
This probably belongs in MXFContext and WAVDemuxContext > } AVFormatContext; > > #if FF_API_FORMAT_GET_SET > diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c > index bb72fb9841..5b6eb9d756 100644 > --- a/libavformat/mxfdec.c > +++ b/libavformat/mxfdec.c > @@ -56,6 +56,7 @@ > #include "avformat.h" > #include "internal.h" > #include "mxf.h" > +#include "s337m.h" > > #define MXF_MAX_CHUNK_SIZE (32 << 20) > > @@ -302,6 +303,8 @@ typedef struct MXFMetadataReadTableEntry { > enum MXFMetadataSetType type; > } MXFMetadataReadTableEntry; > > +static int mxf_read_packet_init = 0; This definitely belongs in MXFContext > @@ -3247,6 +3250,19 @@ static int mxf_read_header(AVFormatContext *s) > if ((ret = mxf_parse_structural_metadata(mxf)) < 0) > goto fail; > > + if (mxf->fc->dolby_e_probe) > + { > + int i; > + AVPacket *pkt = av_packet_alloc(); > + av_init_packet(pkt); > + mxf_read_packet_init = 1; > + for (i = 0; i < mxf->fc->nb_streams; i++) > + mxf_read_packet(mxf->fc, pkt); mxf_read_packet() has a whole bunch of side effects. I'm not so sure you want to use it here. > @@ -3539,7 +3555,9 @@ static int mxf_read_packet(AVFormatContext *s, > AVPacket *pkt) > return ret; > } > } else { > - ret = av_get_packet(s->pb, pkt, klv.length); > + if (mxf_read_packet_init) > + s337m_probe_stream(mxf->fc, &st); > + ret = st->codecpar->codec_id == AV_CODEC_ID_DOLBY_E > ? s337m_read_packet(s, pkt) : av_get_packet(s->pb, pkt, klv.length); Are you sure there's no UL for this? Did you poke the company who created the files to have them fix their encoder? > diff --git a/libavformat/wavdec.c b/libavformat/wavdec.c > index 52194f54ef..501c21f220 100644 > --- a/libavformat/wavdec.c > +++ b/libavformat/wavdec.c > @@ -41,6 +41,7 @@ > #include "riff.h" > #include "w64.h" > #include "spdif.h" > +#include "s337m.h" > > typedef struct WAVDemuxContext { > const AVClass *class; > @@ -593,6 +594,8 @@ break_loop: > } else if (st->codecpar->codec_id == AV_CODEC_ID_ADPCM_MS && st- > >codecpar->channels > 2) { > st->codecpar->block_align *= st->codecpar->channels; > } > + if (s->dolby_e_probe) > + s337m_probe_stream(s, &st); The same goes here - these codecs should have corresponding TwoCCs. Send angry emails to your vendor. /Tomas _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".