00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00033 #ifndef quvi_h
00034 #define quvi_h
00035
00036 #ifndef DOXY_SKIP
00037 #include <stdlib.h>
00038 #include <stdint.h>
00039 #endif
00040
00047 typedef enum
00048 {
00049 QUVI_VERSION = 0x00,
00050 QUVI_VERSION_LONG
00051 } QUVIversion;
00052
00054 typedef enum
00055 {
00056
00057 QUVI_OK = 0x00,
00058 QUVI_MEM,
00059 QUVI_BADHANDLE,
00060 QUVI_INVARG,
00061 QUVI_CURLINIT,
00062 QUVI_LAST,
00063 QUVI_ABORTEDBYCALLBACK,
00064 QUVI_LUAINIT,
00065 QUVI_NOLUAWEBSITE,
00066 QUVI_NOLUAUTIL,
00067 _INTERNAL_QUVI_LAST,
00068
00069 QUVI_PCRE = 0x40,
00070 QUVI_NOSUPPORT,
00071 QUVI_CALLBACK,
00076 QUVI_ICONV,
00077 QUVI_LUA,
00079
00080
00081
00082 QUVI_CURL = 0x42
00086 } QUVIcode;
00087
00089 typedef enum
00090 {
00091 QUVISTATUS_FETCH = 0x00,
00092 QUVISTATUS_VERIFY,
00093 QUVISTATUS_RESOLVE,
00095
00096
00097
00098
00099
00100 QUVISTATUS_SHORTENED = 0x2
00104 } QUVIstatus;
00105
00107 typedef enum
00108 {
00109
00110
00111 QUVISTATUSTYPE_PAGE = 0x00,
00112 QUVISTATUSTYPE_CONFIG,
00113 QUVISTATUSTYPE_PLAYLIST,
00115
00116 QUVISTATUSTYPE_DONE
00118
00119 } QUVIstatusType;
00120
00122 typedef enum
00123 {
00124 QUVIOPT_FORMAT = 0x00,
00132 QUVIOPT_NOVERIFY,
00136 QUVIOPT_STATUSFUNCTION,
00140 QUVIOPT_WRITEFUNCTION,
00144 QUVIOPT_NORESOLVE,
00148 QUVIOPT_CATEGORY,
00151 QUVIOPT_FETCHFUNCTION,
00155 QUVIOPT_RESOLVEFUNCTION,
00159 QUVIOPT_VERIFYFUNCTION,
00163
00164
00165
00166 QUVIOPT_NOSHORTENED = 0x4
00170 } QUVIoption;
00171
00172 #define QUVIINFO_VOID 0x100000
00173 #define QUVIINFO_LONG 0x200000
00174 #define QUVIINFO_STRING 0x300000
00175 #define QUVIINFO_DOUBLE 0x400000
00176 #define QUVIINFO_TYPEMASK 0xf00000
00189 typedef enum
00190 {
00191 QUVIPROTO_HTTP = 0x1,
00192 QUVIPROTO_MMS = 0x2,
00193 QUVIPROTO_RTSP = 0x4,
00194 QUVIPROTO_RTMP = 0x8,
00195 QUVIPROTO_ALL =
00196 (QUVIPROTO_HTTP|QUVIPROTO_MMS|QUVIPROTO_RTSP|QUVIPROTO_RTMP)
00198 } QUVIcategory;
00199
00218 typedef enum
00219 {
00220 QUVIINFO_NONE = 0x00,
00223 QUVIINFO_CURL = QUVIINFO_VOID + 1,
00226 QUVIINFO_RESPONSECODE = QUVIINFO_LONG + 3,
00229
00230
00231
00232 QUVIINFO_CURLCODE = QUVIINFO_LONG + 2,
00236 QUVIINFO_HTTPCODE = QUVIINFO_LONG + 3,
00240
00241
00242 _QUVIINFO_LAST = 3
00243 } QUVIinfo;
00244
00245 #define QUVIPROPERTY_STRING 0x100000
00246 #define QUVIPROPERTY_LONG 0x200000
00247 #define QUVIPROPERTY_DOUBLE 0x300000
00248 #define QUVIPROPERTY_VOID 0x400000
00249 #define QUVIPROPERTY_TYPEMASK 0xf00000
00252 typedef enum
00253 {
00254 QUVIPROP_NONE = 0x00,
00257 QUVIPROP_HOSTID = QUVIPROPERTY_STRING + 1,
00260 QUVIPROP_PAGEURL = QUVIPROPERTY_STRING + 2,
00263 QUVIPROP_PAGETITLE = QUVIPROPERTY_STRING + 3,
00266 QUVIPROP_MEDIAID = QUVIPROPERTY_STRING + 4,
00269 QUVIPROP_MEDIAURL = QUVIPROPERTY_STRING + 5,
00272 QUVIPROP_MEDIACONTENTLENGTH = QUVIPROPERTY_DOUBLE + 6,
00275 QUVIPROP_MEDIACONTENTTYPE = QUVIPROPERTY_STRING + 7,
00278 QUVIPROP_FILESUFFIX = QUVIPROPERTY_STRING + 8,
00281 QUVIPROP_RESPONSECODE = QUVIPROPERTY_LONG + 9,
00284 QUVIPROP_FORMAT = QUVIPROPERTY_STRING + 10,
00287 QUVIPROP_STARTTIME = QUVIPROPERTY_STRING + 11,
00290 QUVIPROP_MEDIATHUMBNAILURL = QUVIPROPERTY_STRING + 12,
00293 QUVIPROP_MEDIADURATION = QUVIPROPERTY_DOUBLE + 13,
00296
00297
00298
00299
00300
00301
00302 QUVIPROP_VIDEOID = QUVIPROPERTY_STRING + 4,
00306 QUVIPROP_VIDEOURL = QUVIPROPERTY_STRING + 5,
00310 QUVIPROP_VIDEOFILELENGTH = QUVIPROPERTY_DOUBLE + 6,
00314 QUVIPROP_VIDEOFILECONTENTTYPE = QUVIPROPERTY_STRING + 7,
00318 QUVIPROP_VIDEOFILESUFFIX = QUVIPROPERTY_STRING + 8,
00322 QUVIPROP_HTTPCODE = QUVIPROPERTY_LONG + 9,
00326 QUVIPROP_VIDEOFORMAT = QUVIPROPERTY_STRING + 10,
00330 _QUVIPROP_LAST = 13
00333 } QUVIproperty;
00334
00335 typedef enum
00336 {
00337 QUVI_IDENT_PROPERTY_NONE = 0x00,
00339 QUVI_IDENT_PROPERTY_URL = QUVIPROPERTY_STRING + 1,
00341 QUVI_IDENT_PROPERTY_DOMAIN = QUVIPROPERTY_STRING + 2,
00343 QUVI_IDENT_PROPERTY_FORMATS = QUVIPROPERTY_STRING + 3,
00345 QUVI_IDENT_PROPERTY_CATEGORIES = QUVIPROPERTY_LONG + 4,
00347 _QUVI_IDENT_PROPERTY_LAST = 4
00349 } QUVIidentProperty;
00350
00352 typedef void *quvi_t;
00353
00357 typedef void *quvi_media_t;
00358
00362 typedef void *quvi_video_t;
00363
00367 typedef void *quvi_ident_t;
00368
00440 typedef int (*quvi_callback_status) (long param, void *data);
00441
00442 #define QUVI_WRITEFUNC_ABORT 0x10000000
00453 typedef int (*quvi_callback_write) (char *buffer,
00454 size_t size,
00455 size_t nitems,
00456 void *instream);
00457
00459 typedef uint32_t quvi_word;
00461 typedef uint8_t quvi_byte;
00462
00464
00465
00472 #define quvi_lobyte(w) ((quvi_byte)((uint64_t)(w) & 0xff))
00473
00474 #define quvi_hibyte(w) ((quvi_byte)((uint64_t)(w) >> 8))
00475
00477 #define quvi_loword(l) ((quvi_word)((uint64_t)(l) & 0xffff))
00478
00479 #define quvi_hiword(l) ((quvi_word)((uint64_t)(l) >> 16))
00480
00482
00483
00484 #ifdef __cplusplus
00485 extern "C" {
00486 #endif
00487
00535 QUVIcode quvi_init(quvi_t *quvi);
00536
00537
00561 QUVIcode quvi_getinfo(quvi_t quvi, QUVIinfo info, ...);
00562
00564
00565
00585 void quvi_close(quvi_t *quvi);
00586
00589
00590
00614 QUVIcode quvi_setopt(quvi_t quvi, QUVIoption opt, ...);
00615
00624 size_t quvi_write_callback_default(void *ptr, size_t size, size_t nmemb, void *stream);
00625
00627
00628
00655 QUVIcode quvi_parse(quvi_t quvi, char *url, quvi_media_t *media);
00656
00657
00684 QUVIcode quvi_getprop(quvi_media_t media, QUVIproperty prop, ...);
00685
00713 QUVIcode quvi_next_media_url(quvi_media_t media);
00714
00742 QUVIcode quvi_next_videolink(quvi_video_t video);
00743
00762 void quvi_parse_close(quvi_media_t *media);
00763
00765
00767
00768
00804 QUVIcode quvi_supported(quvi_t quvi, char *url);
00805
00835 QUVIcode quvi_supported_ident(quvi_t quvi, char *url, quvi_ident_t *ident);
00836
00865 QUVIcode quvi_ident_getprop(quvi_ident_t handle, QUVIidentProperty property, ...);
00866
00874 void quvi_supported_ident_close(quvi_ident_t *ident);
00875
00908 QUVIcode quvi_next_supported_website(quvi_t quvi, char **domain, char **formats);
00909
00922 QUVIcode quvi_next_host(char **domain, char **formats);
00923
00946 char *quvi_strerror(quvi_t quvi, QUVIcode code);
00947
00962 char *quvi_version(QUVIversion type);
00963
00969 void quvi_free(void *ptr);
00970
00997 QUVIcode quvi_query_formats(quvi_t session,
00998 char *url,
00999 char **formats);
01000
01002
01003 #ifdef __cplusplus
01004 }
01005 #endif
01006
01007 #endif
01008
01009