aboutsummaryrefslogtreecommitdiff
path: root/libutil/TrackModifier.h
diff options
context:
space:
mode:
Diffstat (limited to 'libutil/TrackModifier.h')
-rw-r--r--libutil/TrackModifier.h160
1 files changed, 160 insertions, 0 deletions
diff --git a/libutil/TrackModifier.h b/libutil/TrackModifier.h
new file mode 100644
index 0000000..798a061
--- /dev/null
+++ b/libutil/TrackModifier.h
@@ -0,0 +1,160 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// 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_UTIL_TRACKMODIFIER_H
+#define MP4V2_UTIL_TRACKMODIFIER_H
+
+namespace mp4v2 { namespace util {
+
+///////////////////////////////////////////////////////////////////////////////
+
+class MP4V2_EXPORT TrackModifier
+{
+private:
+ class Properties
+ {
+ private:
+ TrackModifier& _trackModifier;
+
+ public:
+ Properties( TrackModifier& );
+
+ void update();
+
+ MP4Integer24Property& flags;
+ MP4Integer16Property& layer;
+ MP4Integer16Property& alternateGroup;
+ MP4Float32Property& volume;
+ MP4Float32Property& width;
+ MP4Float32Property& height;
+ MP4LanguageCodeProperty& language;
+ MP4StringProperty& handlerType;
+ MP4StringProperty& handlerName;
+ MP4BytesProperty* userDataName;
+
+ private:
+ MP4Property& refProperty( const char* );
+ MP4Property* findProperty( const char* );
+ void updateProperty( const char*, MP4Property** );
+ };
+
+ friend class Properties;
+
+private:
+ static MP4Atom& refTrackAtom( MP4File&, uint16_t );
+
+private:
+ MP4Atom& _track;
+ Properties _props;
+
+ // Track Header
+ bool _enabled;
+ bool _inMovie;
+ bool _inPreview;
+ uint16_t _layer;
+ uint16_t _alternateGroup;
+ float _volume;
+ float _width;
+ float _height;
+
+ // Media Header
+ bmff::LanguageCode _language;
+
+ // Handler Reference
+ string _handlerType;
+ string _handlerName;
+
+ // User Data name
+ string _userDataName;
+
+public:
+ MP4File& file;
+ const uint16_t trackIndex;
+ const MP4TrackId trackId;
+
+ const bool& enabled;
+ const bool& inMovie;
+ const bool& inPreview;
+ const uint16_t& layer;
+ const uint16_t& alternateGroup;
+ const float& volume;
+ const float& width;
+ const float& height;
+
+ const bmff::LanguageCode& language;
+
+ const string& handlerType;
+ const string& handlerName;
+
+ const string& userDataName;
+
+public:
+ TrackModifier( MP4FileHandle, uint16_t );
+ ~TrackModifier();
+
+ void setEnabled ( bool );
+ void setInMovie ( bool );
+ void setInPreview ( bool );
+ void setLayer ( uint16_t );
+ void setAlternateGroup ( uint16_t );
+ void setVolume ( float );
+ void setWidth ( float );
+ void setHeight ( float );
+ void setLanguage ( bmff::LanguageCode );
+ void setHandlerName ( const string& );
+ void setUserDataName ( const string& );
+
+ // set by string
+ void setEnabled ( const string& );
+ void setInMovie ( const string& );
+ void setInPreview ( const string& );
+ void setLayer ( const string& );
+ void setAlternateGroup ( const string& );
+ void setVolume ( const string& );
+ void setWidth ( const string& );
+ void setHeight ( const string& );
+ void setLanguage ( const string& );
+
+ bool hasUserDataName() const;
+ void removeUserDataName();
+
+ void dump( ostream&, const string& );
+
+private:
+ void fetch();
+
+ static string toString( bool );
+ static string toString( float, uint8_t, uint8_t );
+
+ static bool& fromString( const string&, bool& );
+ static float& fromString( const string&, float& );
+ static uint16_t& fromString( const string&, uint16_t& );
+
+ static string toStringTrackType( const string& );
+};
+
+///////////////////////////////////////////////////////////////////////////////
+
+}} // namespace mp4v2::util
+
+#endif // MP4V2_UTIL_TRACKMODIFIER_H