Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 355043
Collapse All | Expand All

(-)lavtools/png2yuv.c.orig (-12 / +20 lines)
Lines 78-83 png_structp png_ptr; Link Here
78
png_infop info_ptr, end_info;
78
png_infop info_ptr, end_info;
79
uint8_t *raw0, *raw1, *raw2;  /* buffer for RGB first, and then Y/Cb/Cr planes of decoded PNG */
79
uint8_t *raw0, *raw1, *raw2;  /* buffer for RGB first, and then Y/Cb/Cr planes of decoded PNG */
80
80
81
static int png_row_number = 0;
82
81
/*
83
/*
82
 * The User Interface parts 
84
 * The User Interface parts 
83
 */
85
 */
Lines 240-248 static void parse_commandline(int argc, Link Here
240
    }
242
    }
241
}
243
}
242
244
245
void read_row_callback(png_structp ptr, png_uint_32 row, int pass)
246
{
247
  png_row_number++;
248
}
249
243
void png_separation(png_structp png_ptr, png_row_infop row_info, png_bytep data)
250
void png_separation(png_structp png_ptr, png_row_infop row_info, png_bytep data)
244
{
251
{
245
  int row_nr = png_ptr->row_number; // internal variable ? 
246
  int i, width = row_info->width; 
252
  int i, width = row_info->width; 
247
  int new_width = sh_param->new_width;
253
  int new_width = sh_param->new_width;
248
254
Lines 256-283 void png_separation(png_structp png_ptr, Link Here
256
   */
262
   */
257
263
258
  //mjpeg_debug("PNG YUV transformation callback; color_type is %d row_number %d\n", 
264
  //mjpeg_debug("PNG YUV transformation callback; color_type is %d row_number %d\n", 
259
  //	 row_info->color_type, row_nr);
265
  //	 row_info->color_type, png_row_number);
260
266
261
  if(row_info->color_type == PNG_COLOR_TYPE_GRAY) // only Z available
267
  if(row_info->color_type == PNG_COLOR_TYPE_GRAY) // only Z available
262
    {
268
    {
263
      //mjpeg_debug("Grayscale to YUV, row %d", row_nr);
269
      //mjpeg_debug("Grayscale to YUV, row %d", png_row_number);
264
      for (i = 0; i < width; i++)
270
      for (i = 0; i < width; i++)
265
	{
271
	{
266
	  raw0[i + row_nr * new_width] = data[i];
272
	  raw0[i + png_row_number * new_width] = data[i];
267
	  raw1[i + row_nr * new_width] = data[i];
273
	  raw1[i + png_row_number * new_width] = data[i];
268
	  raw2[i + row_nr * new_width] = data[i];
274
	  raw2[i + png_row_number * new_width] = data[i];
269
	}
275
	}
270
      return;
276
      return;
271
    }
277
    }
272
278
273
  if(row_info->color_type == PNG_COLOR_TYPE_RGB) // Z and Alpha available
279
  if(row_info->color_type == PNG_COLOR_TYPE_RGB) // Z and Alpha available
274
    {
280
    {
275
      //mjpeg_info("RGB to YUV, row %d", row_nr);
281
      //mjpeg_info("RGB to YUV, row %d", png_row_number);
276
      for (i = 0; i < width; i++)
282
      for (i = 0; i < width; i++)
277
	{
283
	{
278
	  raw0[i + row_nr * new_width] = data[i*3];
284
	  raw0[i + png_row_number * new_width] = data[i*3];
279
	  raw1[i + row_nr * new_width] = data[i*3 + 1];
285
	  raw1[i + png_row_number * new_width] = data[i*3 + 1];
280
	  raw2[i + row_nr * new_width] = data[i*3 + 2];
286
	  raw2[i + png_row_number * new_width] = data[i*3 + 2];
281
	}
287
	}
282
      return;
288
      return;
283
    }
289
    }
Lines 352-359 int decode_png(const char *pngname, int Link Here
352
      return -1;
358
      return -1;
353
    }
359
    }
354
  
360
  
355
  if (process)
361
  if (process) {
362
    png_set_read_status_fn(png_ptr, read_row_callback);
356
    png_set_read_user_transform_fn(png_ptr, png_separation);
363
    png_set_read_user_transform_fn(png_ptr, png_separation);
364
  }
357
  png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_STRIP_16 | PNG_TRANSFORM_STRIP_ALPHA, NULL);
365
  png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_STRIP_16 | PNG_TRANSFORM_STRIP_ALPHA, NULL);
358
  
366
  
359
  if (png_get_IHDR(png_ptr, info_ptr, &param->width, &param->height, &bit_depth,
367
  if (png_get_IHDR(png_ptr, info_ptr, &param->width, &param->height, &bit_depth,
Lines 402-408 int decode_png(const char *pngname, int Link Here
402
    }
410
    }
403
  png_read_end(png_ptr, info_ptr);
411
  png_read_end(png_ptr, info_ptr);
404
#endif  
412
#endif  
405
  if (setjmp(png_ptr->jmpbuf)) {
413
  if (setjmp(png_jmpbuf(png_ptr))) {
406
    png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
414
    png_destroy_read_struct(&png_ptr, &info_ptr, &end_info);
407
    return 2;
415
    return 2;
408
    }
416
    }

Return to bug 355043