philippe44 5 лет назад
Родитель
Сommit
0e3bc18748

+ 0 - 1
components/codecs/component.mk

@@ -12,7 +12,6 @@ COMPONENT_ADD_LDFLAGS=-l$(COMPONENT_NAME) 	\
 	$(COMPONENT_PATH)/lib/libresample16.a		\
 	$(COMPONENT_PATH)/lib/libsoxr.a
 	
-	
 	#$(COMPONENT_PATH)/lib/libfaad.a 	
 	#$(COMPONENT_PATH)/lib/libvorbisidec.a
 	#$(COMPONENT_PATH)/lib/libogg.a

+ 9 - 2
components/codecs/inc/resample16/resample16.h

@@ -74,11 +74,18 @@ typedef int            WORD;
 typedef unsigned int   UWORD;
 
 struct resample16_s;
+typedef struct {
+	UHWORD LpScl;               /* Unity-gain scale factor */
+	UHWORD Nwing;               /* Filter table size */
+	UHWORD Nmult;               /* Filter length for up-conversions */
+	const HWORD *Imp;           /* Filter coefficients */
+	const HWORD *ImpD;          /* ImpD[n] = Imp[n+1]-Imp[n] */
+} resample16_filter_t;
 
-typedef enum { RESAMPLE16_FAST, RESAMPLE16_SMALL, RESAMPLE16_LARGE, RESAMPLE_CUSTOM } resample16_filter_e;
+typedef enum { RESAMPLE16_BASIC, RESAMPLE16_LOW, RESAMPLE16_MED } resample16_filter_e;
 
 WORD 				resample16(struct resample16_s *r, HWORD X[],	int inCount, HWORD Y[]);
-struct resample16_s*  resample16_create(double factor, resample16_filter_e filter, BOOL interp);
+struct resample16_s*  resample16_create(float factor, resample16_filter_e filter, resample16_filter_t *custom, BOOL interp);
 void 				resample16_delete(struct resample16_s *r);
 void 				resample16_flush(struct resample16_s *r);
 

BIN
components/codecs/lib/libresample16.a


+ 2 - 2
main/main.c

@@ -112,8 +112,8 @@ static void usage(const char *argv0) {
 		   "  \t\t\t phase_response = 0-100 (0 = minimum / 50 = linear / 100 = maximum)\n"
 #endif
 #if RESAMPLE16
-		   "  -R -u [params]\tResample, params = (i|m)[:i],\n" 
-		   "   \t\t\t i = linear interpolation, m =  13 taps filter, i = interpolate filter coefficients\n"
+		   "  -R -u [params]\tResample, params = (b|l|m)[:i],\n" 
+		   "   \t\t\t b = basic linear interpolation, l = 13 taps, m = 21 taps, i = interpolate filter coefficients\n"
 #endif
 #if DSD
 #if ALSA

+ 4 - 3
main/resample16.c

@@ -116,7 +116,7 @@ bool resample_newstream(struct processstate *process, unsigned raw_sample_rate,
 	if (raw_sample_rate != outrate) {
 
 		LOG_INFO("resampling from %u -> %u", raw_sample_rate, outrate);
-		r.resampler = resample16_create((float) outrate / raw_sample_rate, RESAMPLE16_SMALL, false);
+		r.resampler = resample16_create((float) outrate / raw_sample_rate, r.filter, NULL, false);
 
 		return true;
 
@@ -147,8 +147,9 @@ bool resample_init(char *opt) {
 	}
 
 	if (filter) {
-		if (*filter == 'm') r.filter = RESAMPLE16_SMALL;
-		else r.filter = RESAMPLE16_FAST;
+		if (*filter == 'm') r.filter = RESAMPLE16_MED;
+		else if (*filter == 'l') r.filter = RESAMPLE16_LOW;
+		else r.filter = RESAMPLE16_BASIC;
 	}
 
 	if (interp && *interp == 'i') {