1 /* GStreamer
2  * Copyright (C) <2005,2006> Wim Taymans <wim@fluendo.com>
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18  */
19 /*
20  * Unless otherwise indicated, Source Code is licensed under MIT license.
21  * See further explanation attached in License Statement (distributed in the file
22  * LICENSE).
23  *
24  * Permission is hereby granted, free of charge, to any person obtaining a copy of
25  * this software and associated documentation files (the "Software"), to deal in
26  * the Software without restriction, including without limitation the rights to
27  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
28  * of the Software, and to permit persons to whom the Software is furnished to do
29  * so, subject to the following conditions:
30  *
31  * The above copyright notice and this permission notice shall be included in all
32  * copies or substantial portions of the Software.
33  *
34  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
35  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
36  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
37  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
38  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
39  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
40  * SOFTWARE.
41  */
42 
43 #ifndef __GST_RTSP_RANGE_H__
44 #define __GST_RTSP_RANGE_H__
45 
46 #include <glib.h>
47 #include <gst/gst.h>
48 
49 #include <gst/rtsp/gstrtspdefs.h>
50 
51 G_BEGIN_DECLS
52 
53 /**
54  * GstRTSPRangeUnit:
55  * @GST_RTSP_RANGE_SMPTE: SMPTE timecode
56  * @GST_RTSP_RANGE_SMPTE_30_DROP: 29.97 frames per second
57  * @GST_RTSP_RANGE_SMPTE_25: 25 frames per second
58  * @GST_RTSP_RANGE_NPT: Normal play time
59  * @GST_RTSP_RANGE_CLOCK: Absolute time expressed as ISO 8601 timestamps
60  *
61  * Different possible time range units.
62  */
63 typedef enum
64 {
65   GST_RTSP_RANGE_SMPTE,
66   GST_RTSP_RANGE_SMPTE_30_DROP,
67   GST_RTSP_RANGE_SMPTE_25,
68   GST_RTSP_RANGE_NPT,
69   GST_RTSP_RANGE_CLOCK
70 } GstRTSPRangeUnit;
71 
72 typedef struct _GstRTSPTimeRange GstRTSPTimeRange;
73 typedef struct _GstRTSPTime GstRTSPTime;
74 typedef struct _GstRTSPTime2 GstRTSPTime2;
75 
76 /**
77  * GstRTSPTimeType:
78  * @GST_RTSP_TIME_SECONDS: seconds
79  * @GST_RTSP_TIME_NOW: now
80  * @GST_RTSP_TIME_END: end
81  * @GST_RTSP_TIME_FRAMES: frames and subframes
82  * @GST_RTSP_TIME_UTC: UTC time
83  *
84  * Possible time types.
85  */
86 typedef enum {
87   GST_RTSP_TIME_SECONDS,
88   GST_RTSP_TIME_NOW,
89   GST_RTSP_TIME_END,
90   GST_RTSP_TIME_FRAMES,
91   GST_RTSP_TIME_UTC
92 } GstRTSPTimeType;
93 
94 /**
95  * GstRTSPTime:
96  * @type: the time of the time
97  * @seconds: seconds when @type is GST_RTSP_TIME_SECONDS,
98  *           GST_RTSP_TIME_UTC and GST_RTSP_TIME_FRAMES
99  *
100  * A time indication.
101  */
102 struct _GstRTSPTime {
103   GstRTSPTimeType type;
104   gdouble         seconds;
105 };
106 
107 /**
108  * GstRTSPTime2:
109  * @frames: frames and subframes when type in GstRTSPTime is
110  *          GST_RTSP_TIME_FRAMES
111  * @year: year when type is GST_RTSP_TIME_UTC
112  * @month: month when type is GST_RTSP_TIME_UTC
113  * @day: day when type is GST_RTSP_TIME_UTC
114  *
115  * Extra fields for a time indication.
116  *
117  * Since: 1.2
118  */
119 struct _GstRTSPTime2 {
120   gdouble         frames;
121   guint           year;
122   guint           month;
123   guint           day;
124 };
125 
126 /**
127  * GstRTSPTimeRange:
128  * @unit: the time units used
129  * @min: the minimum interval
130  * @max: the maximum interval
131  * @min2: extra fields in the minimum interval (Since: 1.2)
132  * @max2: extra fields in the maximum interval (Since: 1.2)
133  *
134  * A time range.
135  */
136 struct _GstRTSPTimeRange {
137   GstRTSPRangeUnit unit;
138 
139   GstRTSPTime  min;
140   GstRTSPTime  max;
141   GstRTSPTime2 min2;
142   GstRTSPTime2 max2;
143 };
144 
145 GST_RTSP_API
146 GstRTSPResult   gst_rtsp_range_parse        (const gchar *rangestr, GstRTSPTimeRange **range);
147 
148 GST_RTSP_API
149 gchar *         gst_rtsp_range_to_string    (const GstRTSPTimeRange *range);
150 
151 GST_RTSP_API
152 void            gst_rtsp_range_free         (GstRTSPTimeRange *range);
153 
154 GST_RTSP_API
155 gboolean        gst_rtsp_range_get_times     (const GstRTSPTimeRange *range,
156                                               GstClockTime *min, GstClockTime *max);
157 
158 GST_RTSP_API
159 gboolean        gst_rtsp_range_convert_units (GstRTSPTimeRange * range,
160                                               GstRTSPRangeUnit unit);
161 
162 G_END_DECLS
163 
164 #endif /* __GST_RTSP_RANGE_H__ */
165