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.

86 lines
2.9 KiB

/*
* framecode.h -- framecode list handling include file
* Written by Andrew Church <achurch@achurch.org>
*
* This file is part of transcode, a video stream processing tool.
* transcode is free software, distributable under the terms of the GNU
* General Public License (version 2 or later). See the file COPYING
* for details.
*/
#ifndef LIBTC_FRAMECODE_H
#define LIBTC_FRAMECODE_H
/*************************************************************************/
/* A single framecode range structure. Start times are considered
* inclusive, while end times are considered exclusive; thus a range with
* stf==0 and etf==10 contains 10 frames, not 11 frames. */
struct fc_time {
struct fc_time *next;
double fps; /* Frames per second */
unsigned int stepf; /* Step value (process every stepf'th frame) */
unsigned int vob_offset; /* For transcode -L (should be removed) */
unsigned int sh; /* Start time: hour */
unsigned int sm; /* Start time: minute */
unsigned int ss; /* Start time: second */
unsigned int sf; /* Start time: frame within second */
unsigned int stf; /* Start time: frame index */
unsigned int eh; /* End time: hour */
unsigned int em; /* End time: minute */
unsigned int es; /* End time: second */
unsigned int ef; /* End time: frame within second */
unsigned int etf; /* End time: frame index */
};
/*************************************************************************/
/* Functions for handling fc_time structures. */
/* Allocate a new, zeroed fc_time structure. */
struct fc_time *new_fc_time(void);
/* Free a list of allocated fc_time structures. */
void free_fc_time(struct fc_time *list);
/* Set fields of an fc_time structure from frame indices. */
void set_fc_time(struct fc_time *range, int start, int end);
/* Return whether a list of fc_time structures contains a given frame index. */
int fc_time_contains(const struct fc_time *list, unsigned int frame);
/* Parse a string into a list of fc_time structures. */
struct fc_time *new_fc_time_from_string(const char *string,
const char *separator,
double fps, int verbose);
/* Compatibility macros */
#define parse_fc_time_string(str,fps,sep,verb,list) \
((*(list) = new_fc_time_from_string((str), (sep), (fps), (verb))) \
!= NULL ? 0 : -1)
#define fc_frame_in_time(list,frame) fc_time_contains((list), (frame))
// only for avisplit
#define fc_set_start_time(range,n) set_fc_time((range), (n), -1)
/*************************************************************************/
#endif /* LIBTC_FRAMECODE_H */
/*
* Local variables:
* c-file-style: "stroustrup"
* c-file-offsets: ((case-label . *) (statement-case-intro . *))
* indent-tabs-mode: nil
* End:
*
* vim: expandtab shiftwidth=4:
*/