/* * Copyright 2009, Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. */ #ifndef _TIME_CODE_H #define _TIME_CODE_H #include // Time code is always in the form HH:MM:SS:FF, it's the definition of "FF" // that varies enum timecode_type { B_TIMECODE_DEFAULT, B_TIMECODE_100, B_TIMECODE_75, // CD B_TIMECODE_30, // MIDI B_TIMECODE_30_DROP_2, // NTSC B_TIMECODE_30_DROP_4, // Brazil B_TIMECODE_25, // PAL B_TIMECODE_24, // Film B_TIMECODE_18 // Super8 }; struct timecode_info { timecode_type type; int drop_frames; int every_nth; int except_nth; int fps_div; char name[32]; // For popup menus and such char format[32]; // For sprintf(fmt, h, m, s, f) char _reserved_[64]; }; status_t us_to_timecode(bigtime_t micros, int* hours, int* minutes, int* seconds, int* frames, const timecode_info* code = NULL); status_t timecode_to_us(int hours, int minutes, int seconds, int frames, bigtime_t* micros, const timecode_info* code = NULL); status_t frames_to_timecode(int32 l_frames, int* hours, int* minutes, int* seconds, int* frames, const timecode_info* code = NULL); status_t timecode_to_frames(int hours, int minutes, int seconds, int frames, int32* lFrames, const timecode_info* code = NULL); status_t get_timecode_description(timecode_type type, timecode_info* _timecode); status_t count_timecodes(); class BTimeCode { public: BTimeCode(); BTimeCode(bigtime_t microSeconds, timecode_type type = B_TIMECODE_DEFAULT); BTimeCode(const BTimeCode& other); BTimeCode(int hours, int minutes, int seconds, int frames, timecode_type type = B_TIMECODE_DEFAULT); ~BTimeCode(); void SetData(int hours, int minutes, int seconds, int frames); status_t SetType(timecode_type type); void SetMicroseconds(bigtime_t microSeconds); void SetLinearFrames(int32 linearFrames); BTimeCode& operator=(const BTimeCode& other); bool operator==(const BTimeCode& other) const; bool operator<(const BTimeCode& other) const; BTimeCode& operator+=(const BTimeCode& other); BTimeCode& operator-=(const BTimeCode& other); BTimeCode operator+(const BTimeCode& other) const; BTimeCode operator-(const BTimeCode& other) const; int Hours() const; int Minutes() const; int Seconds() const; int Frames() const; timecode_type Type() const; void GetData(int* _hours, int* _minutes, int* _seconds, int* _frames, timecode_type* _type = NULL) const; bigtime_t Microseconds() const; int32 LinearFrames() const; // Make sure the passed buffer is at least 24 bytes large. void GetString(char* string) const; private: int fHours; int fMinutes; int fSeconds; int fFrames; timecode_info fInfo; }; #endif // _TIME_CODE_H