Bitmap to JPEG encoder
Nicolas Dufresne
nicolas at ndufresne.ca
Mon May 28 16:52:31 UTC 2018
Le lundi 28 mai 2018 à 18:42 +0200, Wolfgang Grandegger a écrit :
> Hello,
>
> Am 28.05.2018 um 18:03 schrieb Nicolas Dufresne:
> > Le lundi 28 mai 2018 à 17:24 +0200, Wolfgang Grandegger a écrit :
> > > Hello,
> > >
> > > I'm rather new to GSTreamer. I want to JPEG encode an RGB video
> > > stream
> > > and send it to the network e.g. with the command:
> > >
> > > # gst-launch-1.0 -v videotestsrc \
> > > ! video/x-raw,format=RGB,width=640,height=480,framerate=30/1
> > > \
> > > ! vaapijpegenc quality=90 \
> > > ! rtpjpegpay ! udpsink host=192.168.0.254 port=5678
> > > Setting pipeline to PAUSED ...
> > > Pipeline is PREROLLING ...
> > > Got context from element 'vaapiencodejpeg0':
> > > gst.vaapi.Display=context,
> > > gst.vaapi.Display=(GstVaapiDisplay)"\(GstVaapiDisplayDRM\)\
> > > vaapidisplaydrm1";
> > > ERROR: from element
> > > /GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0: Internal
> > > data stream error.
> > > Additional debug info:
> > > gstbasesrc.c(2939): gst_base_src_loop ():
> > > /GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0:
> > > streaming stopped, reason not-negotiated (-4)
> > > ERROR: pipeline doesn't want to preroll.
> > > Setting pipeline to NULL ...
> > > Freeing pipeline ...
> > >
> > > This command works fine with the "NV12" format but fails with
> > > "RGB".
> > > Also "jpegenc" does not like it. Obviously, I missed something!?
> >
> > You'll need to add color conversion. With VAAPI, you can use
> > vaapipostproc, with jpegenc, videoconvert. The second will work for
> > both, but vaapipostproc uses the GPU.
>
> OK, the following works:
>
> # gst-launch-1.0 -v videotestsrc \
> ! video/x-raw,format=RGB,width=640,height=480,framerate=30/1 \
> ! videoconvert ! vaapijpegenc quality=90 \
> ! rtpjpegpay ! udpsink host=192.168.0.254 port=5678
>
> Also for "jpegenc". But the command using "vaapipostproc" fails:
>
> # gst-launch-1.0 -v videotestsrc \
> ! video/x-raw,format=RGB,width=640,height=480,framerate=30/1 \
> ! vaapipostproc ! vaapijpegenc quality=90 \
> ! rtpjpegpay ! udpsink host=192.168.0.254 port=5678
> Setting pipeline to PAUSED ...
> Pipeline is PREROLLING ...
> Got context from element 'vaapiencodejpeg0':
> gst.vaapi.Display=context,
> gst.vaapi.Display=(GstVaapiDisplay)"\(GstVaapiDisplayDRM\)\
> vaapidisplaydrm1";
> ERROR: from element
> /GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0: Internal data
> stream error.
> Additional debug info:
> gstbasesrc.c(2939): gst_base_src_loop ():
> /GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0:
> streaming stopped, reason not-negotiated (-4)
> ERROR: pipeline doesn't want to preroll.
> Setting pipeline to NULL ...
> Freeing pipeline ...
>
> But it work if I use "RGBx" format with little CPU usage :). What
> confuses me, is that "gst-inspect" tells me, that the sink of
> "vaapipostproc" also supports "RGB".
In case of HW driven element, the template caps will contain a super
set. The supported formats are then discovered at run-time. 24bit
packed RGB is not supported on my PC here.
>
> Thanks,
>
> Wolfgang.
More information about the gstreamer-devel
mailing list