* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+
+/**
+ * @file imgconvert.c
+ * Misc image convertion routines.
+ */
+
+
#include "avcodec.h"
#include "dsputil.h"
typedef struct PixFmtInfo {
const char *name;
- UINT8 nb_components; /* number of components in AVPicture array */
- UINT8 is_yuv : 1; /* true if YUV instead of RGB color space */
- UINT8 is_packed : 1; /* true if multiple components in same word */
- UINT8 is_paletted : 1; /* true if paletted */
- UINT8 is_alpha : 1; /* true if alpha can be specified */
- UINT8 is_gray : 1; /* true if gray or monochrome format */
- UINT8 x_chroma_shift; /* X chroma subsampling factor is 2 ^ shift */
- UINT8 y_chroma_shift; /* Y chroma subsampling factor is 2 ^ shift */
+ uint8_t nb_components; /* number of components in AVPicture array */
+ uint8_t is_yuv : 1; /* true if YUV instead of RGB color space */
+ uint8_t is_packed : 1; /* true if multiple components in same word */
+ uint8_t is_paletted : 1; /* true if paletted */
+ uint8_t is_alpha : 1; /* true if alpha can be specified */
+ uint8_t is_gray : 1; /* true if gray or monochrome format */
+ uint8_t x_chroma_shift; /* X chroma subsampling factor is 2 ^ shift */
+ uint8_t y_chroma_shift; /* Y chroma subsampling factor is 2 ^ shift */
} PixFmtInfo;
/* this table gives more information about formats */
}
/* Picture field are filled with 'ptr' addresses. Also return size */
-int avpicture_fill(AVPicture *picture, UINT8 *ptr,
+int avpicture_fill(AVPicture *picture, uint8_t *ptr,
int pix_fmt, int width, int height)
{
int size, w2, h2, size2;
static void yuv422_to_yuv420p(AVPicture *dst, AVPicture *src,
int width, int height)
{
- UINT8 *lum, *cb, *cr;
+ uint8_t *lum, *cb, *cr;
int x, y;
- const UINT8 *p;
+ const uint8_t *p;
lum = dst->data[0];
cb = dst->data[1];
/* XXX: use generic filter ? */
/* 1x2 -> 1x1 */
-static void shrink2(UINT8 *dst, int dst_wrap,
- UINT8 *src, int src_wrap,
+static void shrink2(uint8_t *dst, int dst_wrap,
+ uint8_t *src, int src_wrap,
int width, int height)
{
int w;
- UINT8 *s1, *s2, *d;
+ uint8_t *s1, *s2, *d;
for(;height > 0; height--) {
s1 = src;
}
/* 2x2 -> 1x1 */
-static void shrink22(UINT8 *dst, int dst_wrap,
- UINT8 *src, int src_wrap,
+static void shrink22(uint8_t *dst, int dst_wrap,
+ uint8_t *src, int src_wrap,
int width, int height)
{
int w;
- UINT8 *s1, *s2, *d;
+ uint8_t *s1, *s2, *d;
for(;height > 0; height--) {
s1 = src;
}
/* 1x1 -> 2x2 */
-static void grow22(UINT8 *dst, int dst_wrap,
- UINT8 *src, int src_wrap,
+static void grow22(uint8_t *dst, int dst_wrap,
+ uint8_t *src, int src_wrap,
int width, int height)
{
int w;
- UINT8 *s1, *d;
+ uint8_t *s1, *d;
for(;height > 0; height--) {
s1 = src;
}
/* 1x2 -> 2x1 */
-static void conv411(UINT8 *dst, int dst_wrap,
- UINT8 *src, int src_wrap,
+static void conv411(uint8_t *dst, int dst_wrap,
+ uint8_t *src, int src_wrap,
int width, int height)
{
int w, c;
- UINT8 *s1, *s2, *d;
+ uint8_t *s1, *s2, *d;
for(;height > 0; height--) {
s1 = src;
}
}
-static void img_copy(UINT8 *dst, int dst_wrap,
- UINT8 *src, int src_wrap,
+static void img_copy(uint8_t *dst, int dst_wrap,
+ uint8_t *src, int src_wrap,
int width, int height)
{
for(;height > 0; height--) {
static void yuv420p_to_ ## rgb_name (AVPicture *dst, AVPicture *src, \
int width, int height) \
{ \
- UINT8 *y1_ptr, *y2_ptr, *cb_ptr, *cr_ptr, *d, *d1, *d2; \
+ uint8_t *y1_ptr, *y2_ptr, *cb_ptr, *cr_ptr, *d, *d1, *d2; \
int w, y, cb, cr, r_add, g_add, b_add, width2; \
- UINT8 *cm = cropTbl + MAX_NEG_CROP; \
+ uint8_t *cm = cropTbl + MAX_NEG_CROP; \
unsigned int r, g, b; \
\
d = dst->data[0]; \
static void yuv422p_to_ ## rgb_name (AVPicture *dst, AVPicture *src, \
int width, int height) \
{ \
- UINT8 *y1_ptr, *cb_ptr, *cr_ptr, *d, *d1; \
+ uint8_t *y1_ptr, *cb_ptr, *cr_ptr, *d, *d1; \
int w, y, cb, cr, r_add, g_add, b_add, width2; \
- UINT8 *cm = cropTbl + MAX_NEG_CROP; \
+ uint8_t *cm = cropTbl + MAX_NEG_CROP; \
unsigned int r, g, b; \
\
d = dst->data[0]; \
{ \
int wrap, wrap3, x, y; \
int r, g, b, r1, g1, b1; \
- UINT8 *lum, *cb, *cr; \
- const UINT8 *p; \
+ uint8_t *lum, *cb, *cr; \
+ const uint8_t *p; \
\
lum = dst->data[0]; \
cb = dst->data[1]; \
#define RGB_IN(r, g, b, s)\
{\
- unsigned int v = ((const UINT16 *)(s))[0];\
+ unsigned int v = ((const uint16_t *)(s))[0];\
r = bitcopy_n(v >> (10 - 3), 3);\
g = bitcopy_n(v >> (5 - 3), 3);\
b = bitcopy_n(v << 3, 3);\
#define RGB_OUT(d, r, g, b)\
{\
- ((UINT16 *)(d))[0] = ((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3) | 0x8000;\
+ ((uint16_t *)(d))[0] = ((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3) | 0x8000;\
}
#define BPP 2
#define RGB_IN(r, g, b, s)\
{\
- unsigned int v = ((const UINT16 *)(s))[0];\
+ unsigned int v = ((const uint16_t *)(s))[0];\
r = bitcopy_n(v >> (11 - 3), 3);\
g = bitcopy_n(v >> (5 - 2), 2);\
b = bitcopy_n(v << 3, 3);\
#define RGB_OUT(d, r, g, b)\
{\
- ((UINT16 *)(d))[0] = ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3);\
+ ((uint16_t *)(d))[0] = ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3);\
}
#define BPP 2
#define RGB_IN(r, g, b, s)\
{\
- unsigned int v = ((const UINT32 *)(s))[0];\
+ unsigned int v = ((const uint32_t *)(s))[0];\
r = (v >> 16) & 0xff;\
g = (v >> 8) & 0xff;\
b = v & 0xff;\
#define RGB_OUT(d, r, g, b)\
{\
- ((UINT32 *)(d))[0] = (0xff << 24) | (r << 16) | (g << 8) | b;\
+ ((uint32_t *)(d))[0] = (0xff << 24) | (r << 16) | (g << 8) | b;\
}
#define BPP 4
int width, int height, int xor_mask)
{
int n;
- const UINT8 *s;
- UINT8 *d;
+ const uint8_t *s;
+ uint8_t *d;
int j, b, v, n1, src_wrap, dst_wrap, y;
s = src->data[0];
}
/* this is maybe slow, but allows for extensions */
-static inline unsigned char gif_clut_index(UINT8 r, UINT8 g, UINT8 b)
+static inline unsigned char gif_clut_index(uint8_t r, uint8_t g, uint8_t b)
{
return ((((r)/47)%6)*6*6+(((g)/47)%6)*6+(((b)/47)%6));
}
/* YUV to YUV */
if (dst_pix->is_yuv && src_pix->is_yuv) {
int x_shift, y_shift, w, h;
- void (*resize_func)(UINT8 *dst, int dst_wrap,
- UINT8 *src, int src_wrap,
+ void (*resize_func)(uint8_t *dst, int dst_wrap,
+ uint8_t *src, int src_wrap,
int width, int height);
/* compute chroma size of the smallest dimensions */
for(i = 1;i <= 2; i++)
resize_func(dst->data[i], dst->linesize[i],
src->data[i], src->linesize[i],
- w, h);
+ dst_width>>dst_pix->x_chroma_shift, dst_height>>dst_pix->y_chroma_shift);
return 0;
}
#endif
/* filter parameters: [-1 4 2 4 -1] // 8 */
-static void deinterlace_line(UINT8 *dst, UINT8 *lum_m4, UINT8 *lum_m3, UINT8 *lum_m2, UINT8 *lum_m1, UINT8 *lum,
+static void deinterlace_line(uint8_t *dst, uint8_t *lum_m4, uint8_t *lum_m3, uint8_t *lum_m2, uint8_t *lum_m1, uint8_t *lum,
int size)
{
#ifndef HAVE_MMX
- UINT8 *cm = cropTbl + MAX_NEG_CROP;
+ uint8_t *cm = cropTbl + MAX_NEG_CROP;
int sum;
for(;size > 0;size--) {
}
#endif
}
-static void deinterlace_line_inplace(UINT8 *lum_m4, UINT8 *lum_m3, UINT8 *lum_m2, UINT8 *lum_m1, UINT8 *lum,
+static void deinterlace_line_inplace(uint8_t *lum_m4, uint8_t *lum_m3, uint8_t *lum_m2, uint8_t *lum_m1, uint8_t *lum,
int size)
{
#ifndef HAVE_MMX
- UINT8 *cm = cropTbl + MAX_NEG_CROP;
+ uint8_t *cm = cropTbl + MAX_NEG_CROP;
int sum;
for(;size > 0;size--) {
/* deinterlacing : 2 temporal taps, 3 spatial taps linear filter. The
top field is copied as is, but the bottom field is deinterlaced
against the top field. */
-static void deinterlace_bottom_field(UINT8 *dst, int dst_wrap,
- UINT8 *src1, int src_wrap,
+static void deinterlace_bottom_field(uint8_t *dst, int dst_wrap,
+ uint8_t *src1, int src_wrap,
int width, int height)
{
- UINT8 *src_m2, *src_m1, *src_0, *src_p1, *src_p2;
+ uint8_t *src_m2, *src_m1, *src_0, *src_p1, *src_p2;
int y;
src_m2 = src1;
deinterlace_line(dst,src_m2,src_m1,src_0,src_0,src_0,width);
}
-static void deinterlace_bottom_field_inplace(UINT8 *src1, int src_wrap,
+static void deinterlace_bottom_field_inplace(uint8_t *src1, int src_wrap,
int width, int height)
{
- UINT8 *src_m1, *src_0, *src_p1, *src_p2;
+ uint8_t *src_m1, *src_0, *src_p1, *src_p2;
int y;
- UINT8 *buf;
- buf = (UINT8*)av_malloc(width);
+ uint8_t *buf;
+ buf = (uint8_t*)av_malloc(width);
src_m1 = src1;
memcpy(buf,src_m1,width);