xine-lib: xine-lib-1.2.13/src/xine-utils/yuv2rgb.h Source File

xine-lib 1.2.13-20230125hg15249

yuv2rgb.h
Go to the documentation of this file.
1/*
2 * yuv2rgb.h
3 *
4 * Copyright (C) 2001-2018 the xine project
5 * This file is part of xine, a free video player.
6 *
7 * based on work from mpeg2dec:
8 * Copyright (C) 1999-2001 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
9 *
10 * This file is part of mpeg2dec, a free MPEG-2 video stream decoder.
11 *
12 * mpeg2dec is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
16 *
17 * mpeg2dec is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
25 */
26
27#ifndef XINE_YUV2RGB_H
28#define XINE_YUV2RGB_H
29
30#include <inttypes.h>
31
32#include <xine/attributes.h>
33
34 typedef struct yuv2rgb_s yuv2rgb_t;
35
36 typedef struct yuv2rgb_factory_s yuv2rgb_factory_t;
37
38/*
39 * function types for functions which can be replaced
40 * by hardware-accelerated versions
41 */
42
43 typedef void (*yuv2rgb_fun_t) (yuv2rgb_t *this,
44 uint8_t *restrict image,
45 const uint8_t *restrict py,
46 const uint8_t *restrict pu,
47 const uint8_t *restrict pv);
48
49 typedef void (*yuy22rgb_fun_t) (yuv2rgb_t *this,
50 uint8_t *restrict image,
51 const uint8_t *restrict p);
52
53 typedef uint32_t (*yuv2rgb_single_pixel_fun_t) (yuv2rgb_t *this, uint8_t y, uint8_t u, uint8_t v);
54
55/*
56 * modes supported - feel free to implement yours
57 */
58
59#define MODE_8_RGB 1
60#define MODE_8_BGR 2
61#define MODE_15_RGB 3
62#define MODE_15_BGR 4
63#define MODE_16_RGB 5
64#define MODE_16_BGR 6
65#define MODE_24_RGB 7
66#define MODE_24_BGR 8
67#define MODE_32_RGB 9
68#define MODE_32_BGR 10
69#define MODE_8_GRAY 11
70#define MODE_PALETTE 12
71
72/*
73 * colormatrix values - (mpeg_matrix_index << 1) | fullrange
74 */
75
76#define CM_DEFAULT 10
77#define CM_SD 10
78#define CM_HD 2
79#define CM_FULLRANGE 1
80
81 struct yuv2rgb_s {
82 /*
83 * configure converter for scaling factors
84 */
85 int (*configure) (yuv2rgb_t *this,
86 int source_width, int source_height,
87 int y_stride, int uv_stride,
88 int dest_width, int dest_height,
89 int rgb_stride);
90
91 /*
92 * start a new field or frame if dest is NULL
93 */
94 int (*next_slice) (yuv2rgb_t *this, uint8_t **dest);
95
96 /*
97 * free resources
98 */
99 void (*dispose) (yuv2rgb_t *this);
100
101 /*
102 * this is the function to call for the yuv2rgb and scaling process
103 */
104 yuv2rgb_fun_t yuv2rgb_fun;
105
106 /*
107 * this is the function to call for the yuy2->rgb and scaling process
108 */
109 yuy22rgb_fun_t yuy22rgb_fun;
110
111 /*
112 * this is the function to call for the yuv2rgb for a single pixel
113 * (used for converting clut colors)
114 */
115
116 yuv2rgb_single_pixel_fun_t yuv2rgb_single_pixel_fun;
117};
118
119/*
120 * convenience class to easily create a lot of converters
121 */
122
123 struct yuv2rgb_factory_s {
124 yuv2rgb_t* (*create_converter) (yuv2rgb_factory_t *this);
125
126 /*
127 * set color space conversion levels
128 * for all converters produced by this factory
129 */
130 void (*set_csc_levels) (yuv2rgb_factory_t *this,
131 int brightness, int contrast, int saturation, int colormatrix);
132
133 /*
134 * free resources
135 */
136 void (*dispose) (yuv2rgb_factory_t *this);
137};
138
139 yuv2rgb_factory_t *yuv2rgb_factory_init (int mode, int swapped, const uint8_t *colormap) XINE_PROTECTED;
140
141
142#endif /* XINE_YUV2RGB_H */
restrict
#define restrict
Definition configure.h:972
contrast
contrast
Definition eq.c:160
attributes.h
XINE_PROTECTED
#define XINE_PROTECTED
Definition attributes.h:75
yuv2rgb_factory_s
Definition yuv2rgb.h:123
yuv2rgb_factory_s::dispose
void(* dispose)(yuv2rgb_factory_t *this)
Definition yuv2rgb.h:136
yuv2rgb_factory_s::set_csc_levels
void(* set_csc_levels)(yuv2rgb_factory_t *this, int brightness, int contrast, int saturation, int colormatrix)
Definition yuv2rgb.h:130
yuv2rgb_s
Definition yuv2rgb.h:81
yuv2rgb_s::yuv2rgb_single_pixel_fun
yuv2rgb_single_pixel_fun_t yuv2rgb_single_pixel_fun
Definition yuv2rgb.h:116
yuv2rgb_s::next_slice
int(* next_slice)(yuv2rgb_t *this, uint8_t **dest)
Definition yuv2rgb.h:94
yuv2rgb_s::yuy22rgb_fun
yuy22rgb_fun_t yuy22rgb_fun
Definition yuv2rgb.h:109
yuv2rgb_s::configure
int(* configure)(yuv2rgb_t *this, int source_width, int source_height, int y_stride, int uv_stride, int dest_width, int dest_height, int rgb_stride)
Definition yuv2rgb.h:85
yuv2rgb_s::yuv2rgb_fun
yuv2rgb_fun_t yuv2rgb_fun
Definition yuv2rgb.h:104
yuv2rgb_s::dispose
void(* dispose)(yuv2rgb_t *this)
Definition yuv2rgb.h:99
v
uint32_t v
Definition utils.c:1157
mode
enable disable number of frames of telecine pattern sync required before mode change make frames evenly spaced for film mode(24 fps)" ) PARAM_ITEM( POST_PARAM_TYPE_BOOL
yuv2rgb_factory_init
yuv2rgb_factory_t * yuv2rgb_factory_init(int mode, int swapped, const uint8_t *colormap)
Definition yuv2rgb.c:3399
yuy22rgb_fun_t
void(* yuy22rgb_fun_t)(yuv2rgb_t *this, uint8_t *restrict image, const uint8_t *restrict p)
Definition yuv2rgb.h:49
yuv2rgb_single_pixel_fun_t
uint32_t(* yuv2rgb_single_pixel_fun_t)(yuv2rgb_t *this, uint8_t y, uint8_t u, uint8_t v)
Definition yuv2rgb.h:53
yuv2rgb_fun_t
void(* yuv2rgb_fun_t)(yuv2rgb_t *this, uint8_t *restrict image, const uint8_t *restrict py, const uint8_t *restrict pu, const uint8_t *restrict pv)
Definition yuv2rgb.h:43