FFmpeg
Data Structures | Macros | Enumerations | Functions | Variables
libcurl.c File Reference
#include "config_components.h"
#include <curl/curl.h>
#include <inttypes.h>
#include <limits.h>
#include <stdlib.h>
#include <string.h>
#include "libavutil/avstring.h"
#include "libavutil/bprint.h"
#include "libavutil/error.h"
#include "libavutil/fifo.h"
#include "libavutil/log.h"
#include "libavutil/macros.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
#include "libavutil/thread.h"
#include "libavutil/time.h"
#include "avformat.h"
#include "http.h"
#include "internal.h"
#include "url.h"
#include "version.h"

Go to the source code of this file.

Data Structures

struct  CurlCmd
 
struct  CurlLoop
 
struct  CurlContext
 

Macros

#define DEFAULT_USER_AGENT   "Lavf/" AV_STRINGIFY(LIBAVFORMAT_VERSION)
 
#define CURL_DEFAULT_BUFFER_SIZE   (4 << 20)
 
#define CURL_WAIT_US   100000
 
#define OFFSET(x)   offsetof(CurlContext, x)
 
#define D   AV_OPT_FLAG_DECODING_PARAM
 
#define E   AV_OPT_FLAG_ENCODING_PARAM
 

Enumerations

enum  cmd_kind { CMD_ADD, CMD_REMOVE, CMD_UNPAUSE, CMD_SEEK }
 

Functions

static int curlcode_to_averror (CURLcode code)
 
static int is_recoverable (CURLcode code)
 
static size_t write_callback (char *ptr, size_t size, size_t nmemb, void *userdata)
 
static int64_t parse_offset (const char *s)
 
static void parse_content_range (CurlContext *c, const char *v)
 
static size_t header_callback (char *ptr, size_t size, size_t nitems, void *userdata)
 
static int xferinfo_callback (void *userdata, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow)
 
static void start_request (CurlContext *c)
 
static void update_statistics (CurlContext *c)
 
static void on_done (CurlContext *c, CURLcode code)
 
static void execute_command (CurlLoop *loop, CurlCmd *cmd)
 
static void * curl_worker (void *arg)
 
static int curl_dispatch (CurlLoop *loop, enum cmd_kind kind, CurlContext *c, int64_t pos, int sync)
 
static CurlLoopcurl_loop_create (AVFormatContext *avfc)
 
static void print_statistics (CurlLoop *loop)
 
static void curl_loop_destroy (CurlLoop *loop)
 
static int curl_loop_attach (CurlContext *c, AVFormatContext *avfc)
 
void ff_curl_loop_free (struct CurlLoop **loop)
 Release a libcurl event loop and set *loop to NULL. More...
 
static int libcurl_close (URLContext *h)
 
static int debug_callback (CURL *easy, curl_infotype type, char *data, size_t size, void *userdata)
 
static struct curl_slist * build_headers (CurlContext *c)
 
static int setup_protocols (CurlContext *c)
 
static void setup_curl (CurlContext *c)
 
static void curl_cond_wait (CurlContext *c)
 
static int wait_for_probe (CurlContext *c)
 
static int libcurl_open (URLContext *h, const char *url, int flags, AVDictionary **options)
 
static int libcurl_read (URLContext *h, unsigned char *buf, int size)
 
static int64_t libcurl_seek (URLContext *h, int64_t pos, int whence)
 

Variables

static AVMutex curl_loop_lock = AV_MUTEX_INITIALIZER
 
static const AVOption options []
 
static const AVClass libcurl_context_class
 
const URLProtocol ff_libcurl_protocol
 

Macro Definition Documentation

◆ DEFAULT_USER_AGENT

#define DEFAULT_USER_AGENT   "Lavf/" AV_STRINGIFY(LIBAVFORMAT_VERSION)

Definition at line 47 of file libcurl.c.

◆ CURL_DEFAULT_BUFFER_SIZE

#define CURL_DEFAULT_BUFFER_SIZE   (4 << 20)

