[Helix-client-dev] Re: [Masf-restricted-pcdev] Statement of Design: Transfer of Cover Art and UITS properties through Helix DNA
Milko Boic <[email protected]> Thu, 22 Oct 2009 09:35:49 -0700
| Newsgroups | gmane.comp.multimedia.helix.devel,gmane.spam.detected |
|---|---|
| Message-ID | <[email protected]> |
Looks good. Thanks, Milko At 07:41 AM 10/21/2009, Petar Basic wrote: >Written by: pbasic at real.com >Date: 2009/10/21 >Project: GMP MetaEditor (meta3gp.exe) > >Synopsis: >Statement of Design: Transfer of Cover Art and UITS properties >through Helix DNA > > >1.) Purpose and introduction >GMP MetaEditor project requires that the following functionality be >implemented in Helix DNA components: > >--Reading and writing of Cover Art meta-data for MP4-based media files. > Both 3GPP and iTunes flavors of meta-data must be supported. > >--Reading and writing of UITS meta-data section for MP4-based media files. > >This document proposes the design to be employed for transferring the >above data through Helix DNA framework. > > >2.) Reading and writing of Cover Art meta-data for MP4-based media files >Helix DNA will carry Cover Art in its file header in a Buffer-property >named "APICData". To simplify extraction and insertion, the structure >of the APIC data should be exactly as defined by ID3v2 spec (including >the ID3 frame header). The layout of ID3v2 APIC frame is as follows: > ><Header for 'Attached picture', ID: "APIC"> > Text encoding $xx > MIME type <text string> $00 > Picture type $xx > Description <text string according to encoding> $00 (00) > Picture data <binary data> > >To provide for easy parsing and generation of the APIC frame, a C++ >utility class (e.g. class APICFrameWrapper) will be provided. For >example, to be able to look into the APIC fields, the code will only >have to pass the contents of the "APICData" Buffer-property to the >APICFrameWrapper constructor and call its methods. Conversely, to >construct the "APICData" Buffer-property, the code will pass relevant >arguments (i.e. image BLOB, MIME-type) to the APICFrameWrapper >constructor and retrieve the generated Buffer-property. >APICFrameWrapper can be also be designed as an implementation of an >interface (e.g. IHXAPICFrame). > >Supporting multiple attached pictures in Helix DNA can be done in the >same manner as for keywords. This translates to the following >property definitions: >PropertyType: ULONG32, PropertyName: APICDataCount >PropertyType: Buffer, PropertyName: APICData0 >PropertyType: Buffer, PropertyName: APICData1 >etc. > >"APICDataCount" contains the number of "APICData" prefixed >Buffer-properties. If "APICDataCount" property is missing, the code >must assume there are no "APICData" Buffer-properties. Otherwise, >there are exactly APICDataCount Buffer-properties named: "APICData" + >APIC index. APIC indices are 0 based and are not in any way related >to the "Picture type" field of the contained APIC frame. > > >2.1.) 3GPP meta-data flavor >Cover Art must be stored inside APIC frames of ID3v2 tag carried by >the ID32 atom. Per ID3 spec, multiple APIC frames can be stored >inside ID3v2 tag. APIC frame carries MIME-type field along with >binary data, so any graphics format is supported. Possible locations >of ID32 atom inside the MP4 file are [file.meta.ID32], >[file.moov.meta.ID32], [file.moov.trak.meta.ID32]. > >MP4 file-writer should write-out APIC frames stored within the Helix >DNA file-header to the [file.moov.meta.ID32] location and those APIC >frames stored within Helix DNA stream-headers should be written to >corresponding [file.moov.trak.meta.ID32] locations. Outputted ID3v2 >tag must be constructed on the fly. All APIC frames contained by >"APICData" header properties must be injected into the constructed >ID3v2 tag. > >MP4 file-format should read APIC frames found under >[file.moov.trak.meta.ID32] locations into the corresponding Helix DNA >stream-headers, while APIC frames found under [file.moov.meta.ID32] >location should be read into the Helix DNA file-header. If >[file.moov.meta.ID32] location is not present in the file, MP4 >file-format can settle for APIC frames found under [file.meta.ID32] >location and read those into the Helix DNA file-header. Loaded ID3v2 >tag must be parsed for all APIC frames. Retrieved APIC frames must be >extracted as "APICData" header properties. > > >2.2). iTunes meta-data flavor >Cover Art must be stored inside the >[file.moov.udta.meta.ilst.covr.data] atom. Storing multiple graphics >objects is possible by putting multiple 'data' atoms under the 'covr' >atom. Per iTMF spec, graphics formats supported are: JPEG, PNG, GIF >and BMP. > >MP4 file-writer should write-out "Picture data" field of the APIC >frame as iTunes' [file.moov.udta.meta.ilst.covr.data] atom contents >and set the atom's payload-type flags according to "MIME type" field >of the APIC frame. "APICData" properties which contain unsupported >MIME-types should be ignored. Each APIC frame contained by "APICData" >Helix DNA file-header properties must be injected into a separate >'data' atom. > >MP4 file-format should read iTunes' >[file.moov.udta.meta.ilst.covr.data] atoms and construct "APICData" >Buffer-properties according to APIC frame layout. "APICData" >Buffer-properties must be inserted into the Helix DNA file-header. > > >3.) Reading and writing of UITS meta-data section for MP4-based media files >UITS section is organized as a standalone XML document, which means >UTF16 encoding should be supported. Therefore, Helix DNA will carry >UITS payload in a Buffer-property named "UITSData". "UITSData" will >contain a string formatted per UITS spec. > >The exact location of UITS section inside the media-file depends on >the container file format. In case of MP4 media-file, UITS section >should be embedded as a PRIV frame inside the ID3v2 tag carried by the >[file.meta.ID32] or [file.moov.meta.ID32] atom. The code will prefer >[file.moov.meta.ID32] location. The layout of the PRIV frame is as >follows: > ><Header for 'Private frame', ID: "PRIV"> > Owner identifier <text string> $00 > The private data <binary data> > >What to use as the value of "Owner identifier" is to be determined. > >From UITS spec: The 'Owner identifier' is a null-terminated string >with a URL containing an email address, or a link to a location where >an email address can be found, that belongs to the organisation >responsible for the frame. > >MP4 file-writer must write-out "UITSData" property found in the Helix >DNA file-header as a PRIV frame inside the ID3v2 tag. ID3v2 tag will >be generated on the fly and placed into the [file.moov.meta.ID32] >atom. > >MP4 file-format must read [file.moov.meta.ID32] atom. Loaded ID3v2 >tag must be parsed for PRIV frame with "Owner identifier" which >identifies the UITS section. Matching frame's data must be extracted >as "UITSData" property into the Helix DNA file-header. If >[file.moov.meta.ID32] location is not present in the file or does not >contain required PRIV frame, the file-format can settle for matching >PRIV frame found under [file.meta.ID32] location. > > >4.) ID3v2 tag processing >With current requirements in mind, very limited ID3v2 parsing and >generation capability is needed for now. It would be best to create >utility class that will support above but can be extended to support >more in the future. The other option is reusing existing ID3Lib >project from our repository. > >Content-Type: text/plain; charset=us-ascii; >name="SOD-CoverArt-UITS-Properties-1.0.txt" >Content-Disposition: attachment; > filename="SOD-CoverArt-UITS-Properties-1.0.txt" >X-Attachment-Id: f_g126yy2e1 > >_______________________________________________ >Masf-restricted-pcdev mailing list >[email protected] >http://lists.helixcommunity.org/mailman/listinfo/masf-restricted-pcdev _______________________________________________ Helix-client-dev mailing list [email protected] http://lists.helixcommunity.org/mailman/listinfo/helix-client-dev