blob: 75e4c8faf1488168e90ad9b58a449f0fac8cdaec [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 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
//
///////////////////////////////////////////////////////////////////////////////
#ifndef MP4V2_IMPL_QTFF_PICTUREAPSECTRATIOBOX_H
#define MP4V2_IMPL_QTFF_PICTUREAPSECTRATIOBOX_H
namespace mp4v2 { namespace impl { namespace qtff {
using namespace std;
///////////////////////////////////////////////////////////////////////////////
/// Functional class for pasp-box (Picture Aspect Ratio Box) support.
///
/// A pasp-box is expected to be contained in a video track which is one of
/// the following coding types:
/// @li avc1
/// @li mp4v
///
/// This implementation assumes a maximum count of <b>1</b> for
/// VideoSampleEntry of the supported codings.
///
class MP4V2_EXPORT PictureAspectRatioBox
{
public:
/// Data object for pasp-box item.
/// This object correlates to one pasp-box (Picture Aspect Ratio Box).
class MP4V2_EXPORT Item
{
public:
Item ();
/// reset to state of newly constructed object.
void reset();
// convert from string CSV format.
void convertFromCSV( const string& csv );
// convert to string CSV format.
string convertToCSV() const;
// convert to string CSV format with buffer.
string& convertToCSV( string& buffer ) const;
public:
/// an unsigned 32-bit integer specifying the vertical spacing of pixels.
uint32_t hSpacing;
/// an unsigned 32-bit integer specifying the horizontal spacing of pixels.
uint32_t vSpacing;
};
class MP4V2_EXPORT IndexedItem {
public:
IndexedItem();
uint16_t trackIndex;
uint16_t trackId;
Item item;
};
typedef vector<IndexedItem> ItemList;
static bool list( MP4FileHandle file, ItemList& itemList );
/// Add pasp-box by track-index.
///
/// This function adds a pasp-box to <b>trackId</b> of <b>file</b>.
/// The track must be a video-track and match one of the supporting
/// codings.
///
/// @param file on which to operate.
/// @param trackIndex on which to operate.
/// @param item pasp-box properties to set.
///
/// @return <b>true</b> on failure, <b>false</b> on success.
///
static bool add( MP4FileHandle file, uint16_t trackIndex, const Item& item );
/// Add pasp-box by track-id.
///
/// This function adds a pasp-box to <b>trackId</b> of <b>file</b>.
/// The track must be a video-track and match one of the supporting
/// codings.
///
/// @param file on which to operate.
/// @param trackId on which to operate.
/// @param item pasp-box properties to set.
///
/// @return <b>true</b> on failure, <b>false</b> on success.
///
static bool add( MP4FileHandle file, MP4TrackId trackId, const Item& item );
/// Store pasp-box (Color Parameter Box) properties by track-index.
///
/// This function sets the properties of a <b>pasp-box</b>
/// (Color Parameter Box).
///
/// @param file on which to operate.
/// @param trackIndex on which to operate.
/// @param item pasp-box properties to set.
///
/// @return <b>true</b> on failure, <b>false</b> on success.
///
static bool set( MP4FileHandle file, uint16_t trackIndex, const Item& item );
/// Store pasp-box (Color Parameter Box) properties by track-id.
///
/// This function sets the properties of a <b>pasp-box</b>
/// (Color Parameter Box).
///
/// @param file on which to operate.
/// @param trackId on which to operate.
/// @param item pasp-box properties to set.
///
/// @return <b>true</b> on failure, <b>false</b> on success.
///
static bool set( MP4FileHandle file, MP4TrackId trackId, const Item& item );
/// Fetch pasp-box (Color Parameter Box) properties by track-index.
///
/// This function gets the properties of a <b>pasp-box</b>
/// (Color Parameter Box).
///
/// @param file on which to operate.
/// @param trackIndex on which to operate.
/// @param item pasp-box properties to set.
///
/// @return <b>true</b> on failure, <b>false</b> on success.
///
static bool get( MP4FileHandle file, uint16_t trackIndex, Item& item );
/// Fetch pasp-box (Color Parameter Box) properties by track-id.
///
/// This function gets the properties of a <b>pasp-box</b>
/// (Color Parameter Box).
///
/// @param file on which to operate.
/// @param trackId on which to operate.
/// @param item pasp-box properties to set.
///
/// @return <b>true</b> on failure, <b>false</b> on success.
///
static bool get( MP4FileHandle file, MP4TrackId trackId, Item& item );
/// Remove pasp-box (Color Parameter Box) by track-index.
///
/// @param file on which to operate.
/// @param trackIndex on which to operate.
///
/// @return <b>true</b> on failure, <b>false</b> on success.
///
static bool remove( MP4FileHandle file, uint16_t trackIndex );
/// Remove pasp-box (Color Parameter Box) by track-id.
///
/// @param file on which to operate.
/// @param trackId on which to operate.
///
/// @return <b>true</b> on failure, <b>false</b> on success.
///
static bool remove( MP4FileHandle file, MP4TrackId trackId );
};
///////////////////////////////////////////////////////////////////////////////
}}} // namespace mp4v2::impl::qtff
#endif // MP4V2_IMPL_QTTF_PICTUREAPSECTRATIOBOX_H