JPEG codec 用来compresses original raw image以及decompresses original JPEG image。这个硬件电路执行compression/decompression需要的所有功能:离散余弦变换,量化和霍夫曼编码。
编码功能:
输入raw image: 格式为YCbCr4:2:2, RGB565
输出的JPEG文件: Baseline JPEG,颜色空间为YCbCr4:2:2或者YCbCr4:2:0
不支持progressive模式
解码功能:
输入JPEG文件:Baseline JPEG,颜色空间为YCbCr4:4:4, YCbCr4:2:2, YCbCr4:2:0,gray
输出raw image: YCbCr4:2:2,YCbCr4:2:0
不支持progressive 模式
预留的内存空间定义在arch/arm/mach-s5pv210/mach-smdkc110.c
#define S5PV210_VIDEO_SAMSUNG_MEMSIZE_JPEG (8192 * SZ_1K)
394 s3c_jpeg_limits.max_main_width = pdata->max_main_width; 395 s3c_jpeg_limits.max_main_height = pdata->max_main_height; 396 s3c_jpeg_limits.max_thumb_width = pdata->max_thumb_width; 397 s3c_jpeg_limits.max_thumb_height = pdata->max_thumb_height; 398 399 main_pixels = s3c_jpeg_limits.max_main_width * 400 s3c_jpeg_limits.max_main_height; 401 thumb_pixels = s3c_jpeg_limits.max_thumb_width * 402 s3c_jpeg_limits.max_thumb_height; 403 404 s3c_jpeg_bufinfo.main_stream_size = ALIGN(main_pixels, PAGE_SIZE); 405 /* Assuming JPEG V2 uses YCBCR422 output format */ 406 s3c_jpeg_bufinfo.main_frame_size = ALIGN(main_pixels * 2, PAGE_SIZE); 407 408 s3c_jpeg_bufinfo.thumb_stream_size = ALIGN(thumb_pixels, PAGE_SIZE); 409 s3c_jpeg_bufinfo.thumb_frame_size = ALIGN(thumb_pixels * 2, PAGE_SIZE); 410 411 s3c_jpeg_bufinfo.total_buf_size = s3c_jpeg_bufinfo.main_stream_size + 412 s3c_jpeg_bufinfo.thumb_stream_size + 413 s3c_jpeg_bufinfo.main_frame_size + 414 s3c_jpeg_bufinfo.thumb_frame_size;
从上面代码我们可以得到如下预留内存计算公式
Reserved mem size = main_stream_size + thumb_stream_size + main_frame_size + thumb_frame_size
= ALIGN(main_pixels, PAGE_SIZE) + ALIGN(main_pixels * 2, PAGE_SIZE) + ALIGN(thumb_pixels, PAGE_SIZE) + ALIGN(thumb_pixels * 2, PAGE_SIZE)
= ALIGN(pdata->max_main_width * pdata->max_main_height, PAGE_SIZE) + ALIGN(pdata->max_main_width * pdata->max_main_height *2, PAGE_SIZE)
+ ALIGN(pdata->max_thumb_width * pdata->max_thumb_height, PAGE_SIZE) + ALIGN(pdata->max_thumb_width * pdata->max_thumb_height *2, PAGE_SIZE)
pdata->max_thumb_width,pdata->max_thumb_height,pdata->max_main_width, pdata->max_main_height的定义是项目相关的,是系统需要编解码的原始图片width,height以及thumbnail图片的宽高。
定义在arch/arm/mach-s5pv210/mach-smdkc110.c中
#ifdef CONFIG_VIDEO_JPEG_V2 static struct s3c_platform_jpeg jpeg_plat __initdata = { .max_main_width = 800, .max_main_height = 480, .max_thumb_width = 320, .max_thumb_height = 240, }; #endif
因此可得到JPEG codec预留内存的大小
ALIGN(800*480, PAGE_SIZE) + ALIGN(800*480*2, PAGE_SIZE) + ALIGN(320*240, PAGE_SIZE) + ALIGN(320*240*2, PAGE_SIZE) = 1352KB