diff options
Diffstat (limited to 'apps/recorder')
-rw-r--r-- | apps/recorder/jpeg_load.c | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/apps/recorder/jpeg_load.c b/apps/recorder/jpeg_load.c index 22e017d9e8..62bc1e332d 100644 --- a/apps/recorder/jpeg_load.c +++ b/apps/recorder/jpeg_load.c | |||
@@ -62,7 +62,7 @@ struct jpeg | |||
62 | #else | 62 | #else |
63 | int fd; | 63 | int fd; |
64 | int buf_left; | 64 | int buf_left; |
65 | unsigned char *buf_index; | 65 | int buf_index; |
66 | #endif | 66 | #endif |
67 | unsigned long int bitbuf; | 67 | unsigned long int bitbuf; |
68 | int bitbuf_bits; | 68 | int bitbuf_bits; |
@@ -864,7 +864,7 @@ INLINE void putc(struct jpeg* p_jpeg) | |||
864 | INLINE void fill_buf(struct jpeg* p_jpeg) | 864 | INLINE void fill_buf(struct jpeg* p_jpeg) |
865 | { | 865 | { |
866 | p_jpeg->buf_left = read(p_jpeg->fd, p_jpeg->buf, JPEG_READ_BUF_SIZE); | 866 | p_jpeg->buf_left = read(p_jpeg->fd, p_jpeg->buf, JPEG_READ_BUF_SIZE); |
867 | p_jpeg->buf_index = p_jpeg->buf; | 867 | p_jpeg->buf_index = 0; |
868 | } | 868 | } |
869 | 869 | ||
870 | static unsigned char *getc(struct jpeg* p_jpeg) | 870 | static unsigned char *getc(struct jpeg* p_jpeg) |
@@ -874,7 +874,7 @@ static unsigned char *getc(struct jpeg* p_jpeg) | |||
874 | if (p_jpeg->buf_left < 1) | 874 | if (p_jpeg->buf_left < 1) |
875 | return NULL; | 875 | return NULL; |
876 | p_jpeg->buf_left--; | 876 | p_jpeg->buf_left--; |
877 | return p_jpeg->buf_index++; | 877 | return (p_jpeg->buf_index++) + p_jpeg->buf; |
878 | } | 878 | } |
879 | 879 | ||
880 | INLINE bool skip_bytes_seek(struct jpeg* p_jpeg) | 880 | INLINE bool skip_bytes_seek(struct jpeg* p_jpeg) |
@@ -1571,7 +1571,7 @@ static void fill_bit_buffer(struct jpeg* p_jpeg) | |||
1571 | p_jpeg->bitbuf = (p_jpeg->bitbuf << 8) | byte; | 1571 | p_jpeg->bitbuf = (p_jpeg->bitbuf << 8) | byte; |
1572 | p_jpeg->bitbuf_bits += 16; | 1572 | p_jpeg->bitbuf_bits += 16; |
1573 | #ifdef JPEG_BS_DEBUG | 1573 | #ifdef JPEG_BS_DEBUG |
1574 | DEBUGF("read in: %X\n", p_jpeg->bitbuf & 0xFFFF); | 1574 | DEBUGF("read in: %04X\n", p_jpeg->bitbuf & 0xFFFF); |
1575 | #endif | 1575 | #endif |
1576 | } | 1576 | } |
1577 | 1577 | ||
@@ -1872,7 +1872,8 @@ static struct img_part *store_row_jpeg(void *jpeg_args) | |||
1872 | int idct_rows = 1 << p_jpeg->v_scale[!!ci]; | 1872 | int idct_rows = 1 << p_jpeg->v_scale[!!ci]; |
1873 | unsigned char *b_out = out + (ci ? ci : store_offs[blkn]); | 1873 | unsigned char *b_out = out + (ci ? ci : store_offs[blkn]); |
1874 | if (idct_tbl[p_jpeg->v_scale[!!ci]].v_idct) | 1874 | if (idct_tbl[p_jpeg->v_scale[!!ci]].v_idct) |
1875 | idct_tbl[p_jpeg->v_scale[!!ci]].v_idct(block, idct_cols); | 1875 | idct_tbl[p_jpeg->v_scale[!!ci]].v_idct(block, |
1876 | idct_cols); | ||
1876 | idct_tbl[p_jpeg->h_scale[!!ci]].h_idct(block, b_out, | 1877 | idct_tbl[p_jpeg->h_scale[!!ci]].h_idct(block, b_out, |
1877 | idct_rows, b_width); | 1878 | idct_rows, b_width); |
1878 | } | 1879 | } |
@@ -1932,6 +1933,8 @@ int read_jpeg_file(const char* filename, | |||
1932 | int fd, ret; | 1933 | int fd, ret; |
1933 | fd = open(filename, O_RDONLY); | 1934 | fd = open(filename, O_RDONLY); |
1934 | 1935 | ||
1936 | JDEBUGF("read_jpeg_file: filename: %s buffer len: %d cformat: %p\n", | ||
1937 | filename, maxsize, cformat); | ||
1935 | /* Exit if file opening failed */ | 1938 | /* Exit if file opening failed */ |
1936 | if (fd < 0) { | 1939 | if (fd < 0) { |
1937 | DEBUGF("read_jpeg_file: can't open '%s', rc: %d\n", filename, fd); | 1940 | DEBUGF("read_jpeg_file: can't open '%s', rc: %d\n", filename, fd); |
@@ -2008,6 +2011,10 @@ int read_jpeg_fd(int fd, | |||
2008 | p_jpeg->fd = fd; | 2011 | p_jpeg->fd = fd; |
2009 | #endif | 2012 | #endif |
2010 | status = process_markers(p_jpeg); | 2013 | status = process_markers(p_jpeg); |
2014 | #ifndef JPEG_FROM_MEM | ||
2015 | JDEBUGF("position in file: %d buffer fill: %d\n", | ||
2016 | (int)lseek(p_jpeg->fd, 0, SEEK_CUR), p_jpeg->buf_left); | ||
2017 | #endif | ||
2011 | if (status < 0) | 2018 | if (status < 0) |
2012 | return status; | 2019 | return status; |
2013 | if ((status & (DQT | SOF0)) != (DQT | SOF0)) | 2020 | if ((status & (DQT | SOF0)) != (DQT | SOF0)) |
@@ -2036,6 +2043,8 @@ int read_jpeg_fd(int fd, | |||
2036 | } | 2043 | } |
2037 | p_jpeg->h_scale[0] = calc_scale(p_jpeg->x_size, bm->width); | 2044 | p_jpeg->h_scale[0] = calc_scale(p_jpeg->x_size, bm->width); |
2038 | p_jpeg->v_scale[0] = calc_scale(p_jpeg->y_size, bm->height); | 2045 | p_jpeg->v_scale[0] = calc_scale(p_jpeg->y_size, bm->height); |
2046 | JDEBUGF("luma IDCT size: %dx%d\n", 1 << p_jpeg->h_scale[0], | ||
2047 | 1 << p_jpeg->v_scale[0]); | ||
2039 | if ((p_jpeg->x_size << p_jpeg->h_scale[0]) >> 3 == bm->width && | 2048 | if ((p_jpeg->x_size << p_jpeg->h_scale[0]) >> 3 == bm->width && |
2040 | (p_jpeg->y_size << p_jpeg->v_scale[0]) >> 3 == bm->height) | 2049 | (p_jpeg->y_size << p_jpeg->v_scale[0]) >> 3 == bm->height) |
2041 | resize = false; | 2050 | resize = false; |
@@ -2044,7 +2053,13 @@ int read_jpeg_fd(int fd, | |||
2044 | p_jpeg->frameheader[0].horizontal_sampling - 1; | 2053 | p_jpeg->frameheader[0].horizontal_sampling - 1; |
2045 | p_jpeg->v_scale[1] = p_jpeg->v_scale[0] + | 2054 | p_jpeg->v_scale[1] = p_jpeg->v_scale[0] + |
2046 | p_jpeg->frameheader[0].vertical_sampling - 1; | 2055 | p_jpeg->frameheader[0].vertical_sampling - 1; |
2056 | JDEBUGF("chroma IDCT size: %dx%d\n", 1 << p_jpeg->h_scale[1], | ||
2057 | 1 << p_jpeg->v_scale[1]); | ||
2047 | #endif | 2058 | #endif |
2059 | JDEBUGF("scaling from %dx%d -> %dx%d\n", | ||
2060 | (p_jpeg->x_size << p_jpeg->h_scale[0]) >> 3, | ||
2061 | (p_jpeg->y_size << p_jpeg->v_scale[0]) >> 3, | ||
2062 | bm->width, bm->height); | ||
2048 | fix_quant_tables(p_jpeg); | 2063 | fix_quant_tables(p_jpeg); |
2049 | int decode_w = (1 << p_jpeg->h_scale[0]) - 1; | 2064 | int decode_w = (1 << p_jpeg->h_scale[0]) - 1; |
2050 | int decode_h = (1 << p_jpeg->v_scale[0]) - 1; | 2065 | int decode_h = (1 << p_jpeg->v_scale[0]) - 1; |
@@ -2052,11 +2067,13 @@ int read_jpeg_fd(int fd, | |||
2052 | src_dim.height = (p_jpeg->y_size << p_jpeg->v_scale[0]) >> 3; | 2067 | src_dim.height = (p_jpeg->y_size << p_jpeg->v_scale[0]) >> 3; |
2053 | p_jpeg->zero_need[0] = (decode_h << 3) + decode_w; | 2068 | p_jpeg->zero_need[0] = (decode_h << 3) + decode_w; |
2054 | p_jpeg->k_need[0] = zig[p_jpeg->zero_need[0]]; | 2069 | p_jpeg->k_need[0] = zig[p_jpeg->zero_need[0]]; |
2070 | JDEBUGF("need luma components to %d\n", p_jpeg->k_need[0]); | ||
2055 | #ifdef HAVE_LCD_COLOR | 2071 | #ifdef HAVE_LCD_COLOR |
2056 | decode_w = (1 << MIN(p_jpeg->h_scale[1],3)) - 1; | 2072 | decode_w = (1 << MIN(p_jpeg->h_scale[1],3)) - 1; |
2057 | decode_h = (1 << MIN(p_jpeg->v_scale[1],3)) - 1; | 2073 | decode_h = (1 << MIN(p_jpeg->v_scale[1],3)) - 1; |
2058 | p_jpeg->zero_need[1] = (decode_h << 3) + decode_w; | 2074 | p_jpeg->zero_need[1] = (decode_h << 3) + decode_w; |
2059 | p_jpeg->k_need[1] = zig[p_jpeg->zero_need[1]]; | 2075 | p_jpeg->k_need[1] = zig[p_jpeg->zero_need[1]]; |
2076 | JDEBUGF("need chroma components to %d\n", p_jpeg->k_need[1]); | ||
2060 | #endif | 2077 | #endif |
2061 | if (cformat) | 2078 | if (cformat) |
2062 | bm_size = cformat->get_size(bm); | 2079 | bm_size = cformat->get_size(bm); |
@@ -2087,6 +2104,7 @@ int read_jpeg_fd(int fd, | |||
2087 | p_jpeg->frameheader[0].vertical_sampling - 2; | 2104 | p_jpeg->frameheader[0].vertical_sampling - 2; |
2088 | #endif | 2105 | #endif |
2089 | decode_buf_size *= JPEG_PIX_SZ; | 2106 | decode_buf_size *= JPEG_PIX_SZ; |
2107 | JDEBUGF("decode buffer size: %d\n", decode_buf_size); | ||
2090 | p_jpeg->img_buf = (jpeg_pix_t *)buf_start; | 2108 | p_jpeg->img_buf = (jpeg_pix_t *)buf_start; |
2091 | if (buf_end - buf_start < decode_buf_size) | 2109 | if (buf_end - buf_start < decode_buf_size) |
2092 | return -1; | 2110 | return -1; |