Community
cancel
Showing results for 
Search instead for 
Did you mean: 
selea
Beginner
50 Views

Decoder and External MemoryAllocator

Good morning, I found a problem when you try to use an External MemoryAllocator with a IPP decoder: for example MPEG4VideoDecoder.
I'm using latest IPP 6.1.5.054 library and IPP sample 6.1.5.060
The problem is that if you create the external Memory Allocator and pass it to the Init of the decoder, when you decoder make the line:

status = BaseCodec::Init(lpInit);

decoder check if you pass an allocator or have to create new one, but this condition:

if (init->lpMemoryAllocator) {
if (m_bOwnAllocator || m_pMemoryAllocator != init->lpMemoryAllocator) {
vm_debug_trace(VM_DEBUG_ERROR, VM_STRING("can't replace external allocator\\n"));
return UMC_ERR_INIT;
}

you get always UMC_ERR_INIT because the m_pMemoryAllocator is NULL. I have changed the line in this mode

if (init->lpMemoryAllocator) {
if (m_bOwnAllocator || (m_pMemoryAllocator != init->lpMemoryAllocator)&&(m_pMemoryAllocator!=NULL)) {
vm_debug_trace(VM_DEBUG_ERROR, VM_STRING("can't replace external allocator\\n"));
return UMC_ERR_INIT;
}

I get it works.
It's useful to take the MemoryAllocator extern from the decoder, so if you have to destroy and recreate the decoder you do not need to free all the memory allocated.
regards
0 Kudos
2 Replies
PaulF_IntelCorp
Employee
50 Views

Thank you for providing that useful bit of information regarding the UMC sample code!
Chao_Y_Intel
Employee
50 Views


Hi,

The engineer suggested that:

Thesamples has the wrong condition:
(m_bOwnAllocator || m_pMemoryAllocator != init->lpMemoryAllocator)


this shouldbe replaced with:

(m_bOwnAllocator && m_pMemoryAllocator != init->lpMemoryAllocator)

The fix will be included in the future version.

Thanks,
Chao

Reply