diff options
Diffstat (limited to 'debian/transcode/transcode-1.1.7/libtc/ratiocodes.h')
| -rw-r--r-- | debian/transcode/transcode-1.1.7/libtc/ratiocodes.h | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/debian/transcode/transcode-1.1.7/libtc/ratiocodes.h b/debian/transcode/transcode-1.1.7/libtc/ratiocodes.h new file mode 100644 index 00000000..166c3014 --- /dev/null +++ b/debian/transcode/transcode-1.1.7/libtc/ratiocodes.h @@ -0,0 +1,193 @@ +/* + * ratiocodes.h -- database for all ratio/codes (asr, sar, dar, frc...) + * used in transcode + * (C) 2005-2010 - Francesco Romani <fromani -at- gmail -dot- com> + * + * This file is part of transcode, a video stream processing tool. + * + * transcode is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * transcode is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + + +#ifndef RATIOCODES_H +#define RATIOCODES_H + +/* + * same ratio codes (i.e.: code=3) have different meaning in + * different contexts, so we have this enum to let the + * tc_code_{from,to}_ratio functions distinguish operational + * context. + */ +typedef enum tccoderatio_ TCRatioCode; +enum tccoderatio_ { + TC_FRC_CODE = 1, /* frame ratio */ + TC_ASR_CODE, /* (display?) aspect ratio */ + TC_PAR_CODE, /* pixel aspect ratio */ +}; + +typedef struct tcpair_ TCPair; +struct tcpair_ { + int a; /* numerator, width... */ + int b; /* denominator, height... */ +}; + +#define TC_FRC_FPS_TO_RATIO(fps, pn, pd) \ +do { \ + *(pn) = (int)((fps) * 1000.0); \ + *(pd) = 1000; \ +} while(0) + +/* + * TCPair VS int/int dilemma: + * + * Why don't use out TCPair instead of int/int couples in + * functions interface below? + * this code (and the whole transcode in general) need to interact + * with a broad variety of foreign code with various conventions, + * interface, styles and so on. I've no *YET* found a clean way + * to use a custom struct (TCPair) for those situations without + * requiring to use a temporary variable, that looks quite + * clumsy to me. So I've chosen to fall back to minimum + * common denominator, that is a couple of int or pointer + * to ints. + * + * Of course this can change if a better and cleanest solution + * pops out :) + * + * BTW, TCPair is extensively used in internal processing and + * in private code. + */ + +/*************************************************************************/ + +/* + * tc_asr_code_describe: + * provides a descriptive, human readable string of given ASR code. + * + * Parameters: + * asr_code: the ASR code. + * Return Value: + * A constant string describing the given ASR code. + * There is NO NEED (and it is WRONG to do so) to free() it. + * Returned string is guaranteed to be valid at least until + * the next call to this function. + */ +const char *tc_asr_code_describe(int asr_code); + +/* + * tc_asr_code_from_value: + * detect the right aspect ratio code (asr) given an aspect ratio value + * as real number. + * + * Parameters: + * asr_code: pointer to integer where detected asr code will be stored. + * Can be NULL: if so, asr code will be detected but not + * stored. + * ratio: value of frame rate, as real number. + * Return Value: + * TC_NULL_MATCH if input value isn't known + * >= 0 otherwise + */ +int tc_asr_code_from_value(int *asr_code, double ratio); + +/* + * tc_frc_code_from_value: + * detect the right frame ratio code (frc) given a frame rate value as + * real number. + * + * Parameters: + * frc_code: pointer to integer where detected frc code will be stored. + * Can be NULL: if so, frc code will be detected but not + * stored. + * fps: value of frame rate, as real number. + * Return Value: + * TC_NULL_MATCH if input value isn't known + * >= 0 otherwise + */ +int tc_frc_code_from_value(int *frc_code, double fps); + +/* + * tc_frc_code_to_value: + * detect the right frame ratio value as real number given a frame rate + * code (frc). + * + * Parameters: + * frc_code: frame rate code. + * fps: pointer to double where detected frc value will be stored. + * Can be NULL: if so, frc value will be detected but not + * stored. + * Return Value: + * TC_NULL_MATCH if input value isn't known + * >= 0 otherwise + */ +int tc_frc_code_to_value(int frc_code, double *fps); + +/* + * tc_code_from_ratio: + * detect the right code in a specificied domain given a fraction as + * pair of integers. + * + * Parameters: + * rc: select operational domain. See definition of + * TCRatioCode above to see avalaible domains. + * code: pointer to integer where detected code will be stored. + * Can be NULL: if so, code will be detected but not + * stored. + * n: numerator of given frame ratio fraction. + * d: denominator of given frame ratio fraction. + * Return Value: + * TC_NULL_MATCH if input value isn't known + * >= 0 otherwise + */ +int tc_code_from_ratio(TCRatioCode rc, int *out_code, int in_n, int in_d); + +/* + * tc_frc_code_to_ratio: + * detect the right ratio fraction in a specified domain as pair of + * integers given a ratio code. + * + * Parameters: + * rc: select operational domain. See definition of + * TCRatioCode above to see avalaible domains. + * code: code to be converted in fraction. + * n: pointer to integer where numerator of rate fraction + * will ne stored. Can be NULL: if so, fraction will be + * detected but not stored. + * d: pointer to integer where denominator of frate fraction + * will ne stored. Can be NULL: if so, fraction will be + * detected but not stored. + * Return Value: + * TC_NULL_MATCH if input value isn't known + * >= 0 otherwise + */ +int tc_code_to_ratio(TCRatioCode rc, int in_code, int *out_n, int *out_d); + +/* macro goodies */ +#define tc_frc_code_from_ratio(frc, n, d) \ + tc_code_from_ratio(TC_FRC_CODE, frc, n, d) +#define tc_frc_code_to_ratio(frc, n, d) \ + tc_code_to_ratio(TC_FRC_CODE, frc, n, d) + +#define tc_asr_code_from_ratio(asr, n, d) \ + tc_code_from_ratio(TC_ASR_CODE, asr, n, d) +#define tc_asr_code_to_ratio(asr, n, d) \ + tc_code_to_ratio(TC_ASR_CODE, asr, n, d) + +#define tc_par_code_from_ratio(par, n, d) \ + tc_code_from_ratio(TC_PAR_CODE, par, n, d) +#define tc_par_code_to_ratio(par, n, d) \ + tc_code_to_ratio(TC_PAR_CODE, par, n, d) + + +#endif /* RATIOCODES_H */ |
