[Helix-client-dev] Re: CN: Extended support for iTunes meta-info in datatype projects

Petar Basic <[email protected]> Fri, 23 Oct 2009 14:55:26 +0200
Newsgroups gmane.comp.multimedia.helix.devel
Message-ID <[email protected]>
Renamed "Abstract" to "Description" to avoid clashes with previously
defined "Abstract" property name.


On Fri, Oct 23, 2009 at 1:08 PM, Petar Basic <[email protected]> wrote:
> Modified by: pbasic at real.com
> Reviewed by: ehyche at real.com, djanecek at real.com
> Date: 2009/10/23
> Project: GMP MetaEditor (meta3gp.exe)
>
> Synopsis:
> Extended support for iTunes meta-info in datatype projects
>
> Overview:
> GMP MetaEditor tool must support both 3GPP and iTunes meta-info
> flavors in MP4-based files.  iTunes metadata boxes were only partially
> supported in MP4 file-writer and so far unsupported in MP4
> file-format.  This CR adds support for standard iTunes tags minus the
> Cover Art ('covr') tag which will be addressed separately.
>
> The following iTunes tags are now supported:
> Album Name (@alb)
> Artist(@ART)
> User Comment(@cmt)
> Copyright (cprt)
> Release Date (@day)
> Encoded By (@enc)
> Pre-defined Genre (gnre)
> User Genre (@gen)
> Song Name (@nam)
> Track Sub-Title (@st3)
> Encoding Tool (@too)
> Composer (@wrt)
> Album Artist (aART)
> Disc Compilation (cpil)
> Disc Number (disk)
> Grouping (@grp, grup)
> Lyrics (@lyr)
> Content Rating (rtng)
> Beats Per Minute (tmpo)
> Track Number (@trkn)
>
> File-writer takes into account common expectations of other software
> packages and outputs atoms accordingly.  For this reason, the length
> of values in string atoms except @lyr is currently limited to 255
> characters.  UTF8 and UTF16BE output is fully supported except for
> @lyr which must be in UTF8 format.  Only year portion of @day atom is
> read/written as the full date seems unimportant to most other software
> (e.g. iTunes9 also allows input of the year part only).
>
> Details:
> 1.) Fixed a bug in EncStrUtils::ConvertUTF8ToUTF16.
>
> 2.) Updated project dependencies in helix.bif.  Added
> HELIX_FEATURE_ITUNES_METAINFO to helix-client-mp4.pfi.
>
> 3.) Added iTunes meta-flavor definition to ihxmetaeditor.h.
>
> 4.) Updated meta-info key defines in metainfokeys.h.  The keys have
> been split in several non-overlapping sets.  Currently defined are
> Generic set, iTunes specific set, 3GPP specific set.  Key sets can be
> combined where needed.  Some aliases in specific sets have been
> defined which reference keys in the generic set.
>
> 5.) Moved MetaInfo3GP utilities from meta3gp project into
> common/util/metautil.cpp module.  Renamed utility class to MetaInfo.
> This class simplifies processing of meta-info properties in
> file-headers, stream-headers, etc.  It can also be used as a simpler
> temporary C++-style container for meta-info values; export/import
> to/from Helix IHXValues container is supported.
>
> 6.) Updated code in dtdriver/common/decoder, dtdriver/common/engine,
> datatype/tools/metaeditor to use MetaInfo class utilities.  All
> available meta-info is now always transferred between headers in
> FFDriver components.
>
> 7.) Metaeditor's source handler now transfers all available meta-info
> properties between headers and leaves meta-info set/flavor filtering
> to IHXMetaDataProcessor.
>
> 8.) Updated and refactored command line processing in meta3gp
> executable project according to GMP MetaEditor specs.  Both flavors of
> meta-data (3GPP, iTunes) can be injected into the same media-file by
> specifying the -metastyle switch multiple times.
>
> 9.) Merged MP4 atom handling improvements from 310Atlas:
>  A.) MP4 fileformat's atomizer had to be extended to handle
> non-standard size (versioned) container atoms.  Until now it was
> assumed that each container has 8 byte header - e.g. 'meta' atom uses
> 12 bytes.
>  B.) MP4 fileformat has been extended with 'meta' and 'ID32'
> definitions. ID32 Tags found at track level are handled by TrackInfo
> manager and are inserted into the stream header of the corresponding
> stream.
>  C.) Removed dead code (TypedChildIterator) in MP4 fileformat.
>  D.) MP4 filewriter has been extended with 'meta' and 'ID32'
> definitions.  Stream mixer outputs the ID3v2 tag to the following atom
> path: /file/moov/meta/ID32.
>  E.) MP4 filewriter writes out the ID32 meta data as part of the moov
> or trak meta box depending on the location (file or stream header) of
> the ID32 blob.
>
> 10.) MP4 filewriter has been updated to respect MetaDataFlavor
> configuration option and can therefore update both flavors of
> meta-data into the same media-file.  Added/extended iTunes atom
> definitions and atom tree builder methods.
>
> 11.) MP4 fileformat has been updated to read iTunes meta tags.
> Added/extended iTunes atom definitions and atom tree builder methods.
> CreateQTAtom method now takes additional parameter specifying the
> current tree root - this was needed because there is some overlap
> among flavor atom names (3GPP gnre/iTunes gnre, 3GPP cprt/iTunes cprt,
> 3GPP rtng/iTunes rntg).  The tree builder needs current root type to
> decide the context of creation and to create an atom of the correct
> class (iTunes or 3GPP).  Since both flavors of metadata can now be
> encountered inside a single media-file, some extraction method
> prioritization has been implemented based on MajorBrand value.  By
> default, 3GPP info will overwrite iTunes info.  In case of M4A brand,
> iTunes info will overwrite 3GPP info.  The reader is not subject to
> artificial 255 characters limitation in iTunes strings; it also
> tolerates various deviations from the iTMF spec where it is safe and
> possible to do so.
>
> Testing:
> Verified that meta-info injected by GMP MetaEditor can be read with
> other software (iTunes 9, AtomicParsley 0.9, CT metadata extractor
> 1.3).  Verified that meta-info injected by other software can be read
> with GMP MetaEditor.
>
> Files Modified:
> ribosome/build/umakepf/helix-client-mp4.pfi
> ribosome/build/bif-cvs/helix/common/build/BIF/helix.bif
> common/include/ihxmetaeditor.h
> common/util/encstr.cpp
> datatype/include/metainfokeys.h
> datatype/common/util/metautil.cpp
> datatype/common/util/pub/metautil.h
> datatype/common/util/Umakefil
> datatype/tools/dtdriver/common/Umakefil
> datatype/tools/dtdriver/decoder/audio/Umakefil
> datatype/tools/dtdriver/decoder/audio/adecoder.cpp
> datatype/tools/dtdriver/decoder/video/Umakefil
> datatype/tools/dtdriver/decoder/video/vdecoder.cpp
> datatype/tools/dtdriver/decoder/video/vdepacker.cpp
> datatype/tools/dtdriver/engine/pub/ffdriver.h
> datatype/tools/dtdriver/engine/ffdriver.cpp
> datatype/tools/dtdriver/engine/Umakefil
> datatype/tools/dtdriver/apps/meta3gp/main.cpp
> datatype/tools/dtdriver/apps/meta3gp/Umakefil_meta3gp
> datatype/tools/metaeditor/srchandler.cpp
> datatype/tools/metaeditor/srchandler.h
> datatype/tools/metaeditor/Umakefil
> datatype/mp4/fileformat/atomizer.cpp
> datatype/mp4/fileformat/pub/atomizer.h
> datatype/mp4/fileformat/qtatoms.cpp
> datatype/mp4/fileformat/pub/qtatoms.h
> datatype/mp4/fileformat/qtatmmgs.cpp
> datatype/mp4/fileformat/pub/qtatmmgs.h
> datatype/mp4/fileformat/qtffplin.cpp
> datatype/mp4/fileformat/pub/qtffplin.h
> datatype/mp4/fileformat/pub/qtbatom.h
> datatype/mp4/fileformat/dllumakefil
> datatype/mp4/fileformat/libumakefil
> datatype/mp4/filewriter/3gpmeta.h
> datatype/mp4/filewriter/3gpmeta.cpp
> datatype/mp4/filewriter/mp4sm.h
> datatype/mp4/filewriter/mp4sm.cpp
> datatype/mp4/filewriter/m4amdatoms.h
> datatype/mp4/filewriter/mp4atoms.h
>
> Files Removed:
> datatype/tools/metaeditor/metautil3gp.cpp
> datatype/tools/metaeditor/pub/metautil3gp.h
> datatype/tools/metaeditor/Umakefile_3gp_lib
> datatype/tools/metaeditor/Umakefile_dll
>
> Platforms and Profiles Affected:
> All
>
> Image Size and Heap Use impact:
> Small increase
>
> Platforms and Profiles Build Verified:
> system id: win32-i386-vc7
> profile: helix-client-all-defines
>
> Platforms and Profiles Functionality Verified:
> x86 Windows XP SP2
>
> Branch:
> HEAD
>
> Copyright assignment:
> I am a RealNetworks employee or contractor.
>