Definition at line 48 of file libcurl.c.

◆ CURL_WAIT_US

#define CURL_WAIT_US   100000

Definition at line 52 of file libcurl.c.

◆ OFFSET

#define OFFSET (   x)    offsetof(CurlContext, x)

Definition at line 1171 of file libcurl.c.

◆ D

Definition at line 1172 of file libcurl.c.

◆ E

Definition at line 1173 of file libcurl.c.

Enumeration Type Documentation

◆ cmd_kind

enum cmd_kind
Enumerator
CMD_ADD 
CMD_REMOVE 
CMD_UNPAUSE 
CMD_SEEK 

Definition at line 56 of file libcurl.c.

Function Documentation

◆ curlcode_to_averror()

static int curlcode_to_averror ( CURLcode  code)
static

Definition at line 161 of file libcurl.c.

Referenced by on_done().

◆ is_recoverable()

static int is_recoverable ( CURLcode  code)
static

Definition at line 180 of file libcurl.c.

Referenced by on_done().

◆ write_callback()

static size_t write_callback ( char *  ptr,
size_t  size,
size_t  nmemb,
void *  userdata 
)
static

Definition at line 202 of file libcurl.c.

Referenced by setup_curl().

◆ parse_offset()

static int64_t parse_offset ( const char *  s)
static

Definition at line 232 of file libcurl.c.

Referenced by parse_content_range().

◆ parse_content_range()

static void parse_content_range ( CurlContext c,
const char *  v 
)
static

Definition at line 239 of file libcurl.c.

Referenced by header_callback().

◆ header_callback()

static size_t header_callback ( char *  ptr,
size_t  size,
size_t  nitems,
void *  userdata 
)
static

Definition at line 259 of file libcurl.c.

Referenced by setup_curl().

◆ xferinfo_callback()

static int xferinfo_callback ( void *  userdata,
curl_off_t  dltotal,
curl_off_t  dlnow,
curl_off_t  ultotal,
curl_off_t  ulnow 
)
static

Definition at line 373 of file libcurl.c.

Referenced by setup_curl().

◆ start_request()

static void start_request ( CurlContext c)
static

Definition at line 386 of file libcurl.c.

Referenced by execute_command(), and on_done().

◆ update_statistics()

static void update_statistics ( CurlContext c)
static

Definition at line 427 of file libcurl.c.

Referenced by execute_command(), and on_done().

◆ on_done()

static void on_done ( CurlContext c,
CURLcode  code 
)
static

Definition at line 452 of file libcurl.c.

Referenced by curl_worker().

◆ execute_command()

static void execute_command ( CurlLoop loop,
CurlCmd cmd 
)
static

Definition at line 526 of file libcurl.c.

Referenced by curl_worker().

◆ curl_worker()

static void* curl_worker ( void *  arg)
static

Definition at line 565 of file libcurl.c.

Referenced by curl_loop_create().

◆ curl_dispatch()

static int curl_dispatch ( CurlLoop loop,
enum cmd_kind  kind,
CurlContext c,
int64_t  pos,
int  sync 
)
static

Definition at line 624 of file libcurl.c.

Referenced by libcurl_close(), libcurl_open(), libcurl_read(), and libcurl_seek().

◆ curl_loop_create()

static CurlLoop* curl_loop_create ( AVFormatContext avfc)
static

Definition at line 654 of file libcurl.c.

Referenced by curl_loop_attach().

◆ print_statistics()

static void print_statistics ( CurlLoop loop)
static

Definition at line 699 of file libcurl.c.

Referenced by curl_loop_destroy().

◆ curl_loop_destroy()

static void curl_loop_destroy ( CurlLoop loop)
static

Definition at line 716 of file libcurl.c.

Referenced by ff_curl_loop_free(), and libcurl_close().

◆ curl_loop_attach()

static int curl_loop_attach ( CurlContext c,
AVFormatContext avfc 
)
static

Definition at line 740 of file libcurl.c.

Referenced by libcurl_open().

