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

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

你可能感兴趣的:(S5PV210 多媒体预留内存空间 3 - JPEG codec)