You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
3.5 KiB
120 lines
3.5 KiB
4 years ago
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// 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_TIMECODE_H
|
||
|
#define MP4V2_UTIL_TIMECODE_H
|
||
|
|
||
|
namespace mp4v2 { namespace util {
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
/// Class representing SMPTE timecode.
|
||
|
///
|
||
|
/// Objects of this class represent a specific time or duration and can
|
||
|
/// be converted to/from string values, and various epochs.
|
||
|
///
|
||
|
/// The standard pattern for string representation is as follows:
|
||
|
/// @li HH:MM:SS:FF
|
||
|
/// @li HH:MM:SS.DDD
|
||
|
///
|
||
|
/// where:
|
||
|
/// @li <b>HH</b> specifies hours
|
||
|
/// @li <b>MM</b> specifies minutes
|
||
|
/// @li <b>SS</b> specifies seconds
|
||
|
/// @li <b>:</b> specifies normal timecode
|
||
|
/// @li <b>FF</b> specifies the frame number
|
||
|
/// @li <b>.</b> specifies decimal fractions of a second follow
|
||
|
/// @li <b>DDD</b> specifies decimal fractions of a second, rounded down to closest scale
|
||
|
///
|
||
|
class MP4V2_EXPORT Timecode {
|
||
|
public:
|
||
|
enum Format {
|
||
|
FRAME,
|
||
|
DECIMAL,
|
||
|
};
|
||
|
|
||
|
private:
|
||
|
double _scale;
|
||
|
uint64_t _duration;
|
||
|
Format _format;
|
||
|
string _svalue;
|
||
|
|
||
|
uint64_t _hours;
|
||
|
uint64_t _minutes;
|
||
|
uint64_t _seconds;
|
||
|
uint64_t _subseconds;
|
||
|
|
||
|
public:
|
||
|
const double& scale;
|
||
|
const uint64_t& duration;
|
||
|
const Format& format;
|
||
|
const string& svalue;
|
||
|
|
||
|
const uint64_t& hours;
|
||
|
const uint64_t& minutes;
|
||
|
const uint64_t& seconds;
|
||
|
const uint64_t& subseconds;
|
||
|
|
||
|
public:
|
||
|
Timecode( const Timecode& );
|
||
|
explicit Timecode( const string&, double = 1.0 );
|
||
|
explicit Timecode( uint64_t = 0, double = 1.0 );
|
||
|
|
||
|
Timecode& operator= ( const Timecode& );
|
||
|
Timecode& operator+= ( const Timecode& );
|
||
|
Timecode& operator-= ( const Timecode& );
|
||
|
|
||
|
bool operator< ( const Timecode& ) const;
|
||
|
bool operator<= ( const Timecode& ) const;
|
||
|
bool operator> ( const Timecode& ) const;
|
||
|
bool operator>= ( const Timecode& ) const;
|
||
|
bool operator!= ( const Timecode& ) const;
|
||
|
bool operator== ( const Timecode& ) const;
|
||
|
|
||
|
Timecode operator+ ( const Timecode& ) const;
|
||
|
Timecode operator- ( const Timecode& ) const;
|
||
|
|
||
|
bool parse( const string&, string* = NULL );
|
||
|
|
||
|
void reset();
|
||
|
|
||
|
void setScale ( double );
|
||
|
void setDuration ( uint64_t, double = 0.0 );
|
||
|
void setFormat ( Format );
|
||
|
|
||
|
void setHours ( uint64_t );
|
||
|
void setMinutes ( uint64_t );
|
||
|
void setSeconds ( uint64_t );
|
||
|
void setSubseconds ( uint64_t );
|
||
|
|
||
|
private:
|
||
|
uint64_t convertDuration( const Timecode& ) const;
|
||
|
void recompute();
|
||
|
};
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
}} // namespace mp4v2::util
|
||
|
|
||
|
#endif // MP4V2_UTIL_TIMECODE_H
|