summaryrefslogtreecommitdiff
path: root/src/lib.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib.h')
-rw-r--r--src/lib.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/lib.h b/src/lib.h
new file mode 100644
index 0000000..187bae7
--- /dev/null
+++ b/src/lib.h
@@ -0,0 +1,57 @@
+/* License: LGPL-2.1
+ * vim: set sts=2 sw=2 et : */
+
+#ifndef _SST_LIB
+#define _SST_LIB
+
+#include <glib.h>
+#include <gst/gst.h>
+#include <libsoup/soup.h>
+
+typedef struct _TranscodeServerCtx TranscodeServerCtx;
+typedef struct _TranscodeClientCtx TranscodeClientCtx;
+
+struct _TranscodeServerCtx {
+ SoupMessage *msg;
+ GstElement *pipeline;
+ GstElement *appsrc;
+ /* The pipeline status can be queried from the pipeline itself,
+ * but it's probably better for branching to have it separately too */
+ gboolean pipeline_is_playing;
+ /* 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 */
+ gboolean request_finished;
+
+ /* 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;
+ gulong first_sample_handler_id;
+ /* The transcode server context */
+ 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 */