mssdemux: port to adaptivedemux base class

This commit is contained in:
Thiago Santos 2014-11-22 01:01:50 -03:00
parent d627f4b93b
commit b418c88b26
5 changed files with 195 additions and 1317 deletions

View file

@ -7,6 +7,7 @@ libgstsmoothstreaming_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) \
libgstsmoothstreaming_la_LIBADD = \
$(top_builddir)/gst-libs/gst/codecparsers/libgstcodecparsers-$(GST_API_VERSION).la \
$(top_builddir)/gst-libs/gst/uridownloader/libgsturidownloader-$(GST_API_VERSION).la \
$(top_builddir)/gst-libs/gst/adaptivedemux/libgstadaptivedemux-@GST_API_VERSION@.la \
$(GST_PLUGINS_BASE_LIBS) \
-lgsttag-$(GST_API_VERSION) \
$(GST_BASE_LIBS) $(GST_LIBS) $(ZLIB_LIBS) $(LIBXML2_LIBS)

File diff suppressed because it is too large Load diff

View file

@ -24,6 +24,7 @@
#define __GST_MSSDEMUX_H__
#include <gst/gst.h>
#include <gst/adaptivedemux/gstadaptivedemux.h>
#include <gst/base/gstadapter.h>
#include <gst/base/gstdataqueue.h>
#include "gstmssmanifest.h"
@ -52,63 +53,20 @@ typedef struct _GstMssDemux GstMssDemux;
typedef struct _GstMssDemuxClass GstMssDemuxClass;
struct _GstMssDemuxStream {
GstPad *pad;
GstCaps *caps;
GstMssDemux *parent;
GstAdaptiveDemuxStream parent;
GstMssStream *manifest_stream;
#if 0
GstUriDownloader *downloader;
#endif
GstEvent *pending_segment;
GstSegment segment;
/* Downloading task */
GstTask *download_task;
GRecMutex download_lock;
GstFlowReturn last_ret;
gboolean eos;
gboolean have_data;
gboolean cancelled;
gboolean restart_download;
guint download_error_count;
/* download tooling */
GstElement *src;
GstPad *src_srcpad;
GMutex fragment_download_lock;
GCond fragment_download_cond;
gboolean download_finished;
gboolean starting_fragment;
gint64 download_start_time;
gint64 download_total_time;
gint64 download_total_bytes;
gint current_download_rate;
};
struct _GstMssDemux {
GstBin bin;
GstAdaptiveDemux bin;
/* pads */
GstPad *sinkpad;
gboolean have_group_id;
guint group_id;
GstBuffer *manifest_buffer;
GstMssManifest *manifest;
gchar *base_url;
gchar *manifest_uri;
GSList *streams;
guint n_videos;
guint n_audios;
@ -121,7 +79,7 @@ struct _GstMssDemux {
};
struct _GstMssDemuxClass {
GstBinClass parent_class;
GstAdaptiveDemuxClass parent_class;
};
GType gst_mss_demux_get_type (void);

View file

@ -878,6 +878,20 @@ gst_mss_stream_advance_fragment (GstMssStream * stream)
return GST_FLOW_OK;
}
GstFlowReturn
gst_mss_stream_regress_fragment (GstMssStream * stream)
{
g_return_val_if_fail (stream->active, GST_FLOW_ERROR);
if (stream->current_fragment == NULL)
return GST_FLOW_EOS;
stream->current_fragment = g_list_previous (stream->current_fragment);
if (stream->current_fragment == NULL)
return GST_FLOW_EOS;
return GST_FLOW_OK;
}
const gchar *
gst_mss_stream_type_name (GstMssStreamType streamtype)
{

View file

@ -60,6 +60,7 @@ GstFlowReturn gst_mss_stream_get_fragment_url (GstMssStream * stream, gchar ** u
GstClockTime gst_mss_stream_get_fragment_gst_timestamp (GstMssStream * stream);
GstClockTime gst_mss_stream_get_fragment_gst_duration (GstMssStream * stream);
GstFlowReturn gst_mss_stream_advance_fragment (GstMssStream * stream);
GstFlowReturn gst_mss_stream_regress_fragment (GstMssStream * stream);
void gst_mss_stream_seek (GstMssStream * stream, guint64 time);
const gchar * gst_mss_stream_get_lang (GstMssStream * stream);