diff options
Diffstat (limited to 'src/lib/ffmpeg/swscale.pas')
-rw-r--r-- | src/lib/ffmpeg/swscale.pas | 121 |
1 files changed, 106 insertions, 15 deletions
diff --git a/src/lib/ffmpeg/swscale.pas b/src/lib/ffmpeg/swscale.pas index 965659d9..12f66b47 100644 --- a/src/lib/ffmpeg/swscale.pas +++ b/src/lib/ffmpeg/swscale.pas @@ -50,7 +50,7 @@ uses const (* Max. supported version by this header *) LIBSWSCALE_MAX_VERSION_MAJOR = 0; - LIBSWSCALE_MAX_VERSION_MINOR = 6; + LIBSWSCALE_MAX_VERSION_MINOR = 7; LIBSWSCALE_MAX_VERSION_RELEASE = 1; LIBSWSCALE_MAX_VERSION = (LIBSWSCALE_MAX_VERSION_MAJOR * VERSION_MAJOR) + (LIBSWSCALE_MAX_VERSION_MINOR * VERSION_MINOR) + @@ -130,8 +130,8 @@ type // coeffs cannot be shared between vectors PSwsVector = ^TSwsVector; TSwsVector = record - coeff: PCdouble; - length: cint; + coeff: PCdouble; // pointer to the list of coefficients + length: cint; // number of coefficients in the vector end; // vectors can be shared @@ -149,34 +149,95 @@ type end; +{ + Scales the image slice in \p srcSlice and puts the resulting scaled + slice in the image in \p dst. A slice is a sequence of consecutive + rows in an image. + + @param context the scaling context previously created with + sws_getContext() + @param srcSlice the array containing the pointers to the planes of + the source slice + @param srcStride the array containing the strides for each plane of + the source image + @param srcSliceY the position in the source image of the slice to + process, that is the number (counted starting from + zero) in the image of the first row of the slice + @param srcSliceH the height of the source slice, that is the number + of rows in the slice + @param dst the array containing the pointers to the planes of + the destination image + @param dstStride the array containing the strides for each plane of + the destination image + @return the height of the output slice +} procedure sws_freeContext(swsContext: PSwsContext); cdecl; external sw__scale; +{ +Allocates and returns a SwsContext. You need it to perform +scaling/conversion operations using sws_scale(). + +param srcW the width of the source image +param srcH the height of the source image +param srcFormat the source image format +param dstW the width of the destination image +param dstH the height of the destination image +param dstFormat the destination image format +param flags specify which algorithm and options to use for rescaling +return a pointer to an allocated context, or NULL in case of error +} function sws_getContext(srcW: cint; srcH: cint; srcFormat: TAVPixelFormat; - dstW: cint; dstH: cint; dstFormat: TAVPixelFormat; flags: cint; - srcFilter: PSwsFilter; dstFilter: PSwsFilter; param: PCdouble): PSwsContext; + dstW: cint; dstH: cint; dstFormat: TAVPixelFormat; + flags: cint; srcFilter: PSwsFilter; + dstFilter: PSwsFilter; param: PCdouble): PSwsContext; cdecl; external sw__scale; -function sws_scale(context: PSwsContext; src: PPCuint8Array; srcStride: PCintArray; srcSliceY: cint; srcSliceH: cint; - dst: PPCuint8Array; dstStride: PCintArray): cint; +function sws_scale(context: PSwsContext; srcSlice: PPCuint8Array; srcStride: PCintArray; + srcSliceY: cint; srcSliceH: cint; dst: PPCuint8Array; dstStride: PCintArray): cint; cdecl; external sw__scale; -function sws_scale_ordered(context: PSwsContext; src: PPCuint8Array; srcStride: PCintArray; srcSliceY: cint; - srcSliceH: cint; dst: PPCuint8Array; dstStride: PCintArray): cint; + +{$IF LIBSWSCALE_VERSION_MAJOR < 1} +// deprecated. Use sws_scale() instead. +function sws_scale_ordered(context: PSwsContext; src: PPCuint8Array; srcStride: PCintArray; + srcSliceY: cint; srcSliceH: cint; dst: PPCuint8Array; dstStride: PCintArray): cint; cdecl; external sw__scale; deprecated; +{$IFEND} -function sws_setColorspaceDetails(c: PSwsContext; inv_table: PQuadCintArray; srcRange: cint; table: PQuadCintArray; dstRange: cint; +// param inv_table the yuv2rgb coefficients, normally ff_yuv2rgb_coeffs[x] +// param fullRange if 1 then the luma range is 0..255 if 0 it is 16..235 +// return -1 if not supported +function sws_setColorspaceDetails(c: PSwsContext; inv_table: PQuadCintArray; + srcRange: cint; table: PQuadCintArray; dstRange: cint; brightness: cint; contrast: cint; saturation: cint): cint; cdecl; external sw__scale; -function sws_getColorspaceDetails(c: PSwsContext; var inv_table: PQuadCintArray; var srcRange: cint; var table: PQuadCintArray; var dstRange: cint; + +// return -1 if not supported +function sws_getColorspaceDetails(c: PSwsContext; var inv_table: PQuadCintArray; + var srcRange: cint; var table: PQuadCintArray; var dstRange: cint; var brightness: cint; var contrast: cint; var saturation: cint): cint; cdecl; external sw__scale; + +// Returns a normalized Gaussian curve used to filter stuff +// quality=3 is high quality, lower is lower quality. function sws_getGaussianVec(variance: cdouble; quality: cdouble): PSwsVector; cdecl; external sw__scale; + +// Allocates and returns a vector with \p length coefficients, all +// with the same value \p c. function sws_getConstVec(c: cdouble; length: cint): PSwsVector; cdecl; external sw__scale; + +// Allocates and returns a vector with just one coefficient, with +// value 1.0. function sws_getIdentityVec: PSwsVector; cdecl; external sw__scale; + +// Scales all the coefficients of \p a by the \p scalar value. procedure sws_scaleVec(a: PSwsVector; scalar: cdouble); cdecl; external sw__scale; + +// Scales all the coefficients of \p a so that their sum equals \p +// height." procedure sws_normalizeVec(a: PSwsVector; height: cdouble); cdecl; external sw__scale; procedure sws_convVec(a: PSwsVector; b: PSwsVector); @@ -187,24 +248,54 @@ procedure sws_subVec(a: PSwsVector; b: PSwsVector); cdecl; external sw__scale; procedure sws_shiftVec(a: PSwsVector; shift: cint); cdecl; external sw__scale; + +// Allocates and returns a clone of the vector \p a, that is a vector +// with the same coefficients as \p a. function sws_cloneVec(a: PSwsVector): PSwsVector; cdecl; external sw__scale; +{$IF LIBSWSCALE_VERSION_MAJOR < 1} +// deprecated Use sws_printVec2() instead. + procedure sws_printVec(a: PSwsVector); + cdecl; external sw__scale; deprecated; +{$IFEND} + +{$IF LIBSWSCALE_VERSION_MINOR >= 7} +// Prints with av_log() a textual representation of the vector \p a +// if \p log_level <= av_log_level. +procedure sws_printVec2(a: PSwsVector, + log_ctx: PAVClass, log_level: cint); // Hint: PAVClass needs to be done in avutil as in log.h cdecl; external sw__scale; +{$IFEND} + procedure sws_freeVec(a: PSwsVector); cdecl; external sw__scale; -function sws_getDefaultFilter(lumaGBlur: cfloat; chromaGBlur: cfloat; lumaSarpen: cfloat; chromaSharpen: cfloat; chromaHShift: cfloat; +function sws_getDefaultFilter(lumaGBlur: cfloat; chromaGBlur: cfloat; lumaSharpen: cfloat; chromaSharpen: cfloat; chromaHShift: cfloat; chromaVShift: cfloat; verbose: cint): PSwsFilter; cdecl; external sw__scale; procedure sws_freeFilter(filter: PSwsFilter); cdecl; external sw__scale; +{ +Checks if \p context can be reused, otherwise reallocates a new +one. + +If \p context is NULL, just calls sws_getContext() to get a new +context. Otherwise, checks if the parameters are the ones already +saved in \p context. If that is the case, returns the current +context. Otherwise, frees \p context and gets a new context with +the new parameters. + +Be warned that \p srcFilter and \p dstFilter are not checked, they +are assumed to remain the same. +} function sws_getCachedContext(context: PSwsContext; - srcW: cint; srcH: cint; srcFormat: cint; - dstW: cint; dstH: cint; dstFormat: cint; flags: cint; - srcFilter: PSwsFilter; dstFilter: PSwsFilter; param: PCdouble): PSwsContext; + srcW: cint; srcH: cint; srcFormat: TAVPixelFormat; + dstW: cint; dstH: cint; dstFormat: TAVPixelFormat; + flags: cint; srcFilter: PSwsFilter; + dstFilter: PSwsFilter; param: PCdouble): PSwsContext; cdecl; external sw__scale; implementation |