C++ libjpeg是否支持解码中断?
我正在使用libjpeg对jpeg文件进行解码。 在解码大图像时,用户可能会切换到另一个jpeg文件,所以libjpeg是否支持解码中断?C++ libjpeg是否支持解码中断?,c++,jpeg,libjpeg,C++,Jpeg,Libjpeg,我正在使用libjpeg对jpeg文件进行解码。 在解码大图像时,用户可能会切换到另一个jpeg文件,所以libjpeg是否支持解码中断? 非常感谢 我不太明白你的问题 据我记忆所及,您使用常规的锅炉板,直到jpeg\u start\u decompress(),然后开始通过jpeg\u read\u scanlines()迭代地读取行。如果需要取消操作,请中断读取扫描线的循环。 如果您需要更好的响应能力,请从小到大阅读。我不确定我是否理解您的问题 据我记忆所及,您使用常规的锅炉板,直到jpeg
非常感谢 我不太明白你的问题 据我记忆所及,您使用常规的锅炉板,直到
jpeg\u start\u decompress()
,然后开始通过jpeg\u read\u scanlines()
迭代地读取行。如果需要取消操作,请中断读取扫描线的循环。如果您需要更好的响应能力,请从小到大阅读。我不确定我是否理解您的问题 据我记忆所及,您使用常规的锅炉板,直到
jpeg\u start\u decompress()
,然后开始通过jpeg\u read\u scanlines()
迭代地读取行。如果需要取消操作,请中断读取扫描线的循环。如果您需要更好的响应能力,请分小段阅读。您的问题不是真的:
"is libjpg thread safe?"
我认为基本上是这样的,如果底层stdio库是或者您没有使用jpeg\u stdio\u src。然而,为了“生活的光明面”,我会遵循Georg的建议,在每次读取扫描线之后检查是否有挂起的中断(您的中断处理程序可以设置一个中断挂起标志)。这就是我解决这个问题的方法(我需要抢先安排线程)。你的问题不是真的吗:
"is libjpg thread safe?"
我认为基本上是这样的,如果底层stdio库是或者您没有使用jpeg\u stdio\u src。然而,为了“生活的光明面”,我会遵循Georg的建议,在每次读取扫描线之后检查是否有挂起的中断(您的中断处理程序可以设置一个中断挂起标志)。这就是我解决这个问题的方法(我需要抢占式线程调度)。Libjpeg有一个解决方案。因此,是的,您可以暂停编码/解码过程(稍后再继续),或者只是中断它(以后不想继续)
您可以为libjpeg提供自定义的输入例程(通过设置jpeg\u source\u mgr
结构),然后使用libjpeg提供的
引用libjpeg文档,暂停非常简单:
对于解压暂停,使用fill_input_buffer()例程,该例程只返回FALSE(错误恢复期间除外,如下所述)。这将导致解压缩程序返回其调用者,并指示已发生暂停
暂停可能发生在早期阶段(如调用jpeg\u read\u头时)。此外,从文件:
这可能发生在四个地方:
Suspension实现一些回溯,以便提供一种“恢复”编码/解码过程的方法。它可能很昂贵(我对此一无所知),所以您可以测试它,看看它是否适合您的需要。Libjpeg有一个。因此,是的,您可以暂停编码/解码过程(稍后再继续),或者只是中断它(以后不想继续)
您可以为libjpeg提供自定义的输入例程(通过设置jpeg\u source\u mgr
结构),然后使用libjpeg提供的
引用libjpeg文档,暂停非常简单:
对于解压暂停,使用fill_input_buffer()例程,该例程只返回FALSE(错误恢复期间除外,如下所述)。这将导致解压缩程序返回其调用者,并指示已发生暂停
暂停可能发生在早期阶段(如调用jpeg\u read\u头时)。此外,从文件:
这可能发生在四个地方:
Suspension实现一些回溯,以便提供一种“恢复”编码/解码过程的方法。它可能很贵(我对此一无所知),所以您可以测试一下它是否适合您的需要。非常感谢!你的意思是,如果我想中断解码,我需要修改libjpeg源代码,对吗?解码一幅图像需要1000毫秒,300毫秒时我决定取消解码。我希望解码器能够立即中断,而解码图像可能需要1000毫秒,如果你阅读小块,调用jpeg_read_scanlines()应该很快。非常感谢!你的意思是,如果我想中断解码,我需要修改libjpeg源代码,对吗?解码一幅图像需要1000毫秒,300毫秒时我决定取消解码。我希望解码器能够立即中断,而解码图像可能需要1000毫秒,如果读取小块图像,调用jpeg_read_scanlines()应该很快。你确定吗?因为他说这不是皮重你确定吗?因为他说不是