WEB开发网
开发学院手机开发Android 开发 Android jpeglib库在内存中实现解码 阅读

Android jpeglib库在内存中实现解码

 2010-09-10 00:39:00 来源:WEB开发网   
核心提示:size){my_src_ptr src;if (cinfo->src == NULL) { /* first time for this JPEG object? */cinfo->src = (struct jpeg_source_mgr *)(*cinfo->mem->alloc_smal
size)

{

my_src_ptr src;

if (cinfo->src == NULL) { /* first time for this JPEG object? */

cinfo->src = (struct jpeg_source_mgr *)

(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,

SIZEOF(my_source_mgr));

src = (my_src_ptr) cinfo->src;

src->buffer = (JOCTET *)

(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,

INPUT_BUF_SIZE * SIZEOF(JOCTET));

}

src = (my_src_ptr) cinfo->src;

src->pub.init_source = init_source;

src->pub.fill_input_buffer = jpg_fill_input_buffer;

src->pub.skip_input_data = skip_input_data;

src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */

src->pub.term_source = term_source;

//src->infile = infile;

src->jpg.img_buffer = buffer;

src->jpg.buffer_size = size;

src->jpg.pos = 0;

src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */

src->pub.next_input_byte = NULL; /* until buffer loaded */

}

通过该函数会发现:我们用户输入的buffer初始化了 my_source_mgr,并用我们实现的回调函数jpg_fill_input_buffer初始化了jpeg_source_mgr数据结构中的 fill_input_buffer。这样每次libjpeg读取数据就将会调用jpg_fill_input_buffer来读取内存jpeg数据了。

最后把jpeg_stdio_buffer_src接口暴露给最终用户。在jpeglib.h中增加如下定义:

EXTERN(void) jpeg_stdio_buffer_src JPP((j_decompress_ptr cinfo, UINT8 * buffer, UINT32 size));

至此libjpeg已经可以支持内存jpeg数据的解码了。只需要在调用jpeg_stdio_src接口的地方改调用jpeg_stdio_buffer_src就可以了。

jpeglib库和intel的IJL库相比较起来效率没有intel的高,但是IJL库会存在解码每一帧图像会泄露72字节的内存。如有看到此博客的朋友,请给个建议。谢谢。

上一页  1 2 3 4 5 

Tags:Android jpeglib 内存

编辑录入:coldstar [复制链接] [打 印]
赞助商链接