msdk: add mjpeg encoder
https://bugzilla.gnome.org/show_bug.cgi?id=774793
This commit is contained in:
		
							parent
							
								
									1f6903bf3e
								
							
						
					
					
						commit
						1a4db8846f
					
				| @ -5,6 +5,7 @@ libgstmsdk_la_SOURCES = \ | ||||
| 	gstmsdkh264enc.c \
 | ||||
| 	gstmsdkh265dec.c \
 | ||||
| 	gstmsdkh265enc.c \
 | ||||
| 	gstmsdkmjpegenc.c \
 | ||||
| 	gstmsdkmpeg2enc.c \
 | ||||
| 	gstmsdkvp8enc.c \
 | ||||
| 	gstmsdkdec.c \
 | ||||
| @ -20,6 +21,7 @@ noinst_HEADERS = \ | ||||
| 	gstmsdkh264enc.h \
 | ||||
| 	gstmsdkh265dec.h \
 | ||||
| 	gstmsdkh265enc.h \
 | ||||
| 	gstmsdkmjpegenc.h \
 | ||||
| 	gstmsdkmpeg2enc.h \
 | ||||
| 	gstmsdkvp8enc.h \
 | ||||
| 	gstmsdkdec.h \
 | ||||
|  | ||||
| @ -39,6 +39,7 @@ | ||||
| #include "gstmsdkh264enc.h" | ||||
| #include "gstmsdkh265dec.h" | ||||
| #include "gstmsdkh265enc.h" | ||||
| #include "gstmsdkmjpegenc.h" | ||||
| #include "gstmsdkmpeg2enc.h" | ||||
| #include "gstmsdkvp8enc.h" | ||||
| 
 | ||||
| @ -48,6 +49,7 @@ GST_DEBUG_CATEGORY (gst_msdkh264dec_debug); | ||||
| GST_DEBUG_CATEGORY (gst_msdkh264enc_debug); | ||||
| GST_DEBUG_CATEGORY (gst_msdkh265dec_debug); | ||||
| GST_DEBUG_CATEGORY (gst_msdkh265enc_debug); | ||||
| GST_DEBUG_CATEGORY (gst_msdkmjpegenc_debug); | ||||
| GST_DEBUG_CATEGORY (gst_msdkmpeg2enc_debug); | ||||
| GST_DEBUG_CATEGORY (gst_msdkvp8enc_debug); | ||||
| 
 | ||||
| @ -66,6 +68,8 @@ plugin_init (GstPlugin * plugin) | ||||
|       "msdkh265dec"); | ||||
|   GST_DEBUG_CATEGORY_INIT (gst_msdkh265enc_debug, "msdkh265enc", 0, | ||||
|       "msdkh265enc"); | ||||
|   GST_DEBUG_CATEGORY_INIT (gst_msdkmjpegenc_debug, "msdkmjpegenc", 0, | ||||
|       "msdkmjpegenc"); | ||||
|   GST_DEBUG_CATEGORY_INIT (gst_msdkmpeg2enc_debug, "msdkmpeg2enc", 0, | ||||
|       "msdkmpeg2enc"); | ||||
|   GST_DEBUG_CATEGORY_INIT (gst_msdkvp8enc_debug, "msdkvp8enc", 0, "msdkvp8enc"); | ||||
| @ -86,6 +90,9 @@ plugin_init (GstPlugin * plugin) | ||||
|   ret = gst_element_register (plugin, "msdkh265enc", GST_RANK_NONE, | ||||
|       GST_TYPE_MSDKH265ENC); | ||||
| 
 | ||||
|   ret = gst_element_register (plugin, "msdkmjpegenc", GST_RANK_NONE, | ||||
|       GST_TYPE_MSDKMJPEGENC); | ||||
| 
 | ||||
|   ret = gst_element_register (plugin, "msdkmpeg2enc", GST_RANK_NONE, | ||||
|       GST_TYPE_MSDKMPEG2ENC); | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										163
									
								
								sys/msdk/gstmsdkmjpegenc.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								sys/msdk/gstmsdkmjpegenc.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,163 @@ | ||||
| /* GStreamer Intel MSDK plugin
 | ||||
|  * Copyright (c) 2016, Intel Corporation | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions are met: | ||||
|  * | ||||
|  * 1. Redistributions of source code must retain the above copyright notice, | ||||
|  *    this list of conditions and the following disclaimer. | ||||
|  * | ||||
|  * 2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|  *    this list of conditions and the following disclaimer in the documentation | ||||
|  *    and/or other materials provided with the distribution. | ||||
|  * | ||||
|  * 3. Neither the name of the copyright holder nor the names of its contributors | ||||
|  *    may be used to endorse or promote products derived from this software | ||||
|  *    without specific prior written permission. | ||||
|  * | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||||
|  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, | ||||
|  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||||
|  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR | ||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; | ||||
|  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, | ||||
|  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE | ||||
|  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||||
|  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  */ | ||||
| 
 | ||||
