timecode.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef TIMECODE_H_INCLUDED
00023 #define TIMECODE_H_INCLUDED
00024
00025 #ifdef __cplusplus
00026 extern "C" {
00027 #endif
00028
00029 #include <gavl/gavldefs.h>
00030
00043 typedef uint64_t gavl_timecode_t;
00044
00045 #define GAVL_TIMECODE_SIGN_MASK (0x1LL<<62) //!< If 1, timecode is negative
00046 #define GAVL_TIMECODE_INVALID_MASK (0x1LL<<63) //!< If 1, timecode is invalid
00047
00048 #define GAVL_TIMECODE_DROP_FRAME (1<<0) //!< NTSC drop frame is used
00049
00050 #define GAVL_TIMECODE_UNDEFINED GAVL_TIMECODE_INVALID_MASK //!< Convenience macro
00051
00059 typedef struct
00060 {
00061 int int_framerate;
00062 int flags;
00063 } gavl_timecode_format_t;
00064
00071 GAVL_PUBLIC
00072 void gavl_timecode_format_copy(gavl_timecode_format_t * dst,
00073 const gavl_timecode_format_t * src);
00074
00075
00084 GAVL_PUBLIC
00085 void gavl_timecode_to_hmsf(gavl_timecode_t tc,
00086 int * hours,
00087 int * minutes,
00088 int * seconds,
00089 int * frames);
00090
00098 GAVL_PUBLIC
00099 void gavl_timecode_to_ymd(gavl_timecode_t tc,
00100 int * year,
00101 int * month,
00102 int * day);
00103
00112 GAVL_PUBLIC
00113 void gavl_timecode_from_hmsf(gavl_timecode_t * tc,
00114 int hours,
00115 int minutes,
00116 int seconds,
00117 int frames);
00118
00126 GAVL_PUBLIC
00127 void gavl_timecode_from_ymd(gavl_timecode_t * tc,
00128 int year,
00129 int month,
00130 int day);
00131
00141 GAVL_PUBLIC
00142 int64_t gavl_timecode_to_framecount(const gavl_timecode_format_t * tf,
00143 gavl_timecode_t tc);
00144
00154 GAVL_PUBLIC
00155 gavl_timecode_t gavl_timecode_from_framecount(const gavl_timecode_format_t * tf,
00156 int64_t fc);
00157
00165 GAVL_PUBLIC
00166 void gavl_timecode_dump(const gavl_timecode_format_t * tf,
00167 gavl_timecode_t tc);
00168
00169
00170
00171
00172 #define GAVL_TIMECODE_STRING_LEN 26
00185 GAVL_PUBLIC
00186 void gavl_timecode_prettyprint(const gavl_timecode_format_t * tf,
00187 gavl_timecode_t tc,
00188 char str[GAVL_TIMECODE_STRING_LEN]);
00189
00190
00191
00192 #define GAVL_TIMECODE_STRING_LEN_SHORT 13
00202 GAVL_PUBLIC
00203 void gavl_timecode_prettyprint_short(gavl_timecode_t tc,
00204 char str[GAVL_TIMECODE_STRING_LEN_SHORT]);
00205
00206
00211 #ifdef __cplusplus
00212 }
00213 #endif
00214
00215 #endif
00216