0

我正在尝试从一个管道读取 EXR 流,处理它们并将结果写入另一个管道。在这种情况下,它们被命名为管道,但它们也可以是标准输入和标准输出。

当管道干涸时会出现我的问题。OpenEXR 不喜欢尝试读取任何内容,并且会因以下堆栈跟踪而崩溃。

(gdb) run in.exr out.exr
Starting program: /Users/jon/Library/Developer/Xcode/DerivedData/compressor-abhdftqzleulxsfkpidvcazfowwo/Build/Products/Debug/compressor in.exr out.exr
Reading symbols for shared libraries +++++++++......................................................................................................... done
Reading symbols for shared libraries ............ done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done
terminate called throwing an exception
Program received signal SIGABRT, Aborted.
0x00007fff90957ce2 in __pthread_kill ()
(gdb) backtrace
#0  0x00007fff90957ce2 in __pthread_kill ()
#1  0x00007fff866f27d2 in pthread_kill ()
#2  0x00007fff866e3a7a in abort ()
#3  0x00007fff8643c7bc in abort_message ()
#4  0x00007fff86439fcf in default_terminate ()
#5  0x00007fff844d61cd in _objc_terminate ()
#6  0x00007fff8643a001 in safe_handler_caller ()
#7  0x00007fff86439fed in unexpected_defaults_to_terminate ()
#8  0x00007fff8643a040 in __cxxabiv1::__unexpected ()
#9  0x00007fff8643aefe in __cxa_call_unexpected ()
#10 0x0000000100008cfb in exr::ReadEXR (pixelBuffer=@0x7fff5fbfee00, is=@0x7fff5fbfeef8) at /Users/jon/Development/compressor/compressor/exr.cpp:47
#11 0x0000000100001c39 in main (argc=4, argv=0x7fff5fbffaa8) at /Users/jon/Development/compressor/compressor/main.cpp:79

我真的希望 OpenEXR 阻塞线程,直到有更多数据可用,但是如果有一些方法可以手动检查是否有更多数据可以做,只要它有点健壮。

谢谢。

4

1 回答 1

0

这个问题的解决方案确实是扩展 Imf::Istream 并实现它以在输入管道干涸时阻塞。

对于这个特定问题,需要进行一些考虑,例如管道不可搜索并且不知道它们的位置,但是可以解决它们。

于 2012-07-18T11:52:50.167 回答