You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	lavfi/vf_fspp: convert to the video_enc_params API
This commit is contained in:
		| @@ -271,7 +271,7 @@ OBJS-$(CONFIG_FRAMESTEP_FILTER)              += vf_framestep.o | ||||
| OBJS-$(CONFIG_FREEZEDETECT_FILTER)           += vf_freezedetect.o | ||||
| OBJS-$(CONFIG_FREEZEFRAMES_FILTER)           += vf_freezeframes.o | ||||
| OBJS-$(CONFIG_FREI0R_FILTER)                 += vf_frei0r.o | ||||
| OBJS-$(CONFIG_FSPP_FILTER)                   += vf_fspp.o | ||||
| OBJS-$(CONFIG_FSPP_FILTER)                   += vf_fspp.o qp_table.o | ||||
| OBJS-$(CONFIG_GBLUR_FILTER)                  += vf_gblur.o | ||||
| OBJS-$(CONFIG_GEQ_FILTER)                    += vf_geq.o | ||||
| OBJS-$(CONFIG_GRADFUN_FILTER)                += vf_gradfun.o | ||||
|   | ||||
| @@ -41,6 +41,7 @@ | ||||
| #include "libavutil/opt.h" | ||||
| #include "libavutil/pixdesc.h" | ||||
| #include "internal.h" | ||||
| #include "qp_table.h" | ||||
| #include "vf_fspp.h" | ||||
|  | ||||
| #define OFFSET(x) offsetof(FSPPContext, x) | ||||
| @@ -526,13 +527,6 @@ static int config_input(AVFilterLink *inlink) | ||||
|     if (!fspp->temp || !fspp->src) | ||||
|         return AVERROR(ENOMEM); | ||||
|  | ||||
|     if (!fspp->use_bframe_qp && !fspp->qp) { | ||||
|         fspp->non_b_qp_alloc_size = AV_CEIL_RSHIFT(inlink->w, 4) * AV_CEIL_RSHIFT(inlink->h, 4); | ||||
|         fspp->non_b_qp_table = av_calloc(fspp->non_b_qp_alloc_size, sizeof(*fspp->non_b_qp_table)); | ||||
|         if (!fspp->non_b_qp_table) | ||||
|             return AVERROR(ENOMEM); | ||||
|     } | ||||
|  | ||||
|     fspp->store_slice  = store_slice_c; | ||||
|     fspp->store_slice2 = store_slice2_c; | ||||
|     fspp->mul_thrmat   = mul_thrmat_c; | ||||
| @@ -554,8 +548,9 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) | ||||
|     AVFrame *out = in; | ||||
|  | ||||
|     int qp_stride = 0; | ||||
|     uint8_t *qp_table = NULL; | ||||
|     int8_t *qp_table = NULL; | ||||
|     int i, bias; | ||||
|     int ret = 0; | ||||
|     int custom_threshold_m[64]; | ||||
|  | ||||
|     bias = (1 << 4) + fspp->strength; | ||||
| @@ -582,38 +577,25 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) | ||||
|      * the quantizers from the B-frames (B-frames often have a higher QP), we | ||||
|      * need to save the qp table from the last non B-frame; this is what the | ||||
|      * following code block does */ | ||||
|     if (!fspp->qp) { | ||||
|         qp_table = av_frame_get_qp_table(in, &qp_stride, &fspp->qscale_type); | ||||
|     if (!fspp->qp && (fspp->use_bframe_qp || in->pict_type != AV_PICTURE_TYPE_B)) { | ||||
|         ret = ff_qp_table_extract(in, &qp_table, &qp_stride, NULL, &fspp->qscale_type); | ||||
|         if (ret < 0) { | ||||
|             av_frame_free(&in); | ||||
|             return ret; | ||||
|         } | ||||
|  | ||||
|         if (qp_table && !fspp->use_bframe_qp && in->pict_type != AV_PICTURE_TYPE_B) { | ||||
|             int w, h; | ||||
|  | ||||
|             /* if the qp stride is not set, it means the QP are only defined on | ||||
|              * a line basis */ | ||||
|            if (!qp_stride) { | ||||
|                 w = AV_CEIL_RSHIFT(inlink->w, 4); | ||||
|                 h = 1; | ||||
|             } else { | ||||
|                 w = qp_stride; | ||||
|                 h = AV_CEIL_RSHIFT(inlink->h, 4); | ||||
|             } | ||||
|             if (w * h > fspp->non_b_qp_alloc_size) { | ||||
|                 int ret = av_reallocp_array(&fspp->non_b_qp_table, w, h); | ||||
|                 if (ret < 0) { | ||||
|                     fspp->non_b_qp_alloc_size = 0; | ||||
|                     return ret; | ||||
|                 } | ||||
|                 fspp->non_b_qp_alloc_size = w * h; | ||||
|             } | ||||
|  | ||||
|             av_assert0(w * h <= fspp->non_b_qp_alloc_size); | ||||
|             memcpy(fspp->non_b_qp_table, qp_table, w * h); | ||||
|         if (!fspp->use_bframe_qp && in->pict_type != AV_PICTURE_TYPE_B) { | ||||
|             av_freep(&fspp->non_b_qp_table); | ||||
|             fspp->non_b_qp_table  = qp_table; | ||||
|             fspp->non_b_qp_stride = qp_stride; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if (fspp->log2_count && !ctx->is_disabled) { | ||||
|         if (!fspp->use_bframe_qp && fspp->non_b_qp_table) | ||||
|         if (!fspp->use_bframe_qp && fspp->non_b_qp_table) { | ||||
|             qp_table = fspp->non_b_qp_table; | ||||
|             qp_stride = fspp->non_b_qp_stride; | ||||
|         } | ||||
|  | ||||
|         if (qp_table || fspp->qp) { | ||||
|             const int cw = AV_CEIL_RSHIFT(inlink->w, fspp->hsub); | ||||
| @@ -628,7 +610,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) | ||||
|                 out = ff_get_video_buffer(outlink, aligned_w, aligned_h); | ||||
|                 if (!out) { | ||||
|                     av_frame_free(&in); | ||||
|                     return AVERROR(ENOMEM); | ||||
|                     ret = AVERROR(ENOMEM); | ||||
|                     goto finish; | ||||
|                 } | ||||
|                 av_frame_copy_props(out, in); | ||||
|                 out->width = in->width; | ||||
| @@ -652,7 +635,11 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) | ||||
|                                 inlink->w, inlink->h); | ||||
|         av_frame_free(&in); | ||||
|     } | ||||
|     return ff_filter_frame(outlink, out); | ||||
|     ret = ff_filter_frame(outlink, out); | ||||
| finish: | ||||
|     if (qp_table != fspp->non_b_qp_table) | ||||
|         av_freep(&qp_table); | ||||
|     return ret; | ||||
| } | ||||
|  | ||||
| static av_cold void uninit(AVFilterContext *ctx) | ||||
|   | ||||
| @@ -65,8 +65,8 @@ typedef struct FSPPContext { | ||||
|     int prev_q; | ||||
|     uint8_t *src; | ||||
|     int16_t *temp; | ||||
|     uint8_t *non_b_qp_table; | ||||
|     int non_b_qp_alloc_size; | ||||
|     int8_t  *non_b_qp_table; | ||||
|     int non_b_qp_stride; | ||||
|     int use_bframe_qp; | ||||
|  | ||||
|     void (*store_slice)(uint8_t *dst, int16_t *src, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user