00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00034 #ifndef quvi_h
00035 #define quvi_h
00036
00037 #ifndef DOXY_SKIP
00038 #include <stdlib.h>
00039 #include <stdint.h>
00040 #endif
00041
00048 typedef enum
00049 {
00050 QUVI_VERSION = 0x00,
00051 QUVI_VERSION_LONG
00052 } QUVIversion;
00053
00055 typedef enum
00056 {
00057
00058 QUVI_OK = 0x00,
00059 QUVI_MEM,
00060 QUVI_BADHANDLE,
00061 QUVI_INVARG,
00062 QUVI_CURLINIT,
00063 QUVI_LAST,
00064 QUVI_ABORTEDBYCALLBACK,
00065 QUVI_LUAINIT,
00066 QUVI_NOLUAWEBSITE,
00067 QUVI_NOLUAUTIL,
00068 _INTERNAL_QUVI_LAST,
00069
00070 QUVI_PCRE = 0x40,
00071 QUVI_NOSUPPORT,
00072 QUVI_CALLBACK,
00077 QUVI_ICONV,
00078 QUVI_LUA,
00080
00081
00082
00083 QUVI_CURL = 0x42
00087 } QUVIcode;
00088
00090 typedef enum
00091 {
00092 QUVISTATUS_FETCH = 0x00,
00093 QUVISTATUS_VERIFY,
00094 QUVISTATUS_RESOLVE,
00096
00097
00098
00099
00100
00101 QUVISTATUS_SHORTENED = 0x2
00105 } QUVIstatus;
00106
00108 typedef enum
00109 {
00110
00111
00112 QUVISTATUSTYPE_PAGE = 0x00,
00113 QUVISTATUSTYPE_CONFIG,
00114 QUVISTATUSTYPE_PLAYLIST,
00116
00117 QUVISTATUSTYPE_DONE
00119
00120 } QUVIstatusType;
00121
00123 typedef enum
00124 {
00125 QUVIOPT_FORMAT = 0x00,
00133 QUVIOPT_NOVERIFY,
00137 QUVIOPT_STATUSFUNCTION,
00141 QUVIOPT_WRITEFUNCTION,
00145 QUVIOPT_NORESOLVE,
00149 QUVIOPT_CATEGORY,
00152 QUVIOPT_FETCHFUNCTION,
00156 QUVIOPT_RESOLVEFUNCTION,
00160 QUVIOPT_VERIFYFUNCTION,
00164
00165
00166
00167 QUVIOPT_NOSHORTENED = 0x4
00171 } QUVIoption;
00172
00173 #define QUVIINFO_VOID 0x100000
00174 #define QUVIINFO_LONG 0x200000
00175 #define QUVIINFO_STRING 0x300000
00176 #define QUVIINFO_DOUBLE 0x400000
00177 #define QUVIINFO_TYPEMASK 0xf00000
00190 typedef enum
00191 {
00192 QUVIPROTO_HTTP = 0x1,
00193 QUVIPROTO_MMS = 0x2,
00194 QUVIPROTO_RTSP = 0x4,
00195 QUVIPROTO_RTMP = 0x8,
00196 QUVIPROTO_ALL =
00197 (QUVIPROTO_HTTP|QUVIPROTO_MMS|QUVIPROTO_RTSP|QUVIPROTO_RTMP)
00199 } QUVIcategory;
00200
00219 typedef enum
00220 {
00221 QUVIINFO_NONE = 0x00,
00224 QUVIINFO_CURL = QUVIINFO_VOID + 1,
00227 QUVIINFO_RESPONSECODE = QUVIINFO_LONG + 3,
00230
00231
00232
00233 QUVIINFO_CURLCODE = QUVIINFO_LONG + 2,
00237 QUVIINFO_HTTPCODE = QUVIINFO_LONG + 3,
00241
00242
00243 _QUVIINFO_LAST = 3
00244 } QUVIinfo;
00245
00246 #define QUVIPROPERTY_STRING 0x100000
00247 #define QUVIPROPERTY_LONG 0x200000
00248 #define QUVIPROPERTY_DOUBLE 0x300000
00249 #define QUVIPROPERTY_VOID 0x400000
00250 #define QUVIPROPERTY_TYPEMASK 0xf00000
00253 typedef enum
00254 {
00255 QUVIPROP_NONE = 0x00,
00258 QUVIPROP_HOSTID = QUVIPROPERTY_STRING + 1,
00261 QUVIPROP_PAGEURL = QUVIPROPERTY_STRING + 2,
00264 QUVIPROP_PAGETITLE = QUVIPROPERTY_STRING + 3,
00267 QUVIPROP_MEDIAID = QUVIPROPERTY_STRING + 4,
00270 QUVIPROP_MEDIAURL = QUVIPROPERTY_STRING + 5,
00273 QUVIPROP_MEDIACONTENTLENGTH = QUVIPROPERTY_DOUBLE + 6,
00276 QUVIPROP_MEDIACONTENTTYPE = QUVIPROPERTY_STRING + 7,
00279 QUVIPROP_FILESUFFIX = QUVIPROPERTY_STRING + 8,
00282 QUVIPROP_RESPONSECODE = QUVIPROPERTY_LONG + 9,
00285 QUVIPROP_FORMAT = QUVIPROPERTY_STRING + 10,
00288 QUVIPROP_STARTTIME = QUVIPROPERTY_STRING + 11,
00291 QUVIPROP_MEDIATHUMBNAILURL = QUVIPROPERTY_STRING + 12,
00294 QUVIPROP_MEDIADURATION = QUVIPROPERTY_DOUBLE + 13,
00297
00298
00299
00300
00301
00302
00303 QUVIPROP_VIDEOID = QUVIPROPERTY_STRING + 4,
00307 QUVIPROP_VIDEOURL = QUVIPROPERTY_STRING + 5,
00311 QUVIPROP_VIDEOFILELENGTH = QUVIPROPERTY_DOUBLE + 6,
00315 QUVIPROP_VIDEOFILECONTENTTYPE = QUVIPROPERTY_STRING + 7,
00319 QUVIPROP_VIDEOFILESUFFIX = QUVIPROPERTY_STRING + 8,
00323 QUVIPROP_HTTPCODE = QUVIPROPERTY_LONG + 9,
00327 QUVIPROP_VIDEOFORMAT = QUVIPROPERTY_STRING + 10,
00331 _QUVIPROP_LAST = 13
00334 } QUVIproperty;
00335
00336 typedef enum
00337 {
00338 QUVI_IDENT_PROPERTY_NONE = 0x00,
00340 QUVI_IDENT_PROPERTY_URL = QUVIPROPERTY_STRING + 1,
00342 QUVI_IDENT_PROPERTY_DOMAIN = QUVIPROPERTY_STRING + 2,
00344 QUVI_IDENT_PROPERTY_FORMATS = QUVIPROPERTY_STRING + 3,
00346 QUVI_IDENT_PROPERTY_CATEGORIES = QUVIPROPERTY_LONG + 4,
00348 _QUVI_IDENT_PROPERTY_LAST = 4
00350 } QUVIidentProperty;
00351
00353 typedef void *quvi_t;
00354
00358 typedef void *quvi_media_t;
00359
00363 typedef void *quvi_video_t;
00364
00368 typedef void *quvi_ident_t;
00369
00441 typedef int (*quvi_callback_status) (long param, void *data);
00442
00443 #define QUVI_WRITEFUNC_ABORT 0x10000000
00454 typedef int (*quvi_callback_write) (char *buffer,
00455 size_t size,
00456 size_t nitems,
00457 void *instream);
00458
00460 typedef uint32_t quvi_word;
00462 typedef uint8_t quvi_byte;
00463
00465
00466
00473 #define quvi_lobyte(w) ((quvi_byte)((uint64_t)(w) & 0xff))
00474
00475 #define quvi_hibyte(w) ((quvi_byte)((uint64_t)(w) >> 8))
00476
00478 #define quvi_loword(l) ((quvi_word)((uint64_t)(l) & 0xffff))
00479
00480 #define quvi_hiword(l) ((quvi_word)((uint64_t)(l) >> 16))
00481
00483
00484
00485 #ifdef __cplusplus
00486 extern "C" {
00487 #endif
00488
00536 QUVIcode quvi_init(quvi_t *quvi);
00537
00538
00562 QUVIcode quvi_getinfo(quvi_t quvi, QUVIinfo info, ...);
00563
00565
00566
00586 void quvi_close(quvi_t *quvi);
00587
00590
00591
00615 QUVIcode quvi_setopt(quvi_t quvi, QUVIoption opt, ...);
00616
00625 size_t quvi_write_callback_default(void *ptr, size_t size, size_t nmemb, void *stream);
00626
00628
00629
00656 QUVIcode quvi_parse(quvi_t quvi, char *url, quvi_media_t *media);
00657
00658
00685 QUVIcode quvi_getprop(quvi_media_t media, QUVIproperty prop, ...);
00686
00714 QUVIcode quvi_next_media_url(quvi_media_t media);
00715
00743 QUVIcode quvi_next_videolink(quvi_video_t video);
00744
00763 void quvi_parse_close(quvi_media_t *media);
00764
00766
00768
00769
00805 QUVIcode quvi_supported(quvi_t quvi, char *url);
00806
00836 QUVIcode quvi_supported_ident(quvi_t quvi, char *url, quvi_ident_t *ident);
00837
00866 QUVIcode quvi_ident_getprop(quvi_ident_t handle, QUVIidentProperty property, ...);
00867
00875 void quvi_supported_ident_close(quvi_ident_t *ident);
00876
00909 QUVIcode quvi_next_supported_website(quvi_t quvi, char **domain, char **formats);
00910
00923 QUVIcode quvi_next_host(char **domain, char **formats);
00924
00947 char *quvi_strerror(quvi_t quvi, QUVIcode code);
00948
00963 char *quvi_version(QUVIversion type);
00964
00970 void quvi_free(void *ptr);
00971
00973
00974 #ifdef __cplusplus
00975 }
00976 #endif
00977
00978 #endif
00979
00980