| #ifdef HAVE_CONFIG_H | ||||
| #  include <config.h> | ||||
| #endif | ||||
| #include <mfxstructures.h> | ||||
| #include <mfxjpeg.h> | ||||
| 
 | ||||
| #include "gstmsdkmjpegenc.h" | ||||
| 
 | ||||
| GST_DEBUG_CATEGORY_EXTERN (gst_msdkmjpegenc_debug); | ||||
| #define GST_CAT_DEFAULT gst_msdkmjpegenc_debug | ||||
| 
 | ||||
| enum | ||||
| { | ||||
|   PROP_0, | ||||
|   PROP_QUALITY | ||||
| }; | ||||
| 
 | ||||
| #define DEFAULT_QUALITY 85 | ||||
| 
 | ||||
| static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src", | ||||
|     GST_PAD_SRC, | ||||
|     GST_PAD_ALWAYS, | ||||
|     GST_STATIC_CAPS ("image/jpeg, " | ||||
|         "framerate = (fraction) [0/1, MAX], " | ||||
|         "width = (int) [ 1, MAX ], height = (int) [ 1, MAX ]") | ||||
|     ); | ||||
| 
 | ||||
| #define gst_msdkmjpegenc_parent_class parent_class | ||||
| G_DEFINE_TYPE (GstMsdkMJPEGEnc, gst_msdkmjpegenc, GST_TYPE_MSDKENC); | ||||
| 
 | ||||
| static gboolean | ||||
| gst_msdkmjpegenc_set_format (GstMsdkEnc * encoder) | ||||
| { | ||||
|   return TRUE; | ||||
| } | ||||
| 
 | ||||
| static gboolean | ||||
| gst_msdkmjpegenc_configure (GstMsdkEnc * encoder) | ||||
| { | ||||
|   GstMsdkMJPEGEnc *mjpegenc = GST_MSDKMJPEGENC (encoder); | ||||
| 
 | ||||
|   encoder->param.mfx.CodecId = MFX_CODEC_JPEG; | ||||
|   encoder->param.mfx.Quality = mjpegenc->quality; | ||||
|   encoder->param.mfx.Interleaved = 1; | ||||
|   encoder->param.mfx.RestartInterval = 0; | ||||
|   encoder->param.mfx.BufferSizeInKB = 3072; | ||||
| 
 | ||||
|   return TRUE; | ||||
| } | ||||
| 
 | ||||
