haiku/headers/os/media/TimeCode.h

109 lines
2.9 KiB
C++

/*
* Copyright 2009, Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _TIME_CODE_H
#define _TIME_CODE_H
#include <SupportDefs.h>
// 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