...
 
Commits (61)
......@@ -55,9 +55,6 @@ docs/reference/plugins/tmpl*
docs/reference/plugins/xml*
docs/reference/plugins/*.stamp
gst-libs/gst/gstutils_version.h
gst-libs/gst/vaapi/gstvaapimarshal.c
gst-libs/gst/vaapi/gstvaapimarshal.h
gst-libs/gst/vaapi/stamp-marshal
gtk-doc.make
pkgconfig/gstreamer-vaapi-0.10.pc
pkgconfig/gstreamer-vaapi-glx-0.10.pc
......
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
AUTOMAKE_OPTIONS = foreign
SUBDIRS = debian.upstream gst-libs gst pkgconfig tests docs
......
gst-vaapi NEWS -- summary of changes. 2012-04-DD
gst-vaapi NEWS -- summary of changes. 2012-09-20
Copyright (C) 2010-2011 Splitted-Desktop Systems
Copyright (C) 2011-2012 Intel Corporation
Copyright (C) 2011 Collabora
Version 0.3.7 - DD.Apr.2012
Version 0.3.8 - 20.Sep.2012
* Disable FFmpeg-based decoders by default
* Add JPEG decoder (based on codecparsers)
* Fix crash when destroying GstVaapiDisplay objects early
* Fix GLX rendering with FBO + texture-from-pixmap (fallback for VA/GLX)
* Fix rendering with EMGD driver when overlay mode is used
* Fix MPEG-2 decoding on Intel Atom platforms with EMGD driver
* Fix release of dangling proxy surfaces when decoder is reset (Philip Lorenz)
Version 0.3.7 - 26.Jun.2012
* Fix vaapidecode to report unsupported codec profiles
* Fix MPEG-2 decoding of streams with extra slice() information
* Fix MPEG-2 decoding of High profile streams compatible with Main profile
* Map MPEG-2 compatible High profile streams to Main profile
* Map MPEG-4 Simple Scalable profile streams to Advanced Simple (Feng Yuan)
* Fix various MPEG-4 decoding bugs (timestamps, reference frames) (Feng Yuan)
* Don't forcibly resize user provided X windows (Holger Kaelberer)
* Recalculate render rect only if caps are negotiated (Holger Kaelberer)
......
......@@ -12,20 +12,14 @@ test $TEST_TYPE $FILE || {
exit 1
}
mkdir -p m4
GTKDOCIZE=`which gtkdocize`
if test -z $GTKDOCIZE; then
echo "*** No gtk-doc support ***"
echo "EXTRA_DIST =" > gtk-doc.make
else
gtkdocize || exit $?
# we need to patch gtk-doc.make to support pretty output with
# libtool 1.x. Should be fixed in the next version of gtk-doc.
# To be more resilient with the various versions of gtk-doc one
# can find, just sed gkt-doc.make rather than patch it.
sed -e 's#) --mode=compile#) --tag=CC --mode=compile#' gtk-doc.make > gtk-doc.temp \
&& mv gtk-doc.temp gtk-doc.make
sed -e 's#) --mode=link#) --tag=CC --mode=link#' gtk-doc.make > gtk-doc.temp \
&& mv gtk-doc.temp gtk-doc.make
fi
AUTORECONF=`which autoreconf`
......@@ -33,7 +27,7 @@ if test -z $AUTORECONF; then
echo "*** No autoreconf found ***"
exit 1
else
ACLOCAL="${ACLOCAL-aclocal} $ACLOCAL_FLAGS" autoreconf -v --install || exit $?
autoreconf -v --install || exit $?
fi
if test -z "$NO_CONFIGURE"; then
......
This diff is collapsed.
debian/tmp/usr/lib/gstreamer-@GST_MAJORMINOR@/libgstvaapi*.so
debian/tmp@plugindir@/libgstvaapi*.so
SUBDIRS =
if BUILD_GTK_DOC
if ENABLE_GTK_DOC
SUBDIRS += reference
endif
......
......@@ -66,7 +66,6 @@ IGNORE_HFILES = \
gstvaapidisplay_priv.h \
gstvaapidisplay_glx_priv.h \
gstvaapidisplay_x11_priv.h \
gstvaapimarshal.h \
gstvaapiobject_priv.h \
gstvaapiutils.h \
gstvaapiutils_glx.h \
......@@ -75,7 +74,6 @@ IGNORE_HFILES = \
$(NULL)
EXTRA_HFILES = \
gstvaapimarshal.c \
$(NULL)
# Images to copy into HTML directory.
......
......@@ -30,13 +30,12 @@
<xi:include href="xml/gstvaapivideobuffer.xml"/>
<xi:include href="xml/gstvaapicontext.xml"/>
<xi:include href="xml/gstvaapidecoder.xml"/>
<xi:include href="xml/gstvaapidecoder_jpeg.xml"/>
<xi:include href="xml/gstvaapidecoder_mpeg2.xml"/>
<xi:include href="xml/gstvaapidecoder_mpeg4.xml"/>
<xi:include href="xml/gstvaapidecoder_h264.xml"/>
<xi:include href="xml/gstvaapidecoder_vc1.xml"/>
<xi:include href="xml/gstvaapidecoder_ffmpeg.xml"/>
<xi:include href="xml/gstvaapisurfaceproxy.xml"/>
<xi:include href="xml/gstvaapivideosink.xml"/>
</chapter>
<chapter id="object-tree">
......
......@@ -39,20 +39,6 @@ GST_VAAPI_IS_VIDEO_POOL_CLASS
GST_VAAPI_VIDEO_POOL_GET_CLASS
</SECTION>
<SECTION>
<FILE>gstvaapivideosink</FILE>
<TITLE>GstVaapiVideoSink</TITLE>
GST_VAAPI_VIDEO_SINK_GET_INTERFACE
GstVaapiVideoSinkInterface
gst_vaapi_video_sink_get_display
gst_vaapi_video_sink_lookup
<SUBSECTION Standard>
GST_VAAPI_VIDEO_SINK
GST_VAAPI_IS_VIDEO_SINK
GST_VAAPI_TYPE_VIDEO_SINK
gst_vaapi_video_sink_get_type
</SECTION>
<SECTION>
<FILE>gstvaapidisplay_x11</FILE>
<TITLE>GstVaapiDisplayX11</TITLE>
......@@ -488,6 +474,22 @@ GST_VAAPI_IS_DECODER_FFMPEG_CLASS
GST_VAAPI_DECODER_FFMPEG_GET_CLASS
</SECTION>
<SECTION>
<FILE>gstvaapidecoder_jpeg</FILE>
<TITLE>GstVaapiDecoderJpeg</TITLE>
GstVaapiDecoderJpeg
GstVaapiDecoderJpegClass
gst_vaapi_decoder_jpeg_new
<SUBSECTION Standard>
GST_VAAPI_DECODER_JPEG
GST_VAAPI_IS_DECODER_JPEG
GST_VAAPI_TYPE_DECODER_JPEG
gst_vaapi_decoder_jpeg_get_type
GST_VAAPI_DECODER_JPEG_CLASS
GST_VAAPI_IS_DECODER_JPEG_CLASS
GST_VAAPI_DECODER_JPEG_GET_CLASS
</SECTION>
<SECTION>
<FILE>gstvaapidecoder_mpeg2</FILE>
<TITLE>GstVaapiDecoderMpeg2</TITLE>
......
gst_vaapi_context_get_type
gst_vaapi_decoder_get_type
gst_vaapi_decoder_ffmpeg_get_type
gst_vaapi_decoder_h264_get_type
gst_vaapi_decoder_jpeg_get_type
gst_vaapi_decoder_mpeg2_get_type
gst_vaapi_decoder_mpeg4_get_type
gst_vaapi_decoder_vc1_get_type
gst_vaapi_display_get_type
gst_vaapi_image_get_type
gst_vaapi_image_pool_get_type
......@@ -11,5 +15,4 @@ gst_vaapi_surface_pool_get_type
gst_vaapi_surface_proxy_get_type
gst_vaapi_video_buffer_get_type
gst_vaapi_video_pool_get_type
gst_vaapi_video_sink_get_type
gst_vaapi_window_get_type
SUBDIRS = vaapi
SUBDIRS = codecparsers vaapi
gen_headers = gstutils_version.h
noinst_HEADERS = $(gen_headers)
......
noinst_LTLIBRARIES = \
libgstvaapi-codecparsers.la \
$(NULL)
libgstvaapi_codecparsers_cflags = \
-DGST_USE_UNSTABLE_API \
-I$(top_srcdir)/gst-libs \
$(GST_BASE_CFLAGS) \
$(GST_CFLAGS) \
$(NULL)
libgstvaapi_codecparsers_libs = \
$(GST_BASE_LIBS) \
$(GST_LIBS) \
$(NULL)
libgstvaapi_codecparsers_source_c = \
gstjpegparser.c \
$(NULL)
libgstvaapi_codecparsers_source_h = \
gstjpegparser.h \
$(NULL)
libgstvaapi_codecparsers_la_SOURCES = \
$(libgstvaapi_codecparsers_source_c) \
$(libgstvaapi_codecparsers_source_h) \
$(NULL)
libgstvaapi_codecparsers_la_CFLAGS = \
$(libgstvaapi_codecparsers_cflags) \
$(NULL)
libgstvaapi_codecparsers_la_LIBADD = \
$(libgstvaapi_codecparsers_libs) \
$(NULL)
libgstvaapi_codecparsers_la_LDFLAGS = \
$(GST_ALL_LDFLAGS) \
$(NULL)
# Extra clean files so that maintainer-clean removes *everything*
MAINTAINERCLEANFILES = Makefile.in
This diff is collapsed.
This diff is collapsed.
......@@ -24,6 +24,7 @@ libgstvaapi_libs = \
$(GST_BASE_LIBS) \
$(GST_BASEVIDEO_LIBS) \
$(GST_LIBS) \
$(GST_VIDEO_LIBS) \
$(LIBVA_LIBS) \
$(NULL)
......@@ -35,7 +36,6 @@ libgstvaapi_source_c = \
gstvaapiimage.c \
gstvaapiimageformat.c \
gstvaapiimagepool.c \
gstvaapimarshal.c \
gstvaapiobject.c \
gstvaapiparamspecs.c \
gstvaapiprofile.c \
......@@ -44,11 +44,9 @@ libgstvaapi_source_c = \
gstvaapisurfacepool.c \
gstvaapisurfaceproxy.c \
gstvaapiutils.c \
gstvaapiutils_tsb.c \
gstvaapivalue.c \
gstvaapivideobuffer.c \
gstvaapivideopool.c \
gstvaapivideosink.c \
gstvaapiwindow.c \
$(NULL)
......@@ -71,7 +69,6 @@ libgstvaapi_source_h = \
gstvaapivalue.h \
gstvaapivideobuffer.h \
gstvaapivideopool.h \
gstvaapivideosink.h \
gstvaapiwindow.h \
$(NULL)
......@@ -85,7 +82,6 @@ libgstvaapi_source_priv_h = \
gstvaapiobject_priv.h \
gstvaapisurface_priv.h \
gstvaapiutils.h \
gstvaapiutils_tsb.h \
gstvaapivideobuffer_priv.h \
gstvaapiworkarounds.h \
sysdeps.h \
......@@ -168,6 +164,16 @@ libgstvaapi_source_priv_h += \
$(NULL)
libgstvaapi_cflags += $(GST_CODEC_PARSERS_CFLAGS)
libgstvaapi_libs += $(GST_CODEC_PARSERS_LIBS)
if USE_JPEG_DECODER
libgstvaapi_source_c += gstvaapidecoder_jpeg.c
libgstvaapi_source_h += gstvaapidecoder_jpeg.h
endif
endif
if USE_LOCAL_CODEC_PARSERS
libgstvaapi_libs += \
$(top_builddir)/gst-libs/gst/codecparsers/libgstvaapi-codecparsers.la
endif
libgstvaapi_@GST_MAJORMINOR@_la_SOURCES = \
......@@ -260,36 +266,3 @@ libgstvaapi_glx_@GST_MAJORMINOR@_la_LDFLAGS = \
# Extra clean files so that maintainer-clean removes *everything*
MAINTAINERCLEANFILES = Makefile.in
# glib-genmarshal rules
glib_marshal_list = gstvaapimarshal.list
glib_marshal_prefix = gst_vaapi_marshal
marshal_h = $(glib_marshal_list:.list=.h)
marshal_c = $(glib_marshal_list:.list=.c)
CLEANFILES = stamp-marshal
DISTCLEANFILES = $(marshal_h) $(marshal_c)
BUILT_SOURCES = $(marshal_h) $(marshal_c)
EXTRA_DIST = $(srcdir)/$(glib_marshal_list)
stamp-marshal: $(glib_marshal_list)
$(GLIB_GENMARSHAL) \
--prefix=$(glib_marshal_prefix) \
--header \
$(srcdir)/$(glib_marshal_list) > xgen-mh \
&& (cmp -s xgen-mh $(marshal_h) || cp -f xgen-mh $(marshal_h)) \
&& rm -f xgen-mh \
&& echo timestamp > $(@F)
$(marshal_h): stamp-marshal
@true
$(marshal_c): $(marshal_h)
(echo "#include \"$(marshal_h)\"" ; \
$(GLIB_GENMARSHAL) \
--prefix=$(glib_marshal_prefix) \
--body \
$(srcdir)/$(glib_marshal_list)) > xgen-mc \
&& cp xgen-mc $(marshal_c) \
&& rm -f xgen-mc
......@@ -23,8 +23,9 @@
#define GLIB_COMPAT_H
#include <glib.h>
#include <glib-object.h>
#ifndef HAVE_G_LIST_FREE_FULL
#if !GLIB_CHECK_VERSION(2,27,2)
static inline void
g_list_free_full(GList *list, GDestroyNotify free_func)
{
......@@ -33,6 +34,24 @@ g_list_free_full(GList *list, GDestroyNotify free_func)
}
#endif
#if !GLIB_CHECK_VERSION(2,28,0)
static inline void
g_clear_object_inline(volatile GObject **object_ptr)
{
gpointer * const ptr = (gpointer)object_ptr;
gpointer old;
do {
old = g_atomic_pointer_get(ptr);
} while G_UNLIKELY(!g_atomic_pointer_compare_and_exchange(ptr, old, NULL));
if (old)
g_object_unref(old);
}
#undef g_clear_object
#define g_clear_object(obj) g_clear_object_inline((volatile GObject **)(obj))
#endif
#if GLIB_CHECK_VERSION(2,31,2)
#define GStaticMutex GMutex
#undef g_static_mutex_init
......
......@@ -243,3 +243,64 @@ gst_vaapi_bitplane_new(GstVaapiDecoder *decoder, guint8 *data, guint data_size)
return NULL;
return GST_VAAPI_BITPLANE_CAST(object);
}
/* ------------------------------------------------------------------------- */
/* --- JPEG Huffman Tables --- */
/* ------------------------------------------------------------------------- */
#if USE_JPEG_DECODER
GST_VAAPI_CODEC_DEFINE_TYPE(GstVaapiHuffmanTable,
gst_vaapi_huffman_table,
GST_VAAPI_TYPE_CODEC_OBJECT)
static void
gst_vaapi_huffman_table_destroy(GstVaapiHuffmanTable *huf_table)
{
vaapi_destroy_buffer(GET_VA_DISPLAY(huf_table), &huf_table->param_id);
huf_table->param = NULL;
}
static gboolean
gst_vaapi_huffman_table_create(
GstVaapiHuffmanTable *huf_table,
const GstVaapiCodecObjectConstructorArgs *args
)
{
return vaapi_create_buffer(GET_VA_DISPLAY(huf_table),
GET_VA_CONTEXT(huf_table),
VAHuffmanTableBufferType,
args->param_size,
args->param,
&huf_table->param_id,
(void **)&huf_table->param);
}
static void
gst_vaapi_huffman_table_init(GstVaapiHuffmanTable *huf_table)
{
huf_table->param = NULL;
huf_table->param_id = VA_INVALID_ID;
}
GstVaapiHuffmanTable *
gst_vaapi_huffman_table_new(
GstVaapiDecoder *decoder,
guint8 *data,
guint data_size
)
{
GstVaapiCodecObject *object;
g_return_val_if_fail(GST_VAAPI_IS_DECODER(decoder), NULL);
object = gst_vaapi_codec_object_new(
GST_VAAPI_TYPE_HUFFMAN_TABLE,
GST_VAAPI_CODEC_BASE(decoder),
data, data_size,
NULL, 0
);
if (!object)
return NULL;
return GST_VAAPI_HUFFMAN_TABLE_CAST(object);
}
#endif
......@@ -35,6 +35,8 @@ typedef struct _GstVaapiIqMatrix GstVaapiIqMatrix;
typedef struct _GstVaapiIqMatrixClass GstVaapiIqMatrixClass;
typedef struct _GstVaapiBitPlane GstVaapiBitPlane;
typedef struct _GstVaapiBitPlaneClass GstVaapiBitPlaneClass;
typedef struct _GstVaapiHuffmanTable GstVaapiHuffmanTable;
typedef struct _GstVaapiHuffmanTableClass GstVaapiHuffmanTableClass;
/* ------------------------------------------------------------------------- */
/* --- Base Codec Object --- */
......@@ -107,10 +109,11 @@ struct _GstVaapiCodecObjectClass {
const GstVaapiCodecObjectConstructorArgs *args);
};
G_GNUC_INTERNAL
GType
gst_vaapi_codec_object_get_type(void)
attribute_hidden;
gst_vaapi_codec_object_get_type(void) G_GNUC_CONST;
G_GNUC_INTERNAL
GstVaapiCodecObject *
gst_vaapi_codec_object_new(
GType type,
......@@ -119,13 +122,14 @@ gst_vaapi_codec_object_new(
guint param_size,
gconstpointer data,
guint data_size
) attribute_hidden;
);
G_GNUC_INTERNAL
gboolean
gst_vaapi_codec_object_construct(
GstVaapiCodecObject *obj,
const GstVaapiCodecObjectConstructorArgs *args
) attribute_hidden;
);
/* ------------------------------------------------------------------------- */
/* --- Inverse Quantization Matrices --- */
......@@ -182,16 +186,17 @@ struct _GstVaapiIqMatrixClass {
GstVaapiCodecObjectClass parent_class;
};
G_GNUC_INTERNAL
GType
gst_vaapi_iq_matrix_get_type(void)
attribute_hidden;
gst_vaapi_iq_matrix_get_type(void) G_GNUC_CONST;
G_GNUC_INTERNAL
GstVaapiIqMatrix *
gst_vaapi_iq_matrix_new(
GstVaapiDecoder *decoder,
gconstpointer param,
guint param_size
) attribute_hidden;
);
/* ------------------------------------------------------------------------- */
/* --- VC-1 Bit Planes --- */
......@@ -248,13 +253,80 @@ struct _GstVaapiBitPlaneClass {
GstVaapiCodecObjectClass parent_class;
};
G_GNUC_INTERNAL
GType
gst_vaapi_bitplane_get_type(void)
attribute_hidden;
gst_vaapi_bitplane_get_type(void) G_GNUC_CONST;
G_GNUC_INTERNAL
GstVaapiBitPlane *
gst_vaapi_bitplane_new(GstVaapiDecoder *decoder, guint8 *data, guint data_size)
attribute_hidden;
gst_vaapi_bitplane_new(GstVaapiDecoder *decoder, guint8 *data, guint data_size);
/* ------------------------------------------------------------------------- */
/* --- JPEG Huffman Tables --- */
/* ------------------------------------------------------------------------- */
#define GST_VAAPI_TYPE_HUFFMAN_TABLE \
(gst_vaapi_huffman_table_get_type())
#define GST_VAAPI_HUFFMAN_TABLE_CAST(obj) \
((GstVaapiHuffmanTable *)(obj))
#define GST_VAAPI_HUFFMAN_TABLE(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj), \
GST_VAAPI_TYPE_HUFFMAN_TABLE, \
GstVaapiHuffmanTable))
#define GST_VAAPI_HUFFMAN_TABLE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST((klass), \
GST_VAAPI_TYPE_HUFFMAN_TABLE, \
GstVaapiHuffmanTableClass))
#define GST_VAAPI_IS_HUFFMAN_TABLE(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_VAAPI_TYPE_HUFFMAN_TABLE))
#define GST_VAAPI_IS_HUFFMAN_TABLE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass), GST_VAAPI_TYPE_HUFFMAN_TABLE))
#define GST_VAAPI_HUFFMAN_TABLE_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS((obj), \
GST_VAAPI_TYPE_HUFFMAN_TABLE, \
GstVaapiHuffmanTableClass))
/**
* GstVaapiHuffmanTable:
*
* A #GstVaapiCodecObject holding huffman table.
*/
struct _GstVaapiHuffmanTable {
/*< private >*/
GstVaapiCodecObject parent_instance;
VABufferID param_id;
/*< public >*/
gpointer param;
};
/**
* GstVaapiHuffmanTableClass:
*
* The #GstVaapiHuffmanTable base class.
*/
struct _GstVaapiHuffmanTableClass {
/*< private >*/
GstVaapiCodecObjectClass parent_class;
};
G_GNUC_INTERNAL
GType
gst_vaapi_huffman_table_get_type(void) G_GNUC_CONST;
G_GNUC_INTERNAL
GstVaapiHuffmanTable *
gst_vaapi_huffman_table_new(
GstVaapiDecoder *decoder,
guint8 *data,
guint data_size
);
/* ------------------------------------------------------------------------- */
/* --- Helpers to create codec-dependent objects --- */
......@@ -319,6 +391,10 @@ prefix##_class_init(type##Class *klass) \
#define GST_VAAPI_BITPLANE_NEW(decoder, size) \
gst_vaapi_bitplane_new(GST_VAAPI_DECODER_CAST(decoder), NULL, size)
#define GST_VAAPI_HUFFMAN_TABLE_NEW(codec, decoder) \
gst_vaapi_huffman_table_new(GST_VAAPI_DECODER_CAST(decoder), \
NULL, sizeof(VAHuffmanTableBuffer##codec))
G_END_DECLS
#endif /* GST_VAAPI_CODEC_OBJECTS_H */
......@@ -40,7 +40,7 @@
#define DEBUG 1
#include "gstvaapidebug.h"
G_DEFINE_TYPE(GstVaapiContext, gst_vaapi_context, GST_VAAPI_TYPE_OBJECT);
G_DEFINE_TYPE(GstVaapiContext, gst_vaapi_context, GST_VAAPI_TYPE_OBJECT)
#define GST_VAAPI_CONTEXT_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE((obj), \
......@@ -158,10 +158,7 @@ gst_vaapi_context_destroy_surfaces(GstVaapiContext *context)
priv->surfaces = NULL;
}
if (priv->surfaces_pool) {
g_object_unref(priv->surfaces_pool);
priv->surfaces_pool = NULL;
}
g_clear_object(&priv->surfaces_pool);
}
static void
......
......@@ -82,7 +82,7 @@ struct _GstVaapiContextClass {
};
GType
gst_vaapi_context_get_type(void);
gst_vaapi_context_get_type(void) G_GNUC_CONST;
GstVaapiContext *
gst_vaapi_context_new(
......
......@@ -35,7 +35,7 @@
#define DEBUG 1
#include "gstvaapidebug.h"
G_DEFINE_TYPE(GstVaapiDecoder, gst_vaapi_decoder, G_TYPE_OBJECT);
G_DEFINE_TYPE(GstVaapiDecoder, gst_vaapi_decoder, G_TYPE_OBJECT)
enum {
PROP_0,
......@@ -580,7 +580,7 @@ gst_vaapi_decoder_push_surface_proxy(
GstVaapiSurfaceProxy *proxy
)
{
return push_surface(decoder, proxy);
push_surface(decoder, proxy);
}
GstVaapiDecoderStatus
......
......@@ -53,7 +53,6 @@ G_BEGIN_DECLS
GST_VAAPI_TYPE_DECODER, \
GstVaapiDecoderClass))
typedef enum _GstVaapiDecoderStatus GstVaapiDecoderStatus;
typedef struct _GstVaapiDecoder GstVaapiDecoder;
typedef struct _GstVaapiDecoderPrivate GstVaapiDecoderPrivate;
typedef struct _GstVaapiDecoderClass GstVaapiDecoderClass;
......@@ -75,7 +74,7 @@ typedef struct _GstVaapiDecoderClass GstVaapiDecoderClass;
*
* Decoder status for gst_vaapi_decoder_get_surface().
*/
enum _GstVaapiDecoderStatus {
typedef enum {
GST_VAAPI_DECODER_STATUS_SUCCESS = 0,
GST_VAAPI_DECODER_STATUS_END_OF_STREAM,
GST_VAAPI_DECODER_STATUS_ERROR_ALLOCATION_FAILED,
......@@ -88,7 +87,7 @@ enum _GstVaapiDecoderStatus {
GST_VAAPI_DECODER_STATUS_ERROR_UNSUPPORTED_PROFILE,
GST_VAAPI_DECODER_STATUS_ERROR_UNSUPPORTED_CHROMA_FORMAT,
GST_VAAPI_DECODER_STATUS_ERROR_UNKNOWN = -1
};
} GstVaapiDecoderStatus;
/**
* GstVaapiDecoder:
......@@ -115,7 +114,7 @@ struct _GstVaapiDecoderClass {
};
GType
gst_vaapi_decoder_get_type(void);
gst_vaapi_decoder_get_type(void) G_GNUC_CONST;
GstCaps *
gst_vaapi_decoder_get_caps(GstVaapiDecoder *decoder);
......
......@@ -250,6 +250,9 @@ gst_vaapi_dpb_size(GstVaapiDpb *dpb)
/* --- MPEG-2 Decoded Picture Buffer --- */
/* ------------------------------------------------------------------------- */
/* At most two reference pictures for MPEG-2 */
#define MAX_MPEG2_REFERENCES 2
G_DEFINE_TYPE(GstVaapiDpbMpeg2, gst_vaapi_dpb_mpeg2, GST_VAAPI_TYPE_DPB)
static gboolean
......@@ -268,7 +271,7 @@ gst_vaapi_dpb_mpeg2_add(GstVaapiDpb *dpb, GstVaapiPicture *picture)
* - ... thus causing older reference pictures to be output, if not already
* - the oldest reference picture is replaced with the new reference picture
*/
if (G_LIKELY(dpb->num_pictures == 2)) {
if (G_LIKELY(dpb->num_pictures == MAX_MPEG2_REFERENCES)) {
index = (dpb->pictures[0]->poc > dpb->pictures[1]->poc);
ref_picture = dpb->pictures[index];
if (!GST_VAAPI_PICTURE_IS_OUTPUT(ref_picture)) {
......@@ -302,7 +305,7 @@ gst_vaapi_dpb_mpeg2_class_init(GstVaapiDpbMpeg2Class *klass)
GstVaapiDpb *
gst_vaapi_dpb_mpeg2_new(void)
{
return dpb_new(GST_VAAPI_TYPE_DPB_MPEG2, 2);
return dpb_new(GST_VAAPI_TYPE_DPB_MPEG2, MAX_MPEG2_REFERENCES);
}
void
......@@ -313,7 +316,8 @@ gst_vaapi_dpb_mpeg2_get_references(
GstVaapiPicture **next_picture_ptr
)
{
GstVaapiPicture **picture_ptr, *ref_picture, *ref_pictures[2];
GstVaapiPicture *ref_picture, *ref_pictures[MAX_MPEG2_REFERENCES];
GstVaapiPicture **picture_ptr;
guint i, index;
g_return_if_fail(GST_VAAPI_IS_DPB_MPEG2(dpb));
......
......@@ -91,21 +91,21 @@ struct _GstVaapiDpbClass {
gboolean (*add) (GstVaapiDpb *dpb, GstVaapiPicture *picture);
};
G_GNUC_INTERNAL
GType
gst_vaapi_dpb_get_type(void)
attribute_hidden;
gst_vaapi_dpb_get_type(void) G_GNUC_CONST;
G_GNUC_INTERNAL
void
gst_vaapi_dpb_flush(GstVaapiDpb *dpb)
attribute_hidden;
gst_vaapi_dpb_flush(GstVaapiDpb *dpb);
G_GNUC_INTERNAL
gboolean
gst_vaapi_dpb_add(GstVaapiDpb *dpb, GstVaapiPicture *picture)
attribute_hidden;
gst_vaapi_dpb_add(GstVaapiDpb *dpb, GstVaapiPicture *picture);
G_GNUC_INTERNAL
guint
gst_vaapi_dpb_size(GstVaapiDpb *dpb)
attribute_hidden;
gst_vaapi_dpb_size(GstVaapiDpb *dpb);
static inline gpointer
gst_vaapi_dpb_ref(gpointer ptr)
......@@ -170,21 +170,22 @@ struct _GstVaapiDpbMpeg2Class {
GstVaapiDpbClass parent_class;
};
G_GNUC_INTERNAL
GType
gst_vaapi_dpb_mpeg2_get_type(void)
attribute_hidden;
gst_vaapi_dpb_mpeg2_get_type(void) G_GNUC_CONST;
G_GNUC_INTERNAL
GstVaapiDpb *
gst_vaapi_dpb_mpeg2_new(void)
attribute_hidden;
gst_vaapi_dpb_mpeg2_new(void);
G_GNUC_INTERNAL
void
gst_vaapi_dpb_mpeg2_get_references(
GstVaapiDpb *dpb,
GstVaapiPicture *picture,
GstVaapiPicture **prev_picture_ptr,
GstVaapiPicture **next_picture_ptr
) attribute_hidden;
);
G_END_DECLS
......
......@@ -77,7 +77,7 @@ struct _GstVaapiDecoderFfmpegClass {
};
GType
gst_vaapi_decoder_ffmpeg_get_type(void);
gst_vaapi_decoder_ffmpeg_get_type(void) G_GNUC_CONST;
GstVaapiDecoder *
gst_vaapi_decoder_ffmpeg_new(GstVaapiDisplay *display, GstCaps *caps);
......
......@@ -240,7 +240,7 @@ gst_vaapi_slice_h264_new(
G_DEFINE_TYPE(GstVaapiDecoderH264,
gst_vaapi_decoder_h264,
GST_VAAPI_TYPE_DECODER);
GST_VAAPI_TYPE_DECODER)
#define GST_VAAPI_DECODER_H264_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE((obj), \
......
......@@ -77,7 +77,7 @@ struct _GstVaapiDecoderH264Class {
};
GType
gst_vaapi_decoder_h264_get_type(void);
gst_vaapi_decoder_h264_get_type(void) G_GNUC_CONST;
GstVaapiDecoder *
gst_vaapi_decoder_h264_new(GstVaapiDisplay *display, GstCaps *caps);
......
This diff is collapsed.
/*
* gstvaapivideosink.h - VA sink interface
* gstvaapidecoder_jpeg.h - JPEG decoder
*
* Copyright (C) 2010-2011 Splitted-Desktop Systems
* Copyright (C) 2011-2012 Intel Corporation
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
......@@ -19,56 +19,70 @@
* Boston, MA 02110-1301 USA
*/
#ifndef GST_VAAPI_VIDEO_SINK_H
#define GST_VAAPI_VIDEO_SINK_H
#ifndef GST_VAAPI_DECODER_JPEG_H
#define GST_VAAPI_DECODER_JPEG_H
#include <gst/gstelement.h>
#include <gst/vaapi/gstvaapidisplay.h>
#include <gst/vaapi/gstvaapidecoder.h>
G_BEGIN_DECLS
#define GST_VAAPI_TYPE_VIDEO_SINK \
(gst_vaapi_video_sink_get_type())
#define GST_VAAPI_TYPE_DECODER_JPEG \
(gst_vaapi_decoder_jpeg_get_type())
#define GST_VAAPI_VIDEO_SINK(obj) \
#define GST_VAAPI_DECODER_JPEG(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj), \
GST_VAAPI_TYPE_VIDEO_SINK, \
GstVaapiVideoSink))
GST_VAAPI_TYPE_DECODER_JPEG, \
GstVaapiDecoderJpeg))
#define GST_VAAPI_IS_VIDEO_SINK(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_VAAPI_TYPE_VIDEO_SINK))
#define GST_VAAPI_DECODER_JPEG_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST((klass), \
GST_VAAPI_TYPE_DECODER_JPEG, \
GstVaapiDecoderJpegClass))
#define GST_VAAPI_VIDEO_SINK_GET_INTERFACE(obj) \
(G_TYPE_INSTANCE_GET_INTERFACE((obj), \
GST_VAAPI_TYPE_VIDEO_SINK, \
GstVaapiVideoSinkInterface))
#define GST_VAAPI_IS_DECODER_JPEG(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_VAAPI_TYPE_DECODER_JPEG))
typedef struct _GstVaapiVideoSink GstVaapiVideoSink; /* dummy */
typedef struct _GstVaapiVideoSinkInterface GstVaapiVideoSinkInterface;
#define GST_VAAPI_IS_DECODER_JPEG_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass), GST_VAAPI_TYPE_DECODER_JPEG))
#define GST_VAAPI_DECODER_JPEG_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS((obj), \
GST_VAAPI_TYPE_DECODER_JPEG, \
GstVaapiDecoderJpegClass))
typedef struct _GstVaapiDecoderJpeg GstVaapiDecoderJpeg;
typedef struct _GstVaapiDecoderJpegPrivate GstVaapiDecoderJpegPrivate;
typedef struct _GstVaapiDecoderJpegClass GstVaapiDecoderJpegClass;
/**
* GstVaapiVideoSinkInterface:
* @get_display: virtual function for retrieving the #GstVaapiDisplay created
* by the downstream sink element. The implementation of that virtual
* function is required for all Gstreamer/VAAPI sink elements.
* GstVaapiDecoderJpeg:
*
* A decoder based on Jpeg.
*/
struct _GstVaapiVideoSinkInterface {
struct _GstVaapiDecoderJpeg {
/*< private >*/
GTypeInterface g_iface;
GstVaapiDecoder parent_instance;
/*< public >*/
GstVaapiDisplay *(*get_display)(GstVaapiVideoSink *sink);
GstVaapiDecoderJpegPrivate *priv;
};
GType
gst_vaapi_video_sink_get_type(void);
/**
* GstVaapiDecoderJpegClass:
*
* A decoder class based on Jpeg.
*/
struct _GstVaapiDecoderJpegClass {
/*< private >*/
GstVaapiDecoderClass parent_class;
};
GstVaapiDisplay *
gst_vaapi_video_sink_get_display(GstVaapiVideoSink *sink);
GType
gst_vaapi_decoder_jpeg_get_type(void) G_GNUC_CONST;
GstVaapiVideoSink *
gst_vaapi_video_sink_lookup(GstElement *element);
GstVaapiDecoder *
gst_vaapi_decoder_jpeg_new(GstVaapiDisplay *display, GstCaps *caps);
G_END_DECLS
#endif /* GST_VAAPI_VIDEO_SINK_H */
#endif /* GST_VAAPI_DECODER_JPEG_H */
......@@ -40,7 +40,7 @@
G_DEFINE_TYPE(GstVaapiDecoderMpeg2,
gst_vaapi_decoder_mpeg2,
GST_VAAPI_TYPE_DECODER);
GST_VAAPI_TYPE_DECODER)
#define GST_VAAPI_DECODER_MPEG2_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE((obj), \
......@@ -504,7 +504,7 @@ decode_sequence(GstVaapiDecoderMpeg2 *decoder, guchar *buf, guint buf_size)
GstVaapiDecoderMpeg2Private * const priv = decoder->priv;
GstMpegVideoSequenceHdr * const seq_hdr = &priv->seq_hdr;
if (!gst_mpeg_video_parse_sequence_header(seq_hdr, buf, buf_size, 0)) {
if (!gst_mpeg_video_parse_sequence_header(seq_hdr, buf, buf_size, 4)) {
GST_ERROR("failed to parse sequence header");
return GST_VAAPI_DECODER_STATUS_ERROR_BITSTREAM_PARSER;
}
......@@ -532,7 +532,7 @@ decode_sequence_ext(GstVaapiDecoderMpeg2 *decoder, guchar *buf, guint buf_size)
GstVaapiProfile profile;
guint width, height;
if (!gst_mpeg_video_parse_sequence_extension(seq_ext, buf, buf_size, 0)) {
if (!gst_mpeg_video_parse_sequence_extension(seq_ext, buf, buf_size, 4)) {
GST_ERROR("failed to parse sequence-extension");
return GST_VAAPI_DECODER_STATUS_ERROR_BITSTREAM_PARSER;
}
......@@ -600,7 +600,7 @@ decode_quant_matrix_ext(GstVaapiDecoderMpeg2 *decoder, guchar *buf, guint buf_si
GstVaapiDecoderMpeg2Private * const priv = decoder->priv;
GstMpegVideoQuantMatrixExt * const quant_matrix_ext = &priv->quant_matrix_ext;
if (!gst_mpeg_video_parse_quant_matrix_extension(quant_matrix_ext, buf, buf_size, 0)) {
if (!gst_mpeg_video_parse_quant_matrix_extension(quant_matrix_ext, buf, buf_size, 4)) {
GST_ERROR("failed to parse quant-matrix-extension");
return GST_VAAPI_DECODER_STATUS_ERROR_BITSTREAM_PARSER;
}
......@@ -616,7 +616,7 @@ decode_gop(GstVaapiDecoderMpeg2 *decoder, guchar *buf, guint buf_size)
GstMpegVideoGop gop;
GstClockTime pts;
if (!gst_mpeg_video_parse_gop(&gop, buf, buf_size, 0)) {
if (!gst_mpeg_video_parse_gop(&gop, buf, buf_size, 4)) {
GST_ERROR("failed to parse GOP");
return GST_VAAPI_DECODER_STATUS_ERROR_BITSTREAM_PARSER;
}
......@@ -676,7 +676,7 @@ decode_picture(GstVaapiDecoderMpeg2 *decoder, guchar *buf, guint buf_size)
return status;
}
if (!gst_mpeg_video_parse_picture_header(pic_hdr, buf, buf_size, 0)) {
if (!gst_mpeg_video_parse_picture_header(pic_hdr, buf, buf_size, 4)) {
GST_ERROR("failed to parse picture header");
return GST_VAAPI_DECODER_STATUS_ERROR_BITSTREAM_PARSER;
}
......@@ -713,7 +713,7 @@ decode_picture_ext(GstVaapiDecoderMpeg2 *decoder, guchar *buf, guint buf_size)
GstMpegVideoPictureExt * const pic_ext = &priv->pic_ext;
GstVaapiPicture * const picture = priv->current_picture;
if (!gst_mpeg_video_parse_picture_extension(pic_ext, buf, buf_size, 0)) {
if (!gst_mpeg_video_parse_picture_extension(pic_ext, buf, buf_size, 4)) {
GST_ERROR("failed to parse picture-extension");
return GST_VAAPI_DECODER_STATUS_ERROR_BITSTREAM_PARSER;
}
......@@ -887,6 +887,7 @@ decode_slice(
/* Parse slice */
gst_bit_reader_init(&br, buf, buf_size);
SKIP(&br, 32); /* slice_start_code */
if (priv->height > 2800)
READ_UINT8(&br, slice_vertical_position_extension, 3);
if (priv->has_seq_scalable_ext) {
......@@ -977,7 +978,7 @@ decode_buffer(GstVaapiDecoderMpeg2 *decoder, GstBuffer *buffer)
ofs = scan_for_start_code(priv->adapter, 4, size - 4, NULL);
if (ofs < 0)
break;
gst_adapter_flush(priv->adapter, 4);
buffer = gst_adapter_take_buffer(priv->adapter, ofs);
size -= ofs;
if (ofs == 4) {
......@@ -989,7 +990,6 @@ decode_buffer(GstVaapiDecoderMpeg2 *decoder, GstBuffer *buffer)
break;
}
buffer = gst_adapter_take_buffer(priv->adapter, ofs - 4);
buf = GST_BUFFER_DATA(buffer);
buf_size = GST_BUFFER_SIZE(buffer);
......@@ -1004,7 +1004,7 @@ decode_buffer(GstVaapiDecoderMpeg2 *decoder, GstBuffer *buffer)
status = decode_sequence(decoder, buf, buf_size);
break;
case GST_MPEG_VIDEO_PACKET_EXTENSION: {
const guchar id = buf[0] >> 4;
const guchar id = buf[4] >> 4;
switch (id) {
case GST_MPEG_VIDEO_PACKET_EXT_SEQUENCE:
status = decode_sequence_ext(decoder, buf, buf_size);
......
......@@ -78,7 +78,7 @@ struct _GstVaapiDecoderMpeg2Class {
};
GType
gst_vaapi_decoder_mpeg2_get_type(void);
gst_vaapi_decoder_mpeg2_get_type(void) G_GNUC_CONST;
GstVaapiDecoder *
gst_vaapi_decoder_mpeg2_new(GstVaapiDisplay *display, GstCaps *caps);
......
This diff is collapsed.
......@@ -78,7 +78,7 @@ struct _GstVaapiDecoderMpeg4Class {
};
GType
gst_vaapi_decoder_mpeg4_get_type(void);
gst_vaapi_decoder_mpeg4_get_type(void) G_GNUC_CONST;
GstVaapiDecoder *
gst_vaapi_decoder_mpeg4_new(GstVaapiDisplay *display, GstCaps *caps);
......
......@@ -71,6 +71,11 @@ gst_vaapi_picture_destroy(GstVaapiPicture *picture)
picture->iq_matrix = NULL;
}
if (picture->huf_table) {
gst_mini_object_unref(GST_MINI_OBJECT(picture->huf_table));
picture->huf_table = NULL;
}
if (picture->bitplane) {
gst_mini_object_unref(GST_MINI_OBJECT(picture->bitplane));
picture->bitplane = NULL;
......@@ -179,6 +184,7 @@ gst_vaapi_picture_init(GstVaapiPicture *picture)
picture->param_size = 0;
picture->slices = NULL;
picture->iq_matrix = NULL;
picture->huf_table = NULL;
picture->bitplane = NULL;
picture->pts = GST_CLOCK_TIME_NONE;
picture->poc = 0;
......@@ -264,6 +270,7 @@ gst_vaapi_picture_decode(GstVaapiPicture *picture)
{
GstVaapiIqMatrix *iq_matrix;
GstVaapiBitPlane *bitplane;
GstVaapiHuffmanTable *huf_table;
VADisplay va_display;
VAContextID va_context;
VAStatus status;
......@@ -293,6 +300,12 @@ gst_vaapi_picture_decode(GstVaapiPicture *picture)
&bitplane->data_id, (void **)&bitplane->data))
return FALSE;
huf_table = picture->huf_table;
if (huf_table && !do_decode(va_display, va_context,
&huf_table->param_id,
(void **)&huf_table->param))
return FALSE;
for (i = 0; i < picture->slices->len; i++) {
GstVaapiSlice * const slice = g_ptr_array_index(picture->slices, i);
VABufferID va_buffers[2];
......
......@@ -27,7 +27,6 @@
G_BEGIN_DECLS
typedef enum _GstVaapiPictureType GstVaapiPictureType;
typedef struct _GstVaapiPicture GstVaapiPicture;
typedef struct _GstVaapiPictureClass GstVaapiPictureClass;
typedef struct _GstVaapiSlice GstVaapiSlice;
......@@ -64,7 +63,7 @@ typedef struct _GstVaapiSliceClass GstVaapiSliceClass;
GST_VAAPI_TYPE_PICTURE, \
GstVaapiPictureClass))
enum _GstVaapiPictureType {
typedef enum {
GST_VAAPI_PICTURE_TYPE_NONE = 0, // Undefined
GST_VAAPI_PICTURE_TYPE_I, // Intra
GST_VAAPI_PICTURE_TYPE_P, // Predicted
......@@ -73,7 +72,7 @@ enum _GstVaapiPictureType {
GST_VAAPI_PICTURE_TYPE_SI, // Switching Intra
GST_VAAPI_PICTURE_TYPE_SP, // Switching Predicted
GST_VAAPI_PICTURE_TYPE_BI, // BI type (VC-1)
};
} GstVaapiPictureType;
/**
* Picture flags:
......@@ -146,6 +145,7 @@ struct _GstVaapiPicture {
gpointer param;
GPtrArray *slices;
GstVaapiIqMatrix *iq_matrix;
GstVaapiHuffmanTable *huf_table;
GstVaapiBitPlane *bitplane;
GstClockTime pts;
gint32 poc;
......@@ -162,32 +162,33 @@ struct _GstVaapiPictureClass {
GstVaapiCodecObjectClass parent_class;
};
G_GNUC_INTERNAL
GType
gst_vaapi_picture_get_type(void)
attribute_hidden;
gst_vaapi_picture_get_type(void) G_GNUC_CONST;
G_GNUC_INTERNAL
GstVaapiPicture *
gst_vaapi_picture_new(
GstVaapiDecoder *decoder,
gconstpointer param,
guint param_size
) attribute_hidden;
);
G_GNUC_INTERNAL
GstVaapiPicture *
gst_vaapi_picture_new_field(GstVaapiPicture *picture)
attribute_hidden;
gst_vaapi_picture_new_field(GstVaapiPicture *picture);
G_GNUC_INTERNAL
void
gst_vaapi_picture_add_slice(GstVaapiPicture *picture, GstVaapiSlice *slice)
attribute_hidden;
gst_vaapi_picture_add_slice(GstVaapiPicture *picture, GstVaapiSlice *slice);
G_GNUC_INTERNAL
gboolean
gst_vaapi_picture_decode(GstVaapiPicture *picture)
attribute_hidden;
gst_vaapi_picture_decode(GstVaapiPicture *picture);
G_GNUC_INTERNAL
gboolean
gst_vaapi_picture_output(GstVaapiPicture *picture)
attribute_hidden;
gst_vaapi_picture_output(GstVaapiPicture *picture);
static inline gpointer
gst_vaapi_picture_ref(gpointer ptr)
......@@ -261,10 +262,11 @@ struct _GstVaapiSliceClass {
GstVaapiCodecObjectClass parent_class;
};
G_GNUC_INTERNAL
GType
gst_vaapi_slice_get_type(void)
attribute_hidden;
gst_vaapi_slice_get_type(void) G_GNUC_CONST;
G_GNUC_INTERNAL
GstVaapiSlice *
gst_vaapi_slice_new(
GstVaapiDecoder *decoder,
......@@ -272,7 +274,7 @@ gst_vaapi_slice_new(
guint param_size,
const guchar *data,
guint data_size
) attribute_hidden;
);
/* ------------------------------------------------------------------------- */
/* --- Helpers to create codec-dependent objects --- */
......
......@@ -128,31 +128,35 @@ struct _GstVaapiDecoderPrivate {
guint is_interlaced : 1;
};
G_GNUC_INTERNAL
void
gst_vaapi_decoder_set_picture_size(
GstVaapiDecoder *decoder,
guint width,
guint height
) attribute_hidden;
);
G_GNUC_INTERNAL
void
gst_vaapi_decoder_set_framerate(
GstVaapiDecoder *decoder,
guint fps_n,
guint fps_d
) attribute_hidden;
);
G_GNUC_INTERNAL
void
gst_vaapi_decoder_set_pixel_aspect_ratio(
GstVaapiDecoder *decoder,
guint par_n,
guint par_d
) attribute_hidden;
);
G_GNUC_INTERNAL
void
gst_vaapi_decoder_set_interlaced(GstVaapiDecoder *decoder, gboolean interlaced)
attribute_hidden;
gst_vaapi_decoder_set_interlaced(GstVaapiDecoder *decoder, gboolean interlaced);
G_GNUC_INTERNAL
gboolean
gst_vaapi_decoder_ensure_context(
GstVaapiDecoder *decoder,
......@@ -160,25 +164,27 @@ gst_vaapi_decoder_ensure_context(
GstVaapiEntrypoint entrypoint,
guint width,
guint height
) attribute_hidden;
);
G_GNUC_INTERNAL
gboolean
gst_vaapi_decoder_push_buffer_sub(
GstVaapiDecoder *decoder,
GstBuffer *buffer,
guint offset,
guint size
) attribute_hidden;
);
G_GNUC_INTERNAL
void
gst_vaapi_decoder_push_surface_proxy(
GstVaapiDecoder *decoder,
GstVaapiSurfaceProxy *proxy
) attribute_hidden;
);
G_GNUC_INTERNAL
GstVaapiDecoderStatus
gst_vaapi_decoder_check_status(GstVaapiDecoder *decoder)
attribute_hidden;
gst_vaapi_decoder_check_status(GstVaapiDecoder *decoder);
G_END_DECLS
......
......@@ -38,7 +38,7 @@
G_DEFINE_TYPE(GstVaapiDecoderVC1,
gst_vaapi_decoder_vc1,
GST_VAAPI_TYPE_DECODER);
GST_VAAPI_TYPE_DECODER)
#define GST_VAAPI_DECODER_VC1_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE((obj), \
......
......@@ -78,7 +78,7 @@ struct _GstVaapiDecoderVC1Class {
};
GType
gst_vaapi_decoder_vc1_get_type(void);
gst_vaapi_decoder_vc1_get_type(void) G_GNUC_CONST;
GstVaapiDecoder *
gst_vaapi_decoder_vc1_new(GstVaapiDisplay *display, GstCaps *caps);
......
This diff is collapsed.
......@@ -30,6 +30,7 @@
#endif
#include <gst/gst.h>
#include <gst/vaapi/gstvaapitypes.h>
#include <gst/vaapi/gstvaapiimageformat.h>
#include <gst/vaapi/gstvaapiprofile.h>
......@@ -76,6 +77,12 @@ struct _GstVaapiDisplayInfo {
gpointer native_display;