221 lines
5.9 KiB
C
Executable File
221 lines
5.9 KiB
C
Executable File
/*****************************************************************************
|
|
*
|
|
* This program is free software ; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program 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 General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*
|
|
* $Id: video.h 585 2006-01-16 09:48:55Z picard $
|
|
*
|
|
* The Core Pocket Media Player
|
|
* Copyright (c) 2004-2005 Gabor Kovacs
|
|
*
|
|
****************************************************************************/
|
|
|
|
#ifndef __VIDEO_H
|
|
#define __VIDEO_H
|
|
|
|
//---------------------------------------------------------------
|
|
//pixelformat flags
|
|
#define PF_FOURCC 0x0001
|
|
#define PF_PALETTE 0x0002
|
|
#define PF_RGB 0x0004
|
|
#define PF_YUV 0x0008
|
|
#define PF_INVERTED 0x0020
|
|
#define PF_READONLY 0x0040
|
|
#define PF_FRAGMENTED 0x0080
|
|
#define PF_PIXELDOUBLE 0x0100
|
|
#define PF_16BITACCESS 0x0200
|
|
#define PF_16ALIGNED 0x0400
|
|
#define PF_SAFEBORDER 0x0800
|
|
#define PF_NOPREROTATE 0x4000
|
|
#define PF_GRAYSCALE 0x8000
|
|
#define PF_PTS 0x20000
|
|
#define PV_YUV_TV 0x00000
|
|
#define PF_YUV_PC 0x40000
|
|
#define PF_YUV_BT601 0x00000
|
|
#define PF_YUV_BT709 0x80000
|
|
|
|
#define PF_YUV420 0x0010
|
|
#define PF_YUV422 0x1000
|
|
#define PF_YUV444 0x2000
|
|
#define PF_YUV410 0x10000
|
|
|
|
//---------------------------------------------------------------
|
|
//private rgb fourcc
|
|
#define FOURCC_RGB32 FOURCC('R','3','2','_')
|
|
#define FOURCC_RGB24 FOURCC('R','2','4','_')
|
|
#define FOURCC_RGB16 FOURCC('R','1','6','_')
|
|
#define FOURCC_RGB15 FOURCC('R','1','5','_')
|
|
|
|
#define FOURCC_BGR32 FOURCC('B','3','2','_')
|
|
#define FOURCC_BGR24 FOURCC('B','2','4','_')
|
|
#define FOURCC_BGR16 FOURCC('B','1','6','_')
|
|
#define FOURCC_BGR15 FOURCC('B','1','5','_')
|
|
|
|
//---------------------------------------------------------------
|
|
//planar YUV420 formats
|
|
#define FOURCC_YV12 FOURCC('Y','V','1','2')
|
|
#define FOURCC_IYUV FOURCC('I','Y','U','V')
|
|
#define FOURCC_I420 FOURCC('I','4','2','0')
|
|
#define FOURCC_IMC2 FOURCC('I','M','C','2')
|
|
#define FOURCC_IMC4 FOURCC('I','M','C','4')
|
|
|
|
//planar YUV422 formats
|
|
#define FOURCC_YV16 FOURCC('Y','V','1','6')
|
|
|
|
//planar YUV410 formats
|
|
#define FOURCC_YVU9 FOURCC('Y','V','U','9')
|
|
#define FOURCC_YUV9 FOURCC('Y','U','V','9')
|
|
|
|
//---------------------------------------------------------------
|
|
//packed YUV formats
|
|
#define FOURCC_YUY2 FOURCC('Y','U','Y','2')
|
|
#define FOURCC_YUNV FOURCC('Y','U','N','V')
|
|
#define FOURCC_V422 FOURCC('V','4','2','2')
|
|
#define FOURCC_YUYV FOURCC('Y','U','Y','V')
|
|
#define FOURCC_YVYU FOURCC('Y','V','Y','U')
|
|
#define FOURCC_UYVY FOURCC('U','Y','V','Y')
|
|
#define FOURCC_Y422 FOURCC('Y','4','2','2')
|
|
#define FOURCC_UYNV FOURCC('U','Y','N','V')
|
|
#define FOURCC_VYUY FOURCC('V','Y','U','Y')
|
|
|
|
//---------------------------------------------------------------
|
|
//direction flags
|
|
#define DIR_SWAPXY 0x001
|
|
#define DIR_MIRRORLEFTRIGHT 0x002
|
|
#define DIR_MIRRORUPDOWN 0x004
|
|
|
|
//---------------------------------------------------------------
|
|
//vide caps
|
|
#define VC_DITHER 0x0001
|
|
#define VC_BRIGHTNESS 0x0002
|
|
#define VC_CONTRAST 0x0004
|
|
#define VC_SATURATION 0x0008
|
|
#define VC_RGBADJUST 0x0010
|
|
|
|
#define SCALE_ONE (1<<16)
|
|
#define ASPECT_ONE (1<<16)
|
|
#define ASPECT_RATIO(num,den) ((int)(((int64_t)num<<16)/den))
|
|
|
|
typedef uint32_t rgbval_t;
|
|
|
|
#define CRGB(r,g,b) INT32LE((r)|((g)<<8)|((b)<<16))
|
|
|
|
#define RGB_NULL ((rgbval_t)-1)
|
|
|
|
typedef union rgb
|
|
{
|
|
struct
|
|
{
|
|
uint8_t r;
|
|
uint8_t g;
|
|
uint8_t b;
|
|
uint8_t a;
|
|
} c;
|
|
uint8_t ch[4];
|
|
rgbval_t v;
|
|
|
|
} rgb;
|
|
|
|
typedef struct point
|
|
{
|
|
int x;
|
|
int y;
|
|
|
|
} point;
|
|
|
|
typedef struct rect
|
|
{
|
|
int x;
|
|
int y;
|
|
int Width;
|
|
int Height;
|
|
|
|
} rect;
|
|
|
|
typedef struct pixel
|
|
{
|
|
int Flags;
|
|
uint32_t FourCC;
|
|
int BitCount;
|
|
uint32_t BitMask[3];
|
|
rgb *Palette;
|
|
|
|
} pixel;
|
|
|
|
typedef struct video
|
|
{
|
|
int Direction; // direction flags
|
|
int Aspect; // 16.16 fixed point
|
|
int Width; // phyisical width of surface
|
|
int Height; // phyisical height of surface
|
|
int Pitch;
|
|
pixel Pixel;
|
|
|
|
} video;
|
|
|
|
//---------------------------------------------------------------
|
|
|
|
#define VBUFFER_ID FOURCC('V','B','U','F')
|
|
|
|
//---------------------------------------------------------------
|
|
// video output (abstract)
|
|
|
|
#define VOUT_CLASS FOURCC('V','O','U','T')
|
|
#define VOUT_IDCT_CLASS(n) INT32BE((INT32BE(n) & ~0xFF)|'I')
|
|
|
|
// primary display (bool_t readonly)
|
|
#define VOUT_PRIMARY 0x70
|
|
// hardware accelerated idct (idct* readonly)
|
|
#define VOUT_IDCT 0x74
|
|
// allow showahead display or not
|
|
#define VOUT_PLAY 0x7D
|
|
// blit fx options (blitfx)
|
|
#define VOUT_FX 0x75
|
|
// window handle (int)
|
|
#define VOUT_WND 0x76
|
|
// overlay visible (bool_t)
|
|
#define VOUT_VISIBLE 0x77
|
|
// gui clipping needed (bool_t)
|
|
#define VOUT_CLIPPING 0x7F
|
|
// viewport rectangle (rect)
|
|
#define VOUT_VIEWPORT 0x78
|
|
// actuall output rectangle (rect readonly)
|
|
#define VOUT_OUTPUTRECT 0x79
|
|
// color key (rgb)
|
|
#define VOUT_COLORKEY 0x7A
|
|
// prerotate portrait input
|
|
#define VOUT_AUTOPREROTATE 0x7C
|
|
// aspect ratio
|
|
#define VOUT_ASPECT 0x81
|
|
// reset
|
|
#define VOUT_RESET 0x80
|
|
// voutput caps
|
|
#define VOUT_CAPS 0x84
|
|
// begin/end update (bool_t)
|
|
#define VOUT_UPDATING 0x85
|
|
// overlay display (bool_t readonly)
|
|
#define VOUT_OVERLAY 0x86
|
|
// fullscren
|
|
#define VOUT_FULLSCREEN 0x87
|
|
|
|
#define VOUT_ERROR_SIZE 0x100
|
|
|
|
void Video_Init();
|
|
void Video_Done();
|
|
|
|
int VOutEnum(void* p, int* No, datadef* Param);
|
|
DLL bool_t VOutIDCT(int Class);
|
|
|
|
#endif
|