00001
00002
00003 #include "ccvt.h"
00004 #include "conv.h"
00005
00006
00007 void conv_420p_rgb96(int width,int height,void* src,void* dst)
00008 {
00009 static unsigned int oldSize = 0;
00010 static unsigned char* rgb;
00011
00012 unsigned int size = width * height;
00013
00014
00015 if (oldSize < size) {
00016 delete [] rgb;
00017 rgb = new (unsigned char)[size * 4];
00018 }
00019
00020
00021 unsigned char *s = (unsigned char *)src;
00022 int *d = (int *)dst;
00023
00024 static unsigned int offset_U = size;
00025 static unsigned int offset_V = size + size / 4;
00026
00027 unsigned char* Y = s;
00028 unsigned char* U = s + offset_U;
00029 unsigned char* V = s + offset_V;
00030
00031
00032 ccvt_420p_rgb32(width, height, Y, U, V, rgb);
00033 conv_rgb32_rgb96(width, height, rgb, d);
00034 }
00035
00036
00037 void conv_420p_grey(int width,int height,void *src,void *dst)
00038 {
00039 unsigned char *s = (unsigned char *)src;
00040 int *d = (int *)dst;
00041
00042 unsigned int size = width * height;
00043
00044 for (unsigned int i = 0; i < size; i++) *(d++) = *(s++);
00045 }
00046
00047
00048 void conv_rgb24_rgb96(int width, int height, void *src, void *dst)
00049 {
00050 unsigned char** rows = (unsigned char**) src;
00051 unsigned char* s;
00052 int* d = (int*) dst;
00053
00054 for (int j = 0; j < height; j++) {
00055 s = rows[j];
00056
00057 for (int i = 0; i < width; i++) {
00058 *(d++) = *(s++);
00059 *(d++) = *(s++);
00060 *(d++) = *(s++);
00061 }
00062 }
00063 }
00064
00065
00066 void conv_rgb32_rgb96(int width,int height,void *src,void *dst)
00067 {
00068 unsigned char *s = (unsigned char *)src;
00069 int *d = (int *)dst;
00070
00071 unsigned int size = width * height;
00072
00073 for (unsigned int i = 0; i < size; i++, s++) {
00074 *(d++) = *(s++);
00075 *(d++) = *(s++);
00076 *(d++) = *(s++);
00077 }
00078 }
00079
00080
00081 void conv_rgb32_grey(int width,int height,void* src,void* dst)
00082 {
00083 unsigned char *s = (unsigned char *)src;
00084 int *d = (int *)dst;
00085
00086 unsigned int size = width * height;
00087
00088 for (unsigned int i = 0; i < size; i++, s++)
00089 *(d++) = (*(s++) + *(s++) + *(s++)) / 3;
00090 }
00091