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
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:
|
|
*/
|