tizen 2.3.1 release
[framework/multimedia/gst-plugins-ext0.10.git] / ssdemux / src / ssmanifestparse.h
1
2
3 #ifndef __SS_MANIFEST_PARSE_H__
4 #define __SS_MANIFEST_PARSE_H__
5
6 #include <glib.h>
7 #include <gst/gst.h>
8 #include <libxml2/libxml/tree.h>
9
10 G_BEGIN_DECLS
11 typedef struct _GstSSMParse GstSSMParse;
12
13 #define GST_SSMPARESE(m) ((GstSSMParse*)m)
14 #define XML_MAKE_FOURCC(a,b,c,d)        ((guint32)((a)|(b)<<8|(c)<<16|(d)<<24))
15 #define BITRATE_SWITCH_UPPER_THRESHOLD 0.4
16 #define BITRATE_SWITCH_LOWER_THRESHOLD 0.1
17
18
19 typedef enum
20 {
21   SS_STREAM_UNKNOWN = -1,
22   SS_STREAM_VIDEO = 0,
23   SS_STREAM_AUDIO,
24   SS_STREAM_TEXT,
25   SS_STREAM_NUM,
26 }SS_STREAM_TYPE;
27
28 typedef enum
29 {
30   SS_MODE_NO_SWITCH, /* no switch is need */
31   SS_MODE_AONLY, /* switch to audio only */
32   SS_MODE_AV,
33 }SS_BW_MODE;
34
35 typedef struct
36 {
37   guint64 StreamTimeScale;
38   guint64 stream_duration;
39   SS_STREAM_TYPE type;
40   guint nChunks;
41   guint nQualityLevels;
42   guint MaxWidth;
43   guint MaxHeight;
44   guint DisplayWidth;
45   guint DisplayHeight;
46   GList *quality_lists;
47   GList *fragment_lists;
48   gchar *StreamType;
49   gchar *StreamUrl;
50   gchar *StreamSubType;
51   gchar *StreamName;
52   gboolean fraglist_eos;
53   GMutex *frag_lock;
54   GCond *frag_cond;
55 }GstSSMStreamNode;
56
57 typedef struct
58 {
59   guint index;
60   guint bitrate;
61   guint max_width;
62   guint max_height;
63   guint samplingrate;
64   guint channels;
65   guint bps; /* bits per sample */
66   guint packet_size;
67   guint audio_tag;
68   guint NALULengthofLength;
69   gchar *fourcc;
70   gchar *codec_data;
71 }GstSSMQualityNode;
72
73 typedef struct
74 {
75   guint num;
76   guint64 dur;
77   guint64 time;
78   guint media_type;
79 }GstSSMFragmentNode;
80
81 typedef struct
82 {
83   gchar *SystemID;
84   gchar *Content;
85   guint ContentSize;
86 }GstSSMProtectionNode;
87
88 typedef struct
89 {
90   guint MajorVersion;
91   guint MinorVersion;
92   guint64 TimeScale;
93   guint64 Duration;
94   guint LookAheadCount;
95   guint64 DVRWindowLength;
96   gboolean PresentationIsLive;
97   GList *streams[SS_STREAM_NUM];
98   GstSSMProtectionNode *ProtectNode;
99 }GstSSMRootNode;
100
101 struct _GstSSMParse
102 {
103   gchar *uri; /* manifest URI */
104   gchar *presentation_uri;
105   GstSSMRootNode *RootNode;
106   GMutex *lock;
107   guint64 ns_start;
108 };
109
110 #define gst_ssm_parse_check_stream(parser, stream_type) (parser->RootNode->streams[stream_type])
111 #define GST_SSM_PARSE_GET_DURATION(parser) (parser->RootNode->Duration)
112 #define GST_SSM_PARSE_GET_TIMESCALE(parser) (parser->RootNode->TimeScale)
113 #define GST_SSM_PARSE_IS_LIVE_PRESENTATION(parser) (parser->RootNode->PresentationIsLive)
114 #define GST_SSM_PARSE_LOOKAHEAD_COUNT(parser) (parser->RootNode->LookAheadCount)
115 #define GST_SSM_PARSE_NS_START(parser) (parser->ns_start)
116
117 const gchar *ssm_parse_get_stream_name(SS_STREAM_TYPE type);
118 GstSSMParse *gst_ssm_parse_new (const gchar * uri);
119 void gst_ssm_parse_free (GstSSMParse *parser);
120 gboolean gst_ssm_parse_manifest (GstSSMParse *parser, char *data, unsigned int size);
121 gboolean gst_ssm_parse_get_next_fragment_url (GstSSMParse *parser, SS_STREAM_TYPE stream_type, gchar **uri, guint64 *start_ts);
122 gboolean gst_ssm_parse_append_next_fragment (GstSSMParse *parser, SS_STREAM_TYPE stream_type, guint64 timestamp, guint64 duration);
123 GstCaps *ssm_parse_get_stream_caps (GstSSMParse *parser, SS_STREAM_TYPE stream_type);
124 SS_BW_MODE gst_ssm_parse_switch_qualitylevel (GstSSMParse *parser, guint drate);
125 gboolean gst_ssm_parse_seek_manifest (GstSSMParse *parser, guint64 seek_time);
126 gboolean gst_ssm_parse_get_protection_header (GstSSMParse *parser, unsigned char **protection_header, unsigned int *protection_header_len);
127 G_END_DECLS
128 #endif /* __SS_MANIFEST_PARSE_H__ */
129