summaryrefslogtreecommitdiff
path: root/gst-libs/gst/vaapi/gstvaapidecoder_priv.h
diff options
context:
space:
mode:
authorgb <gb@5584edef-b1fe-4b99-b61b-dd2bab72e969>2010-04-23 16:05:58 +0000
committergb <gb@5584edef-b1fe-4b99-b61b-dd2bab72e969>2010-04-23 16:05:58 +0000
commita203d19a35f2d5f64f4f239e1c6519fb21424094 (patch)
tree1e67914f4a70f4c02614a619531a2d28daa1950e /gst-libs/gst/vaapi/gstvaapidecoder_priv.h
parent5fb146c298d717789bd40e63d390dc13da0189b5 (diff)
downloadgst-vaapi-a203d19a35f2d5f64f4f239e1c6519fb21424094.tar.gz
Add initial (multithreaded) decoder based on FFmpeg.
There are tons of bugs left: - Decoder API not nice enough with error conditions - FFmpeg parser is sometimes broken - Packets queue can be lost
Diffstat (limited to 'gst-libs/gst/vaapi/gstvaapidecoder_priv.h')
-rw-r--r--gst-libs/gst/vaapi/gstvaapidecoder_priv.h123
1 files changed, 123 insertions, 0 deletions
diff --git a/gst-libs/gst/vaapi/gstvaapidecoder_priv.h b/gst-libs/gst/vaapi/gstvaapidecoder_priv.h
new file mode 100644
index 00000000..bfc05a7b
--- /dev/null
+++ b/gst-libs/gst/vaapi/gstvaapidecoder_priv.h
@@ -0,0 +1,123 @@
+/*
+ * gstvaapidecoder_priv.h - VA decoder abstraction (private definitions)
+ *
+ * gstreamer-vaapi (C) 2010 Splitted-Desktop Systems
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef GST_VAAPI_DECODER_PRIV_H
+#define GST_VAAPI_DECODER_PRIV_H
+
+#include <glib.h>
+#include <gst/base/gstadapter.h>
+#include <gst/vaapi/gstvaapidecoder.h>
+#include <gst/vaapi/gstvaapicontext.h>
+
+G_BEGIN_DECLS
+
+#define GST_VAAPI_DECODER_CAST(decoder) ((GstVaapiDecoder *)(decoder))
+
+/**
+ * GST_VAAPI_DECODER_DISPLAY:
+ * @decoder: a #GstVaapiDecoder
+ *
+ * Macro that evaluates to the #GstVaapiDisplay of @decoder.
+ * This is an internal macro that does not do any run-time type check.
+ */
+#undef GST_VAAPI_DECODER_DISPLAY
+#define GST_VAAPI_DECODER_DISPLAY(decoder) \
+ GST_VAAPI_DECODER_CAST(decoder)->priv->display
+
+/**
+ * GST_VAAPI_DECODER_CONTEXT:
+ * @decoder: a #GstVaapiDecoder
+ *
+ * Macro that evaluates to the #GstVaapiContext of @decoder.
+ * This is an internal macro that does not do any run-time type check.
+ */
+#undef GST_VAAPI_DECODER_CONTEXT
+#define GST_VAAPI_DECODER_CONTEXT(decoder) \
+ GST_VAAPI_DECODER_CAST(decoder)->priv->context
+
+/**
+ * GST_VAAPI_DECODER_CODEC:
+ * @decoder: a #GstVaapiDecoder
+ *
+ * Macro that evaluates to the #GstVaapiCodec of @decoder.
+ * This is an internal macro that does not do any run-time type check.
+ */
+#undef GST_VAAPI_DECODER_CODEC
+#define GST_VAAPI_DECODER_CODEC(decoder) \
+ GST_VAAPI_DECODER_CAST(decoder)->priv->codec
+
+#define GST_VAAPI_DECODER_GET_PRIVATE(obj) \
+ (G_TYPE_INSTANCE_GET_PRIVATE((obj), \
+ GST_VAAPI_TYPE_DECODER, \
+ GstVaapiDecoderPrivate))
+
+struct _GstVaapiDecoderPrivate {
+ GstVaapiDisplay *display;
+ GstVaapiContext *context;
+ GstVaapiCodec codec;
+ GstAdapter *adapter;
+ GMutex *adapter_mutex;
+ GCond *adapter_cond;
+ GQueue surfaces;
+ GMutex *surfaces_mutex;
+ GCond *surfaces_cond;
+ GThread *decoder_thread;
+ guint decoder_thread_cancel : 1;
+};
+
+gboolean
+gst_vaapi_decoder_ensure_context(
+ GstVaapiDecoder *decoder,
+ GstVaapiProfile profile,
+ GstVaapiEntrypoint entrypoint,
+ guint width,
+ guint height
+) attribute_hidden;
+
+guint
+gst_vaapi_decoder_copy(
+ GstVaapiDecoder *decoder,
+ guint offset,
+ guchar *buf,
+ guint buf_size
+) attribute_hidden;
+
+guint
+gst_vaapi_decoder_read_avail(GstVaapiDecoder *decoder)
+ attribute_hidden;
+
+guint
+gst_vaapi_decoder_read(GstVaapiDecoder *decoder, guchar *buf, guint buf_size)
+ attribute_hidden;
+
+void
+gst_vaapi_decoder_flush(GstVaapiDecoder *decoder, guint buf_size)
+ attribute_hidden;
+
+gboolean
+gst_vaapi_decoder_push_surface(
+ GstVaapiDecoder *decoder,
+ GstVaapiSurface *surface
+) attribute_hidden;
+
+G_END_DECLS
+
+#endif /* GST_VAAPI_DECODER_PRIV_H */
+