Hi,
I'm playing live stream from a remote camera using the VPU Wrapper for decoding and IPU mxc_ipu dev for display. The video runs smoothly for about 3 to 4 minutes then VPU_DecDecodeBuf() starts returning
VPU_DEC_INPUT_USED,
VPU_DEC_OUTPUT_NODIS,
VPU_DEC_NO_ENOUGH_BUF then the video stops.
I've double checked that all the allocated video buffers are cleared once displayed by calling VPU_DecOutFrameDisplayed().
When I enabled VPU debugging I get the following messages:
1_repeatFrame: 0,interlacedFrame: 0, indexFrameRangemap: 0, progressiveFrame: 0, topFieldFirst: 0
aspect ratio: format: 0, ratio: 0x1, InWidth: 640, InHeight: 480
return Q16Ratio: 0x10000, [OutWidth,OutHeight]=[65536, 65536]
one decoded frame: start: 0x18D76ACA, end: 0x18D797C1
VpuAccumulateConsumedBytes: size: 11511, type: 2
last end: 0x18D76ACA, start: 0x18D76ACA, buf start: 0x18C00000, buf end: 0x18F00000, stuff size: 0
indexFrameDisplay=2
frame : (P)
VpuGetOutput: Ref frame 1
VpuCheckDeadLoop: total_dec_size: 0, total_dec_loop: 0, total_null_loop: 1
calling vpu_DecGetBitstreamBuffer()
calling vpu_DecGetBitstreamBuffer()
Wr: 0x18D8CD08, Rd: 0x18D79A00, space: 3065079
calling vpu_DecUpdateBitstreamBuffer(): 2997
calling vpu_DecGetBitstreamBuffer()
nSpace: 3062082, filled : 83646
===================vpu_DecStartOneFrame: chunkSize: 0, search: 0
calling vpu_DecStartOneFrame(): 0, skipmode: 0
while: calling vpu_WaitForInt(500)
VPU_DecOutFrameDisplayed: calling vpu_DecClrDispFlag(): 2
calling vpu_DecGetOutputInfo()
calling vpu_DecGetOutputInfo(), indexFrmDec: 0, return indexFrmDis: 3, type: 0, success: 0x1, errMB: 0, consumed: 78793
fieldSequence: 0, vc1_repeatFrame: 0,interlacedFrame: 0, indexFrameRangemap: 0, progressiveFrame: 0, topFieldFirst: 0
aspect ratio: format: 0, ratio: 0x1, InWidth: 640, InHeight: 480
return Q16Ratio: 0x10000, [OutWidth,OutHeight]=[65536, 65536]
one decoded frame: start: 0x18D797C1, end: 0x18D8CB8A
VpuAccumulateConsumedBytes: size: 78793, type: 2
last end: 0x18D797C1, start: 0x18D797C1, buf start: 0x18C00000, buf end: 0x18F00000, stuff size: 0
indexFrameDisplay=3
frame : (P)
VpuGetOutput: Ref frame 1
VpuCheckDeadLoop: total_dec_size: 0, total_dec_loop: 0, total_null_loop: 1
VPU_DecOutFrameDisplayed: calling vpu_DecClrDispFlag(): 3
calling vpu_DecGetBitstreamBuffer()
calling vpu_DecGetBitstreamBuffer()
Wr: 0x18D8D8BD, Rd: 0x18D8CE00, space: 3140930
calling vpu_DecUpdateBitstreamBuffer(): 3217
calling vpu_DecGetBitstreamBuffer()
nSpace: 3137713, filled : 8015
===================vpu_DecStartOneFrame: chunkSize: 0, search: 0
calling vpu_DecStartOneFrame(): 0, skipmode: 0
while: calling vpu_WaitForInt(500)
calling vpu_DecGetOutputInfo()
calling vpu_DecGetOutputInfo(), indexFrmDec: -1, return indexFrmDis: -3, type: 0, success: 0x1, errMB: 0, consumed: 78793
fieldSequence: 0, vc1_repeatFrame: 0,interlacedFrame: 0, indexFrameRangemap: 0, progressiveFrame: 0, topFieldFirst: 0
TSE: no enough frame buffer and return one output frame
VpuCheckDeadLoop: total_dec_size: 0, total_dec_loop: 0, total_null_loop: 1
calling vpu_DecGetBitstreamBuffer()
calling vpu_DecGetBitstreamBuffer()
Wr: 0x18D8E54E, Rd: 0x18D8CE00, space: 3137713
calling vpu_DecUpdateBitstreamBuffer(): 3009
calling vpu_DecGetBitstreamBuffer()
nSpace: 3134704, filled : 11024
===================vpu_DecStartOneFrame: chunkSize: 0, search: 0
calling vpu_DecStartOneFrame(): 0, skipmode: 0
while: calling vpu_WaitForInt(500)
calling vpu_DecGetOutputInfo()
calling vpu_DecGetOutputInfo(), indexFrmDec: -1, return indexFrmDis: -3, type: 0, success: 0x1, errMB: 0, consumed: 78793
fieldSequence: 0, vc1_repeatFrame: 0,interlacedFrame: 0, indexFrameRangemap: 0, progressiveFrame: 0, topFieldFirst: 0
TSE: no enough frame buffer and return one output frame
VpuCheckDeadLoop: total_dec_size: 3217, total_dec_loop: 1, total_null_loop: 2
calling vpu_DecGetBitstreamBuffer()
calling vpu_DecGetBitstreamBuffer()
Wr: 0x18D8F10F, Rd: 0x18D8CE00, space: 3134704
calling vpu_DecUpdateBitstreamBuffer(): 3225
calling vpu_DecGetBitstreamBuffer()
nSpace: 3131479, filled : 14249
===================vpu_DecStartOneFrame: chunkSize: 0, search: 0
calling vpu_DecStartOneFrame(): 0, skipmode: 0
while: calling vpu_WaitForInt(500)
calling vpu_DecGetOutputInfo()
calling vpu_DecGetOutputInfo(), indexFrmDec: -1, return indexFrmDis: -3, type: 0, success: 0x1, errMB: 0, consumed: 78793
why the decoder is not using the available buffers and how should I retrieve the normal video stream display without restarting the process?
Note: I'm running BSP12.08 on Nitrogen Board and using Poky distribution Yocto build system.
hi, can you please provide the application you are using?
Hi Anish,
I moved away from using the VPU API's as it's too complicated and proven to be unreliable "at least for my purpose!"
Gstreamer is more reliable for handling the decoding and save me a lot of headache but it's very limited in it's display capabilities.
I'm trying to learn OpenGL to use it for display while gstreamer for decoding I hope this will work.
In my opinion Freescale is not providing enough examples on how to use the i.MX6 platform. My application is simply playing multiple video stream and a GUI! There should be a similar example provided by Freescale but there isn't one:smileysad:
Thanks Tarek El-Sherbiny for your information :smileyhappy:
Hi, can you let me know the chip related with this question?
Chip is i.MX6Q