/* * Copyright (C) 2012,2018 Collabora Ltd. * Author: Sebastian Dröge * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation * version 2.1 of the License. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ #ifndef __GST_AMC_CODEC_H__ #define __GST_AMC_CODEC_H__ #include #include "gstamc-format.h" #include "gstamcsurfacetexture.h" G_BEGIN_DECLS typedef struct _GstAmcBuffer GstAmcBuffer; typedef struct _GstAmcBufferInfo GstAmcBufferInfo; typedef struct _GstAmcCodecVTable GstAmcCodecVTable; typedef struct _GstAmcCodec GstAmcCodec; struct _GstAmcBuffer { guint8 *data; gsize size; }; struct _GstAmcBufferInfo { gint flags; gint offset; gint64 presentation_time_us; gint size; }; struct _GstAmcCodecVTable { void (* buffer_free) (GstAmcBuffer * buffer); gboolean (* buffer_set_position_and_limit) (GstAmcBuffer * buffer, GError ** err, gint position, gint limit); GstAmcCodec * (* create) (const gchar * name, gboolean is_encoder, GError ** err); void (* free) (GstAmcCodec * codec); gboolean (* configure) (GstAmcCodec * codec, GstAmcFormat * format, GstAmcSurfaceTexture * surface_texture, GError **err); GstAmcFormat * (* get_output_format) (GstAmcCodec * codec, GError **err); gboolean (* start) (GstAmcCodec * codec, GError **err); gboolean (* stop) (GstAmcCodec * codec, GError **err); gboolean (* flush) (GstAmcCodec * codec, GError **err); gboolean (* release) (GstAmcCodec * codec, GError **err); gboolean (* request_key_frame) (GstAmcCodec * codec, GError **err); gboolean (* have_dynamic_bitrate) (void); gboolean (* set_dynamic_bitrate) (GstAmcCodec * codec, GError **err, gint bitrate); GstAmcBuffer * (* get_output_buffer) (GstAmcCodec * codec, gint index, GError **err); GstAmcBuffer * (* get_input_buffer) (GstAmcCodec * codec, gint index, GError **err); gint (* dequeue_input_buffer) (GstAmcCodec * codec, gint64 timeoutUs, GError **err); gint (* dequeue_output_buffer) (GstAmcCodec * codec, GstAmcBufferInfo *info, gint64 timeoutUs, GError **err); gboolean (* queue_input_buffer) (GstAmcCodec * codec, gint index, const GstAmcBufferInfo *info, GError **err); gboolean (* release_output_buffer) (GstAmcCodec * codec, gint index, gboolean render, GError **err); GstAmcSurfaceTexture * (* new_surface_texture) (GError ** err); }; extern GstAmcCodecVTable *gst_amc_codec_vtable; void gst_amc_buffer_free (GstAmcBuffer * buffer); gboolean gst_amc_buffer_set_position_and_limit (GstAmcBuffer * buffer, GError ** err, gint position, gint limit); GstAmcCodec * gst_amc_codec_new (const gchar *name, gboolean is_encoder, GError **err); void gst_amc_codec_free (GstAmcCodec * codec); gboolean gst_amc_codec_configure (GstAmcCodec * codec, GstAmcFormat * format, GstAmcSurfaceTexture * surface_texture, GError **err); GstAmcFormat * gst_amc_codec_get_output_format (GstAmcCodec * codec, GError **err); gboolean gst_amc_codec_start (GstAmcCodec * codec, GError **err); gboolean gst_amc_codec_stop (GstAmcCodec * codec, GError **err); gboolean gst_amc_codec_flush (GstAmcCodec * codec, GError **err); gboolean gst_amc_codec_release (GstAmcCodec * codec, GError **err); gboolean gst_amc_codec_request_key_frame (GstAmcCodec * codec, GError **err); gboolean gst_amc_codec_have_dynamic_bitrate (void); gboolean gst_amc_codec_set_dynamic_bitrate (GstAmcCodec * codec, GError **err, gint bitrate); GstAmcBuffer * gst_amc_codec_get_output_buffer (GstAmcCodec * codec, gint index, GError **err); GstAmcBuffer * gst_amc_codec_get_input_buffer (GstAmcCodec * codec, gint index, GError **err); gint gst_amc_codec_dequeue_input_buffer (GstAmcCodec * codec, gint64 timeoutUs, GError **err); gint gst_amc_codec_dequeue_output_buffer (GstAmcCodec * codec, GstAmcBufferInfo *info, gint64 timeoutUs, GError **err); gboolean gst_amc_codec_queue_input_buffer (GstAmcCodec * codec, gint index, const GstAmcBufferInfo *info, GError **err); gboolean gst_amc_codec_release_output_buffer (GstAmcCodec * codec, gint index, gboolean render, GError **err); GstAmcSurfaceTexture * gst_amc_codec_new_surface_texture (GError ** err); G_END_DECLS #endif /* __GST_AMC_CODEC_H__ */