blob: 9e6f1a6862b6b4a291fbe2aef26f2a32d6301f0e [file] [log] [blame]
/*
* The contents of this file are subject to the Mozilla Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is MPEG4IP.
*
* The Initial Developer of the Original Code is Cisco Systems Inc.
* Portions created by Cisco Systems Inc. are
* Copyright (C) Cisco Systems Inc. 2001. All Rights Reserved.
*
* Contributor(s):
* M. Bakker mbakker at nero.com
*
* Apple iTunes META data
*/
#include "src/impl.h"
namespace mp4v2 { namespace impl {
///////////////////////////////////////////////////////////////////////////////
MP4DataAtom::MP4DataAtom(MP4File &file)
: MP4Atom ( file, "data" )
, typeReserved ( *new MP4Integer16Property( *this, "typeReserved" ))
, typeSetIdentifier ( *new MP4Integer8Property( *this, "typeSetIdentifier" ))
, typeCode ( *new MP4BasicTypeProperty( *this, "typeCode" ))
, locale ( *new MP4Integer32Property( *this, "locale" ))
, metadata ( *new MP4BytesProperty( *this, "metadata" ))
{
AddProperty( &typeReserved );
AddProperty( &typeSetIdentifier );
AddProperty( &typeCode );
AddProperty( &locale );
AddProperty( &metadata );
}
void
MP4DataAtom::Read()
{
// calculate size of the metadata from the atom size
metadata.SetValueSize( m_size - 8 );
MP4Atom::Read();
}
///////////////////////////////////////////////////////////////////////////////
MP4FullAtom::MP4FullAtom( MP4File &file, const char* type )
: MP4Atom ( file, type )
, version ( *new MP4Integer8Property( *this, "version" ))
, flags ( *new MP4Integer24Property( *this, "flags" ))
{
AddProperty( &version );
AddProperty( &flags );
}
///////////////////////////////////////////////////////////////////////////////
MP4ItemAtom::MP4ItemAtom( MP4File &file, const char* type )
: MP4Atom( file, type )
{
ExpectChildAtom( "mean", Optional, OnlyOne );
ExpectChildAtom( "name", Optional, OnlyOne );
ExpectChildAtom( "data", Required, Many );
}
///////////////////////////////////////////////////////////////////////////////
MP4ItmfHdlrAtom::MP4ItmfHdlrAtom(MP4File &file)
: MP4FullAtom ( file, "hdlr" )
, reserved1 ( *new MP4Integer32Property( *this, "reserved1" ))
, handlerType ( *new MP4BytesProperty( *this, "handlerType", 4 ))
, reserved2 ( *new MP4BytesProperty( *this, "reserved2", 12 ))
, name ( *new MP4BytesProperty( *this, "name", 1 ))
{
AddProperty( &reserved1 );
AddProperty( &handlerType );
AddProperty( &reserved2 );
AddProperty( &name );
const uint8_t htData[] = { 'm', 'd', 'i', 'r' };
handlerType.SetValue( htData, sizeof( htData ));
const uint8_t nameData[] = { 0 };
name.SetValue( nameData, sizeof( nameData ));
}
void
MP4ItmfHdlrAtom::Read()
{
name.SetValueSize( m_size - 24 );
MP4FullAtom::Read();
}
///////////////////////////////////////////////////////////////////////////////
MP4MeanAtom::MP4MeanAtom(MP4File &file)
: MP4FullAtom ( file, "mean" )
, value ( *new MP4BytesProperty( *this, "value" ))
{
AddProperty( &value );
}
void
MP4MeanAtom::Read()
{
value.SetValueSize( m_size - 4 );
MP4Atom::Read();
}
///////////////////////////////////////////////////////////////////////////////
MP4NameAtom::MP4NameAtom(MP4File &file)
: MP4FullAtom ( file, "name" )
, value ( *new MP4BytesProperty( *this, "value" ))
{
AddProperty( &value );
}
void
MP4NameAtom::Read()
{
value.SetValueSize( m_size - 4 );
MP4FullAtom::Read();
}
///////////////////////////////////////////////////////////////////////////////
MP4UdtaElementAtom::MP4UdtaElementAtom( MP4File &file, const char* type )
: MP4Atom ( file, type )
, value ( *new MP4BytesProperty( *this, "value" ))
{
AddProperty( &value );
}
void
MP4UdtaElementAtom::Read()
{
// calculate size of the metadata from the atom size
value.SetValueSize( m_size );
MP4Atom::Read();
}
///////////////////////////////////////////////////////////////////////////////
}} // namespace mp4v2::impl