From fbf7e905f01aef9037780417565aaad05540b172 Mon Sep 17 00:00:00 2001 From: Scott D Phillips Date: Tue, 22 Nov 2016 13:55:00 -0800 Subject: msdk: add mjpeg decoder https://bugzilla.gnome.org/show_bug.cgi?id=774793 --- sys/msdk/Makefile.am | 2 ++ sys/msdk/gstmsdk.c | 7 ++++ sys/msdk/gstmsdkmjpegdec.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++ sys/msdk/gstmsdkmjpegdec.h | 67 ++++++++++++++++++++++++++++++++++++ sys/msdk/meson.build | 1 + 5 files changed, 163 insertions(+) create mode 100644 sys/msdk/gstmsdkmjpegdec.c create mode 100644 sys/msdk/gstmsdkmjpegdec.h diff --git a/sys/msdk/Makefile.am b/sys/msdk/Makefile.am index bdc111719..1edc51619 100644 --- a/sys/msdk/Makefile.am +++ b/sys/msdk/Makefile.am @@ -5,6 +5,7 @@ libgstmsdk_la_SOURCES = \ gstmsdkh264enc.c \ gstmsdkh265dec.c \ gstmsdkh265enc.c \ + gstmsdkmjpegdec.c \ gstmsdkmjpegenc.c \ gstmsdkmpeg2enc.c \ gstmsdkvp8enc.c \ @@ -21,6 +22,7 @@ noinst_HEADERS = \ gstmsdkh264enc.h \ gstmsdkh265dec.h \ gstmsdkh265enc.h \ + gstmsdkmjpegdec.h \ gstmsdkmjpegenc.h \ gstmsdkmpeg2enc.h \ gstmsdkvp8enc.h \ diff --git a/sys/msdk/gstmsdk.c b/sys/msdk/gstmsdk.c index 93b1af438..bb3cda348 100644 --- a/sys/msdk/gstmsdk.c +++ b/sys/msdk/gstmsdk.c @@ -39,6 +39,7 @@ #include "gstmsdkh264enc.h" #include "gstmsdkh265dec.h" #include "gstmsdkh265enc.h" +#include "gstmsdkmjpegdec.h" #include "gstmsdkmjpegenc.h" #include "gstmsdkmpeg2enc.h" #include "gstmsdkvp8enc.h" @@ -49,6 +50,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_msdkmjpegdec_debug); GST_DEBUG_CATEGORY (gst_msdkmjpegenc_debug); GST_DEBUG_CATEGORY (gst_msdkmpeg2enc_debug); GST_DEBUG_CATEGORY (gst_msdkvp8enc_debug); @@ -68,6 +70,8 @@ plugin_init (GstPlugin * plugin) "msdkh265dec"); GST_DEBUG_CATEGORY_INIT (gst_msdkh265enc_debug, "msdkh265enc", 0, "msdkh265enc"); + GST_DEBUG_CATEGORY_INIT (gst_msdkmjpegdec_debug, "msdkmjpegdec", 0, + "msdkmjpegdec"); GST_DEBUG_CATEGORY_INIT (gst_msdkmjpegenc_debug, "msdkmjpegenc", 0, "msdkmjpegenc"); GST_DEBUG_CATEGORY_INIT (gst_msdkmpeg2enc_debug, "msdkmpeg2enc", 0, @@ -90,6 +94,9 @@ plugin_init (GstPlugin * plugin) ret = gst_element_register (plugin, "msdkh265enc", GST_RANK_NONE, GST_TYPE_MSDKH265ENC); + ret = gst_element_register (plugin, "msdkmjpegdec", GST_RANK_NONE, + GST_TYPE_MSDKMJPEGDEC); + ret = gst_element_register (plugin, "msdkmjpegenc", GST_RANK_NONE, GST_TYPE_MSDKMJPEGENC); diff --git a/sys/msdk/gstmsdkmjpegdec.c b/sys/msdk/gstmsdkmjpegdec.c new file mode 100644 index 000000000..332345085 --- /dev/null +++ b/sys/msdk/gstmsdkmjpegdec.c @@ -0,0 +1,86 @@ +/* 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 NEGLIGDECE + * 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 +#endif +#include +#include + +#include "gstmsdkmjpegdec.h" + +#include + +GST_DEBUG_CATEGORY_EXTERN (gst_msdkmjpegdec_debug); +#define GST_CAT_DEFAULT gst_msdkmjpegdec_debug + +static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink", + GST_PAD_SINK, + GST_PAD_ALWAYS, + GST_STATIC_CAPS ("image/jpeg, " + "framerate = (fraction) [0/1, MAX], " + "width = (int) [ 1, MAX ], height = (int) [ 1, MAX ], parsed = true ") + ); + +#define gst_msdkmjpegdec_parent_class parent_class +G_DEFINE_TYPE (GstMsdkMJPEGDec, gst_msdkmjpegdec, GST_TYPE_MSDKDEC); + +static gboolean +gst_msdkmjpegdec_configure (GstMsdkDec * decoder) +{ + decoder->param.mfx.CodecId = MFX_CODEC_JPEG; + return TRUE; +} + +static void +gst_msdkmjpegdec_class_init (GstMsdkMJPEGDecClass * klass) +{ + GstElementClass *element_class; + GstMsdkDecClass *decoder_class; + + element_class = GST_ELEMENT_CLASS (klass); + decoder_class = GST_MSDKDEC_CLASS (klass); + + decoder_class->configure = GST_DEBUG_FUNCPTR (gst_msdkmjpegdec_configure); + + gst_element_class_set_static_metadata (element_class, + "Intel MSDK MJPEG decoder", + "Codec/Decoder/Video", + "MJPEG video decoder based on Intel Media SDK", + "Scott D Phillips "); + + gst_element_class_add_static_pad_template (element_class, &sink_factory); +} + +static void +gst_msdkmjpegdec_init (GstMsdkMJPEGDec * thiz) +{ +} diff --git a/sys/msdk/gstmsdkmjpegdec.h b/sys/msdk/gstmsdkmjpegdec.h new file mode 100644 index 000000000..565c95f32 --- /dev/null +++ b/sys/msdk/gstmsdkmjpegdec.h @@ -0,0 +1,67 @@ +/* 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 NEGLIGDECE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef __GST_MSDKMJPEGDEC_H__ +#define __GST_MSDKMJPEGDEC_H__ + +#include "gstmsdkdec.h" + +G_BEGIN_DECLS + +#define GST_TYPE_MSDKMJPEGDEC \ + (gst_msdkmjpegdec_get_type()) +#define GST_MSDKMJPEGDEC(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_MSDKMJPEGDEC,GstMsdkMJPEGDec)) +#define GST_MSDKMJPEGDEC_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_MSDKMJPEGDEC,GstMsdkMJPEGDecClass)) +#define GST_IS_MSDKMJPEGDEC(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MSDKMJPEGDEC)) +#define GST_IS_MSDKMJPEGDEC_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MSDKMJPEGDEC)) + +typedef struct _GstMsdkMJPEGDec GstMsdkMJPEGDec; +typedef struct _GstMsdkMJPEGDecClass GstMsdkMJPEGDecClass; + +struct _GstMsdkMJPEGDec +{ + GstMsdkDec base; +}; + +struct _GstMsdkMJPEGDecClass +{ + GstMsdkDecClass parent_class; +}; + +GType gst_msdkmjpegdec_get_type (void); + +G_END_DECLS + +#endif /* __GST_MSDKMJPEGDEC_H__ */ diff --git a/sys/msdk/meson.build b/sys/msdk/meson.build index 0afc48475..0e8f9c7a0 100644 --- a/sys/msdk/meson.build +++ b/sys/msdk/meson.build @@ -6,6 +6,7 @@ msdk_sources = [ 'gstmsdkh264enc.c', 'gstmsdkh265dec.c', 'gstmsdkh265enc.c', + 'gstmsdkmjpegdec.c', 'gstmsdkmjpegenc.c', 'gstmsdkmpeg2enc.c', 'gstmsdkvp8enc.c', -- cgit v1.2.1