Community
cancel
Showing results for 
Search instead for 
Did you mean: 
sschaem
Beginner
74 Views

h264Decoder->Reset() crash in multithreaded mode

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
Employee
74 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

sschaem
Beginner
74 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
Chao_Y_Intel
Employee
74 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

sschaem
Beginner
74 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
sschaem
Beginner
74 Views

Curious, are bug reports in this forum being logged ?
If so , is there a way to check status ?
Thx,
Stephan
Chao_Y_Intel
Employee
74 Views


Hi Stephan,

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

Thanks,

Chao

j_miles
Beginner
74 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
Chao_Y_Intel
Employee
74 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

Chao_Y_Intel
Employee
74 Views


Hello,

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

Thanks,
Chao