///////////////////////////////////////////////////////////////////////////////
//
//  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 MP4v2.
//
//  The Initial Developer of the Original Code is Kona Blend.
//  Portions created by Kona Blend are Copyright (C) 2008.
//  All Rights Reserved.
//
//  Contributors:
//      Kona Blend, kona8lend@@gmail.com
//
///////////////////////////////////////////////////////////////////////////////

/** @mainpage MP4v2 API Reference

@section api Public API

The public API is documented in the <a href="modules.html">modules</a>
section (as seen at the top of this page).
Other documentation available for C++ namespaces and classes are for
internal documentation purposes and not to be used or depended-upon by
code external to this project.

@section introducation Introduction

The MP4v2 library provides an API to create and modify mp4 files as defined
by ISO base media file format, document number ISO/IEC 14496-12:2005(E). It
is a very powerful and extensible format that can accomodate practically
any type of media.

The conceptual structure of an mp4 file is that it is a container for one
or more tracks of media. Each track represents exactly one type of media
such as audio or video. Each track is composed of high-level structural
data which describes the raw media data stream in a manner that is as
generic as possible. Tracks have their own timeline, properties and
samples. An example of a sample is a frame of video. Thus, the file
file describes how to synchronize the timeline of the tracks.

In a self-contained file, the samples accounts for the majority of file
size. For playback performance reasons, when an mp4 file contains multiple
media tracks their samples (raw media data) are usually interleaved to
provide optimal playback performance.

@section invocation Invocation

The mp4 library is focussed on providing an easy to use API for the mp4
file format. It has been used with an encoder, a server, a player, and a
number of mp4 utilities. However, it may not be adequate for multimedia
editors that wish to work directly with mp4 files. It may be used by these
type of tools to export an mp4 file.

In providing a easy to use API not all the information in the mp4 file is
directly exposed via the API. To accomodate applications that need access
to information not otherwise available via the API there are file and
track level generic get and set property routines that use arbitary string
property names. To use these routines you will need to be familar with the
mp4 file specification or be willing to wade through the output of a
file-dump which may be produced using MP4Dump() or with some of the
command-line tools bundled with MP4v2.

@section headers Public Headers

The public libary API is defined in @c <mp4v2/mp4v2.h> which includes all the
necessary dependent header files. <b>You must never use any other header
files</b> for public API. Using other header files or symbols which are
not exported via the public API is expressly not supported and may change
at any time without notice.

The MP4v2 library can be used by either C or C++ programs. The calling
convention is C but for convenience if C++ is used default function arguments
have been added where appropriate.

@example example/provider/provider.c
@example example/itmf/generic.c
@example example/itmf/tags.c
*/
