00001
00002
00003 #ifndef _GSTREAMERMM_QUERY_H
00004 #define _GSTREAMERMM_QUERY_H
00005
00006
00007 #include <glibmm.h>
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include <gst/gstquery.h>
00029 #include <gstreamermm/miniobject.h>
00030 #include <gstreamermm/structure.h>
00031 #include <gstreamermm/wrap.h>
00032 #include <gstreamermm/format.h>
00033
00034
00035 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00036 typedef struct _GstQuery GstQuery;
00037 typedef struct _GstQueryClass GstQueryClass;
00038 #endif
00039
00040
00041 namespace Gst
00042 { class Query_Class; }
00043 namespace Gst
00044 {
00045
00046
00047 template <class CppType>
00048 class IteratorBasic;
00049
00055 enum QueryType
00056 {
00057 QUERY_NONE,
00058 QUERY_POSITION,
00059 QUERY_DURATION,
00060 QUERY_LATENCY,
00061 QUERY_JITTER,
00062 QUERY_RATE,
00063 QUERY_SEEKING,
00064 QUERY_SEGMENT,
00065 QUERY_CONVERT,
00066 QUERY_FORMATS,
00067 QUERY_BUFFERING,
00068 QUERY_CUSTOM,
00069 QUERY_URI
00070 };
00071
00072 }
00073
00074
00075 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00076 namespace Glib
00077 {
00078
00079 template <>
00080 class Value<Gst::QueryType> : public Glib::Value_Enum<Gst::QueryType>
00081 {
00082 public:
00083 static GType value_type() G_GNUC_CONST;
00084 };
00085
00086 }
00087 #endif
00088
00089
00090 namespace Gst
00091 {
00092
00096 enum BufferingMode
00097 {
00098 BUFFERING_STREAM,
00099 BUFFERING_DOWNLOAD,
00100 BUFFERING_TIMESHIFT,
00101 BUFFERING_LIVE
00102 };
00103
00104 }
00105
00106
00107 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00108 namespace Glib
00109 {
00110
00111 template <>
00112 class Value<Gst::BufferingMode> : public Glib::Value_Enum<Gst::BufferingMode>
00113 {
00114 public:
00115 static GType value_type() G_GNUC_CONST;
00116 };
00117
00118 }
00119 #endif
00120
00121
00122 namespace Gst
00123 {
00124
00125
00129 class QueryTypeDefinition
00130 {
00131 public:
00132 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00133 typedef QueryTypeDefinition CppObjectType;
00134 typedef GstQueryTypeDefinition BaseObjectType;
00135 #endif
00136
00137 private:
00138
00139
00140 public:
00142 QueryTypeDefinition();
00143
00148 QueryTypeDefinition(const GstQueryTypeDefinition* castitem);
00149
00151 QueryType value;
00152
00154 Glib::ustring nick;
00155
00157 Glib::ustring description;
00158
00160 Glib::QueryQuark quark;
00161
00162
00163 };
00164
00165 namespace Enums
00166 {
00167
00173 Glib::ustring get_name(QueryType query);
00174
00175
00181 Glib::QueryQuark get_quark(QueryType query);
00182
00183
00184 }
00185
00208 class Query : public MiniObject
00209 {
00210 protected:
00211
00212 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00213
00214 public:
00215 typedef Query CppObjectType;
00216 typedef Query_Class CppClassType;
00217 typedef GstQuery BaseObjectType;
00218 typedef GstQueryClass BaseClassType;
00219
00220 private: friend class Query_Class;
00221 static CppClassType query_class_;
00222
00223 private:
00224
00225 Query(const Query&);
00226 Query& operator=(const Query&);
00227
00228 protected:
00229 explicit Query(GstQuery* castitem);
00230
00231 #endif
00232
00233 public:
00234 virtual ~Query();
00235
00236 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00237 static GType get_type() G_GNUC_CONST;
00238 static GType get_base_type() G_GNUC_CONST;
00239 #endif
00240
00242 GstQuery* gobj() { return reinterpret_cast<GstQuery*>(gobject_); }
00243
00245 const GstQuery* gobj() const { return reinterpret_cast<GstQuery*>(gobject_); }
00246
00248 GstQuery* gobj_copy();
00249
00250 private:
00251
00252
00253 public:
00259 static Glib::RefPtr<Gst::Query> wrap(GstQuery* query, bool take_copy=false);
00260
00264 Glib::RefPtr<Gst::Query> copy() const;
00265
00270 Glib::RefPtr<Gst::Query> create_writable();
00271
00272
00273
00274
00279 const Gst::Structure get_structure() const;
00280
00283 QueryType get_query_type() const;
00284
00285
00293 static QueryType register_query_type(const Glib::ustring& nick, const Glib::ustring& description);
00294
00300 static QueryType get_query_type(const Glib::ustring& nick);
00301
00302
00307 static bool query_types_contain(const Glib::ArrayHandle<const QueryType>& types, QueryType type);
00308
00315 bool get_details(QueryType type, QueryTypeDefinition& def) const;
00316
00317
00322 static Gst::IteratorBasic<const Gst::QueryTypeDefinition> iterate_definitions();
00323
00324
00325 public:
00326
00327 public:
00328
00329 #ifdef GLIBMM_VFUNCS_ENABLED
00330 #endif //GLIBMM_VFUNCS_ENABLED
00331
00332 protected:
00333
00334 #ifdef GLIBMM_VFUNCS_ENABLED
00335 #endif //GLIBMM_VFUNCS_ENABLED
00336
00337
00338 #ifdef GLIBMM_DEFAULT_SIGNAL_HANDLERS_ENABLED
00339 #endif //GLIBMM_DEFAULT_SIGNAL_HANDLERS_ENABLED
00340
00341
00342 };
00343
00344
00345
00346
00347
00348
00349
00352 class QueryApplication : public Query
00353 {
00354 public:
00355 explicit QueryApplication(GstQuery* query);
00356
00365 static Glib::RefPtr<Gst::Query> create(QueryType type, Gst::Structure& structure);
00366 };
00367
00370 class QueryConvert : public Query
00371 {
00372 public:
00373 explicit QueryConvert(GstQuery* query);
00374
00382 static Glib::RefPtr<Gst::Query> create(Format src_format, gint64 value, Format dest_format);
00383
00390 void set(Format src_format, gint64 src_value, Format dest_format, gint64 dest_value);
00391
00400 void parse(Format& src_format, gint64& src_value, Format& dest_format, gint64& dest_value) const;
00401
00407 void parse(Format& dest_format, gint64& dest_value) const;
00408
00412 Format parse_src_format() const;
00413
00417 gint64 parse_src_value() const;
00418
00423 Format parse_dest_format() const;
00424
00429 gint64 parse_dest_value() const;
00430 };
00431
00434 class QueryPosition : public Query
00435 {
00436 public:
00437 explicit QueryPosition(GstQuery* query);
00438
00445 static Glib::RefPtr<Gst::Query> create(Format format);
00446
00452 void set(Format format, gint64 position);
00453
00460 void parse(Format& format, gint64& position) const;
00461
00465 gint64 parse() const;
00466
00470 Format parse_format() const;
00471 };
00472
00475 class QueryDuration : public Query
00476 {
00477 public:
00478 explicit QueryDuration(GstQuery* query);
00479
00485 static Glib::RefPtr<Gst::Query> create(Format format);
00486
00492 void set(Format format, gint64 duration);
00493
00500 void parse(Format& format, gint64& duration) const;
00501
00505 gint64 parse() const;
00506
00510 Format parse_format() const;
00511 };
00512
00515 class QueryLatency : public Query
00516 {
00517 public:
00518 explicit QueryLatency(GstQuery* query);
00519
00525 static Glib::RefPtr<Gst::Query> create();
00526
00533 void set(bool live, ClockTime min_latency, ClockTime max_latency);
00534
00541 void parse(bool& live, ClockTime& min_latency, ClockTime& max_latency) const;
00542
00546 bool parse_live() const;
00547
00551 ClockTime parse_min() const;
00552
00556 ClockTime parse_max() const;
00557 };
00558
00561 class QuerySeeking : public Query
00562 {
00563 public:
00564 explicit QuerySeeking(GstQuery* query);
00565
00571 static Glib::RefPtr<Gst::Query> create(Format format);
00572
00580 void set(Format format, bool seeakable, gint64 segment_start, gint64 segment_end);
00581
00590 void parse(Format& format, bool& seekable, gint64& segment_start, gint64& segment_end) const;
00591
00595 Format parse_format() const;
00596
00600 bool parse_seekable() const;
00601
00605 gint64 parse_start() const;
00606
00610 gint64 parse_end() const;
00611 };
00612
00615 class QueryFormats : public Query
00616 {
00617 public:
00618 explicit QueryFormats(GstQuery* query);
00619
00623 static Glib::RefPtr<Gst::Query> create();
00624
00629 void set(const Glib::ArrayHandle<Format>& formats);
00630
00638 void set(int n_formats, const Glib::ArrayHandle<Format>& formats);
00639
00643 guint parse_length() const;
00644
00651 Format parse(guint nth) const;
00652 };
00653
00656 class QuerySegment : public Query
00657 {
00658 public:
00659 explicit QuerySegment(GstQuery* query);
00660
00666 static Glib::RefPtr<Gst::Query> create(Format format);
00667
00685 void set(double rate, Format format, gint64 start_value, gint64 stop_value);
00686
00696 void parse(double& rate, Format& format, gint64& start_value, gint64& stop_value) const;
00697
00702 double parse_rate() const;
00703
00708 Format parse_format() const;
00709
00714 gint64 parse_start() const;
00715
00720 gint64 parse_stop() const;
00721 };
00722
00725 class QueryBuffering : public Query
00726 {
00727 public:
00728 explicit QueryBuffering(GstQuery* query);
00729
00735 static Glib::RefPtr<Gst::Query> create(Format format);
00736
00742 void set(bool busy, int percent);
00743
00751 void parse(bool& busy, int& percent) const;
00752
00757 bool parse_busy() const;
00758
00763 int parse_percent() const;
00764
00771 void set(BufferingMode mode, int avg_in, int avg_out, gint64 buffering_left);
00772
00781 void parse(BufferingMode& mode, int& avg_in, int& avg_out, gint64 buffering_left) const;
00782
00786 BufferingMode parse_mode() const;
00787
00791 int parse_input_rate() const;
00792
00796 int parse_output_rate() const;
00797
00801 gint64 parse_time_left() const;
00802
00809 void set(Format format, gint64 start, gint64 stop, gint64 estimated_total);
00810
00820 void parse(Format& format, gint64& start, gint64& stop, gint64& estimated_total) const;
00821
00825 Format parse_format() const;
00826
00830 gint64 parse_start() const;
00831
00835 gint64 parse_stop() const;
00836
00840 gint64 parse_total_time() const;
00841 };
00842
00843 }
00844
00845
00846 namespace Gst
00847 {
00853 Glib::RefPtr<Gst::Query> wrap(GstQuery* object, bool take_copy = false);
00854 }
00855
00856
00857 #endif
00858