2008-07-10 18:37:06 +03:00
/*
* Copyright ( C ) 2001 - 2003 Michael Niedermayer < michaelni @ gmx . at >
*
* This file is part of FFmpeg .
*
* FFmpeg is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation ; either
* version 2.1 of the License , or ( at your option ) any later version .
*
* FFmpeg is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* Lesser General Public License for more details .
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA
*/
2011-02-03 15:58:59 +02:00
# include "libavutil/opt.h"
2008-07-10 18:37:06 +03:00
# include "swscale.h"
# include "swscale_internal.h"
2012-02-21 22:09:31 +03:00
static const char * sws_context_to_name ( void * ptr )
2009-08-17 00:11:28 +03:00
{
2008-07-10 18:37:06 +03:00
return " swscaler " ;
}
# define OFFSET(x) offsetof(SwsContext, x)
# define DEFAULT 0
# define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
2013-08-01 15:35:01 +03:00
static const AVOption swscale_options [ ] = {
2024-02-11 16:41:05 +02:00
{ " sws_flags " , " scaler flags " , OFFSET ( flags ) , AV_OPT_TYPE_FLAGS , { . i64 = SWS_BICUBIC } , 0 , UINT_MAX , VE , . unit = " sws_flags " } ,
{ " fast_bilinear " , " fast bilinear " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_FAST_BILINEAR } , INT_MIN , INT_MAX , VE , . unit = " sws_flags " } ,
{ " bilinear " , " bilinear " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_BILINEAR } , INT_MIN , INT_MAX , VE , . unit = " sws_flags " } ,
{ " bicubic " , " bicubic " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_BICUBIC } , INT_MIN , INT_MAX , VE , . unit = " sws_flags " } ,
{ " experimental " , " experimental " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_X } , INT_MIN , INT_MAX , VE , . unit = " sws_flags " } ,
{ " neighbor " , " nearest neighbor " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_POINT } , INT_MIN , INT_MAX , VE , . unit = " sws_flags " } ,
{ " area " , " averaging area " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_AREA } , INT_MIN , INT_MAX , VE , . unit = " sws_flags " } ,
{ " bicublin " , " luma bicubic, chroma bilinear " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_BICUBLIN } , INT_MIN , INT_MAX , VE , . unit = " sws_flags " } ,
{ " gauss " , " Gaussian " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_GAUSS } , INT_MIN , INT_MAX , VE , . unit = " sws_flags " } ,
{ " sinc " , " sinc " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_SINC } , INT_MIN , INT_MAX , VE , . unit = " sws_flags " } ,
{ " lanczos " , " Lanczos " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_LANCZOS } , INT_MIN , INT_MAX , VE , . unit = " sws_flags " } ,
{ " spline " , " natural bicubic spline " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_SPLINE } , INT_MIN , INT_MAX , VE , . unit = " sws_flags " } ,
{ " print_info " , " print info " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_PRINT_INFO } , INT_MIN , INT_MAX , VE , . unit = " sws_flags " } ,
{ " accurate_rnd " , " accurate rounding " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_ACCURATE_RND } , INT_MIN , INT_MAX , VE , . unit = " sws_flags " } ,
{ " full_chroma_int " , " full chroma interpolation " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_FULL_CHR_H_INT } , INT_MIN , INT_MAX , VE , . unit = " sws_flags " } ,
{ " full_chroma_inp " , " full chroma input " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_FULL_CHR_H_INP } , INT_MIN , INT_MAX , VE , . unit = " sws_flags " } ,
{ " bitexact " , " " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_BITEXACT } , INT_MIN , INT_MAX , VE , . unit = " sws_flags " } ,
{ " error_diffusion " , " error diffusion dither " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_ERROR_DIFFUSION } , INT_MIN , INT_MAX , VE , . unit = " sws_flags " } ,
2010-09-26 22:48:49 +03:00
2012-08-31 13:22:31 +03:00
{ " srcw " , " source width " , OFFSET ( srcW ) , AV_OPT_TYPE_INT , { . i64 = 16 } , 1 , INT_MAX , VE } ,
{ " srch " , " source height " , OFFSET ( srcH ) , AV_OPT_TYPE_INT , { . i64 = 16 } , 1 , INT_MAX , VE } ,
{ " dstw " , " destination width " , OFFSET ( dstW ) , AV_OPT_TYPE_INT , { . i64 = 16 } , 1 , INT_MAX , VE } ,
{ " dsth " , " destination height " , OFFSET ( dstH ) , AV_OPT_TYPE_INT , { . i64 = 16 } , 1 , INT_MAX , VE } ,
2016-11-19 03:23:26 +02:00
{ " src_format " , " source format " , OFFSET ( srcFormat ) , AV_OPT_TYPE_PIXEL_FMT , { . i64 = DEFAULT } , 0 , INT_MAX , VE } ,
{ " dst_format " , " destination format " , OFFSET ( dstFormat ) , AV_OPT_TYPE_PIXEL_FMT , { . i64 = DEFAULT } , 0 , INT_MAX , VE } ,
2015-11-21 23:06:07 +02:00
{ " src_range " , " source is full range " , OFFSET ( srcRange ) , AV_OPT_TYPE_BOOL , { . i64 = DEFAULT } , 0 , 1 , VE } ,
{ " dst_range " , " destination is full range " , OFFSET ( dstRange ) , AV_OPT_TYPE_BOOL , { . i64 = DEFAULT } , 0 , 1 , VE } ,
2012-02-21 22:09:31 +03:00
{ " param0 " , " scaler param 0 " , OFFSET ( param [ 0 ] ) , AV_OPT_TYPE_DOUBLE , { . dbl = SWS_PARAM_DEFAULT } , INT_MIN , INT_MAX , VE } ,
{ " param1 " , " scaler param 1 " , OFFSET ( param [ 1 ] ) , AV_OPT_TYPE_DOUBLE , { . dbl = SWS_PARAM_DEFAULT } , INT_MIN , INT_MAX , VE } ,
2010-09-26 22:48:49 +03:00
2014-09-21 13:12:50 +03:00
{ " src_v_chr_pos " , " source vertical chroma position in luma grid/256 " , OFFSET ( src_v_chr_pos ) , AV_OPT_TYPE_INT , { . i64 = - 513 } , - 513 , 512 , VE } ,
{ " src_h_chr_pos " , " source horizontal chroma position in luma grid/256 " , OFFSET ( src_h_chr_pos ) , AV_OPT_TYPE_INT , { . i64 = - 513 } , - 513 , 512 , VE } ,
{ " dst_v_chr_pos " , " destination vertical chroma position in luma grid/256 " , OFFSET ( dst_v_chr_pos ) , AV_OPT_TYPE_INT , { . i64 = - 513 } , - 513 , 512 , VE } ,
{ " dst_h_chr_pos " , " destination horizontal chroma position in luma grid/256 " , OFFSET ( dst_h_chr_pos ) , AV_OPT_TYPE_INT , { . i64 = - 513 } , - 513 , 512 , VE } ,
2013-07-14 06:19:44 +03:00
2024-02-11 16:41:05 +02:00
{ " sws_dither " , " set dithering algorithm " , OFFSET ( dither ) , AV_OPT_TYPE_INT , { . i64 = SWS_DITHER_AUTO } , 0 , NB_SWS_DITHER , VE , . unit = " sws_dither " } ,
{ " auto " , " leave choice to sws " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_DITHER_AUTO } , INT_MIN , INT_MAX , VE , . unit = " sws_dither " } ,
{ " bayer " , " bayer dither " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_DITHER_BAYER } , INT_MIN , INT_MAX , VE , . unit = " sws_dither " } ,
{ " ed " , " error diffusion " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_DITHER_ED } , INT_MIN , INT_MAX , VE , . unit = " sws_dither " } ,
{ " a_dither " , " arithmetic addition dither " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_DITHER_A_DITHER } , INT_MIN , INT_MAX , VE , . unit = " sws_dither " } ,
{ " x_dither " , " arithmetic xor dither " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_DITHER_X_DITHER } , INT_MIN , INT_MAX , VE , . unit = " sws_dither " } ,
2015-09-06 19:25:13 +02:00
{ " gamma " , " gamma correct scaling " , OFFSET ( gamma_flag ) , AV_OPT_TYPE_BOOL , { . i64 = 0 } , 0 , 1 , VE } ,
2024-02-11 16:41:05 +02:00
{ " alphablend " , " mode for alpha -> non alpha " , OFFSET ( alphablend ) , AV_OPT_TYPE_INT , { . i64 = SWS_ALPHA_BLEND_NONE } , 0 , SWS_ALPHA_BLEND_NB - 1 , VE , . unit = " alphablend " } ,
{ " none " , " ignore alpha " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_ALPHA_BLEND_NONE } , INT_MIN , INT_MAX , VE , . unit = " alphablend " } ,
{ " uniform_color " , " blend onto a uniform color " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_ALPHA_BLEND_UNIFORM } , INT_MIN , INT_MAX , VE , . unit = " alphablend " } ,
{ " checkerboard " , " blend onto a checkerboard " , 0 , AV_OPT_TYPE_CONST , { . i64 = SWS_ALPHA_BLEND_CHECKERBOARD } , INT_MIN , INT_MAX , VE , . unit = " alphablend " } ,
2013-08-14 18:19:32 +03:00
2024-02-11 16:41:05 +02:00
{ " threads " , " number of threads " , OFFSET ( nb_threads ) , AV_OPT_TYPE_INT , { . i64 = 1 } , 0 , INT_MAX , VE , . unit = " threads " } ,
{ " auto " , NULL , 0 , AV_OPT_TYPE_CONST , { . i64 = 0 } , . flags = VE , . unit = " threads " } ,
2021-07-12 12:31:14 +02:00
2008-07-10 18:37:06 +03:00
{ NULL }
} ;
2015-10-27 23:56:53 +02:00
const AVClass ff_sws_context_class = {
2012-06-22 05:34:34 +03:00
. class_name = " SWScaler " ,
. item_name = sws_context_to_name ,
2013-08-03 10:16:36 +03:00
. option = swscale_options ,
2021-09-18 04:46:45 +02:00
. parent_log_context_offset = OFFSET ( parent ) ,
2012-07-04 20:22:16 +03:00
. category = AV_CLASS_CATEGORY_SWSCALER ,
2012-11-29 02:27:25 +03:00
. version = LIBAVUTIL_VERSION_INT ,
2012-06-22 05:34:34 +03:00
} ;
2011-08-23 08:23:52 +03:00
const AVClass * sws_get_class ( void )
{
2015-10-27 23:56:53 +02:00
return & ff_sws_context_class ;
2011-08-23 08:23:52 +03:00
}