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

mp4 decoding UMC::h264_exception at memory location ...

9ine
Beginner
1,049 Views
I'm using simple_player to test mp4 decoding. The video is mp4_atom stream with H264 encoding as reported by the player.

However the video can not be played. Opening the project in debug mode I found exception report in visual studio output window:

First-chance exception at 0x75cab727 in simple_player.exe: Microsoft C++ exception: UMC::h264_exception at memory location 0x065ff8c0..


Those are the file links:

http://remixshare.com/dl/9z2lh/00002.mp4
http://remixshare.com/dl/tvlih/00003.mp4
http://remixshare.com/dl/6nrtv/00004.mp4
http://remixshare.com/dl/2tjie/00005.mp4


0 Kudos
1 Solution
Alexander_Modenov__I
New Contributor I
1,049 Views
Hi. Your are using GPAC to create the .mp4 streams. So some modifications required in file
umc_mp4_parser.cpp from codec/mpeg4_spl/src directory.
The following lines should be added after line 1348:
else
dr->MovePosition(leaf_atom.size-8);
This modifcation required to skip the unused atom.
Regards,
Alexander

View solution in original post

0 Kudos
7 Replies
Chao_Y_Intel
Moderator
1,049 Views
Hello,

Thanks for your report here. I will download these function, and have check here?
Which version of Intel IPP are you using now? Is this a 64 bit appliction, or 32 bit?

thanks,
Chao
0 Kudos
Alexander_Modenov__I
New Contributor I
1,050 Views
Hi. Your are using GPAC to create the .mp4 streams. So some modifications required in file
umc_mp4_parser.cpp from codec/mpeg4_spl/src directory.
The following lines should be added after line 1348:
else
dr->MovePosition(leaf_atom.size-8);
This modifcation required to skip the unused atom.
Regards,
Alexander
0 Kudos
9ine
Beginner
1,049 Views
I'm using IPP 6.1 and UMC codec pipeline from simple_player example to create splitters and decoders.
Thank you I will try your modifications
0 Kudos
9ine
Beginner
1,049 Views
That is actually solved the problem. But there is another one with those HD mp4 appeared.

I'm capturing at equal intervals e.g. one frame from every N-th second using Splitter::SetTimePosition() and until Splitter::GetNextData() puts to in MediaDataEx::GetTime() frame after desired seek operation I keep extracting the frames.

With mts encoding of those files seeking is precise but with mp4 it is similar to ordinary low resolution videos.
E.g. seeking to 10th second returns first frame from 7th or 8th second,then further seeking to 20th second returns first frame from 16th second, that is several seconds before target position, and it needs to extract all frames to arrive to desired seek position.

Can this be solved or otherwise with small N=1,2 seconds it is much faster to keep extracting all frames one by one and pull only those at a desired N interval step.

Compared to non-HD videos those kinds of capture is very costly, cpu usage is 100% consuming all cores equally.
0 Kudos
Alexander_Modenov__I
New Contributor I
1,049 Views
Hi 9ine,
I'm not sure that I understood your problem but seems like this is typical thing for repositioning - looking foran I framenearst to selected time mark.
0 Kudos
9ine
Beginner
1,049 Views
How can I skip to nearest I frame after seek operation?
UMC samples show frames capture only.
0 Kudos
Alexander_Modenov__I
New Contributor I
1,049 Views
Hi 9ine,
The simplest way skip to nearst frame is the following :
- reposition in stream;
- wait for decoder to return UMC_OK instead ofUMC_ERR_NOT_ENOUGH_DATA
Or you can analyze data from splitter (demuxer) after repositioning to skip the unneeded decoder calls.
Regards,
Alexander
0 Kudos
Reply