24 void readtga(
char * fname,
unsigned char * mem) {
25 unsigned char hdr[40];
28 ifp = fopen(fname,
"r");
30 printf(
"Error opening %s for input!\n", fname);
34 fread(hdr, 18, 1, ifp);
35 fread(mem,
TGASZ, 1, ifp);
40 void writeyuv(
char *fname,
unsigned char * data) {
43 ofp = fopen(fname,
"w+b");
45 fwrite(data,
YUVSZ, 1, ofp);
50 void bgrtoyuv(
unsigned char * bgr,
unsigned char *yuv) {
53 unsigned long y1,y2,u,v,u0,u1,u2,v0,v1,v2;
54 unsigned char * yuvptr;
56 y1=y2=u=v=u0=u1=u2=v0=v1=v2=0;
60 for (t=0; t<(
TGASZ / 3); t+=2) {
67 y1 = 16829 * r + 33039 * g + 6416 * b + (0xffff & y2);
68 u1 = -4853 * r - 9530 * g + 14383 * b;
69 v1 = 14386 * r - 12046 * g - 2340 * b;
76 y2 = 16829 * r + 33039 * g + 6416 * b + (0xffff & y1);
77 u2 = -2426 * r - 4765 * g + 7191 * b;
78 v2 = 7193 * r - 6023 * g - 1170 * b;
81 u = u0 + u1 + u2 + (0xffff & u);
82 v = v0 + v1 + v2 + (0xffff & v);
87 *yuvptr++ = (
unsigned char) ((
unsigned long) (u >> 16) + 128);
88 *yuvptr++ = (
unsigned char) ((
unsigned long) (y1 >> 16) + 16);
89 *yuvptr++ = (
unsigned char) ((
unsigned long) (v >> 16) + 128);
90 *yuvptr++ = (
unsigned char) ((
unsigned long) (y2 >> 16) + 16);
97 int main (
int argc,
char **argv) {
100 unsigned char *tgadata, *yuvdata;
110 MPI_Init(&argc, &argv);
112 MPI_Comm_rank(MPI_COMM_WORLD, &mynode);
113 MPI_Comm_size(MPI_COMM_WORLD, &numnodes);
116 printf(
"Parallel tga to yuv converter\n");
118 MPI_Barrier(MPI_COMM_WORLD);
121 tgadata = malloc(
TGASZ);
122 yuvdata = malloc(
YUVSZ);
125 printf(
"Converting 352x240 .tga files to abekas YUV files...\n");
129 printf(
"Usage is: tgatoyuv basename startframe# endframe# \n");
134 printf(
"Using %s as base filename for frames %s -> %s\n",
135 argv[1], argv[2], argv[3]);
140 for (i=(fs + mynode); i<=fe; i+=numnodes) {
141 sprintf(tganame,
"%s.%04d.tga", argv[1], i);
142 sprintf(yuvname,
"%s.%04d.yuv", argv[1], i);
143 printf(
"converting %s -> %s . . .\n", tganame, yuvname);
151 MPI_Barrier(MPI_COMM_WORLD);
154 printf(
"All nodes complete, all images converted.\n");
int main(int argc, char **argv)
void bgrtoyuv(unsigned char *bgr, unsigned char *yuv)
void readtga(char *fname, unsigned char *mem)
void writeyuv(char *fname, unsigned char *data)