comparison src/libSAD/libSAD.h @ 4234:b293ce14a01a

partially works...
author Eugene Zagidullin <e.asphyx@gmail.com>
date Thu, 31 Jan 2008 12:04:13 +0300
parents 74c6f3d3cf1d
children
comparison
equal deleted inserted replaced
4233:74c6f3d3cf1d 4234:b293ce14a01a
18 */ 18 */
19 19
20 #ifndef LIBSAD_H 20 #ifndef LIBSAD_H
21 #define LIBSAD_H 21 #define LIBSAD_H
22 22
23 #include <stdio.h> 23 #include "common.h"
24 #include <stdlib.h> 24 #include "dither.h"
25 #include <sys/types.h>
26 #include <math.h>
27
28 #ifndef TRUE
29 #define TRUE 1
30 #endif
31
32 #ifndef FALSE
33 #define FALSE 0
34 #endif
35
36 #include "../../config.h"
37
38 typedef int SAD_error;
39
40 typedef enum {
41 SAD_SAMPLE_S8,
42 SAD_SAMPLE_U8,
43 SAD_SAMPLE_S16,
44 SAD_SAMPLE_S16_LE,
45 SAD_SAMPLE_S16_BE,
46 SAD_SAMPLE_U16,
47 SAD_SAMPLE_U16_LE,
48 SAD_SAMPLE_U16_BE,
49 SAD_SAMPLE_S24,
50 SAD_SAMPLE_S24_LE,
51 SAD_SAMPLE_S24_BE,
52 SAD_SAMPLE_U24,
53 SAD_SAMPLE_U24_LE,
54 SAD_SAMPLE_U24_BE,
55 SAD_SAMPLE_S32,
56 SAD_SAMPLE_S32_LE,
57 SAD_SAMPLE_S32_BE,
58 SAD_SAMPLE_U32,
59 SAD_SAMPLE_U32_LE,
60 SAD_SAMPLE_U32_BE,
61 SAD_SAMPLE_FIXED32,
62 SAD_SAMPLE_FLOAT,
63 SAD_SAMPLE_MAX /*EOF*/
64 } SAD_sample_format;
65
66 /* sample format -> sample size */
67 static inline unsigned sf2ss(SAD_sample_format fmt) {
68 switch(fmt) {
69 case SAD_SAMPLE_S8:
70 case SAD_SAMPLE_U8: return sizeof(int8_t);
71 case SAD_SAMPLE_S16:
72 case SAD_SAMPLE_S16_LE:
73 case SAD_SAMPLE_S16_BE:
74 case SAD_SAMPLE_U16:
75 case SAD_SAMPLE_U16_LE:
76 case SAD_SAMPLE_U16_BE: return sizeof(int16_t);
77 case SAD_SAMPLE_S24:
78 case SAD_SAMPLE_S24_LE:
79 case SAD_SAMPLE_S24_BE:
80 case SAD_SAMPLE_U24:
81 case SAD_SAMPLE_U24_LE:
82 case SAD_SAMPLE_U24_BE:
83 case SAD_SAMPLE_S32:
84 case SAD_SAMPLE_S32_LE:
85 case SAD_SAMPLE_S32_BE:
86 case SAD_SAMPLE_U32:
87 case SAD_SAMPLE_U32_LE:
88 case SAD_SAMPLE_U32_BE:
89 case SAD_SAMPLE_FIXED32: return sizeof(int32_t);
90 case SAD_SAMPLE_FLOAT: return sizeof(float);
91 default: return 0;
92 }
93 }
94
95 typedef enum {
96 SAD_CHORDER_INTERLEAVED,
97 SAD_CHORDER_SEPARATED,
98 SAD_CHORDER_MAX /*EOF*/
99 } SAD_channels_order;
100
101 typedef struct {
102 SAD_sample_format sample_format;
103 int fracbits; /* for fixed-point only */
104 int channels;
105 SAD_channels_order channels_order;
106 int samplerate;
107 } SAD_buffer_format;
108
109 static inline unsigned bytes2frames(SAD_buffer_format *fmt, unsigned bytes) {
110 return bytes / sf2ss(fmt->sample_format) / fmt->channels;
111 }
112
113 static inline unsigned frames2bytes(SAD_buffer_format *fmt, unsigned frames) {
114 return frames * sf2ss(fmt->sample_format) * fmt->channels;
115 }
116
117 static inline float db2scale(float db) {
118 return pow(10, db / 20);
119 }
120
121 enum {
122 SAD_RG_NONE,
123 SAD_RG_TRACK,
124 SAD_RG_ALBUM
125 };
126
127 #define SAD_ERROR_OK 0
128 #define SAD_ERROR_FAIL -1
129
130 #ifdef DEBUG
131 #define DEBUG_MSG(f,x) {printf("debug: "f, x);}
132 #else
133 #define DEBUG_MSG(f,x) {}
134 #endif
135
136 typedef struct {
137 int present;
138 float track_gain; // in dB !!!
139 float track_peak;
140 float album_gain;
141 float album_peak;
142 } SAD_replaygain_info;
143
144 typedef struct {
145 int mode;
146 int clipping_prevention;
147 int hard_limit;
148 float preamp;
149 } SAD_replaygain_mode;
150
151 25
152 #endif /* LIBSAD_H */ 26 #endif /* LIBSAD_H */
153