Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.

h264Decoder->Reset() crash in multithreaded mode

sschaem
Beginner
944 Views
Hello all,
I'm having what I believe is a simple problem with IPP 6.1.2 :
Calling h264decoder->Reset() crash when the decoder is initialized to use more then 1 thread.
My understanding is that to perform seeking correctly you need to flush the decoder state,
and I have not been able to find any other method to flush pending frame in the decoder.
Anyway, everything is A.OK beside reset() crashing when the thread count != 1.
(And I'm looking to use 8 thread, since it scale pretty well)
Feedback appreciated (before I spend time looking at the UMC code),
Stephan Schaem
PS: Kudos (and thanks) to the UMC design team. The quality/level of the work is well appreciated!
0 Kudos
9 Replies
Chao_Y_Intel
Moderator
944 Views


Hello Stephan,

Thanks for your feedback on the UMC code.

For reset() crash issue, do you have some code snippets that can show the problem? We will check it.

Thanks,

Chao

0 Kudos
sschaem
Beginner
944 Views
m_umc.splitter->Stop();
// Flush decoder
m_umc.decoder->Reset(); // Crash when multithreaded
m_umc.splitter->SetTimePosition(seekTime);
m_umc.splitter->Run();
m_umc.splitter->GetTimePosition(seekTime);
The crash (only when the decoder is using >1 thread) happen in
H264SegmentDecoderMultithreaded
I'm building UMC using : buildem64t cl9
Inside a Visual Studio 2008 solution
Thx,
Stephan
0 Kudos
Chao_Y_Intel
Moderator
944 Views

Stephan,

some suggestion from owner to workaround the problem:

users can release all threads in the very beginning of the TaskSupplier::Reset and start them again in the end of the function. They can look at TaskSupplier::Close to see how to terminate the threads and look at TaskSupplier::Init to see how to start the treads.

All mentioned functions are placed in umc_h264_task_supplier.cpp file.

Thanks,

Chao

0 Kudos
sschaem
Beginner
944 Views
Was that workaround tested successfully ?
Here is what I did, and it didn't change the outcome
(still crash inH264SegmentDecoderMultiThreaded::ProcessSegment() )
inTaskSupplier::Reset()
Used the code in Close() to delete/free the segment decoder threads
Used the code in Init() to re-create the segment decoder threads
The only workaround that worked is to destroy the existing decoder and create a new H264 decoder for each seek operation... no very elegant
Stephan
0 Kudos
sschaem
Beginner
944 Views
Curious, are bug reports in this forum being logged ?
If so , is there a way to check status ?
Thx,
Stephan
0 Kudos
Chao_Y_Intel
Moderator
944 Views


Hi Stephan,

This problem was tracked in the bug database, and will be fixed in future release.

Thanks,

Chao

0 Kudos
j_miles
Beginner
944 Views
Hi Chao Y and Stephan,

Could you provide some more information on how to easily reproduce the problem? Have you found the bug/cause or a fix (or a work-around that works)?

Thanks.

- Jay
0 Kudos
Chao_Y_Intel
Moderator
944 Views

Jay,

There was issue when Reset() is called in the multithreaded Codec. We are planing to include the the fix in the upcoming IPP 7.0 Beta update release.

Thanks,

Chao

0 Kudos
Chao_Y_Intel
Moderator
944 Views

Hello,

An update on this issue: the problem has been fixed in 7.0 release, which is availabe now.

Thanks,
Chao
0 Kudos
Reply