Hi,
I am using Tegra implementation of OpenMAX IL.
While being able to see the first ~120 frames, the decoder stops filling buffers at that point.
There are pending requests that I’ve sent using OMX_AllocateBuffer(), but the callback that says that the buffer filling is done isn’t called by the decoder.
However, the decoder keeps emptying my buffers, and i get callback calls that the device has finished emptying them.
Does anyone here have an idea what i could be doing wrong?
I allocate the buffers using OMX_AllocateBuffer() which returns ok.
Few information details, i hope they will assist in showing what I’m doing wrong:
I am using a video that I’ve h.264 compressed (pure NALs sequence, no container)
I can view the complete video using ffmpeg, and I’m trying to use OpenMAX IL, in order to use the decoding hardware.
The buffers are allocated in the size that the input port defined for me (which i got using the OMX_GetParameter) which is around 500,000 bytes.
If i provide full buffers when using OMX_EmptyThisBuffer i get perfect frames, but as i said it outputting frames after ~120 frames.
If i provide LESS (while making sure that nOffset=0 and nFilledLen=[bytes_i_provided],
the rendering contains artifacts, but shows much more of the video.
I’m quite sure that the compressed data that i provide is correct since:
- I can view it with ffmpeg on the same device.
- I’ve checked again and again to make sure i provide the compressed data in order
- I’m only requesting OMX_EmptyThisBuffer after a callback returned and i’m sure that this buffer is ready for new info.
I’m stuck on this issue for a few days now, any assistance will be highly appreciated…
Here’s my code:
http://ideone.com/WhOqg
I’m aware it’s quite a few lines of code, i tried clearing it up.
The OMX_Decode() (Notice, It’s my function, bad choice of prefix… )
Is where i do the FillThisBuffer/EmptyThisBuffer.
In the callbacks “decoder_empty_buffer_done”,“decoder_fill_buffer_done” i unlock the buffers for re-use.
Perhaps I’m doing something wrong in the initialization?
Maybe this is timestamps related?
Quite lost on this one