blob: 0c0f799908e8eb2cb12826edfb2d101e0ab3079b [file] [log] [blame]
* DASH demux plugin for GStreamer
* gstdashdemux.h
* Copyright (C) 2012 Orange
* Authors:
* David Corvoysier <>
* Hamid Zakari <>
* Copyright (C) 2013 Smart TV Alliance
* Author: Thiago Sousa Santos <>, Collabora Ltd.
* 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.1 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
* Library General Public License for more details.
* You should have received a copy of the GNU Library General Public
* License along with this library (COPYING); if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
#ifndef __GST_DASH_DEMUX_H__
#define __GST_DASH_DEMUX_H__
#include <gst/gst.h>
#include <gst/base/gstadapter.h>
#include <gst/base/gstdataqueue.h>
#include "gstmpdparser.h"
#include <gst/uridownloader/gsturidownloader.h>
#define GST_DASH_DEMUX(obj) \
#define GST_DASH_DEMUX_CLASS(klass) \
#define GST_IS_DASH_DEMUX(obj) \
#define GST_IS_DASH_DEMUX_CLASS(klass) \
#define GST_DASH_DEMUX_CAST(obj) \
((GstDashDemux *)obj)
typedef struct _GstDashDemuxStream GstDashDemuxStream;
typedef struct _GstDashDemux GstDashDemux;
typedef struct _GstDashDemuxClass GstDashDemuxClass;
struct _GstDashDemuxStream
GstPad *pad;
GstDashDemux *demux;
gint index;
GstActiveStream *active_stream;
GstCaps *input_caps;
GstFlowReturn last_ret;
GstClockTime position;
gboolean restart_download;
GstEvent *pending_segment;
gboolean stream_eos;
gboolean need_header;
gboolean discont;
/* Download task */
GMutex download_mutex;
GCond download_cond;
GstTask *download_task;
GRecMutex download_task_lock;
/* download tooling */
GstElement *src;
GstPad *src_srcpad;
GMutex fragment_download_lock;
GCond fragment_download_cond;
GstMediaFragmentInfo current_fragment;
gboolean starting_fragment;
gint64 download_start_time;
gint64 download_total_time;
gint64 download_total_bytes;
gint current_download_rate;
* GstDashDemux:
* Opaque #GstDashDemux data structure.
struct _GstDashDemux
GstBin parent;
GstPad *sinkpad;
gboolean have_group_id;
guint group_id;
GSList *streams;
GSList *next_periods;
GstSegment segment;
GstClockTime timestamp_offset;
GstBuffer *manifest;
GstUriDownloader *downloader;
GstMpdClient *client; /* MPD client */
GMutex client_lock;
gboolean end_of_period;
gboolean end_of_manifest;
/* Properties */
GstClockTime max_buffering_time; /* Maximum buffering time accumulated during playback */
gfloat bandwidth_usage; /* Percentage of the available bandwidth to use */
guint64 max_bitrate; /* max of bitrate supported by target decoder */
gboolean cancelled;
/* Manifest update */
GstClockTime last_manifest_update;
struct _GstDashDemuxClass
GstBinClass parent_class;
GType gst_dash_demux_get_type (void);
#endif /* __GST_DASH_DEMUX_H__ */