我使用libjpeg来解码jpeg文件。当解码大图时,用户可能会切换到其他jpeg文件,那么libjpeg是否支持decode-interrupt?非常感谢!
发布于 2011-12-13 07:52:22
Libjpeg有一个I/O suspension feature。所以,是的,你可以暂停一个编码/解码过程(稍后恢复),或者简单地中断它(不希望以后继续)。
您可以为libjpeg提供自定义的输入例程(通过设置jpeg_source_mgr结构),然后使用libjpeg提供的I/O Suspension。
引用libjpeg文档中的话说,挂起非常简单:
对于解压缩挂起,使用fill_input_buffer()例程,该例程只返回FALSE (可能在错误恢复期间除外,如下所述)。这将导致解压缩器返回到其调用者,并指示已发生挂起。
挂起可能发生在早期阶段(比如调用jpeg_read_header时)。同样来自文档:
这可能发生在四个地方:
jpeg_read_header(): will return JPEG_SUSPENDED.
jpeg_start_decompress(): will return FALSE, rather than its usual TRUE.
jpeg_read_scanlines(): will return the number of scanlines already completed (possibly 0).
jpeg_finish_decompress(): will return FALSE, rather than its usual TRUE.Suspension实现了一些回溯,以便提供一种“恢复”编码/解码过程的方法。它可能很贵(我对此一无所知),所以你可以测试它,看看它是否适合你的需求。
发布于 2009-10-21 10:35:17
我不太明白你的问题。
就我所记得的,您按照通常的样板操作一直到jpeg_start_decompress(),然后开始通过jpeg_read_scanlines()迭代地读取代码行。如果需要取消操作,请中断读取扫描线的循环。
如果你需要更好的响应性,可以阅读更小的部分。
发布于 2011-12-13 05:14:20
你的问题不是真的:
"is libjpg thread safe?"如果底层的stdio库是或者你没有使用jpeg_stdio_src,我认为基本上是这样的。然而,为了“生活的光明面”,我会遵循Georg的建议,在每个read_scanline之后检查挂起的中断(您的中断处理程序可以设置一个中断挂起标志)。这就是我解决这个问题的方法(我需要抢先调度线程)。
https://stackoverflow.com/questions/1598413
复制相似问题