Re: [FFmpeg-devel] [PATCH 1/4] avformat/mxfenc: pass MXFPackage around instead of type
On Tue, Nov 28, 2017 at 3:05 PM, Tomas Härdinwrote: > On Tue, 2017-11-28 at 21:09 +0100, Michael Niedermayer wrote: > > On Mon, Nov 27, 2017 at 11:00:51AM +0100, Tomas Härdin wrote: > > > On Sun, 2017-11-26 at 21:42 -0800, Mark Reid wrote: > > > > --- > > > > libavformat/mxfenc.c | 99 +- > > > > > > > > -- > > > > 1 file changed, 55 insertions(+), 44 deletions(-) > > > > > > > > diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c > > > > index 035e65ed43..ed6ecbf541 100644 > > > > --- a/libavformat/mxfenc.c > > > > +++ b/libavformat/mxfenc.c > > > > @@ -101,6 +101,12 @@ typedef struct MXFContainerEssenceEntry { > > > > void (*write_desc)(AVFormatContext *, AVStream *); > > > > } MXFContainerEssenceEntry; > > > > > > > > +typedef struct MXFPackage { > > > > +char *name; > > > > +enum MXFMetadataSetType type; > > > > +int instance; > > > > +} MXFPackage; > > > > [...] > > > > > > Looks OK. > > > > will apply > > > > thanks > > It sounded like he's working on an alternate patchset, see the PATCH > 3/4 thread > I see this was already applied, this one wasn't going to change in my new patchset so it should be okay. > /Tomas > ___ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 1/4] avformat/mxfenc: pass MXFPackage around instead of type
On Tue, 2017-11-28 at 21:09 +0100, Michael Niedermayer wrote: > On Mon, Nov 27, 2017 at 11:00:51AM +0100, Tomas Härdin wrote: > > On Sun, 2017-11-26 at 21:42 -0800, Mark Reid wrote: > > > --- > > > libavformat/mxfenc.c | 99 +- > > > > > > -- > > > 1 file changed, 55 insertions(+), 44 deletions(-) > > > > > > diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c > > > index 035e65ed43..ed6ecbf541 100644 > > > --- a/libavformat/mxfenc.c > > > +++ b/libavformat/mxfenc.c > > > @@ -101,6 +101,12 @@ typedef struct MXFContainerEssenceEntry { > > > void (*write_desc)(AVFormatContext *, AVStream *); > > > } MXFContainerEssenceEntry; > > > > > > +typedef struct MXFPackage { > > > +char *name; > > > +enum MXFMetadataSetType type; > > > +int instance; > > > +} MXFPackage; > > > [...] > > > > Looks OK. > > will apply > > thanks It sounded like he's working on an alternate patchset, see the PATCH 3/4 thread /Tomas signature.asc Description: This is a digitally signed message part ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 1/4] avformat/mxfenc: pass MXFPackage around instead of type
On Mon, Nov 27, 2017 at 11:00:51AM +0100, Tomas Härdin wrote: > On Sun, 2017-11-26 at 21:42 -0800, Mark Reid wrote: > > --- > > libavformat/mxfenc.c | 99 +- > > -- > > 1 file changed, 55 insertions(+), 44 deletions(-) > > > > diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c > > index 035e65ed43..ed6ecbf541 100644 > > --- a/libavformat/mxfenc.c > > +++ b/libavformat/mxfenc.c > > @@ -101,6 +101,12 @@ typedef struct MXFContainerEssenceEntry { > > void (*write_desc)(AVFormatContext *, AVStream *); > > } MXFContainerEssenceEntry; > > > > +typedef struct MXFPackage { > > +char *name; > > +enum MXFMetadataSetType type; > > +int instance; > > +} MXFPackage; > > [...] > > Looks OK. will apply thanks > This would make it easier if someone is crazy enough to > implement the higher op types in the future. I still maintain that > libmxf/bmxlib is better for that however > > /Tomas > ___ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB No great genius has ever existed without some touch of madness. -- Aristotle signature.asc Description: Digital signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 1/4] avformat/mxfenc: pass MXFPackage around instead of type
On Sun, 2017-11-26 at 21:42 -0800, Mark Reid wrote: > --- > libavformat/mxfenc.c | 99 +- > -- > 1 file changed, 55 insertions(+), 44 deletions(-) > > diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c > index 035e65ed43..ed6ecbf541 100644 > --- a/libavformat/mxfenc.c > +++ b/libavformat/mxfenc.c > @@ -101,6 +101,12 @@ typedef struct MXFContainerEssenceEntry { > void (*write_desc)(AVFormatContext *, AVStream *); > } MXFContainerEssenceEntry; > > +typedef struct MXFPackage { > +char *name; > +enum MXFMetadataSetType type; > +int instance; > +} MXFPackage; > [...] Looks OK. This would make it easier if someone is crazy enough to implement the higher op types in the future. I still maintain that libmxf/bmxlib is better for that however /Tomas signature.asc Description: This is a digitally signed message part ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH 1/4] avformat/mxfenc: pass MXFPackage around instead of type
--- libavformat/mxfenc.c | 99 +--- 1 file changed, 55 insertions(+), 44 deletions(-) diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c index 035e65ed43..ed6ecbf541 100644 --- a/libavformat/mxfenc.c +++ b/libavformat/mxfenc.c @@ -101,6 +101,12 @@ typedef struct MXFContainerEssenceEntry { void (*write_desc)(AVFormatContext *, AVStream *); } MXFContainerEssenceEntry; +typedef struct MXFPackage { +char *name; +enum MXFMetadataSetType type; +int instance; +} MXFPackage; + enum ULIndex { INDEX_MPEG2 = 0, INDEX_AES3, @@ -808,13 +814,14 @@ static void mxf_write_identification(AVFormatContext *s) avio_wb64(pb, mxf->timestamp); } -static void mxf_write_content_storage(AVFormatContext *s) +static void mxf_write_content_storage(AVFormatContext *s, MXFPackage *packages, int package_count) { AVIOContext *pb = s->pb; +int i; mxf_write_metadata_key(pb, 0x011800); PRINT_KEY(s, "content storage key", pb->buf_ptr - 16); -klv_encode_ber_length(pb, 92); +klv_encode_ber_length(pb, 60 + (16 * package_count)); // write uid mxf_write_local_tag(pb, 16, 0x3C0A); @@ -822,10 +829,11 @@ static void mxf_write_content_storage(AVFormatContext *s) PRINT_KEY(s, "content storage uid", pb->buf_ptr - 16); // write package reference -mxf_write_local_tag(pb, 16 * 2 + 8, 0x1901); -mxf_write_refs_count(pb, 2); -mxf_write_uuid(pb, MaterialPackage, 0); -mxf_write_uuid(pb, SourcePackage, 0); +mxf_write_local_tag(pb, 16 * package_count + 8, 0x1901); +mxf_write_refs_count(pb, package_count); +for (i = 0; i < package_count; i++) { +mxf_write_uuid(pb, packages[i].type, packages[i].instance); +} // write essence container data mxf_write_local_tag(pb, 8 + 16, 0x1902); @@ -833,7 +841,7 @@ static void mxf_write_content_storage(AVFormatContext *s) mxf_write_uuid(pb, EssenceContainerData, 0); } -static void mxf_write_track(AVFormatContext *s, AVStream *st, enum MXFMetadataSetType type) +static void mxf_write_track(AVFormatContext *s, AVStream *st, MXFPackage *package) { MXFContext *mxf = s->priv_data; AVIOContext *pb = s->pb; @@ -845,7 +853,7 @@ static void mxf_write_track(AVFormatContext *s, AVStream *st, enum MXFMetadataSe // write track uid mxf_write_local_tag(pb, 16, 0x3C0A); -mxf_write_uuid(pb, type == MaterialPackage ? Track : Track + TypeBottom, st->index); +mxf_write_uuid(pb, package->type == MaterialPackage ? Track : Track + TypeBottom, st->index); PRINT_KEY(s, "track uid", pb->buf_ptr - 16); // write track id @@ -854,7 +862,7 @@ static void mxf_write_track(AVFormatContext *s, AVStream *st, enum MXFMetadataSe // write track number mxf_write_local_tag(pb, 4, 0x4804); -if (type == MaterialPackage) +if (package->type == MaterialPackage) avio_wb32(pb, 0); // track number of material package is 0 else avio_write(pb, sc->track_essence_element_key + 12, 4); @@ -876,7 +884,7 @@ static void mxf_write_track(AVFormatContext *s, AVStream *st, enum MXFMetadataSe // write sequence refs mxf_write_local_tag(pb, 16, 0x4803); -mxf_write_uuid(pb, type == MaterialPackage ? Sequence: Sequence + TypeBottom, st->index); +mxf_write_uuid(pb, package->type == MaterialPackage ? Sequence: Sequence + TypeBottom, st->index); } static const uint8_t smpte_12m_timecode_track_data_ul[] = { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x01,0x03,0x02,0x01,0x01,0x00,0x00,0x00 }; @@ -905,7 +913,7 @@ static void mxf_write_common_fields(AVFormatContext *s, AVStream *st) } } -static void mxf_write_sequence(AVFormatContext *s, AVStream *st, enum MXFMetadataSetType type) +static void mxf_write_sequence(AVFormatContext *s, AVStream *st, MXFPackage *package) { MXFContext *mxf = s->priv_data; AVIOContext *pb = s->pb; @@ -916,7 +924,7 @@ static void mxf_write_sequence(AVFormatContext *s, AVStream *st, enum MXFMetadat klv_encode_ber_length(pb, 80); mxf_write_local_tag(pb, 16, 0x3C0A); -mxf_write_uuid(pb, type == MaterialPackage ? Sequence: Sequence + TypeBottom, st->index); +mxf_write_uuid(pb, package->type == MaterialPackage ? Sequence: Sequence + TypeBottom, st->index); PRINT_KEY(s, "sequence uid", pb->buf_ptr - 16); mxf_write_common_fields(s, st); @@ -928,12 +936,12 @@ static void mxf_write_sequence(AVFormatContext *s, AVStream *st, enum MXFMetadat component = TimecodeComponent; else component = SourceClip; -if (type == SourcePackage) +if (package->type == SourcePackage) component += TypeBottom; mxf_write_uuid(pb, component, st->index); } -static void mxf_write_timecode_component(AVFormatContext *s, AVStream *st, enum MXFMetadataSetType type) +static void mxf_write_timecode_component(AVFormatContext *s, AVStream *st, MXFPackage *package) { MXFContext *mxf =