S5PV210 多媒体预留内存空间 3 - JPEG codec

来源:互联网 发布:promise js 编辑:程序博客网 时间:2024/05/21 18:46

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)

S5PV210的JPEC codec 驱动在drivers/media/video/samsung/jpeg_v2/下,JEPG codec驱动使用预留的内存存放编解码的输入和输出图像,JPEG codec支持原始图像和thumbnail同时编解码,因此所需预留内存空间要满足main frame, thumbnail frame, main stream, thumbnail stream的内存需求

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_V2static 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

原创粉丝点击