You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	avfilter/af_aresample: split flushing code out
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		| @@ -223,6 +223,37 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *insamplesref) | |||||||
|     return ret; |     return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | static int flush_frame(AVFilterLink *outlink, int final, AVFrame **outsamplesref_ret) | ||||||
|  | { | ||||||
|  |     AVFilterContext *ctx = outlink->src; | ||||||
|  |     AResampleContext *aresample = ctx->priv; | ||||||
|  |     AVFilterLink *const inlink = outlink->src->inputs[0]; | ||||||
|  |     AVFrame *outsamplesref; | ||||||
|  |     int n_out = 4096; | ||||||
|  |     int64_t pts; | ||||||
|  |  | ||||||
|  |     outsamplesref = ff_get_audio_buffer(outlink, n_out); | ||||||
|  |     *outsamplesref_ret = outsamplesref; | ||||||
|  |     if (!outsamplesref) | ||||||
|  |         return AVERROR(ENOMEM); | ||||||
|  |  | ||||||
|  |     pts = swr_next_pts(aresample->swr, INT64_MIN); | ||||||
|  |     pts = ROUNDED_DIV(pts, inlink->sample_rate); | ||||||
|  |  | ||||||
|  |     n_out = swr_convert(aresample->swr, outsamplesref->extended_data, n_out, final ? NULL : (void*)outsamplesref->extended_data, 0); | ||||||
|  |     if (n_out <= 0) { | ||||||
|  |         av_frame_free(&outsamplesref); | ||||||
|  |         return (n_out == 0) ? AVERROR_EOF : n_out; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     outsamplesref->sample_rate = outlink->sample_rate; | ||||||
|  |     outsamplesref->nb_samples  = n_out; | ||||||
|  |  | ||||||
|  |     outsamplesref->pts = pts; | ||||||
|  |  | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
| static int request_frame(AVFilterLink *outlink) | static int request_frame(AVFilterLink *outlink) | ||||||
| { | { | ||||||
|     AVFilterContext *ctx = outlink->src; |     AVFilterContext *ctx = outlink->src; | ||||||
| @@ -237,26 +268,9 @@ static int request_frame(AVFilterLink *outlink) | |||||||
|  |  | ||||||
|     if (ret == AVERROR_EOF) { |     if (ret == AVERROR_EOF) { | ||||||
|         AVFrame *outsamplesref; |         AVFrame *outsamplesref; | ||||||
|         int n_out = 4096; |  | ||||||
|         int64_t pts; |  | ||||||
|  |  | ||||||
|         outsamplesref = ff_get_audio_buffer(outlink, n_out); |         if ((ret = flush_frame(outlink, 1, &outsamplesref)) < 0) | ||||||
|         if (!outsamplesref) |             return ret; | ||||||
|             return AVERROR(ENOMEM); |  | ||||||
|  |  | ||||||
|         pts = swr_next_pts(aresample->swr, INT64_MIN); |  | ||||||
|         pts = ROUNDED_DIV(pts, inlink->sample_rate); |  | ||||||
|  |  | ||||||
|         n_out = swr_convert(aresample->swr, outsamplesref->extended_data, n_out, 0, 0); |  | ||||||
|         if (n_out <= 0) { |  | ||||||
|             av_frame_free(&outsamplesref); |  | ||||||
|             return (n_out == 0) ? AVERROR_EOF : n_out; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         outsamplesref->sample_rate = outlink->sample_rate; |  | ||||||
|         outsamplesref->nb_samples  = n_out; |  | ||||||
|  |  | ||||||
|         outsamplesref->pts = pts; |  | ||||||
|  |  | ||||||
|         return ff_filter_frame(outlink, outsamplesref); |         return ff_filter_frame(outlink, outsamplesref); | ||||||
|     } |     } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user