Rockbox open source high quality audio player as a Music Player Daemon
mpris rockbox mpd libadwaita audio rust zig deno
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

jpeg: Add support for FORMAT_RETURN_SIZE flag

Change-Id: I01f883400d775ffee5cdaa107fc3d6fb89b02573

authored by

Roman Artiukhin and committed by
Solomon Peachy
be47d646 888ce7ca

+29 -10
+29 -10
apps/recorder/jpeg_load.c
··· 2210 2210 bm_size = cformat->get_size(bm); 2211 2211 else 2212 2212 bm_size = BM_SIZE(bm->width,bm->height,FORMAT_NATIVE,false); 2213 - if (bm_size > maxsize) 2214 - return -1; 2213 + 2215 2214 char *buf_start = (char *)bm->data + bm_size; 2216 2215 char *buf_end = (char *)bm->data + maxsize; 2217 - maxsize = buf_end - buf_start; 2216 + bool return_size = format & FORMAT_RETURN_SIZE; 2218 2217 #ifndef JPEG_FROM_MEM 2219 2218 ALIGN_BUFFER(buf_start, maxsize, sizeof(long)); 2220 - if (maxsize < (int)sizeof(struct jpeg)) 2221 - return -1; 2222 - memmove(buf_start, p_jpeg, sizeof(struct jpeg)); 2223 - p_jpeg = (struct jpeg *)buf_start; 2219 + if (!return_size) 2220 + { 2221 + if (maxsize < (int)sizeof(struct jpeg)) 2222 + return -1; 2223 + memmove(buf_start, p_jpeg, sizeof(struct jpeg)); 2224 + p_jpeg = (struct jpeg *)buf_start; 2225 + } 2224 2226 buf_start += sizeof(struct jpeg); 2225 - maxsize = buf_end - buf_start; 2226 2227 #endif 2227 - fix_huff_tables(p_jpeg); 2228 + maxsize = buf_end - buf_start; 2228 2229 #ifdef HAVE_LCD_COLOR 2229 2230 int decode_buf_size = (p_jpeg->x_mbl << p_jpeg->h_scale[1]) 2230 2231 << p_jpeg->v_scale[1]; ··· 2236 2237 #endif 2237 2238 decode_buf_size *= JPEG_PIX_SZ; 2238 2239 JDEBUGF("decode buffer size: %d\n", decode_buf_size); 2239 - p_jpeg->img_buf = (jpeg_pix_t *)buf_start; 2240 + if (return_size) 2241 + { 2242 + return (buf_start - (char *) bm->data) + decode_buf_size 2243 + + (resize 2244 + ? 2245 + /* buffer for 1 line + 2 spare lines */ 2246 + #ifdef HAVE_LCD_COLOR 2247 + sizeof(struct uint32_argb) 2248 + #else 2249 + sizeof(uint32_t) 2250 + #endif 2251 + * 3 * bm->width 2252 + : 0); 2253 + } 2254 + 2240 2255 if (buf_end - buf_start < decode_buf_size) 2241 2256 return -1; 2257 + 2258 + fix_huff_tables(p_jpeg); 2259 + 2260 + p_jpeg->img_buf = (jpeg_pix_t *)buf_start; 2242 2261 buf_start += decode_buf_size; 2243 2262 maxsize = buf_end - buf_start; 2244 2263 memset(p_jpeg->img_buf, 0, decode_buf_size);