lavc: make rc_qsquish a private option of mpegvideo encoders
This commit is contained in:
		
							parent
							
								
									6cbbf0592f
								
							
						
					
					
						commit
						a6e4ce9fd5
					
				@ -2082,13 +2082,13 @@ typedef struct AVCodecContext {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    int max_qdiff;
 | 
					    int max_qdiff;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_MPV_OPT
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * ratecontrol qmin qmax limiting method
 | 
					     * @deprecated use encoder private options instead
 | 
				
			||||||
     * 0-> clipping, 1-> use a nice continuous function to limit qscale wthin qmin/qmax.
 | 
					 | 
				
			||||||
     * - encoding: Set by user.
 | 
					 | 
				
			||||||
     * - decoding: unused
 | 
					 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
 | 
					    attribute_deprecated
 | 
				
			||||||
    float rc_qsquish;
 | 
					    float rc_qsquish;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    float rc_qmod_amp;
 | 
					    float rc_qmod_amp;
 | 
				
			||||||
    int rc_qmod_freq;
 | 
					    int rc_qmod_freq;
 | 
				
			||||||
 | 
				
			|||||||
@ -628,6 +628,12 @@ typedef struct MpegEncContext {
 | 
				
			|||||||
    int mpv_flags;      ///< flags set by private options
 | 
					    int mpv_flags;      ///< flags set by private options
 | 
				
			||||||
    int quantizer_noise_shaping;
 | 
					    int quantizer_noise_shaping;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * ratecontrol qmin qmax limiting method
 | 
				
			||||||
 | 
					     * 0-> clipping, 1-> use a nice continuous function to limit qscale wthin qmin/qmax.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    float rc_qsquish;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* temp buffers for rate control */
 | 
					    /* temp buffers for rate control */
 | 
				
			||||||
    float *cplx_tab, *bits_tab;
 | 
					    float *cplx_tab, *bits_tab;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -672,7 +678,9 @@ typedef struct MpegEncContext {
 | 
				
			|||||||
                                                                      FF_MPV_OFFSET(chroma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\
 | 
					                                                                      FF_MPV_OFFSET(chroma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\
 | 
				
			||||||
{ "quantizer_noise_shaping", NULL,                                  FF_MPV_OFFSET(quantizer_noise_shaping), AV_OPT_TYPE_INT, { .i64 = 0 },       0, INT_MAX, FF_MPV_OPT_FLAGS },\
 | 
					{ "quantizer_noise_shaping", NULL,                                  FF_MPV_OFFSET(quantizer_noise_shaping), AV_OPT_TYPE_INT, { .i64 = 0 },       0, INT_MAX, FF_MPV_OPT_FLAGS },\
 | 
				
			||||||
{ "error_rate", "Simulate errors in the bitstream to test error concealment.",                                                                                                  \
 | 
					{ "error_rate", "Simulate errors in the bitstream to test error concealment.",                                                                                                  \
 | 
				
			||||||
                                                                    FF_MPV_OFFSET(error_rate),              AV_OPT_TYPE_INT, { .i64 = 0 },       0, INT_MAX, FF_MPV_OPT_FLAGS },
 | 
					                                                                    FF_MPV_OFFSET(error_rate),              AV_OPT_TYPE_INT, { .i64 = 0 },       0, INT_MAX, FF_MPV_OPT_FLAGS },\
 | 
				
			||||||
 | 
					{"qsquish", "how to keep quantizer between qmin and qmax (0 = clip, 1 = use differentiable function)",                                                                          \
 | 
				
			||||||
 | 
					                                                                    FF_MPV_OFFSET(rc_qsquish), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, 0, 99, FF_MPV_OPT_FLAGS},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern const AVOption ff_mpv_generic_options[];
 | 
					extern const AVOption ff_mpv_generic_options[];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -822,6 +822,13 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx)
 | 
				
			|||||||
    FF_ENABLE_DEPRECATION_WARNINGS
 | 
					    FF_ENABLE_DEPRECATION_WARNINGS
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if FF_API_MPV_OPT
 | 
				
			||||||
 | 
					    FF_DISABLE_DEPRECATION_WARNINGS
 | 
				
			||||||
 | 
					    if (avctx->rc_qsquish != 0.0)
 | 
				
			||||||
 | 
					        s->rc_qsquish = avctx->rc_qsquish;
 | 
				
			||||||
 | 
					    FF_ENABLE_DEPRECATION_WARNINGS
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (avctx->b_frame_strategy == 2) {
 | 
					    if (avctx->b_frame_strategy == 2) {
 | 
				
			||||||
        for (i = 0; i < s->max_b_frames + 2; i++) {
 | 
					        for (i = 0; i < s->max_b_frames + 2; i++) {
 | 
				
			||||||
            s->tmp_frames[i] = av_frame_alloc();
 | 
					            s->tmp_frames[i] = av_frame_alloc();
 | 
				
			||||||
 | 
				
			|||||||
@ -163,7 +163,9 @@ static const AVOption avcodec_options[] = {
 | 
				
			|||||||
{"has_b_frames", NULL, OFFSET(has_b_frames), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
 | 
					{"has_b_frames", NULL, OFFSET(has_b_frames), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
 | 
				
			||||||
{"block_align", NULL, OFFSET(block_align), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
 | 
					{"block_align", NULL, OFFSET(block_align), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
 | 
				
			||||||
{"mpeg_quant", "use MPEG quantizers instead of H.263", OFFSET(mpeg_quant), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
 | 
					{"mpeg_quant", "use MPEG quantizers instead of H.263", OFFSET(mpeg_quant), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
 | 
				
			||||||
{"qsquish", "how to keep quantizer between qmin and qmax (0 = clip, 1 = use differentiable function)", OFFSET(rc_qsquish), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, 0, 99, V|E},
 | 
					#if FF_API_MPV_OPT
 | 
				
			||||||
 | 
					{"qsquish", "deprecated, use encoder private options instead", OFFSET(rc_qsquish), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, 0, 99, V|E},
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
{"rc_qmod_amp", "experimental quantizer modulation", OFFSET(rc_qmod_amp), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, -FLT_MAX, FLT_MAX, V|E},
 | 
					{"rc_qmod_amp", "experimental quantizer modulation", OFFSET(rc_qmod_amp), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, -FLT_MAX, FLT_MAX, V|E},
 | 
				
			||||||
{"rc_qmod_freq", "experimental quantizer modulation", OFFSET(rc_qmod_freq), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
 | 
					{"rc_qmod_freq", "experimental quantizer modulation", OFFSET(rc_qmod_freq), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
 | 
				
			||||||
{"rc_override_count", NULL, OFFSET(rc_override_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
 | 
					{"rc_override_count", NULL, OFFSET(rc_override_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
 | 
				
			||||||
 | 
				
			|||||||
@ -553,7 +553,7 @@ static double modify_qscale(MpegEncContext *s, RateControlEntry *rce,
 | 
				
			|||||||
    av_dlog(s, "q:%f max:%f min:%f size:%f index:%f agr:%f\n",
 | 
					    av_dlog(s, "q:%f max:%f min:%f size:%f index:%f agr:%f\n",
 | 
				
			||||||
            q, max_rate, min_rate, buffer_size, rcc->buffer_index,
 | 
					            q, max_rate, min_rate, buffer_size, rcc->buffer_index,
 | 
				
			||||||
            s->avctx->rc_buffer_aggressivity);
 | 
					            s->avctx->rc_buffer_aggressivity);
 | 
				
			||||||
    if (s->avctx->rc_qsquish == 0.0 || qmin == qmax) {
 | 
					    if (s->rc_qsquish == 0.0 || qmin == qmax) {
 | 
				
			||||||
        if (q < qmin)
 | 
					        if (q < qmin)
 | 
				
			||||||
            q = qmin;
 | 
					            q = qmin;
 | 
				
			||||||
        else if (q > qmax)
 | 
					        else if (q > qmax)
 | 
				
			||||||
 | 
				
			|||||||
@ -159,5 +159,8 @@
 | 
				
			|||||||
#ifndef FF_API_AVCTX_TIMEBASE
 | 
					#ifndef FF_API_AVCTX_TIMEBASE
 | 
				
			||||||
#define FF_API_AVCTX_TIMEBASE    (LIBAVCODEC_VERSION_MAJOR < 59)
 | 
					#define FF_API_AVCTX_TIMEBASE    (LIBAVCODEC_VERSION_MAJOR < 59)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#ifndef FF_API_MPV_OPT
 | 
				
			||||||
 | 
					#define FF_API_MPV_OPT           (LIBAVCODEC_VERSION_MAJOR < 59)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* AVCODEC_VERSION_H */
 | 
					#endif /* AVCODEC_VERSION_H */
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user