/* * vim: set sts=2 sw=2 et : * * License: LGPL-2.1+ * Copyright (c) 2014 Nirbheek Chauhan * * 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 _SST_LIB #define _SST_LIB #include #include #include typedef struct _TranscodeServerCtx TranscodeServerCtx; typedef struct _TranscodeClientCtx TranscodeClientCtx; struct _TranscodeServerCtx { SoupMessage *msg; GstElement *pipeline; GstElement *appsrc; /* If the encoding is not chunked, we'll get multiple requests * with separate Content-Length headers on the same path */ SoupEncoding encoding; /* Set to TRUE when the incoming stream ends; let's us know if * we need to set the PUT response on EOS/ERROR on the pipeline, * and whether to reject further data when using a persistent * Content-Length + Content-Range PUT stream. */ gboolean stream_finished; guint seconds_since_read; /* List of client contexts */ GList *clients; /* Reference to the parent context hash table */ GHashTable *parent_ctx_table; /* Reference to the key in the parent hash table */ char *path; }; struct _TranscodeClientCtx { SoupMessage *msg; GstElement *appsink; /* We hold an extra ref to this */ GstPad *ghostsinkpad; GMutex can_write_chunk; guint timeout_handler_id; guint seconds_since_write; /* The transcode server context; we don't hold a ref to this */ TranscodeServerCtx *server_ctx; }; void stp_cleanup_transcode_server_ctx (TranscodeServerCtx *ctx); void stp_cleanup_transcode_client_ctx (TranscodeClientCtx *ctx); void stp_close_client_ctx (TranscodeClientCtx *ctx); gboolean stp_on_gst_bus_message (GstBus *bus, GstMessage *msg, TranscodeServerCtx *ctx); gboolean stp_copy_chunk_to_fd (SoupBuffer *chunk, int fd); gboolean stp_copy_fd_to_body (TranscodeClientCtx *ctx); gboolean stp_fd_has_data_to_read (int fd); GstBuffer* stp_get_streamheader_from_caps (GstCaps *caps); GstBuffer* stp_get_gst_buffer (SoupBuffer *chunk); #endif /* _SST_LIB */