You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	avfilter/af_firequalizer: add zero_phase option
simply by substracting pts to compensate delay also handle AV_NOPTS_VALUE Signed-off-by: Muhammad Faiz <mfcc64@gmail.com>
This commit is contained in:
		| @@ -2443,6 +2443,10 @@ filtering with large delay. Default is disabled. | ||||
|  | ||||
| @item multi | ||||
| Enable multichannels evaluation on gain. Default is disabled. | ||||
|  | ||||
| @item zero_phase | ||||
| Enable zero phase mode by substracting timestamp to compensate delay. | ||||
| Default is disabled. | ||||
| @end table | ||||
|  | ||||
| @subsection Examples | ||||
| @@ -2463,9 +2467,9 @@ custom equalization: | ||||
| firequalizer=gain_entry='entry(100,0); entry(400, -4); entry(1000, -6); entry(2000, 0)' | ||||
| @end example | ||||
| @item | ||||
| higher delay: | ||||
| higher delay with zero phase to compensate delay: | ||||
| @example | ||||
| firequalizer=delay=0.1:fixed=on | ||||
| firequalizer=delay=0.1:fixed=on:zero_phase=on | ||||
| @end example | ||||
| @item | ||||
| lowpass on left channel, highpass on right channel: | ||||
|   | ||||
| @@ -83,6 +83,7 @@ typedef struct { | ||||
|     int           wfunc; | ||||
|     int           fixed; | ||||
|     int           multi; | ||||
|     int           zero_phase; | ||||
|  | ||||
|     int           nb_gain_entry; | ||||
|     int           gain_entry_err; | ||||
| @@ -109,6 +110,7 @@ static const AVOption firequalizer_options[] = { | ||||
|         { "bharris", "blackman-harris window", 0, AV_OPT_TYPE_CONST, { .i64 = WFUNC_BHARRIS }, 0, 0, FLAGS, "wfunc" }, | ||||
|     { "fixed", "set fixed frame samples", OFFSET(fixed), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS }, | ||||
|     { "multi", "set multi channels mode", OFFSET(multi), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS }, | ||||
|     { "zero_phase", "set zero phase mode", OFFSET(zero_phase), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS }, | ||||
|     { NULL } | ||||
| }; | ||||
|  | ||||
| @@ -493,7 +495,12 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) | ||||
|                        (float *) frame->extended_data[ch], frame->nb_samples); | ||||
|     } | ||||
|  | ||||
|     s->next_pts = frame->pts + av_rescale_q(frame->nb_samples, av_make_q(1, inlink->sample_rate), inlink->time_base); | ||||
|     s->next_pts = AV_NOPTS_VALUE; | ||||
|     if (frame->pts != AV_NOPTS_VALUE) { | ||||
|         s->next_pts = frame->pts + av_rescale_q(frame->nb_samples, av_make_q(1, inlink->sample_rate), inlink->time_base); | ||||
|         if (s->zero_phase) | ||||
|             frame->pts -= av_rescale_q(s->fir_len/2, av_make_q(1, inlink->sample_rate), inlink->time_base); | ||||
|     } | ||||
|     s->frame_nsamples_max = FFMAX(s->frame_nsamples_max, frame->nb_samples); | ||||
|     return ff_filter_frame(ctx->outputs[0], frame); | ||||
| } | ||||
|   | ||||
| @@ -31,7 +31,7 @@ | ||||
|  | ||||
| #define LIBAVFILTER_VERSION_MAJOR   6 | ||||
| #define LIBAVFILTER_VERSION_MINOR  46 | ||||
| #define LIBAVFILTER_VERSION_MICRO 100 | ||||
| #define LIBAVFILTER_VERSION_MICRO 101 | ||||
|  | ||||
| #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ | ||||
|                                                LIBAVFILTER_VERSION_MINOR, \ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user