| static GstCaps * | ||||
| gst_msdkmjpegenc_set_src_caps (GstMsdkEnc * encoder) | ||||
| { | ||||
|   GstCaps *caps; | ||||
| 
 | ||||
|   caps = gst_caps_from_string ("image/jpeg"); | ||||
| 
 | ||||
|   return caps; | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| gst_msdkmjpegenc_get_property (GObject * object, guint prop_id, GValue * value, | ||||
|     GParamSpec * pspec) | ||||
| { | ||||
|   GstMsdkMJPEGEnc *thiz = GST_MSDKMJPEGENC (object); | ||||
| 
 | ||||
|   GST_OBJECT_LOCK (thiz); | ||||
|   switch (prop_id) { | ||||
|     case PROP_QUALITY: | ||||
|       g_value_set_uint (value, thiz->quality); | ||||
|       break; | ||||
|     default: | ||||
|       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | ||||
|       break; | ||||
|   } | ||||
|   GST_OBJECT_UNLOCK (thiz); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| gst_msdkmjpegenc_set_property (GObject * object, guint prop_id, | ||||
|     const GValue * value, GParamSpec * pspec) | ||||
| { | ||||
|   GstMsdkMJPEGEnc *thiz = GST_MSDKMJPEGENC (object); | ||||
| 
 | ||||
|   GST_OBJECT_LOCK (thiz); | ||||
|   switch (prop_id) { | ||||
|     case PROP_QUALITY: | ||||
|       thiz->quality = g_value_get_uint (value); | ||||
|       break; | ||||
|     default: | ||||
|       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | ||||
|       break; | ||||
|   } | ||||
|   GST_OBJECT_UNLOCK (thiz); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| gst_msdkmjpegenc_class_init (GstMsdkMJPEGEncClass * klass) | ||||
| { | ||||
|   GObjectClass *gobject_class; | ||||
|   GstElementClass *element_class; | ||||
|   GstMsdkEncClass *encoder_class; | ||||
| 
 | ||||
|   gobject_class = G_OBJECT_CLASS (klass); | ||||
|   element_class = GST_ELEMENT_CLASS (klass); | ||||
|   encoder_class = GST_MSDKENC_CLASS (klass); | ||||
| 
 | ||||
|   encoder_class->set_format = gst_msdkmjpegenc_set_format; | ||||
|   encoder_class->configure = gst_msdkmjpegenc_configure; | ||||
|   encoder_class->set_src_caps = gst_msdkmjpegenc_set_src_caps; | ||||
| 
 | ||||
|   gobject_class->get_property = gst_msdkmjpegenc_get_property; | ||||
|   gobject_class->set_property = gst_msdkmjpegenc_set_property; | ||||
| 
 | ||||
|   g_object_class_install_property (gobject_class, PROP_QUALITY, | ||||
|       g_param_spec_uint ("quality", "Quality", "Quality of encoding", | ||||
|           0, 100, DEFAULT_QUALITY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); | ||||
| 
 | ||||
|   gst_element_class_set_static_metadata (element_class, | ||||
|       "Intel MSDK MJPEG encoder", | ||||
|       "Codec/Encoder/Video", | ||||
|       "MJPEG video encoder based on Intel Media SDK", | ||||
|       "Scott D Phillips <scott.d.phillips@intel.com>"); | ||||
| 
 | ||||
|   gst_element_class_add_static_pad_template (element_class, &src_factory); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| gst_msdkmjpegenc_init (GstMsdkMJPEGEnc * thiz) | ||||
| { | ||||
|   thiz->quality = DEFAULT_QUALITY; | ||||
| } | ||||
							
								
								
									
										68
									
								
								sys/msdk/gstmsdkmjpegenc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								sys/msdk/gstmsdkmjpegenc.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,68 @@ | ||||
| /* GStreamer Intel MSDK plugin
 | ||||
|  * Copyright (c) 2016, Intel Corporation | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions are met: | ||||
|  * | ||||
|  * 1. Redistributions of source code must retain the above copyright notice, | ||||
|  *    this list of conditions and the following disclaimer. | ||||
|  * | ||||
|  * 2. Redistributions in binary form must reproduce the above copyright notice, | ||||
|  *    this list of conditions and the following disclaimer in the documentation | ||||
|  *    and/or other materials provided with the distribution. | ||||
|  * | ||||
|  * 3. Neither the name of the copyright holder nor the names of its contributors | ||||
|  *    may be used to endorse or promote products derived from this software | ||||
|  *    without specific prior written permission. | ||||
|  * | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||||
|  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, | ||||
|  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||||
|  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR | ||||
|  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||||
|  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||||
|  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; | ||||
|  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, | ||||
|  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE | ||||
|  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | ||||
|  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __GST_MSDKMJPEGENC_H__ | ||||
| #define __GST_MSDKMJPEGENC_H__ | ||||
| 
 | ||||
| #include "gstmsdkenc.h" | ||||
| 
 | ||||
| G_BEGIN_DECLS | ||||
| 
 | ||||
| #define GST_TYPE_MSDKMJPEGENC \ | ||||
|   (gst_msdkmjpegenc_get_type()) | ||||
| #define GST_MSDKMJPEGENC(obj) \ | ||||
|   (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_MSDKMJPEGENC,GstMsdkMJPEGEnc)) | ||||
| #define GST_MSDKMJPEGENC_CLASS(klass) \ | ||||
|   (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_MSDKMJPEGENC,GstMsdkMJPEGEncClass)) | ||||
| #define GST_IS_MSDKMJPEGENC(obj) \ | ||||
|   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MSDKMJPEGENC)) | ||||
| #define GST_IS_MSDKMJPEGENC_CLASS(klass) \ | ||||
|   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MSDKMJPEGENC)) | ||||
| 
 | ||||
| typedef struct _GstMsdkMJPEGEnc GstMsdkMJPEGEnc; | ||||
| typedef struct _GstMsdkMJPEGEncClass GstMsdkMJPEGEncClass; | ||||
| 
 | ||||
| struct _GstMsdkMJPEGEnc | ||||
| { | ||||
|   GstMsdkEnc base; | ||||
|   guint quality; | ||||
| }; | ||||
| 
 | ||||
| struct _GstMsdkMJPEGEncClass | ||||
| { | ||||
|   GstMsdkEncClass parent_class; | ||||
| }; | ||||
| 
 | ||||
| GType gst_msdkmjpegenc_get_type (void); | ||||
| 
 | ||||
| G_END_DECLS | ||||
| 
 | ||||
| #endif /* __GST_MSDKMJPEGENC_H__ */ | ||||
| @ -6,6 +6,7 @@ msdk_sources = [ | ||||
|   'gstmsdkh264enc.c', | ||||
|   'gstmsdkh265dec.c', | ||||
|   'gstmsdkh265enc.c', | ||||
|   'gstmsdkmjpegenc.c', | ||||
|   'gstmsdkmpeg2enc.c', | ||||
|   'gstmsdkvp8enc.c', | ||||
|   'msdk.c', | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user