aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/ffmpeg/swscale.pas
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/ffmpeg/swscale.pas')
-rw-r--r--src/lib/ffmpeg/swscale.pas121
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