X-Git-Url: https://git.piment-noir.org/?p=deb_x265.git;a=blobdiff_plain;f=source%2Fx265.h;h=f7c23600fafa2e1830f58614e2ed0afecc45a301;hp=e5474b75035f274387a21d78394a060837a38838;hb=b53f7c52d8280ab63876efd6eb292c21430ac607;hpb=5c9b45285dd64723ad1dac380b98a7b1f3095674 diff --git a/source/x265.h b/source/x265.h index e5474b7..f7c2360 100644 --- a/source/x265.h +++ b/source/x265.h @@ -88,36 +88,16 @@ typedef struct x265_nal uint8_t* payload; } x265_nal; -/* Stores inter (motion estimation) analysis data for a single frame */ -typedef struct x265_inter_data -{ - uint32_t zOrder; - int ref[2]; - int costZero[2]; - int16_t mvx[2]; - int16_t mvy[2]; - uint32_t depth; - int poc; - uint32_t cuAddr; -} x265_inter_data; - -/* Stores intra (motion estimation) analysis data for a single frame */ -typedef struct x265_intra_data -{ - uint8_t* depth; - uint8_t* modes; - char* partSizes; - int* poc; - uint32_t* cuAddr; -} x265_intra_data; - /* Stores all analysis data for a single frame */ typedef struct x265_analysis_data { - x265_inter_data* interData; - x265_intra_data* intraData; + uint32_t frameRecordSize; + int32_t poc; + int32_t sliceType; uint32_t numCUsInFrame; uint32_t numPartitions; + void* interData; + void* intraData; } x265_analysis_data; /* Used to pass pictures into the encoder, and to get picture data back out of @@ -290,7 +270,6 @@ typedef enum #define X265_ANALYSIS_OFF 0 #define X265_ANALYSIS_SAVE 1 #define X265_ANALYSIS_LOAD 2 - typedef struct { int planes; @@ -419,7 +398,7 @@ typedef struct x265_param * per-slice statistics to this log file in encode order. Otherwise the * encoder will emit per-stream statistics into the log file when * x265_encoder_log is called (presumably at the end of the encode) */ - const char *csvfn; + char *csvfn; /* Enable the generation of SEI messages for each encoded frame containing * the hashes of the three reconstructed picture planes. Most decoders will @@ -504,13 +483,13 @@ typedef struct x265_param /* The additional depth the residual quadtree is allowed to recurse beyond * the coding quadtree, for inter coded blocks. This must be between 1 and - * 3. The higher the value the more efficiently the residual can be + * 4. The higher the value the more efficiently the residual can be * compressed by the DCT transforms, at the expense of much more compute */ uint32_t tuQTMaxInterDepth; /* The additional depth the residual quadtree is allowed to recurse beyond * the coding quadtree, for intra coded blocks. This must be between 1 and - * 3. The higher the value the more efficiently the residual can be + * 4. The higher the value the more efficiently the residual can be * compressed by the DCT transforms, at the expense of much more compute */ uint32_t tuQTMaxIntraDepth; @@ -664,7 +643,7 @@ typedef struct x265_param /* Enable the use of `coded block flags` (flags set to true when a residual * has been coded for a given block) to avoid intra analysis in likely skip - * blocks. Default is disabled */ + * blocks. Only applicable in RD levels 5 and 6. Default is disabled */ int bEnableCbfFastMode; /* Enable early skip decisions to avoid intra and inter analysis in likely @@ -712,9 +691,10 @@ typedef struct x265_param * buffer and use this analysis information to reduce the amount of work * the encoder must perform. Default X265_ANALYSIS_OFF */ int analysisMode; + /* Filename for analysisMode save/load. Default name is "x265_analysis.dat" */ + char* analysisFileName; /*== Coding tools ==*/ - /* Enable the implicit signaling of the sign bit of the last coefficient of * each transform unit. This saves one bit per TU at the expense of figuring * out which coefficient can be toggled with the least distortion. @@ -735,9 +715,17 @@ typedef struct x265_param /* Enable the deblocking loop filter, which improves visual quality by * reducing blocking effects at block edges, particularly at lower bitrates * or higher QP. When enabled it adds another CU row of reference lag, - * reducing frame parallelism effectiveness. Default is enabled */ + * reducing frame parallelism effectiveness. Default is enabled */ int bEnableLoopFilter; + /* deblocking filter tC offset [-6, 6] -6 light filter, 6 strong. + * This is the coded div2 value, actual offset is doubled at use */ + int deblockingFilterTCOffset; + + /* deblocking filter Beta offset [-6, 6] -6 light filter, 6 strong + * This is the coded div2 value, actual offset is doubled at use */ + int deblockingFilterBetaOffset; + /* Enable the Sample Adaptive Offset loop filter, which reduces distortion * effects by adjusting reconstructed sample values based on histogram * analysis to better approximate the original samples. When enabled it adds @@ -769,9 +757,13 @@ typedef struct x265_param * regardless of this setting. */ int bIntraInBFrames; - /* An integer value in range of 100 to 1000, which denotes strength of noise - * reduction */ - int noiseReduction; + /* An integer value in range of 0 to 2000, which denotes strength of noise + * reduction in intra CUs. 0 means disabled */ + int noiseReductionIntra; + + /* An integer value in range of 0 to 2000, which denotes strength of noise + * reduction in inter CUs. 0 means disabled */ + int noiseReductionInter; /* The lossless flag enables true lossless coding, by bypassing scaling, * transform, quantization and in-loop filter processes. This is used for @@ -802,7 +794,7 @@ typedef struct x265_param int bitrate; /* The degree of rate fluctuation that x265 tolerates. Rate tolerance is used - * alongwith overflow (difference between actual and target bitrate), to adjust + * along with overflow (difference between actual and target bitrate), to adjust * qp. Default is 1.0 */ double rateTolerance; @@ -824,12 +816,12 @@ typedef struct x265_param double rfConstant; /* Enable adaptive quantization. This mode distributes available bits between all - * macroblocks of a frame, assigning more bits to low complexity areas. Turning + * CTUs of a frame, assigning more bits to low complexity areas. Turning * this ON will usually affect PSNR negatively, however SSIM and visual quality - * generally improves. Default: X265_AQ_AUTO_VARIANCE */ + * generally improves. Default: X265_AQ_VARIANCE */ int aqMode; - /* Sets the strength of AQ bias towards low detail macroblocks. Valid only if + /* Sets the strength of AQ bias towards low detail CTUs. Valid only if * AQ is enabled. Default value: 1.0. Acceptable values between 0.0 and 3.0 */ double aqStrength; @@ -856,14 +848,15 @@ typedef struct x265_param /* In CRF mode, minimum CRF as caused by VBV */ double rfConstantMin; - /* Two pass (INCOMPLETE) */ + /* Multi-pass encoding */ /* Enable writing the stats in a multipass encode to the stat output file */ int bStatWrite; /* Enable loading data from the stat input file in a multi pass encode */ int bStatRead; - /* Filename of the 2pass output/input stats file */ + /* Filename of the 2pass output/input stats file, if unspecified the + * encoder will default to using x265_2pass.log */ char* statFileName; /* temporally blur quants */ @@ -991,7 +984,7 @@ void x265_setup_primitives(x265_param *param, int cpu); * special in any way, but using this method together with x265_param_free() * and x265_param_parse() to set values by name allows the application to treat * x265_param as an opaque data struct for version safety */ -x265_param *x265_param_alloc(); +x265_param *x265_param_alloc(void); /* x265_param_free: * Use x265_param_free() to release storage for an x265_param instance @@ -1039,7 +1032,7 @@ static const char * const x265_preset_names[] = { "ultrafast", "superfast", "ver * 100 times faster than placebo! * * Currently available tunings are: */ -static const char * const x265_tune_names[] = { "psnr", "ssim", "zerolatency", "fastdecode", 0 }; +static const char * const x265_tune_names[] = { "psnr", "ssim", "grain", "zerolatency", "fastdecode", "cbr", 0 }; /* returns 0 on success, negative on failure (e.g. invalid preset/tune name). */ int x265_param_default_preset(x265_param *, const char *preset, const char *tune); @@ -1049,22 +1042,12 @@ int x265_param_default_preset(x265_param *, const char *preset, const char *tune * special in any way, but using this method together with x265_picture_free() * and x265_picture_init() allows some version safety. New picture fields will * always be added to the end of x265_picture */ -x265_picture *x265_picture_alloc(); +x265_picture *x265_picture_alloc(void); /* x265_picture_free: * Use x265_picture_free() to release storage for an x265_picture instance * allocated by x265_picture_alloc() */ void x265_picture_free(x265_picture *); - -/* x265_alloc_analysis_data: - * Allocate memory to hold analysis data, returns 0 on success else negative */ -int x265_alloc_analysis_data(x265_picture*); - -/* x265_free_analysis_data: - * Use x265_free_analysis_data to release storage of members allocated by - * x265_alloc_analysis_data */ -void x265_free_analysis_data(x265_picture*); - /*** * Initialize an x265_picture structure to default values. It sets the pixel * depth and color space to the encoder's internal values and sets the slice