Public feed
#533176
void yuv420p_to_ppm(FILE * fpin, FILE * fpout, unsigned char *buff_image)
{
uint32_t pixel32;
unsigned char *buffer, *src, *buffout;
int depth = 24;
int y=0, u=0, v=0;
size_t i=0;
int k=0;
rgb_map_t rgb_map = { 0, 1, 2 };
//rewind(fpout);
struct timeval tvstart;
struct timeval tvfinish;
unsigned char *pixels;
char *header = (char *) malloc(strlen("P6\n%d %d 255\n") + 1);
gettimeofday(&tvstart, NULL);
buffer = (unsigned char *) malloc((g_win.width * g_win.height * depth));
//buffout = (unsigned char *) malloc((g_win.width * g_win.height * depth));
//buffout[0] = '\0';
// This should go into another function
i = 0;
size_t bytesread;
read(g_fdin, buffer, g_win.width * g_win.height * depth);
gettimeofday(&tvfinish, NULL);
fprintf(stderr, "capture in:%ld ms\n", (tvfinish.tv_usec - tvstart.tv_usec)/1000);
src = buffer;
//sprintf(header, "P6\n%d %d 255\n", g_win.width, g_win.height);
//memcpy(buffout, header, strlen(header));
//k = strlen(header);
k =0;
for (i = 0; i < g_win.width * g_win.height; i++)
{
if(i == 0)
{
src = buffer + (g_win.width*g_win.height);
}
y = buffer[i];
u = src[(i/2)%(g_win.width/2)];
v = src[(g_win.width*g_win.height)/4 + (i/2)%(g_win.width/2)];
if(i && (i%(g_win.width*4)) == 0)
{
src += g_win.width;
}
pixel32 = yuv2rgb(y, u, v);
pixels = (unsigned char *)&pixel32;
//buffout[++k] = pixels[rgb_map.r];
//buffout[++k] = pixels[rgb_map.g];
//buffout[++k] = pixels[rgb_map.b];
buff_image[++k] = pixels[rgb_map.r];
buff_image[++k] = pixels[rgb_map.g];
buff_image[++k] = pixels[rgb_map.b];
}
//memcpy(buff_image, buffout, k);
//fwrite (buffout , k,1 , fpout );
//fprintf(fpout, "%s", buffout);
//free(header);
//free(buffout);
free(buffer);
//rewind(fpout);
gettimeofday(&tvfinish, NULL);
fprintf(stderr, "image conversion in:%ld ms\n", (tvfinish.tv_usec - tvstart.tv_usec)/1000);
}