[FFmpeg-devel] [PATCH 4/4] mxfenc: support smpte dv codecs
Matthieu Bouron
matthieu.bouron at gmail.com
Thu May 31 19:02:56 CEST 2012
On Thu, May 31, 2012 at 02:08:10PM +0200, Tomas Härdin wrote:
> On Tue, 2012-05-29 at 12:23 +0200, Matthieu Bouron wrote:
> > > diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c
> > > index fce8446..0c39acb 100644
> > > --- a/libavformat/mxfenc.c
> > > +++ b/libavformat/mxfenc.c
> > > @@ -93,6 +93,7 @@ static const struct {
> > > { CODEC_ID_MPEG2VIDEO, 0 },
> > > { CODEC_ID_PCM_S24LE, 1 },
> > > { CODEC_ID_PCM_S16LE, 1 },
> > > + { CODEC_ID_DVVIDEO, 15 },
> > > { CODEC_ID_NONE }
> > > };
> > >
> > > @@ -169,6 +170,51 @@ static const MXFContainerEssenceEntry mxf_essence_container_uls[] = {
> > > { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x06,0x01,0x10,0x00 },
> > > { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00 },
> > > mxf_write_generic_sound_desc },
> > > + // DV Unknwon 15
> > > + { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x02,0x7F,0x01 },
> > > + { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x18,0x01,0x01,0x00 },
> > > + { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x02,0x00,0x00,0x00 },
> > > + mxf_write_cdci_desc },
>
> Using this UL and the mxf_essence_mappings entry seems suspicious - we
> should write proper ones instead of guessing so we don't output bad
> files.
> I suspect the intent is to support DVCPRO HD, but that has its own ULs.
>
This ul is only used when mxfenc try to determine sc->index. It will
overrided when mxf_parse_dv_frame is called.
> > > + // DV25 525/60
> > > + { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x02,0x40,0x01 },
> > > + { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x18,0x01,0x01,0x00 },
> > > + { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x02,0x02,0x01,0x00 },
> > > + mxf_write_cdci_desc },
> > >-- snip --
> > > + { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x02,0x63,0x01 },
> > > + { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x18,0x01,0x01,0x00 },
> > > + { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x02,0x02,0x08,0x00 },
> > > + mxf_write_cdci_desc },
>
> I'm noticing five ULs in S383m missing here (first value = byte 15 of
> UL):
> 01 IEC DV, 25Mbps 525-I
> 02 IEC DV, 25Mbps 625-I
> 03 IEC DV, 25Mbps 525-lines,
> Registered Quality: SMPTE 322M Compatible
> 04 IEC DV, 25Mbps 625-lines,
> Registered Quality: SMPTE 322M Compatible
> 3F IEC DV, undefined
>
> I don't think it matters much - just noting it.
I didn't include those since i don't know much about IEC DV.
>
> > > @@ -1292,6 +1338,70 @@ static void mxf_write_partition(AVFormatContext *s, int bodysid,
> > > avio_flush(pb);
> > > }
> > >
> > > +static int mxf_parse_dv_frame(AVFormatContext *s, AVStream *st, AVPacket *pkt)
>
> Shouldn't some kind of parser do what this function does? I see this
> kind of stuff for MPEG-2 all over lavf and it bothers me.
>
> > > +{
> > > + MXFContext *mxf = s->priv_data;
> > > + MXFStreamContext *sc = st->priv_data;
> > > + uint8_t *vs_pack = pkt->data + 80*5 + 48;
> > > + uint8_t *vsc_pack = pkt->data + 80*5 + 53;
>
> Check pkt->size before doing anything with these.
Done.
>
> The rest of the function looks OK.
>
> > > static const UID mxf_mpeg2_codec_uls[] = {
> > > { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x03,0x04,0x01,0x02,0x02,0x01,0x01,0x10,0x00 }, // MP-ML I-Frame
> > > { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x03,0x04,0x01,0x02,0x02,0x01,0x01,0x11,0x00 }, // MP-ML Long GOP
> > > @@ -1536,7 +1646,10 @@ static int mxf_write_header(AVFormatContext *s)
> > > MXFStreamContext *sc = s->streams[i]->priv_data;
> > > // update element count
> > > sc->track_essence_element_key[13] = present[sc->index];
> > > - sc->order = AV_RB32(sc->track_essence_element_key+12);
> > > + if (sc->track_essence_element_key[12] == 0x18) // DV
>
> This could be a problem if in the future if we add other non-DV essence
> element keys with that byte == 0x18. Consider checking it against
> {0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x18}.
>
Patch updated
> The rest looks fine.
>
> /Tomas
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0004-mxfenc-support-smpte-dv-codecs.patch
Type: text/x-diff
Size: 8657 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20120531/99ae3f40/attachment.bin>
More information about the ffmpeg-devel
mailing list