_______________________________________________
Helix-client-dev mailing list
[email protected]
http://lists.helixcommunity.org/mailman/listinfo/helix-client-dev
datatype_common_util2.diff (text/x-patch, 27 KB)
Index: metautil.cpp
===================================================================
RCS file: /cvsroot/datatype/common/util/metautil.cpp,v
retrieving revision 1.8
diff -U30 -r1.8 metautil.cpp
--- metautil.cpp	23 Oct 2009 09:40:00 -0000	1.8
+++ metautil.cpp	23 Oct 2009 11:40:05 -0000
@@ -397,61 +397,61 @@
         retVal = RemoveKeywordProperties(dst);
 
         PropTools::CopyPropertyULONG32(retVal, dst, src, _3GPP_META_INFO_KEYWORD_COUNT_KEY, TRUE);
         for(UINT32 i = 0; i < ulKeywordCount; i++)
         {
             if(SUCCEEDED(retVal))
             {
                 char key[128];
                 sprintf(key, _3GPP_META_INFO_KEYWORD_KEY, int(i));
                 PropTools::CopyPropertyBuffer(retVal, dst, src, key, TRUE);
             }
         }
     }
     else if(bBlast)
     {
         retVal = RemoveKeywordProperties(dst);
     }
     return retVal;
 }
 
 HX_RESULT MetaInfo::RemoveAllProperties(IHXValues* pValues, UINT32 metaInfoSetFlags)
 {
     HX_RESULT retVal = HXR_OK;
 
     // Generic
     if(metaInfoSetFlags & METAINFO_SET_GENERIC)
     {
         PropTools::RemovePropertyBuffer(retVal, pValues, _GENERIC_META_INFO_TITLE_KEY);
         PropTools::RemovePropertyBuffer(retVal, pValues, _GENERIC_META_INFO_COMPOSER_KEY);
         PropTools::RemovePropertyBuffer(retVal, pValues, _GENERIC_META_INFO_COPYRIGHT_KEY);
-        PropTools::RemovePropertyBuffer(retVal, pValues, _GENERIC_META_INFO_COMMENT_KEY);
+        PropTools::RemovePropertyBuffer(retVal, pValues, _GENERIC_META_INFO_DESCRIPTION_KEY);
         PropTools::RemovePropertyBuffer(retVal, pValues, _GENERIC_META_INFO_ARTIST_KEY);
         PropTools::RemovePropertyBuffer(retVal, pValues, _GENERIC_META_INFO_GENRE_KEY);
         PropTools::RemovePropertyBuffer(retVal, pValues, _GENERIC_META_INFO_ALBUM_KEY);
 
         PropTools::RemovePropertyULONG32(retVal, pValues, _GENERIC_META_INFO_TRACK_NUMBER_KEY);
         PropTools::RemovePropertyULONG32(retVal, pValues, _GENERIC_META_INFO_RECORDING_YEAR_KEY);
     }
 
     // iTunes
     if(metaInfoSetFlags & METAINFO_SET_ITUNES_SPECIFIC)
     {
         PropTools::RemovePropertyBuffer(retVal, pValues, _ITUNES_META_INFO_TRACK_SUBTITLE_KEY);
         PropTools::RemovePropertyBuffer(retVal, pValues, _ITUNES_META_INFO_GENERATOR_TOOL_KEY);
         PropTools::RemovePropertyBuffer(retVal, pValues, _ITUNES_META_INFO_ENCODED_BY_KEY);
         PropTools::RemovePropertyBuffer(retVal, pValues, _ITUNES_META_INFO_GROUPING_KEY);
         PropTools::RemovePropertyBuffer(retVal, pValues, _ITUNES_META_INFO_ALBUM_ARTIST_KEY);
         PropTools::RemovePropertyBuffer(retVal, pValues, _ITUNES_META_INFO_LYRICS_KEY);
 
         PropTools::RemovePropertyULONG32(retVal, pValues, _ITUNES_META_INFO_BEATS_PER_MINUTE_KEY);
         PropTools::RemovePropertyULONG32(retVal, pValues, _ITUNES_META_INFO_PART_OF_COMPILATION_KEY);
         PropTools::RemovePropertyULONG32(retVal, pValues, _ITUNES_META_INFO_EXPLICIT_CONTENT_KEY);
         PropTools::RemovePropertyULONG32(retVal, pValues, _ITUNES_META_INFO_TRACK_COUNT_KEY);
         PropTools::RemovePropertyULONG32(retVal, pValues, _ITUNES_META_INFO_DISC_NUMBER_KEY);
         PropTools::RemovePropertyULONG32(retVal, pValues, _ITUNES_META_INFO_DISC_COUNT_KEY);
     }
 
     // 3GPP
     if(metaInfoSetFlags & METAINFO_SET_3GPP_SPECIFIC)
     {
         PropTools::RemovePropertyBuffer(retVal, pValues, _3GPP_META_INFO_GLOBAL_LANGUAGE_ENCODING_KEY);
@@ -463,61 +463,61 @@
         PropTools::RemovePropertyBuffer(retVal, pValues, _3GPP_META_INFO_LOCATION_NAME_KEY);
         PropTools::RemovePropertyBuffer(retVal, pValues, _3GPP_META_INFO_LOCATION_ASTRONOMICAL_BODY_KEY);
         PropTools::RemovePropertyBuffer(retVal, pValues, _3GPP_META_INFO_LOCATION_ADDITIONAL_NOTES_KEY);
         PropTools::RemovePropertyBuffer(retVal, pValues, _3GPP_META_INFO_LOCATION_LONGITUDE_KEY);
         PropTools::RemovePropertyBuffer(retVal, pValues, _3GPP_META_INFO_LOCATION_LATITUDE_KEY);
         PropTools::RemovePropertyBuffer(retVal, pValues, _3GPP_META_INFO_LOCATION_ALTITUDE_KEY);
 
         PropTools::RemovePropertyULONG32(retVal, pValues, _3GPP_META_INFO_CLASSIFICATION_TABLE_KEY);
         PropTools::RemovePropertyULONG32(retVal, pValues, _3GPP_META_INFO_LOCATION_ROLE_KEY);
 
         // keywords
         if(SUCCEEDED(retVal))
         {
             retVal = RemoveKeywordProperties(pValues);
         }
     }
 
     return retVal;
 }
 
 HX_RESULT MetaInfo::CopyAllProperties(IHXValues* dst, IHXValues* src, ULONG32 metaInfoSetFlags, HXBOOL bBlast)
 {
     HX_RESULT retVal = HXR_OK;
 
     // Generic
     if(metaInfoSetFlags & METAINFO_SET_GENERIC)
     {
         PropTools::CopyPropertyBuffer(retVal, dst, src, _GENERIC_META_INFO_TITLE_KEY, bBlast);
         PropTools::CopyPropertyBuffer(retVal, dst, src, _GENERIC_META_INFO_COMPOSER_KEY, bBlast);
         PropTools::CopyPropertyBuffer(retVal, dst, src, _GENERIC_META_INFO_COPYRIGHT_KEY, bBlast);
-        PropTools::CopyPropertyBuffer(retVal, dst, src, _GENERIC_META_INFO_COMMENT_KEY, bBlast);
+        PropTools::CopyPropertyBuffer(retVal, dst, src, _GENERIC_META_INFO_DESCRIPTION_KEY, bBlast);
         PropTools::CopyPropertyBuffer(retVal, dst, src, _GENERIC_META_INFO_ARTIST_KEY, bBlast);
         PropTools::CopyPropertyBuffer(retVal, dst, src, _GENERIC_META_INFO_GENRE_KEY, bBlast);
         PropTools::CopyPropertyBuffer(retVal, dst, src, _GENERIC_META_INFO_ALBUM_KEY, bBlast);
 
         PropTools::CopyPropertyULONG32(retVal, dst, src, _GENERIC_META_INFO_TRACK_NUMBER_KEY, bBlast);
         PropTools::CopyPropertyULONG32(retVal, dst, src, _GENERIC_META_INFO_RECORDING_YEAR_KEY, bBlast);
     }
 
     // iTunes
     if(metaInfoSetFlags & METAINFO_SET_ITUNES_SPECIFIC)
     {
         PropTools::CopyPropertyBuffer(retVal, dst, src, _ITUNES_META_INFO_TRACK_SUBTITLE_KEY, bBlast);
         PropTools::CopyPropertyBuffer(retVal, dst, src, _ITUNES_META_INFO_GENERATOR_TOOL_KEY, bBlast);
         PropTools::CopyPropertyBuffer(retVal, dst, src, _ITUNES_META_INFO_ENCODED_BY_KEY, bBlast);
         PropTools::CopyPropertyBuffer(retVal, dst, src, _ITUNES_META_INFO_GROUPING_KEY, bBlast);
         PropTools::CopyPropertyBuffer(retVal, dst, src, _ITUNES_META_INFO_ALBUM_ARTIST_KEY, bBlast);
         PropTools::CopyPropertyBuffer(retVal, dst, src, _ITUNES_META_INFO_LYRICS_KEY, bBlast);
 
         PropTools::CopyPropertyULONG32(retVal, dst, src, _ITUNES_META_INFO_BEATS_PER_MINUTE_KEY, bBlast);
         PropTools::CopyPropertyULONG32(retVal, dst, src, _ITUNES_META_INFO_PART_OF_COMPILATION_KEY, bBlast);
         PropTools::CopyPropertyULONG32(retVal, dst, src, _ITUNES_META_INFO_EXPLICIT_CONTENT_KEY, bBlast);
         PropTools::CopyPropertyULONG32(retVal, dst, src, _ITUNES_META_INFO_TRACK_COUNT_KEY, bBlast);
         PropTools::CopyPropertyULONG32(retVal, dst, src, _ITUNES_META_INFO_DISC_NUMBER_KEY, bBlast);
         PropTools::CopyPropertyULONG32(retVal, dst, src, _ITUNES_META_INFO_DISC_COUNT_KEY, bBlast);
     }
 
     // 3GPP
     if(metaInfoSetFlags & METAINFO_SET_3GPP_SPECIFIC)
     {
         PropTools::CopyPropertyBuffer(retVal, dst, src, _3GPP_META_INFO_GLOBAL_LANGUAGE_ENCODING_KEY, bBlast);
@@ -578,139 +578,139 @@
 
 CHXString MetaInfo::GetFlavorNames(UINT32 metaFlavorFlags)
 {
     const METADATA_FLAVOR allFlavors[] = { METADATA_FLAVOR_3GPP, METADATA_FLAVOR_ITUNES };
 
     CHXString s;
     for(int i = 0; i < (sizeof(allFlavors) / sizeof(METADATA_FLAVOR)); i++)
     {
         if(metaFlavorFlags & allFlavors[i])
         {
             if(!s.IsEmpty())
             {
                 s += ", ";
             }
             s += GetFlavorName(allFlavors[i]);
         }
     }
 
     return s;
 }
 
 UINT32 MetaInfo::GetSetsWhichSupportItem(eStringMetaItem itemName)
 {
     switch(itemName)
     {
         case StringMetaItem_Title:
         case StringMetaItem_Artist:
         case StringMetaItem_Album:
         case StringMetaItem_Genre:
         case StringMetaItem_Composer:
-        case StringMetaItem_Comment:
+        case StringMetaItem_Description:
         case StringMetaItem_Copyright:
             return METAINFO_SET_GENERIC;
 
         case StringMetaItem_TrackSubtitle:
         case StringMetaItem_GeneratorTool:
         case StringMetaItem_EncodedBy:
         case StringMetaItem_Grouping:
         case StringMetaItem_AlbumArtist:
         case StringMetaItem_Lyrics:
             return METAINFO_SET_ITUNES_SPECIFIC;
 
         case StringMetaItem_GlobalLanguageEncoding:
         case StringMetaItem_RatingEntity:
         case StringMetaItem_RatingCriteria:
         case StringMetaItem_RatingInfo:
         case StringMetaItem_ClassificationEntity:
         case StringMetaItem_ClassificationInfo:
         case StringMetaItem_LocationName:
         case StringMetaItem_LocationAstronomicalBody:
         case StringMetaItem_LocationAdditionalNotes:
         case StringMetaItem_LocationLongitude:
         case StringMetaItem_LocationLatitude:
         case StringMetaItem_LocationAltitude:
         case StringMetaItem_Keywords:
             return METAINFO_SET_3GPP_SPECIFIC;
     }
     return 0;
 }
 
 UINT32 MetaInfo::GetFlavorsWhichSupportItem(eStringMetaItem itemName)
 {
     switch(itemName)
     {
         case StringMetaItem_Title:
         case StringMetaItem_Artist:
         case StringMetaItem_Album:
         case StringMetaItem_Genre:
         case StringMetaItem_Composer:
-        case StringMetaItem_Comment:
+        case StringMetaItem_Description:
         case StringMetaItem_Copyright:
             return (METADATA_FLAVOR_3GPP | METADATA_FLAVOR_ITUNES);
 
         case StringMetaItem_TrackSubtitle:
         case StringMetaItem_GeneratorTool:
         case StringMetaItem_EncodedBy:
         case StringMetaItem_Grouping:
         case StringMetaItem_AlbumArtist:
         case StringMetaItem_Lyrics:
             return METADATA_FLAVOR_ITUNES;
 
         case StringMetaItem_GlobalLanguageEncoding:
         case StringMetaItem_RatingEntity:
         case StringMetaItem_RatingCriteria:
         case StringMetaItem_RatingInfo:
         case StringMetaItem_ClassificationEntity:
         case StringMetaItem_ClassificationInfo:
         case StringMetaItem_LocationName:
         case StringMetaItem_LocationAstronomicalBody:
         case StringMetaItem_LocationAdditionalNotes:
         case StringMetaItem_LocationLongitude:
         case StringMetaItem_LocationLatitude:
         case StringMetaItem_LocationAltitude:
         case StringMetaItem_Keywords:
             return METADATA_FLAVOR_3GPP;
     }
     return 0;
 }
 
 HXBOOL MetaInfo::IsItemValueValidForFlavors(eStringMetaItem itemName, const EncodedString& val, UINT32 metaFlavorFlags)
 {
     switch(itemName)
     {
         case StringMetaItem_Title:
         case StringMetaItem_Artist:
         case StringMetaItem_Album:
         case StringMetaItem_Genre:
         case StringMetaItem_Composer:
-        case StringMetaItem_Comment:
+        case StringMetaItem_Description:
         case StringMetaItem_Copyright:
         case StringMetaItem_TrackSubtitle:
         case StringMetaItem_GeneratorTool:
         case StringMetaItem_EncodedBy:
         case StringMetaItem_Grouping:
         case StringMetaItem_AlbumArtist:
             // iTunes have 255 character limit for all string properties except Lyrics
             return (metaFlavorFlags & METADATA_FLAVOR_ITUNES) ? (val.GetCodeUnitLength(FALSE, FALSE) <= 255) : TRUE;
 
         case StringMetaItem_Keywords:
             // 3GPP has 255 characters limit for Keywords
             return (val.GetCodeUnitLength(FALSE, FALSE) <= 255);
     }
     return TRUE;
 }
 
 UINT32 MetaInfo::GetSetsWhichSupportItem(eUIntMetaItem itemName)
 {
     switch(itemName)
     {
         case UIntMetaItem_TrackNumber:
         case UIntMetaItem_RecordingYear:
             return METAINFO_SET_GENERIC;
 
         case UIntMetaItem_BeatsPerMinute:
         case UIntMetaItem_PartOfCompilation:
         case UIntMetaItem_ExplicitContent:
         case UIntMetaItem_TrackCount:
         case UIntMetaItem_DiscNumber:
         case UIntMetaItem_DiscCount:
@@ -823,61 +823,61 @@
 MetaInfo::MetaInfo()
 {
     Clear();
 }
 
 MetaInfo::~MetaInfo()
 {
     ClearKeywords();
 }
 
 MetaInfo::MetaInfo(const MetaInfo& rhs)
 {
     *this = rhs;
 }
 
 MetaInfo& MetaInfo::operator=(const MetaInfo& rhs)
 {
     Clear();
     UpdateItems(rhs);
     return *this;
 }
 
 void MetaInfo::Dump(UINT32 metaInfoSetFlags)
 {
     // Generic
     if(metaInfoSetFlags & METAINFO_SET_GENERIC)
     {
         Dump(_GENERIC_META_INFO_TITLE_KEY, m_stringItems[StringMetaItem_Title]);
         Dump(_GENERIC_META_INFO_COMPOSER_KEY, m_stringItems[StringMetaItem_Composer]);
         Dump(_GENERIC_META_INFO_COPYRIGHT_KEY, m_stringItems[StringMetaItem_Copyright]);
-        Dump(_GENERIC_META_INFO_COMMENT_KEY, m_stringItems[StringMetaItem_Comment]);
+        Dump(_GENERIC_META_INFO_DESCRIPTION_KEY, m_stringItems[StringMetaItem_Description]);
         Dump(_GENERIC_META_INFO_ARTIST_KEY, m_stringItems[StringMetaItem_Artist]);
         Dump(_GENERIC_META_INFO_GENRE_KEY, m_stringItems[StringMetaItem_Genre]);
         Dump(_GENERIC_META_INFO_ALBUM_KEY, m_stringItems[StringMetaItem_Album]);
 
         Dump(_GENERIC_META_INFO_TRACK_NUMBER_KEY, m_ulongItems[UIntMetaItem_TrackNumber],
                                                 m_ulongItemValidFlags[UIntMetaItem_TrackNumber]);
         Dump(_GENERIC_META_INFO_RECORDING_YEAR_KEY, m_ulongItems[UIntMetaItem_RecordingYear],
                                                 m_ulongItemValidFlags[UIntMetaItem_RecordingYear]);
     }
 
     // iTunes
     if(metaInfoSetFlags & METAINFO_SET_ITUNES_SPECIFIC)
     {
         Dump(_ITUNES_META_INFO_TRACK_SUBTITLE_KEY, m_stringItems[StringMetaItem_TrackSubtitle]);
         Dump(_ITUNES_META_INFO_GENERATOR_TOOL_KEY, m_stringItems[StringMetaItem_GeneratorTool]);
         Dump(_ITUNES_META_INFO_ENCODED_BY_KEY, m_stringItems[StringMetaItem_EncodedBy]);
         Dump(_ITUNES_META_INFO_GROUPING_KEY, m_stringItems[StringMetaItem_Grouping]);
         Dump(_ITUNES_META_INFO_ALBUM_ARTIST_KEY, m_stringItems[StringMetaItem_AlbumArtist]);
         Dump(_ITUNES_META_INFO_LYRICS_KEY, m_stringItems[StringMetaItem_Lyrics]);
         Dump(_ITUNES_META_INFO_BEATS_PER_MINUTE_KEY, m_ulongItems[UIntMetaItem_BeatsPerMinute],
                                             m_ulongItemValidFlags[UIntMetaItem_BeatsPerMinute]);
         Dump(_ITUNES_META_INFO_PART_OF_COMPILATION_KEY, m_ulongItems[UIntMetaItem_PartOfCompilation],
                                             m_ulongItemValidFlags[UIntMetaItem_PartOfCompilation]);
         Dump(_ITUNES_META_INFO_EXPLICIT_CONTENT_KEY, m_ulongItems[UIntMetaItem_ExplicitContent],
                                             m_ulongItemValidFlags[UIntMetaItem_ExplicitContent]);
         Dump(_ITUNES_META_INFO_TRACK_COUNT_KEY, m_ulongItems[UIntMetaItem_TrackCount],
                                             m_ulongItemValidFlags[UIntMetaItem_TrackCount]);
         Dump(_ITUNES_META_INFO_DISC_NUMBER_KEY, m_ulongItems[UIntMetaItem_DiscNumber],
                                             m_ulongItemValidFlags[UIntMetaItem_DiscNumber]);
         Dump(_ITUNES_META_INFO_DISC_COUNT_KEY, m_ulongItems[UIntMetaItem_DiscCount],
@@ -972,61 +972,61 @@
         {
             EncodedString sTmp;
             src.GetKeyword(i, sTmp);
             AddKeyword(sTmp);
         }
     }
 
     for(int iUIntItem = UIntMetaItem_UIntItemBegin; iUIntItem < UIntMetaItem_UIntItemEnd; iUIntItem++)
     {
         if(IsItemSupportedByAnySet((eUIntMetaItem)iUIntItem, metaInfoSetFlags))
         {
             Update(m_ulongItems[iUIntItem], m_ulongItemValidFlags[iUIntItem],
                    src.m_ulongItems[iUIntItem], src.m_ulongItemValidFlags[iUIntItem]);
         }
     }
 }
 
 void MetaInfo::CopyToValues(IHXValues* pValues, HXBOOL bBlast, UINT32 metaInfoSetFlags) const
 {
     if(!pValues)
     {
         return;
     }
 
     // Generic
     if(metaInfoSetFlags & METAINFO_SET_GENERIC)
     {
         CopyString(pValues, bBlast, _GENERIC_META_INFO_TITLE_KEY, StringMetaItem_Title);
         CopyString(pValues, bBlast, _GENERIC_META_INFO_COMPOSER_KEY, StringMetaItem_Composer);
         CopyString(pValues, bBlast, _GENERIC_META_INFO_COPYRIGHT_KEY, StringMetaItem_Copyright);
-        CopyString(pValues, bBlast, _GENERIC_META_INFO_COMMENT_KEY, StringMetaItem_Comment);
+        CopyString(pValues, bBlast, _GENERIC_META_INFO_DESCRIPTION_KEY, StringMetaItem_Description);
         CopyString(pValues, bBlast, _GENERIC_META_INFO_ARTIST_KEY, StringMetaItem_Artist);
         CopyString(pValues, bBlast, _GENERIC_META_INFO_GENRE_KEY, StringMetaItem_Genre);
         CopyString(pValues, bBlast, _GENERIC_META_INFO_ALBUM_KEY, StringMetaItem_Album);
 
         CopyUINT32(pValues, bBlast, _GENERIC_META_INFO_TRACK_NUMBER_KEY, UIntMetaItem_TrackNumber);
         CopyUINT32(pValues, bBlast, _GENERIC_META_INFO_RECORDING_YEAR_KEY, UIntMetaItem_RecordingYear);
     }
 
     // iTunes
     if(metaInfoSetFlags & METAINFO_SET_ITUNES_SPECIFIC)
     {
         CopyString(pValues, bBlast, _ITUNES_META_INFO_TRACK_SUBTITLE_KEY, StringMetaItem_TrackSubtitle);
         CopyString(pValues, bBlast, _ITUNES_META_INFO_GENERATOR_TOOL_KEY, StringMetaItem_GeneratorTool);
         CopyString(pValues, bBlast, _ITUNES_META_INFO_ENCODED_BY_KEY, StringMetaItem_EncodedBy);
         CopyString(pValues, bBlast, _ITUNES_META_INFO_GROUPING_KEY, StringMetaItem_Grouping);
         CopyString(pValues, bBlast, _ITUNES_META_INFO_ALBUM_ARTIST_KEY, StringMetaItem_AlbumArtist);
         CopyString(pValues, bBlast, _ITUNES_META_INFO_LYRICS_KEY, StringMetaItem_Lyrics);
 
         CopyUINT32(pValues, bBlast, _ITUNES_META_INFO_BEATS_PER_MINUTE_KEY, UIntMetaItem_BeatsPerMinute);
         CopyUINT32(pValues, bBlast, _ITUNES_META_INFO_PART_OF_COMPILATION_KEY, UIntMetaItem_PartOfCompilation);
         CopyUINT32(pValues, bBlast, _ITUNES_META_INFO_EXPLICIT_CONTENT_KEY, UIntMetaItem_ExplicitContent);
         CopyUINT32(pValues, bBlast, _ITUNES_META_INFO_TRACK_COUNT_KEY, UIntMetaItem_TrackCount);
         CopyUINT32(pValues, bBlast, _ITUNES_META_INFO_DISC_NUMBER_KEY, UIntMetaItem_DiscNumber);
         CopyUINT32(pValues, bBlast, _ITUNES_META_INFO_DISC_COUNT_KEY, UIntMetaItem_DiscCount);
     }
 
     // 3GPP
     if(metaInfoSetFlags & METAINFO_SET_3GPP_SPECIFIC)
     {
         CopyString(pValues, bBlast, _3GPP_META_INFO_GLOBAL_LANGUAGE_ENCODING_KEY, StringMetaItem_GlobalLanguageEncoding);
@@ -1054,61 +1054,61 @@
         EncodedString sTmp;
         UINT32 ulKeywordCount = GetKeywordCount();
         if(ulKeywordCount)
         {
             PropTools::CopyPropertyULONG32(pValues, TRUE, ulKeywordCount,
                                                 _3GPP_META_INFO_KEYWORD_COUNT_KEY, TRUE);
             for(UINT32 i = 0; i < ulKeywordCount; i++)
             {
                 char key[128];
                 sprintf(key, _3GPP_META_INFO_KEYWORD_KEY, int(i));
                 GetKeyword(i, sTmp);
                 PropTools::CopyPropertyBuffer(pValues, sTmp, key, TRUE);
             }
         }
     }
 }
 
 void MetaInfo::CopyFromValues(IHXValues* pValues, HXBOOL bBlast, UINT32 metaInfoSetFlags)
 {
     if(!pValues)
     {
         return;
     }
 
     // Generic
     if(metaInfoSetFlags & METAINFO_SET_GENERIC)
     {
         CopyString(StringMetaItem_Title, bBlast, pValues, _GENERIC_META_INFO_TITLE_KEY);
         CopyString(StringMetaItem_Composer, bBlast, pValues, _GENERIC_META_INFO_COMPOSER_KEY);
         CopyString(StringMetaItem_Copyright, bBlast, pValues, _GENERIC_META_INFO_COPYRIGHT_KEY);
-        CopyString(StringMetaItem_Comment, bBlast, pValues, _GENERIC_META_INFO_COMMENT_KEY);
+        CopyString(StringMetaItem_Description, bBlast, pValues, _GENERIC_META_INFO_DESCRIPTION_KEY);
         CopyString(StringMetaItem_Artist, bBlast, pValues, _GENERIC_META_INFO_ARTIST_KEY);
         CopyString(StringMetaItem_Genre, bBlast, pValues, _GENERIC_META_INFO_GENRE_KEY);
         CopyString(StringMetaItem_Album, bBlast, pValues, _GENERIC_META_INFO_ALBUM_KEY);
 
         CopyUINT32(UIntMetaItem_TrackNumber, bBlast, pValues, _GENERIC_META_INFO_TRACK_NUMBER_KEY);
         CopyUINT32(UIntMetaItem_RecordingYear, bBlast, pValues, _GENERIC_META_INFO_RECORDING_YEAR_KEY);
     }
 
     // iTunes
     if(metaInfoSetFlags & METAINFO_SET_ITUNES_SPECIFIC)
     {
         CopyString(StringMetaItem_TrackSubtitle, bBlast, pValues, _ITUNES_META_INFO_TRACK_SUBTITLE_KEY);
         CopyString(StringMetaItem_GeneratorTool, bBlast, pValues, _ITUNES_META_INFO_GENERATOR_TOOL_KEY);
         CopyString(StringMetaItem_GeneratorTool, bBlast, pValues, _ITUNES_META_INFO_ENCODED_BY_KEY);
         CopyString(StringMetaItem_Grouping, bBlast, pValues, _ITUNES_META_INFO_GROUPING_KEY);
         CopyString(StringMetaItem_AlbumArtist, bBlast, pValues, _ITUNES_META_INFO_ALBUM_ARTIST_KEY);
         CopyString(StringMetaItem_Lyrics, bBlast, pValues, _ITUNES_META_INFO_LYRICS_KEY);
 
         CopyUINT32(UIntMetaItem_BeatsPerMinute, bBlast, pValues, _ITUNES_META_INFO_BEATS_PER_MINUTE_KEY);
         CopyUINT32(UIntMetaItem_PartOfCompilation, bBlast, pValues, _ITUNES_META_INFO_PART_OF_COMPILATION_KEY);
         CopyUINT32(UIntMetaItem_ExplicitContent, bBlast, pValues, _ITUNES_META_INFO_EXPLICIT_CONTENT_KEY);
         CopyUINT32(UIntMetaItem_TrackCount, bBlast, pValues, _ITUNES_META_INFO_TRACK_COUNT_KEY);
         CopyUINT32(UIntMetaItem_DiscNumber, bBlast, pValues, _ITUNES_META_INFO_DISC_NUMBER_KEY);
         CopyUINT32(UIntMetaItem_DiscCount, bBlast, pValues, _ITUNES_META_INFO_DISC_COUNT_KEY);
     }
 
     // 3GPP
     if(metaInfoSetFlags & METAINFO_SET_3GPP_SPECIFIC)
     {
         CopyString(StringMetaItem_GlobalLanguageEncoding, bBlast, pValues, _3GPP_META_INFO_GLOBAL_LANGUAGE_ENCODING_KEY);
@@ -1140,61 +1140,61 @@
             for(UINT32 i = 0; i < ulKeywordCount; i++)
             {
                 char key[128];
                 sprintf(key, _3GPP_META_INFO_KEYWORD_KEY, int(i));
                 if(PropTools::CopyPropertyBuffer(sTmp, pValues, key))
                 {
                     AddKeyword(sTmp);
                 }
             }
         }
 
         RemoveKeywordDuplicates();
     }
 }
 
 HX_RESULT MetaInfo::GetStringItem(eStringMetaItem itemName, EncodedString& out) const
 {
     out = m_stringItems[itemName];
     return out.IsEmpty() ? HXR_FAILED : HXR_OK;
 }
 
 HX_RESULT MetaInfo::SetStringItem(eStringMetaItem itemName, const EncodedString& val, UINT32 metaFlavorFlags)
 {
     switch(itemName)
     {
         case StringMetaItem_Title:
         case StringMetaItem_Artist:
         case StringMetaItem_Album:
         case StringMetaItem_Genre:
         case StringMetaItem_Composer:
-        case StringMetaItem_Comment:
+        case StringMetaItem_Description:
         case StringMetaItem_Copyright:
         case StringMetaItem_TrackSubtitle:
         case StringMetaItem_GeneratorTool:
         case StringMetaItem_EncodedBy:
         case StringMetaItem_Grouping:
         case StringMetaItem_AlbumArtist:
             // iTunes have 255 character limit for all string properties except Lyrics
             if((metaFlavorFlags & METADATA_FLAVOR_ITUNES) && (val.GetCodeUnitLength(FALSE, FALSE) > 255))
             {
                 return HXR_INVALID_PARAMETER;
             }
             break;
 
         case StringMetaItem_GlobalLanguageEncoding:
             return SetGlobalLanguageEncoding(val);
 
         case StringMetaItem_RatingEntity:
         case StringMetaItem_RatingCriteria:
         case StringMetaItem_ClassificationEntity:
             return SetStringAsciiMaxLen(m_stringItems[itemName], val, 4);
 
         case StringMetaItem_LocationLongitude:
         case StringMetaItem_LocationLatitude:
         case StringMetaItem_LocationAltitude:
             return SetStringFixedPointNum(m_stringItems[itemName], val);
     }
 
     // default assignment
     m_stringItems[itemName] = val;
     return HXR_OK;
Index: pub/metautil.h
===================================================================
RCS file: /cvsroot/datatype/common/util/pub/metautil.h,v
retrieving revision 1.5
diff -U30 -r1.5 metautil.h
--- pub/metautil.h	23 Oct 2009 09:40:00 -0000	1.5
+++ pub/metautil.h	23 Oct 2009 11:40:05 -0000
@@ -122,61 +122,61 @@
 
     static void MakeGenreNameList(CHXString& outGenreNames, const CHXPtrArray& genreOrdinals,
                             const char* szSeparator = ",");
 };
 
 //
 // Known metadata tools
 //
 class MetaInfo
 {
 public:
     static HX_RESULT RemoveKeywordProperties(IHXValues* pValues);
     static HX_RESULT CopyKeywordProperties(IHXValues* dst, IHXValues* src, HXBOOL bBlast);
 
     static HX_RESULT RemoveAllProperties(IHXValues* pValues, UINT32 metaInfoSetFlags);
     static HX_RESULT CopyAllProperties(IHXValues* dst, IHXValues* src, UINT32 metaInfoSetFlags, HXBOOL bBlast);
 
     static UINT32 GetSetsFromFlavors(UINT32 metaFlavorFlags);
     static CHXString GetFlavorName(METADATA_FLAVOR flavor);
     static CHXString GetFlavorNames(UINT32 metaFlavorFlags);
 
     enum eStringMetaItem
     {
         StringMetaItem_StringItemBegin = 0,
 
         StringMetaItem_Title = StringMetaItem_StringItemBegin,
         StringMetaItem_Artist,
         StringMetaItem_Album,
         StringMetaItem_Genre,
         StringMetaItem_Composer,
-        StringMetaItem_Comment,
+        StringMetaItem_Description,
         StringMetaItem_Copyright,
 
         StringMetaItem_TrackSubtitle, //iTunes
         StringMetaItem_GeneratorTool, //iTunes
         StringMetaItem_EncodedBy, //iTunes
         StringMetaItem_Grouping, //iTunes
         StringMetaItem_AlbumArtist, //iTunes
         StringMetaItem_Lyrics, //iTunes
 
         StringMetaItem_GlobalLanguageEncoding, //3GPP, exactly 3 ASCII characters, must be valid ISO639.2/T language code
         StringMetaItem_RatingEntity, //3GPP, max 4 ASCII characters
         StringMetaItem_RatingCriteria, //3GPP, max 4 ASCII characters
         StringMetaItem_RatingInfo, //3GPP
         StringMetaItem_ClassificationEntity, //3GPP, max 4 ASCII characters
         StringMetaItem_ClassificationInfo, //3GPP
         StringMetaItem_LocationName, //3GPP
         StringMetaItem_LocationAstronomicalBody, //3GPP
         StringMetaItem_LocationAdditionalNotes, //3GPP
         StringMetaItem_LocationLongitude, //3GPP, fixed point number format
         StringMetaItem_LocationLatitude, //3GPP, fixed point number format
         StringMetaItem_LocationAltitude, //3GPP, fixed point number format
 
         StringMetaItem_StringItemEnd, //special
         StringMetaItem_StringItemCount = StringMetaItem_StringItemEnd - StringMetaItem_StringItemBegin, //special
 
         StringMetaItem_Keywords //special, uncounted
     };
 
     static UINT32 GetSetsWhichSupportItem(eStringMetaItem itemName);
     static HXBOOL IsItemSupportedByAnySet(eStringMetaItem itemName, UINT32 metaInfoSetFlags)
datatype_include2.diff (text/x-patch, 6.1 KB)
Index: metainfokeys.h
===================================================================
RCS file: /cvsroot/datatype/include/metainfokeys.h,v
retrieving revision 1.4
diff -U30 -r1.4 metainfokeys.h
--- metainfokeys.h	23 Oct 2009 09:38:52 -0000	1.4
+++ metainfokeys.h	23 Oct 2009 11:37:12 -0000
@@ -24,95 +24,95 @@
  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  * 
  * Technology Compatibility Kit Test Suite(s) Location: 
  *    http://www.helixcommunity.org/content/tck 
  * 
  * Contributor(s): 
  *  
  * ***** END LICENSE BLOCK ***** */ 
 
 #ifndef _METAINFOKEYS_H_
 #define _METAINFOKEYS_H_ 
 
 
 typedef enum 
 {
     METAINFO_SET_GENERIC          = 0x00000001,
     METAINFO_SET_3GPP_SPECIFIC    = 0x00000010,
     METAINFO_SET_3GPP_ALL         = METAINFO_SET_GENERIC | METAINFO_SET_3GPP_SPECIFIC,
     METAINFO_SET_ITUNES_SPECIFIC  = 0x00000100,
     METAINFO_SET_ITUNES_ALL       = METAINFO_SET_GENERIC | METAINFO_SET_ITUNES_SPECIFIC,
     METAINFO_SET_ALL              = METAINFO_SET_GENERIC | METAINFO_SET_3GPP_SPECIFIC | METAINFO_SET_ITUNES_SPECIFIC
 } METAINFO_SET;
 
 // Generic set
 #define _GENERIC_META_INFO_TITLE_KEY                    "Title"
 #define _GENERIC_META_INFO_COMPOSER_KEY                 "Author"
 #define _GENERIC_META_INFO_COPYRIGHT_KEY                "Copyright"
-#define _GENERIC_META_INFO_COMMENT_KEY                  "Abstract"
+#define _GENERIC_META_INFO_DESCRIPTION_KEY              "Description"
 #define _GENERIC_META_INFO_ARTIST_KEY                   "Performer"
 #define _GENERIC_META_INFO_GENRE_KEY                    "Genre"
 #define _GENERIC_META_INFO_ALBUM_KEY                    "AlbumTitle"
 #define _GENERIC_META_INFO_TRACK_NUMBER_KEY             "TrackNumber"
 #define _GENERIC_META_INFO_RECORDING_YEAR_KEY           "RecordingYear"
 
 // iTunes aliases for Generic set, for use in file-format/file-writer
 #define _ITUNES_META_INFO_TITLE_KEY                     _GENERIC_META_INFO_TITLE_KEY
 #define _ITUNES_META_INFO_COMPOSER_KEY                  _GENERIC_META_INFO_COMPOSER_KEY
 #define _ITUNES_META_INFO_COPYRIGHT_KEY                 _GENERIC_META_INFO_COPYRIGHT_KEY
-#define _ITUNES_META_INFO_COMMENT_KEY                   _GENERIC_META_INFO_COMMENT_KEY
+#define _ITUNES_META_INFO_COMMENT_KEY                   _GENERIC_META_INFO_DESCRIPTION_KEY
 #define _ITUNES_META_INFO_ARTIST_KEY                    _GENERIC_META_INFO_ARTIST_KEY
 #define _ITUNES_META_INFO_GENRE_KEY                     _GENERIC_META_INFO_GENRE_KEY
 #define _ITUNES_META_INFO_ALBUM_KEY                     _GENERIC_META_INFO_ALBUM_KEY
 #define _ITUNES_META_INFO_TRACK_NUMBER_KEY              _GENERIC_META_INFO_TRACK_NUMBER_KEY
 #define _ITUNES_META_INFO_RELEASE_DATE_KEY              _GENERIC_META_INFO_RECORDING_YEAR_KEY
 
 // iTunes specific set
 #define _ITUNES_META_INFO_TRACK_SUBTITLE_KEY            "TrackSubtitle"
 #define _ITUNES_META_INFO_GENERATOR_TOOL_KEY            "GeneratorTool"
 #define _ITUNES_META_INFO_ENCODED_BY_KEY                "EncodedBy"
 #define _ITUNES_META_INFO_GROUPING_KEY                  "Grouping"
 #define _ITUNES_META_INFO_ALBUM_ARTIST_KEY              "AlbumArtist"
 #define _ITUNES_META_INFO_LYRICS_KEY                    "Lyrics"
 #define _ITUNES_META_INFO_BEATS_PER_MINUTE_KEY          "BeatsPerMinute"
 #define _ITUNES_META_INFO_PART_OF_COMPILATION_KEY       "PartOfCompilation"
 #define _ITUNES_META_INFO_EXPLICIT_CONTENT_KEY          "ExplicitContent"
 #define _ITUNES_META_INFO_TRACK_COUNT_KEY               "TrackCount"
 #define _ITUNES_META_INFO_DISC_NUMBER_KEY               "DiscNumber"
 #define _ITUNES_META_INFO_DISC_COUNT_KEY                "DiscCount"
 
 // 3GPP aliases for Generic set, for use in file-format/file-writer
 #define _3GPP_META_INFO_TITLE_KEY                       _GENERIC_META_INFO_TITLE_KEY
 #define _3GPP_META_INFO_AUTHOR_KEY                      _GENERIC_META_INFO_COMPOSER_KEY
 #define _3GPP_META_INFO_COPYRIGHT_KEY                   _GENERIC_META_INFO_COPYRIGHT_KEY
-#define _3GPP_META_INFO_DESCRIPTION_KEY                 _GENERIC_META_INFO_COMMENT_KEY
+#define _3GPP_META_INFO_DESCRIPTION_KEY                 _GENERIC_META_INFO_DESCRIPTION_KEY
 #define _3GPP_META_INFO_PERFORMER_KEY                   _GENERIC_META_INFO_ARTIST_KEY
 #define _3GPP_META_INFO_GENRE_KEY                       _GENERIC_META_INFO_GENRE_KEY
 #define _3GPP_META_INFO_ALBUM_TITLE_KEY                 _GENERIC_META_INFO_ALBUM_KEY
 #define _3GPP_META_INFO_TRACK_NUMBER_KEY                _GENERIC_META_INFO_TRACK_NUMBER_KEY
 #define _3GPP_META_INFO_RECORDING_YEAR_KEY              _GENERIC_META_INFO_RECORDING_YEAR_KEY
 
 // 3GPP specific set
 #define _3GPP_META_INFO_GLOBAL_LANGUAGE_ENCODING_KEY    "GlobalLanguageEncoding"
 #define _3GPP_META_INFO_RATING_ENTITY_KEY               "RatingEntity"
 #define _3GPP_META_INFO_RATING_CRITERIA_KEY             "RatingCriteria"
 #define _3GPP_META_INFO_RATING_INFO_KEY                 "RatingInfo"
 #define _3GPP_META_INFO_CLASSIFICATION_ENTITY_KEY       "ClassificationEntity"
 #define _3GPP_META_INFO_CLASSIFICATION_TABLE_KEY        "ClassificationTable"
 #define _3GPP_META_INFO_CLASSIFICATION_INFO_KEY         "ClassificationInfo"
 #define _3GPP_META_INFO_LOCATION_NAME_KEY               "LocationName"
 #define _3GPP_META_INFO_LOCATION_ASTRONOMICAL_BODY_KEY  "LocationAstronomicalBody"
 #define _3GPP_META_INFO_LOCATION_ADDITIONAL_NOTES_KEY   "LocationAdditionalNotes"
 #define _3GPP_META_INFO_LOCATION_ROLE_KEY               "LocationRole"
 #define _3GPP_META_INFO_LOCATION_LONGITUDE_KEY          "LocationLongitude"
 #define _3GPP_META_INFO_LOCATION_LATITUDE_KEY           "LocationLatitude"
 #define _3GPP_META_INFO_LOCATION_ALTITUDE_KEY           "LocationAltitude"
 #define _3GPP_META_INFO_KEYWORD_COUNT_KEY               "KeywordCount"
 #define _3GPP_META_INFO_KEYWORD_KEY                     "Keyword%d"
 #define _3GPP_META_INFO_ID32_BLOB_KEY                   "ID32BLOB"
 
 
 #endif // _METAINFOKEYS_H_
datatype_tools_dtdriver_apps_meta3gp2.diff (text/x-patch, 4.5 KB)
Index: main.cpp
===================================================================
RCS file: /cvsroot/datatype/tools/dtdriver/apps/meta3gp/main.cpp,v
retrieving revision 1.2
diff -U30 -r1.2 main.cpp
--- main.cpp	23 Oct 2009 09:46:24 -0000	1.2
+++ main.cpp	23 Oct 2009 11:42:05 -0000
@@ -1107,61 +1107,61 @@
                     argIndex, argc, argv, metaProcessorVars.InjectedMetaInfo, MetaInfo::StringMetaItem_Title,
                     metaProcessorVars.InjectedMetaFlavors, PARAM_STRING_TITLE);
             }
             else if(TStringEqual(pParam, PARAM_STRING_ARTIST))
             {
                 ExtractStringParam(retVal, (clProcessorPhase != CommandLineProcessorPhase_DependentArgs),
                     argIndex, argc, argv, metaProcessorVars.InjectedMetaInfo, MetaInfo::StringMetaItem_Artist,
                     metaProcessorVars.InjectedMetaFlavors, PARAM_STRING_ARTIST);
             }
             else if(TStringEqual(pParam, PARAM_STRING_ALBUM))
             {
                 ExtractStringParam(retVal, (clProcessorPhase != CommandLineProcessorPhase_DependentArgs),
                     argIndex, argc, argv, metaProcessorVars.InjectedMetaInfo, MetaInfo::StringMetaItem_Album,
                     metaProcessorVars.InjectedMetaFlavors, PARAM_STRING_ALBUM);
             }
             else if(TStringEqual(pParam, PARAM_STRING_GENRE))
             {
                 ExtractStringParam(retVal, (clProcessorPhase != CommandLineProcessorPhase_DependentArgs),
                     argIndex, argc, argv, metaProcessorVars.InjectedMetaInfo, MetaInfo::StringMetaItem_Genre,
                     metaProcessorVars.InjectedMetaFlavors, PARAM_STRING_GENRE);
             }
             else if(TStringEqual(pParam, PARAM_STRING_COMPOSER))
             {
                 ExtractStringParam(retVal, (clProcessorPhase != CommandLineProcessorPhase_DependentArgs),
                     argIndex, argc, argv, metaProcessorVars.InjectedMetaInfo, MetaInfo::StringMetaItem_Composer,
                     metaProcessorVars.InjectedMetaFlavors, PARAM_STRING_COMPOSER);
             }
             else if(TStringEqual(pParam, PARAM_STRING_COMMENT))
             {
                 ExtractStringParam(retVal, (clProcessorPhase != CommandLineProcessorPhase_DependentArgs),
-                    argIndex, argc, argv, metaProcessorVars.InjectedMetaInfo, MetaInfo::StringMetaItem_Comment,
+                    argIndex, argc, argv, metaProcessorVars.InjectedMetaInfo, MetaInfo::StringMetaItem_Description,
                     metaProcessorVars.InjectedMetaFlavors, PARAM_STRING_COMMENT);
             }
             else if(TStringEqual(pParam, PARAM_STRING_COPYRIGHT))
             {
                 ExtractStringParam(retVal, (clProcessorPhase != CommandLineProcessorPhase_DependentArgs),
                     argIndex, argc, argv, metaProcessorVars.InjectedMetaInfo, MetaInfo::StringMetaItem_Copyright,
                     metaProcessorVars.InjectedMetaFlavors, PARAM_STRING_COPYRIGHT);
             }
             else if(TStringEqual(pParam, PARAM_STRING_TRACKNUMBER))
             {
                 ExtractUINT32Param(retVal, (clProcessorPhase != CommandLineProcessorPhase_DependentArgs),
                     argIndex, argc, argv, metaProcessorVars.InjectedMetaInfo, MetaInfo::UIntMetaItem_TrackNumber,
                     metaProcessorVars.InjectedMetaFlavors, PARAM_STRING_TRACKNUMBER);
             }
             else if(TStringEqual(pParam, PARAM_STRING_YEAR))
             {
                 ExtractUINT32Param(retVal, (clProcessorPhase != CommandLineProcessorPhase_DependentArgs),
                     argIndex, argc, argv, metaProcessorVars.InjectedMetaInfo, MetaInfo::UIntMetaItem_RecordingYear,
                     metaProcessorVars.InjectedMetaFlavors, PARAM_STRING_YEAR);
             }
             else if(TStringEqual(pParam, PARAM_STRING_SOFTWARE))
             {
                 ExtractStringParam(retVal, (clProcessorPhase != CommandLineProcessorPhase_DependentArgs),
                     argIndex, argc, argv, metaProcessorVars.InjectedMetaInfo, MetaInfo::StringMetaItem_GeneratorTool,
                     metaProcessorVars.InjectedMetaFlavors, PARAM_STRING_SOFTWARE);
             }
             else if(TStringEqual(pParam, PARAM_STRING_ENCODEDBY))
             {
                 ExtractStringParam(retVal, (clProcessorPhase != CommandLineProcessorPhase_DependentArgs),
                     argIndex, argc, argv, metaProcessorVars.InjectedMetaInfo, MetaInfo::StringMetaItem_EncodedBy,