00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00030 #ifndef quvi_h
00031 #define quvi_h
00032
00033 #ifndef DOXY_SKIP
00034 #include <stdlib.h>
00035 #include <stdint.h>
00036 #endif
00037
00044 typedef enum {
00045 QUVI_VERSION = 0x00,
00046 QUVI_VERSION_LONG,
00047 } QUVIversion;
00048
00050 typedef enum {
00051
00052 QUVI_OK = 0x00,
00053 QUVI_MEM,
00054 QUVI_BADHANDLE,
00055 QUVI_INVARG,
00056 QUVI_CURLINIT,
00057 QUVI_LAST,
00058 QUVI_ABORTEDBYCALLBACK,
00059 _INTERNAL_QUVI_LAST,
00060
00061 QUVI_PCRE = 0x40,
00062 QUVI_NOSUPPORT,
00063 QUVI_CURL,
00064 QUVI_ICONV,
00065 } QUVIcode;
00066
00068 typedef enum {
00069 QUVISTATUS_FETCH = 0x00,
00070 QUVISTATUS_VERIFY,
00071 } QUVIstatus;
00072
00074 typedef enum {
00075
00076 QUVISTATUSTYPE_PAGE = 0x00,
00077 QUVISTATUSTYPE_CONFIG,
00078 QUVISTATUSTYPE_PLAYLIST,
00079
00080 QUVISTATUSTYPE_DONE,
00081 } QUVIstatusType;
00082
00090 typedef enum {
00091 QUVIOPT_FORMAT = 0x00,
00092 QUVIOPT_NOVERIFY,
00093 QUVIOPT_STATUSFUNCTION,
00094 QUVIOPT_WRITEFUNCTION,
00095 } QUVIoption;
00096
00097 #define QUVIINFO_VOID 0x100000
00098 #define QUVIINFO_LONG 0x200000
00099 #define QUVIINFO_STRING 0x300000
00100 #define QUVIINFO_DOUBLE 0x400000
00101 #define QUVIINFO_TYPEMASK 0xf00000
00121 typedef enum {
00122 QUVIINFO_NONE = 0x00,
00123 QUVIINFO_CURL = QUVIINFO_VOID + 1,
00124 QUVIINFO_CURLCODE = QUVIINFO_LONG + 2,
00125 QUVIINFO_HTTPCODE = QUVIINFO_LONG + 3,
00126
00127 _QUVIINFO_LAST = 3
00128 } QUVIinfo;
00129
00130 #define QUVIPROPERTY_STRING 0x100000
00131 #define QUVIPROPERTY_LONG 0x200000
00132 #define QUVIPROPERTY_DOUBLE 0x300000
00133 #define QUVIPROPERTY_TYPEMASK 0xf00000
00136 typedef enum {
00137 QUVIPROP_NONE = 0x00,
00138 QUVIPROP_HOSTID = QUVIPROPERTY_STRING + 1,
00139 QUVIPROP_PAGEURL = QUVIPROPERTY_STRING + 2,
00140 QUVIPROP_PAGETITLE = QUVIPROPERTY_STRING + 3,
00141 QUVIPROP_VIDEOID = QUVIPROPERTY_STRING + 4,
00142 QUVIPROP_VIDEOURL = QUVIPROPERTY_STRING + 5,
00143 QUVIPROP_VIDEOFILELENGTH = QUVIPROPERTY_DOUBLE + 6,
00144 QUVIPROP_VIDEOFILECONTENTTYPE = QUVIPROPERTY_STRING + 7,
00145 QUVIPROP_VIDEOFILESUFFIX = QUVIPROPERTY_STRING + 8,
00146 QUVIPROP_HTTPCODE = QUVIPROPERTY_LONG + 9,
00147 QUVIPROP_VIDEOFORMAT = QUVIPROPERTY_STRING + 10,
00148
00149 _QUVIPROP_LAST = 10
00150 } QUVIproperty;
00151
00153 typedef void *quvi_t;
00155 typedef void *quvi_video_t;
00156
00198 typedef int (*quvi_callback_status) (long param, void *data);
00199
00200 #define QUVI_WRITEFUNC_ABORT 0x10000000
00210 typedef int (*quvi_callback_write) (char *buffer,
00211 size_t size,
00212 size_t nitems,
00213 void *instream);
00214
00216 typedef uint32_t quvi_word;
00218 typedef uint8_t quvi_byte;
00219
00221
00222
00229 #define quvi_lobyte(w) ((quvi_byte)((uint64_t)(w) & 0xff))
00230
00231 #define quvi_hibyte(w) ((quvi_byte)((uint64_t)(w) >> 8))
00232
00234 #define quvi_loword(l) ((quvi_word)((uint64_t)(l) & 0xffff))
00235
00236 #define quvi_hiword(l) ((quvi_word)((uint64_t)(l) >> 16))
00237
00239
00240
00241 #ifdef __cplusplus
00242 extern "C" {
00243 #endif
00244
00276 QUVIcode quvi_init(quvi_t *quvi);
00277
00278
00298 void quvi_close(quvi_t *quvi);
00299
00302
00303
00327 QUVIcode quvi_setopt(quvi_t quvi, QUVIoption opt, ...);
00328
00337 size_t quvi_write_callback_default(void *ptr, size_t size, size_t nmemb, void *stream);
00338
00340
00341
00369 QUVIcode quvi_getinfo(quvi_t quvi, QUVIinfo info, ...);
00370
00372
00373
00400 QUVIcode quvi_parse(quvi_t quvi, char *url, quvi_video_t *video);
00401
00402
00429 QUVIcode quvi_getprop(quvi_video_t video, QUVIproperty prop, ...);
00430
00432
00433
00461 QUVIcode quvi_next_videolink(quvi_video_t video);
00462
00464
00465
00488 void quvi_parse_close(quvi_video_t *video);
00489
00492
00493
00517 QUVIcode quvi_next_host(char **domain, char **formats);
00518
00540 char *quvi_strerror(quvi_t quvi, QUVIcode code);
00541
00556 char *quvi_version(QUVIversion type);
00557
00560
00561 #ifdef __cplusplus
00562 }
00563 #endif
00564
00565 #endif
00566
00567