| /* GStreamer |
| * Copyright (C) 2015-2017 YouView TV Ltd |
| * Author: Vincent Penquerch <vincent.penquerch@collabora.co.uk> |
| * |
| * gstipcpipelinecomm.h: |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Library General Public |
| * License as published by the Free Software Foundation; either |
| * version 2 of the License, or (at your option) any later version. |
| * |
| * 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 |
| * Library General Public License for more details. |
| * |
| * You should have received a copy of the GNU Library General Public |
| * License along with this library; if not, write to the |
| * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, |
| * Boston, MA 02110-1301, USA. |
| */ |
| |
| |
| #ifndef __GST_IPC_PIPELINE_COMM_H__ |
| #define __GST_IPC_PIPELINE_COMM_H__ |
| |
| #include <gst/gst.h> |
| #include <gst/base/gstadapter.h> |
| |
| G_BEGIN_DECLS |
| |
| #define GST_FLOW_COMM_ERROR GST_FLOW_CUSTOM_ERROR_1 |
| |
| extern GQuark QUARK_ID; |
| |
| typedef enum { |
| GST_IPC_PIPELINE_COMM_STATE_TYPE = 0, |
| /* for the rest of the states we use directly the data type enums below */ |
| } GstIpcPipelineCommState; |
| |
| typedef enum { |
| /* reply types */ |
| GST_IPC_PIPELINE_COMM_DATA_TYPE_ACK = 1, |
| GST_IPC_PIPELINE_COMM_DATA_TYPE_QUERY_RESULT, |
| /* data send types */ |
| GST_IPC_PIPELINE_COMM_DATA_TYPE_BUFFER, |
| GST_IPC_PIPELINE_COMM_DATA_TYPE_EVENT, |
| GST_IPC_PIPELINE_COMM_DATA_TYPE_SINK_MESSAGE_EVENT, |
| GST_IPC_PIPELINE_COMM_DATA_TYPE_QUERY, |
| GST_IPC_PIPELINE_COMM_DATA_TYPE_STATE_CHANGE, |
| GST_IPC_PIPELINE_COMM_DATA_TYPE_STATE_LOST, |
| GST_IPC_PIPELINE_COMM_DATA_TYPE_MESSAGE, |
| GST_IPC_PIPELINE_COMM_DATA_TYPE_GERROR_MESSAGE, |
| } GstIpcPipelineCommDataType; |
| |
| typedef struct |
| { |
| GstElement *element; |
| |
| GMutex mutex; |
| int fdin; |
| int fdout; |
| GHashTable *waiting_ids; |
| |
| GThread *reader_thread; |
| GstPoll *poll; |
| GstPollFD pollFDin; |
| |
| GstAdapter *adapter; |
| guint8 state; |
| guint32 send_id; |
| |
| guint32 payload_length; |
| guint32 id; |
| |
| guint read_chunk_size; |
| GstClockTime ack_time; |
| |
| void (*on_buffer) (guint32, GstBuffer *, gpointer); |
| void (*on_event) (guint32, GstEvent *, gboolean, gpointer); |
| void (*on_query) (guint32, GstQuery *, gboolean, gpointer); |
| void (*on_state_change) (guint32, GstStateChange, gpointer); |
| void (*on_state_lost) (gpointer); |
| void (*on_message) (guint32, GstMessage *, gpointer); |
| gpointer user_data; |
| |
| } GstIpcPipelineComm; |
| |
| void gst_ipc_pipeline_comm_plugin_init (void); |
| |
| void gst_ipc_pipeline_comm_init (GstIpcPipelineComm *comm, GstElement *e); |
| void gst_ipc_pipeline_comm_clear (GstIpcPipelineComm *comm); |
| void gst_ipc_pipeline_comm_cancel (GstIpcPipelineComm * comm, |
| gboolean flushing); |
| |
| void gst_ipc_pipeline_comm_write_flow_ack_to_fd (GstIpcPipelineComm * comm, |
| guint32 id, GstFlowReturn ret); |
| void gst_ipc_pipeline_comm_write_boolean_ack_to_fd (GstIpcPipelineComm * comm, |
| guint32 id, gboolean ret); |
| void gst_ipc_pipeline_comm_write_state_change_ack_to_fd ( |
| GstIpcPipelineComm * comm, guint32 id, GstStateChangeReturn ret); |
| |
| void gst_ipc_pipeline_comm_write_query_result_to_fd (GstIpcPipelineComm * comm, |
| guint32 id, gboolean result, GstQuery *query); |
| |
| GstFlowReturn gst_ipc_pipeline_comm_write_buffer_to_fd ( |
| GstIpcPipelineComm * comm, GstBuffer * buffer); |
| gboolean gst_ipc_pipeline_comm_write_event_to_fd (GstIpcPipelineComm * comm, |
| gboolean upstream, GstEvent * event); |
| gboolean gst_ipc_pipeline_comm_write_query_to_fd (GstIpcPipelineComm * comm, |
| gboolean upstream, GstQuery * query); |
| GstStateChangeReturn gst_ipc_pipeline_comm_write_state_change_to_fd ( |
| GstIpcPipelineComm * comm, GstStateChange transition); |
| void gst_ipc_pipeline_comm_write_state_lost_to_fd (GstIpcPipelineComm * comm); |
| gboolean gst_ipc_pipeline_comm_write_message_to_fd (GstIpcPipelineComm * comm, |
| GstMessage *message); |
| |
| gboolean gst_ipc_pipeline_comm_start_reader_thread (GstIpcPipelineComm * comm, |
| void (*on_buffer) (guint32, GstBuffer *, gpointer), |
| void (*on_event) (guint32, GstEvent *, gboolean, gpointer), |
| void (*on_query) (guint32, GstQuery *, gboolean, gpointer), |
| void (*on_state_change) (guint32, GstStateChange, gpointer), |
| void (*on_state_lost) (gpointer), |
| void (*on_message) (guint32, GstMessage *, gpointer), |
| gpointer user_data); |
| void gst_ipc_pipeline_comm_stop_reader_thread (GstIpcPipelineComm * comm); |
| |
| G_END_DECLS |
| |
| #endif |
| |