◆ ff_curl_loop_free()

void ff_curl_loop_free ( struct CurlLoop **  loop)

Release a libcurl event loop and set *loop to NULL.

No-op when loop or *loop is NULL.

Definition at line 759 of file libcurl.c.

Referenced by avformat_free_context().

◆ libcurl_close()

static int libcurl_close ( URLContext h)
static

Definition at line 1145 of file libcurl.c.

Referenced by libcurl_open().

◆ debug_callback()

static int debug_callback ( CURL *  easy,
curl_infotype  type,
char *  data,
size_t  size,
void *  userdata 
)
static

Definition at line 773 of file libcurl.c.

Referenced by setup_curl().

◆ build_headers()

static struct curl_slist* build_headers ( CurlContext c)
static

Definition at line 801 of file libcurl.c.

Referenced by setup_curl().

◆ setup_protocols()

static int setup_protocols ( CurlContext c)
static

Definition at line 825 of file libcurl.c.

Referenced by libcurl_open().

◆ setup_curl()

static void setup_curl ( CurlContext c)
static

Definition at line 866 of file libcurl.c.

Referenced by libcurl_open().

◆ curl_cond_wait()

static void curl_cond_wait ( CurlContext c)
static

Definition at line 943 of file libcurl.c.

Referenced by libcurl_read(), and wait_for_probe().

◆ wait_for_probe()

static int wait_for_probe ( CurlContext c)
static

Definition at line 953 of file libcurl.c.

Referenced by libcurl_open().

◆ libcurl_open()

static int libcurl_open ( URLContext h,
const char *  url,
int  flags,
AVDictionary **  options 
)
static

Definition at line 976 of file libcurl.c.

◆ libcurl_read()

static int libcurl_read ( URLContext h,
unsigned char *  buf,
int  size 
)
static

Definition at line 1053 of file libcurl.c.

◆ libcurl_seek()

static int64_t libcurl_seek ( URLContext h,
int64_t  pos,
int  whence 
)
static

Definition at line 1096 of file libcurl.c.

Variable Documentation

◆ curl_loop_lock

AVMutex curl_loop_lock = AV_MUTEX_INITIALIZER
static

Definition at line 159 of file libcurl.c.

Referenced by curl_loop_attach().

◆ options

const AVOption options[]
static

Definition at line 1174 of file libcurl.c.

◆ libcurl_context_class

const AVClass libcurl_context_class
static
Initial value:
= {
.class_name = "libcurl",
.item_name = av_default_item_name,
.option = options,
}

Definition at line 1207 of file libcurl.c.

◆ ff_libcurl_protocol

const URLProtocol ff_libcurl_protocol
Initial value:
= {
.name = "libcurl",
.url_open2 = libcurl_open,
.url_read = libcurl_read,
.url_seek = libcurl_seek,
.url_close = libcurl_close,
.priv_data_size = sizeof(CurlContext),
.priv_data_class = &libcurl_context_class,
.default_whitelist = "http,https,libcurl",
}

Definition at line 1214 of file libcurl.c.

Referenced by url_open_whitelist().

URL_PROTOCOL_FLAG_NETWORK
#define URL_PROTOCOL_FLAG_NETWORK
Definition: url.h:33
libcurl_open
static int libcurl_open(URLContext *h, const char *url, int flags, AVDictionary **options)
Definition: libcurl.c:976
flags
#define flags(name, subs,...)
Definition: cbs_av1.c:504
libcurl_read
static int libcurl_read(URLContext *h, unsigned char *buf, int size)
Definition: libcurl.c:1053
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
libcurl_context_class
static const AVClass libcurl_context_class
Definition: libcurl.c:1207
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:242
libcurl_seek
static int64_t libcurl_seek(URLContext *h, int64_t pos, int whence)
Definition: libcurl.c:1096
options
static const AVOption options[]
Definition: libcurl.c:1174
CurlContext
Definition: libcurl.c:93
libcurl_close
static int libcurl_close(URLContext *h)
Definition: libcurl.c:1145