(*
* 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
*)
(*
* @file swscale.h
* @brief
* external api for the swscale stuff
*)
unit swscale;
{$IFDEF FPC}
{$MODE DELPHI }
{$PACKENUM 4} (* use 4-byte enums *)
{$PACKRECORDS C} (* C/C++-compatible record packing *)
{$ELSE}
{$MINENUMSIZE 4} (* use 4-byte enums *)
{$ENDIF}
interface
uses
avutil,
config;
const
(* Max. supported version by this header *)
LIBSWSCALE_MAX_VERSION_MAJOR = 0;
LIBSWSCALE_MAX_VERSION_MINOR = 5;
LIBSWSCALE_MAX_VERSION_RELEASE = 0;
LIBSWSCALE_MAX_VERSION = (LIBSWSCALE_MAX_VERSION_MAJOR * VERSION_MAJOR) +
(LIBSWSCALE_MAX_VERSION_MINOR * VERSION_MINOR) +
(LIBSWSCALE_MAX_VERSION_RELEASE * VERSION_RELEASE);
(* Check if linked versions are supported *)
{$IF (LIBSWSCALE_VERSION > LIBSWSCALE_MAX_VERSION)}
{$MESSAGE Warn 'Linked version of libswscale may be unsupported!'}
{$IFEND}
type
TQuadIntArray = array[0..3] of integer;
PQuadIntArray = ^TQuadIntArray;
TIntArray = array[0..0] of integer;
PIntArray = ^TIntArray;
TPByteArray = array[0..0] of Pbyte;
PPByteArray = ^TPByteArray;
const
LIBSWSCALE_VERSION_INT = ((0 shl 16)+(5 shl 8))+0;
LIBSWSCALE_VERSION = '0.5.0';
LIBSWSCALE_BUILD = LIBSWSCALE_VERSION_INT;
LIBSWSCALE_IDENT = 'SwS'+LIBSWSCALE_VERSION;
{* values for the flags, the stuff on the command line is different *}
SWS_FAST_BILINEAR = 1;
SWS_BILINEAR = 2;
SWS_BICUBIC = 4;
SWS_X = 8;
SWS_POINT = $10;
SWS_AREA = $20;
SWS_BICUBLIN = $40;
SWS_GAUSS = $80;
SWS_SINC = $100;
SWS_LANCZOS = $200;
SWS_SPLINE = $400;
SWS_SRC_V_CHR_DROP_MASK = $30000;
SWS_SRC_V_CHR_DROP_SHIFT = 16;
SWS_PARAM_DEFAULT = 123456;
SWS_PRINT_INFO = $1000;
//the following 3 flags are not completely implemented
//internal chrominace subsampling info
SWS_FULL_CHR_H_INT = $2000;
//input subsampling info
SWS_FULL_CHR_H_INP = $4000;
SWS_DIRECT_BGR = $8000;
SWS_ACCURATE_RND = $40000;
SWS_CPU_CAPS_MMX = $80000000;
SWS_CPU_CAPS_MMX2 = $20000000;
SWS_CPU_CAPS_3DNOW = $40000000;
SWS_CPU_CAPS_ALTIVEC = $10000000;
SWS_CPU_CAPS_BFIN = $01000000;
SWS_MAX_REDUCE_CUTOFF = 0.002;
SWS_CS_ITU709 = 1;
SWS_CS_FCC = 4;
SWS_CS_ITU601 = 5;
SWS_CS_ITU624 = 5;
SWS_CS_SMPTE170M = 5;
SWS_CS_SMPTE240M = 7;
SWS_CS_DEFAULT = 5;
type
// when used for filters they must have an odd number of elements
// coeffs cannot be shared between vectors
PSwsVector = ^TSwsVector;
TSwsVector = record
coeff: Pdouble;
length: integer;
end;
// vectors can be shared
PSwsFilter = ^TSwsFilter;
TSwsFilter = record
lumH: PSwsVector;
lumV: PSwsVector;
chrH: PSwsVector;
chrV: PSwsVector;
end;
PSwsContext = ^TSwsContext;
TSwsContext = record
av_class: Pointer;
swScale: Pointer;
srxW,srcH, dstH: integer;
chrSrcW, chrSrcH, chrDstW, chrDstH: integer;
lumXInc, chrXInc, lumYInc, chrYInc: integer;
dstFormat, srcFormat, origDstFormat, origSrcFormat: integer;
chrSrcHSubSample, chrSrcVSubSample, chrIntHSubSample, chrIntVSubSample: integer;
chrDstHSubSample, chrDstVSubSample: integer;
vChrDrop, sliceDir: integer;
param: array[0..1] of double;
{internal structure}
end;
procedure sws_freeContext(swsContext: PSwsContext);
cdecl; external sw__scale;
function sws_getContext(srcW: integer; srcH: integer; srcFormat: integer; dstW: integer; dstH: integer;dstFormat: integer; flags: integer;
srcFilter: PSwsFilter; dstFilter: PSwsFilter; param: Pdouble): PSwsContext;
cdecl; external sw__scale;
function sws_scale(context: PSwsContext; src: PPByteArray; srcStride: PIntArray; srcSliceY: integer; srcSliceH: integer;
dst: PPByteArray; dstStride: PIntArray): integer;
cdecl; external sw__scale;
function sws_scale_ordered(context: PSwsContext; src: PPByteArray; srcStride: PIntArray; srcSliceY: integer;
srcSliceH: integer; dst: PPByteArray; dstStride: PIntArray): integer;
cdecl; external sw__scale; deprecated;
function sws_setColorspaceDetails(c: PSwsContext; inv_table: PQuadIntArray; srcRange: integer; table: PQuadIntArray; dstRange: integer;
brightness: integer; contrast: integer; saturation: integer): integer;
cdecl; external sw__scale;
function sws_getColorspaceDetails(c: PSwsContext; var inv_table: PQuadIntArray; var srcRange: integer; var table: PQuadIntArray; var dstRange: integer;
var brightness: integer; var contrast: integer; var saturation: integer): integer;
cdecl; external sw__scale;
function sws_getGaussianVec(variance: double; quality: double): PSwsVector;
cdecl; external sw__scale;
function sws_getConstVec(c: double; length: integer): PSwsVector;
cdecl; external sw__scale;
function sws_getIdentityVec: PSwsVector;
cdecl; external sw__scale;
procedure sws_scaleVec(a: PSwsVector; scalar: double);
cdecl; external sw__scale;
procedure sws_normalizeVec(a: PSwsVector; height: double);
cdecl; external sw__scale;
procedure sws_convVec(a: PSwsVector; b: PSwsVector);
cdecl; external sw__scale;
procedure sws_addVec(a: PSwsVector; b: PSwsVector);
cdecl; external sw__scale;
procedure sws_subVec(a: PSwsVector; b: PSwsVector);
cdecl; external sw__scale;
procedure sws_shiftVec(a: PSwsVector; shift: integer);
cdecl; external sw__scale;
function sws_cloneVec(a: PSwsVector): PSwsVector;
cdecl; external sw__scale;
procedure sws_printVec(a: PSwsVector);
cdecl; external sw__scale;
procedure sws_freeVec(a: PSwsVector);
cdecl; external sw__scale;
function sws_getDefaultFilter(lumaGBlur: single; chromaGBlur: single; lumaSarpen: single; chromaSharpen: single; chromaHShift: single;
chromaVShift: single; verbose: integer): PSwsFilter;
cdecl; external sw__scale;
procedure sws_freeFilter(filter: PSwsFilter);
cdecl; external sw__scale;
function sws_getCachedContext(context: PSwsContext;
srcW: integer; srcH: integer; srcFormat: integer;
dstW: integer; dstH: integer; dstFormat: integer; flags: integer;
srcFilter: PSwsFilter; dstFilter: PSwsFilter; param: Pdouble): PSwsContext;
cdecl; external sw__scale;
implementation
end.