FFmpeg
Loading...
Searching...
No Matches
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)
 
#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.
 
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.

Referenced by curl_cond_wait().

◆ OFFSET

#define OFFSET ( x)
Value:
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.

◆ 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,
}
const char * av_default_item_name(void *ptr)
Return the context name.
Definition log.c:241
#define LIBAVUTIL_VERSION_INT
Definition version.h:85

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",
}
#define flags(name, subs,...)
Definition cbs_h264.c:74
static const AVClass libcurl_context_class
Definition libcurl.c:1207
static int libcurl_open(URLContext *h, const char *url, int flags, AVDictionary **options)
Definition libcurl.c:976
static int libcurl_close(URLContext *h)
Definition libcurl.c:1145
static int libcurl_read(URLContext *h, unsigned char *buf, int size)
Definition libcurl.c:1053
static int64_t libcurl_seek(URLContext *h, int64_t pos, int whence)
Definition libcurl.c:1096
#define URL_PROTOCOL_FLAG_NETWORK
Definition url.h:33

Definition at line 1214 of file libcurl.c.

Referenced by url_open_whitelist().