Hi everyone,
I'm having issue using VPUdec to decode MJPEG video. Althought, it is said that VPUdec can decode MJPEG stream, i have been unable to make it works on my side.
Then, tried to transcode a file from H264 to MJPEG thanks to VPUenc (codec=12). This worked great. But then, when I do the other way around : use the file transcoded by the iMX6 and decode it thanks to the VPUdec, it doesn't work.
Does someone has an idea what's wrong ?
Thanks in advance for your help..
command line to transcode h264 ->MJPEG :
gst-launch -vvv filesrc location=test.avi ! decodebin2 ! vpuenc codec=12 bitrate=20000 ! filesink location=test_mjpeg.avi
command line to decode MJPEG :
gst-launch -vvv filesrc location=test_mjpeg.avi ! 'image/jpeg' ! vpudec ! vpuenc codec=6 ! filesink location=test_decode.avi
(I know this is not an 'image' as said in the pipeline, but this is the most relevant parameter I have found in VPUdec description.)
error when I try to decode MJPEG :
root@phyFLEX-i:~ gst-launch -vvv filesrc location=test_mjpeg.avi ! 'image/jpeg'
! vpudec ! vpuenc codec=6 ! filesink location=test_decode.avi
Setting pipeline to PAUSED ...
[INFO] Product Info: i.MX6Q/D/S
vpuenc versions :smileyhappy:
plugin: 3.0.7
wrapper: 1.0.35(VPUWRAPPER_ARM_LINUX Build on Sep 2 2014 12:27:25)
vpulib: 5.4.12
firmware: 2.1.9.36350
[INFO] Product Info: i.MX6Q/D/S
vpudec versions :smileyhappy:
plugin: 3.0.7
wrapper: 1.0.35(VPUWRAPPER_ARM_LINUX Build on Sep 2 2014 12:27:25)
vpulib: 5.4.12
firmware: 2.1.9.36350
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = image/jpeg
[INFO] bitstreamMode 1, chromaInterleave 0, mapType 0, tiled2LinearEnable 0
/GstPipeline:pipeline0/GstVpuDec:vpudec0.GstPad:sink: caps = image/jpeg
/GstPipeline:pipeline0/GstVpuDec:vpudec0.GstPad:src: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)1/1, crop-top=(int)0, crop-left=(int)0, crop-right=(int)0, crop-bottom=(int)0, num-buffers-required=(int)7, framerate=(fraction)30/1, alignment=(int)1
VPU blocking: timeout.
[WARN] pic was forced to be done
/GstPipeline:pipeline0/GstVpuEnc:vpuenc0.GstPad:sink: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)720, height=(int)576, pixel-aspect-ratio=(fraction)1/1, crop-top=(int)0, crop-left=(int)0, crop-right=(int)0, crop-bottom=(int)0, num-buffers-required=(int)7, framerate=(fraction)30/1, alignment=(int)1
[INFO] chromaInterleave 0, mapType 0, linear2TiledEnable 0
/GstPipeline:pipeline0/GstVpuEnc:vpuenc0.GstPad:src: caps = video/x-h264, width=(int)720, height=(int)576, framerate=(fraction)30/1, framed=(boolean)true
/GstPipeline:pipeline0/GstFileSink:filesink0.GstPad:sink: caps = video/x-h264, width=(int)720, height=(int)576, framerate=(fraction)30/1, framed=(boolean)true
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
ERROR: from element /GstPipeline:pipeline0/GstVpuDec:vpudec0: unknown error detect
Additional debug info:
vpudec.c(1409): gst_vpudec_process_error (): /GstPipeline:pipeline0/GstVpuDec:vpudec0
Execution ended after 1580669 ns.
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
/GstPipeline:pipeline0/GstFileSink:filesink0.GstPad:sink: caps = NULL
/GstPipeline:pipeline0/GstVpuEnc:vpuenc0.GstPad:src: caps = NULL
/GstPipeline:pipeline0/GstVpuEnc:vpuenc0.GstPad:sink: caps = NULL
/GstPipeline:pipeline0/GstVpuDec:vpudec0.GstPad:src: caps = NULL
/GstPipeline:pipeline0/GstVpuDec:vpudec0.GstPad:sink: caps = NULL
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = NULL
Setting pipeline to NULL ...
Freeing pipeline ...
Yann
Hello,
Perhaps, the problem relates to the fact, that in hardware the VPU supports
only Baseline JPEG profile, for others You need to use a software JPEG codec.
Have a great day,
Yuri
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
Hi Yuri,
On this topic : jpg decode using vpudec ? It's said that VPU of iMX6 is able to decode MJPEG and not JPEG :
"No, the vpudec doesn't support jpeg decode" - jackmao
"it seems vpudec just can support mjpeg video" - joanxie
So, it seems possible to decode MJPEG, that is why I am try so hard to do it...
What must be contained in the header of the MJPEG stream ?
Does my pipeline is correct ?
(If necessary, I can switch my stream from MJPEG to JPEG, but I have to use VPUdec for perfomance reason). The questions remain the "same".
Thanks in advance for your reply,
Yann
Hello,
as has been mentioned only Baseline JPEG profile is supported,
so, please check what profile is used in Your "test_mjpeg.avi".
Regards,
Yuri