This is an automatic generated email to let you know that the following patch were queued at the http://git.linuxtv.org/cgit.cgi/v4l-utils.git tree:
Subject: jl2005bcd.c: use unix newlines, not dos. Author: Hans Verkuil <[email protected]> Date: Wed Apr 8 11:35:27 2015 +0200 Signed-off-by: Hans Verkuil <[email protected]> lib/libv4lconvert/jl2005bcd.c | 424 ++++++++++++++++++++-------------------- 1 files changed, 212 insertions(+), 212 deletions(-) --- http://git.linuxtv.org/cgit.cgi/v4l-utils.git/commit/?id=dbd63cbffa05b1209e0f4ad087c352a47ec66c72 diff --git a/lib/libv4lconvert/jl2005bcd.c b/lib/libv4lconvert/jl2005bcd.c index 14171a1..d4a7773 100644 --- a/lib/libv4lconvert/jl2005bcd.c +++ b/lib/libv4lconvert/jl2005bcd.c @@ -1,216 +1,216 @@ -/* jl2005bcd.c - * - * Converts raw output from Jeilin JL2005B/C/D to Bayer output. - * - * The code is based upon what is found in libgphoto2/camlibs/jl2005c, - * Copyright (c) 2010 Theodore Kilgore <[email protected]> - * - * The decompression code used is - * Copyright (c) 2010 Hans de Goede <[email protected]> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - +/* jl2005bcd.c + * + * Converts raw output from Jeilin JL2005B/C/D to Bayer output. + * + * The code is based upon what is found in libgphoto2/camlibs/jl2005c, + * Copyright (c) 2010 Theodore Kilgore <[email protected]> + * + * The decompression code used is + * Copyright (c) 2010 Hans de Goede <[email protected]> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + #include <config.h> -#include <stdlib.h> -#include <string.h> - +#include <stdlib.h> +#include <string.h> + #ifdef HAVE_JPEG -#include "libv4lconvert-priv.h" -#include "jpeg_memsrcdest.h" -#include "libv4lsyscall-priv.h" - - -#define JPEG_HEADER_SIZE 338 -#define JPEG_HEIGHT_OFFSET 94 - -static int find_eoi(struct v4lconvert_data *data, - const unsigned char *jpeg_data, int jpeg_data_idx, int jpeg_data_size) -{ - int i; - - for (i = jpeg_data_idx; i < (jpeg_data_size - 1); i++) - if (jpeg_data[i] == 0xff && jpeg_data[i + 1] == 0xd9) - break; - - if (i >= (jpeg_data_size - 1)) { +#include "libv4lconvert-priv.h" +#include "jpeg_memsrcdest.h" +#include "libv4lsyscall-priv.h" + + +#define JPEG_HEADER_SIZE 338 +#define JPEG_HEIGHT_OFFSET 94 + +static int find_eoi(struct v4lconvert_data *data, + const unsigned char *jpeg_data, int jpeg_data_idx, int jpeg_data_size) +{ + int i; + + for (i = jpeg_data_idx; i < (jpeg_data_size - 1); i++) + if (jpeg_data[i] == 0xff && jpeg_data[i + 1] == 0xd9) + break; + + if (i >= (jpeg_data_size - 1)) { V4LCONVERT_ERR("incomplete jl2005bcd frame\n"); - return -1; - } - - return i + 2; /* + 2 -> Point to after EOI marker */ -} - - -int v4lconvert_decode_jl2005bcd(struct v4lconvert_data *data, - const unsigned char *src, int src_size, - unsigned char *dest, int width, int height) -{ - unsigned char jpeg_stripe[50000]; - int q; - struct jpeg_compress_struct cinfo; - struct jpeg_decompress_struct dinfo; - struct jpeg_error_mgr jcerr, jderr; - JOCTET *jpeg_header = NULL; - unsigned long jpeg_header_size = 0; - int i, x, y, x1, y1, jpeg_data_size, jpeg_data_idx, eoi, size; - - /* src_size had better be bigger than 16 */ - if (src_size < 16) - return 1; - - /* The first 16 bytes of src are a raw frame header */ - q = src[13] & 0x7f; - - if (height != src[4] << 3) { - V4LCONVERT_ERR("Height is %d, not %d\n", src[4] << 3, height); - return 1; - } - - if (width != src[5] << 3) { - V4LCONVERT_ERR("Width is %d, not %d\n", src[5] << 3, width); - return 1; - } - - /* - * And the fun begins, first of all create a dummy jpeg, which we use - * to get the headers from to feed to libjpeg when decompressing the - * stripes. This way we can use libjpeg's quant table handling - * (and built in default huffman tables). - */ - cinfo.err = jpeg_std_error (&jcerr); - jpeg_create_compress (&cinfo); - jpeg_mem_dest (&cinfo, &jpeg_header, &jpeg_header_size); - cinfo.image_width = 16; - cinfo.image_height = 16; - cinfo.input_components = 3; - cinfo.in_color_space = JCS_RGB; - jpeg_set_defaults (&cinfo); - /* Make comp[0] (which will be green) 1x2 subsampled */ - cinfo.comp_info[0].h_samp_factor = 1; - cinfo.comp_info[0].v_samp_factor = 2; - /* Make comp[1] and [2] use huffman table and quanttable 0, as all - * components use luminance settings with the jl2005c/d/e */ - cinfo.comp_info[1].quant_tbl_no = 0; - cinfo.comp_info[1].dc_tbl_no = 0; - cinfo.comp_info[1].ac_tbl_no = 0; - cinfo.comp_info[2].quant_tbl_no = 0; - cinfo.comp_info[2].dc_tbl_no = 0; - cinfo.comp_info[2].ac_tbl_no = 0; - /* Apply the quality setting from the header */ - if (q <= 0) - i = 5000; - else if (q <= 50) - i = 5000 / q; - else if (q <= 100) - i = 2 * (100 - q); - else - i = 0; - jpeg_set_linear_quality(&cinfo, i, TRUE); - - jpeg_start_compress (&cinfo, TRUE); - while( cinfo.next_scanline < cinfo.image_height ) { - JOCTET row[16 * 3]; - JSAMPROW row_pointer[1] = { row }; - jpeg_write_scanlines (&cinfo, row_pointer, 1); - } - jpeg_finish_compress (&cinfo); - jpeg_destroy_compress (&cinfo); - - JSAMPLE green[8 * 16]; - JSAMPLE red[8 * 8]; - JSAMPLE blue[8 * 8]; - JSAMPROW green_row_pointer[16]; - JSAMPROW red_row_pointer[8]; - JSAMPROW blue_row_pointer[8]; - - for (i = 0; i < 16; i++) - green_row_pointer[i] = green + i * 8; - - for (i = 0; i < 8; i++) { - red_row_pointer[i] = red + i * 8; - blue_row_pointer[i] = blue + i * 8; - } - - JSAMPARRAY samp_image[3] = { green_row_pointer, - red_row_pointer, - blue_row_pointer }; - - memcpy(jpeg_stripe, jpeg_header, JPEG_HEADER_SIZE); - jpeg_stripe[JPEG_HEIGHT_OFFSET ] = height >> 8; - jpeg_stripe[JPEG_HEIGHT_OFFSET + 1] = height; - jpeg_stripe[JPEG_HEIGHT_OFFSET + 2] = 0; - jpeg_stripe[JPEG_HEIGHT_OFFSET + 3] = 8; - free (jpeg_header); - /* Get past the raw frame header. */ - src += 16; - jpeg_data_size = src_size - 16; - - jpeg_data_idx = 0; - - - dinfo.err = jpeg_std_error (&jderr); - jpeg_create_decompress (&dinfo); - for (x = 0; x < width; x += 16) { - eoi = find_eoi(data, src, jpeg_data_idx, jpeg_data_size); - if (eoi < 0) - return eoi; - - size = eoi - jpeg_data_idx; - if ((JPEG_HEADER_SIZE + size) > sizeof(jpeg_stripe)) { - V4LCONVERT_ERR("stripe size too big %d > %zd\n", - JPEG_HEADER_SIZE + size, - sizeof(jpeg_stripe)); - return 1; - } - memcpy (jpeg_stripe + JPEG_HEADER_SIZE, - src + jpeg_data_idx, size); - - jpeg_mem_src (&dinfo, jpeg_stripe, JPEG_HEADER_SIZE + size); - jpeg_read_header (&dinfo, TRUE); - dinfo.raw_data_out = TRUE; -#if JPEG_LIB_VERSION >= 70 - dinfo.do_fancy_upsampling = FALSE; -#endif - jpeg_start_decompress (&dinfo); - for (y = 0; y < height; y += 16) { - jpeg_read_raw_data (&dinfo, samp_image, 16); - for (y1 = 0; y1 < 16; y1 += 2) { - for (x1 = 0; x1 < 16; x1 += 2) { - dest[((y + y1 + 0) * width - + x + x1 + 0)] - = red[y1 * 4 + x1 / 2]; - dest[((y + y1 + 0) * width - + x + x1 + 1)] - = green[y1 * 8 + x1 / 2]; - dest[((y + y1 + 1) * width - + x + x1 + 0)] - = green[y1 * 8 + 8 + x1 / 2]; - dest[((y + y1 + 1) * width - + x + x1 + 1)] - = blue[y1 * 4 + x1 / 2]; - } - } - } - jpeg_finish_decompress (&dinfo); - - /* Set jpeg_data_idx for the next stripe */ - jpeg_data_idx = (jpeg_data_idx + size + 0x0f) & ~0x0f; - } - jpeg_destroy_decompress(&dinfo); - return 0; -} - + return -1; + } + + return i + 2; /* + 2 -> Point to after EOI marker */ +} + + +int v4lconvert_decode_jl2005bcd(struct v4lconvert_data *data, + const unsigned char *src, int src_size, + unsigned char *dest, int width, int height) +{ + unsigned char jpeg_stripe[50000]; + int q; + struct jpeg_compress_struct cinfo; + struct jpeg_decompress_struct dinfo; + struct jpeg_error_mgr jcerr, jderr; + JOCTET *jpeg_header = NULL; + unsigned long jpeg_header_size = 0; + int i, x, y, x1, y1, jpeg_data_size, jpeg_data_idx, eoi, size; + + /* src_size had better be bigger than 16 */ + if (src_size < 16) + return 1; + + /* The first 16 bytes of src are a raw frame header */ + q = src[13] & 0x7f; + + if (height != src[4] << 3) { + V4LCONVERT_ERR("Height is %d, not %d\n", src[4] << 3, height); + return 1; + } + + if (width != src[5] << 3) { + V4LCONVERT_ERR("Width is %d, not %d\n", src[5] << 3, width); + return 1; + } + + /* + * And the fun begins, first of all create a dummy jpeg, which we use + * to get the headers from to feed to libjpeg when decompressing the + * stripes. This way we can use libjpeg's quant table handling + * (and built in default huffman tables). + */ + cinfo.err = jpeg_std_error (&jcerr); + jpeg_create_compress (&cinfo); + jpeg_mem_dest (&cinfo, &jpeg_header, &jpeg_header_size); + cinfo.image_width = 16; + cinfo.image_height = 16; + cinfo.input_components = 3; + cinfo.in_color_space = JCS_RGB; + jpeg_set_defaults (&cinfo); + /* Make comp[0] (which will be green) 1x2 subsampled */ + cinfo.comp_info[0].h_samp_factor = 1; + cinfo.comp_info[0].v_samp_factor = 2; + /* Make comp[1] and [2] use huffman table and quanttable 0, as all + * components use luminance settings with the jl2005c/d/e */ + cinfo.comp_info[1].quant_tbl_no = 0; + cinfo.comp_info[1].dc_tbl_no = 0; + cinfo.comp_info[1].ac_tbl_no = 0; + cinfo.comp_info[2].quant_tbl_no = 0; + cinfo.comp_info[2].dc_tbl_no = 0; + cinfo.comp_info[2].ac_tbl_no = 0; + /* Apply the quality setting from the header */ + if (q <= 0) + i = 5000; + else if (q <= 50) + i = 5000 / q; + else if (q <= 100) + i = 2 * (100 - q); + else + i = 0; + jpeg_set_linear_quality(&cinfo, i, TRUE); + + jpeg_start_compress (&cinfo, TRUE); + while( cinfo.next_scanline < cinfo.image_height ) { + JOCTET row[16 * 3]; + JSAMPROW row_pointer[1] = { row }; + jpeg_write_scanlines (&cinfo, row_pointer, 1); + } + jpeg_finish_compress (&cinfo); + jpeg_destroy_compress (&cinfo); + + JSAMPLE green[8 * 16]; + JSAMPLE red[8 * 8]; + JSAMPLE blue[8 * 8]; + JSAMPROW green_row_pointer[16]; + JSAMPROW red_row_pointer[8]; + JSAMPROW blue_row_pointer[8]; + + for (i = 0; i < 16; i++) + green_row_pointer[i] = green + i * 8; + + for (i = 0; i < 8; i++) { + red_row_pointer[i] = red + i * 8; + blue_row_pointer[i] = blue + i * 8; + } + + JSAMPARRAY samp_image[3] = { green_row_pointer, + red_row_pointer, + blue_row_pointer }; + + memcpy(jpeg_stripe, jpeg_header, JPEG_HEADER_SIZE); + jpeg_stripe[JPEG_HEIGHT_OFFSET ] = height >> 8; + jpeg_stripe[JPEG_HEIGHT_OFFSET + 1] = height; + jpeg_stripe[JPEG_HEIGHT_OFFSET + 2] = 0; + jpeg_stripe[JPEG_HEIGHT_OFFSET + 3] = 8; + free (jpeg_header); + /* Get past the raw frame header. */ + src += 16; + jpeg_data_size = src_size - 16; + + jpeg_data_idx = 0; + + + dinfo.err = jpeg_std_error (&jderr); + jpeg_create_decompress (&dinfo); + for (x = 0; x < width; x += 16) { + eoi = find_eoi(data, src, jpeg_data_idx, jpeg_data_size); + if (eoi < 0) + return eoi; + + size = eoi - jpeg_data_idx; + if ((JPEG_HEADER_SIZE + size) > sizeof(jpeg_stripe)) { + V4LCONVERT_ERR("stripe size too big %d > %zd\n", + JPEG_HEADER_SIZE + size, + sizeof(jpeg_stripe)); + return 1; + } + memcpy (jpeg_stripe + JPEG_HEADER_SIZE, + src + jpeg_data_idx, size); + + jpeg_mem_src (&dinfo, jpeg_stripe, JPEG_HEADER_SIZE + size); + jpeg_read_header (&dinfo, TRUE); + dinfo.raw_data_out = TRUE; +#if JPEG_LIB_VERSION >= 70 + dinfo.do_fancy_upsampling = FALSE; +#endif + jpeg_start_decompress (&dinfo); + for (y = 0; y < height; y += 16) { + jpeg_read_raw_data (&dinfo, samp_image, 16); + for (y1 = 0; y1 < 16; y1 += 2) { + for (x1 = 0; x1 < 16; x1 += 2) { + dest[((y + y1 + 0) * width + + x + x1 + 0)] + = red[y1 * 4 + x1 / 2]; + dest[((y + y1 + 0) * width + + x + x1 + 1)] + = green[y1 * 8 + x1 / 2]; + dest[((y + y1 + 1) * width + + x + x1 + 0)] + = green[y1 * 8 + 8 + x1 / 2]; + dest[((y + y1 + 1) * width + + x + x1 + 1)] + = blue[y1 * 4 + x1 / 2]; + } + } + } + jpeg_finish_decompress (&dinfo); + + /* Set jpeg_data_idx for the next stripe */ + jpeg_data_idx = (jpeg_data_idx + size + 0x0f) & ~0x0f; + } + jpeg_destroy_decompress(&dinfo); + return 0; +} + #endif /* HAVE_JPEG */ _______________________________________________ linuxtv-commits mailing list [email protected] http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits
