proto: Use .priv_data_size to allocate the private context

This simplifies the open functions by avoiding one function
call that needs error checking, reducing the amount of
extra bulk code.

Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
Martin Storsjö 2011-12-01 11:44:21 +02:00
parent 9c6777bd93
commit 7e58050590
10 changed files with 29 additions and 75 deletions

View File

@ -181,23 +181,18 @@ static int applehttp_close(URLContext *h)
free_segment_list(s);
free_variant_list(s);
ffurl_close(s->seg_hd);
av_free(s);
return 0;
}
static int applehttp_open(URLContext *h, const char *uri, int flags)
{
AppleHTTPContext *s;
AppleHTTPContext *s = h->priv_data;
int ret, i;
const char *nested_url;
if (flags & AVIO_FLAG_WRITE)
return AVERROR(ENOSYS);
s = av_mallocz(sizeof(AppleHTTPContext));
if (!s)
return AVERROR(ENOMEM);
h->priv_data = s;
h->is_streamed = 1;
if (av_strstart(uri, "applehttp+", &nested_url)) {
@ -304,4 +299,5 @@ URLProtocol ff_applehttp_protocol = {
.url_read = applehttp_read,
.url_close = applehttp_close,
.flags = URL_PROTOCOL_FLAG_NESTED_SCHEME,
.priv_data_size = sizeof(AppleHTTPContext),
};

View File

@ -50,7 +50,6 @@ static av_cold int concat_close(URLContext *h)
err |= ffurl_close(nodes[i].uc);
av_freep(&data->nodes);
av_freep(&h->priv_data);
return err < 0 ? -1 : 0;
}
@ -62,16 +61,11 @@ static av_cold int concat_open(URLContext *h, const char *uri, int flags)
int64_t size;
size_t len, i;
URLContext *uc;
struct concat_data *data;
struct concat_data *data = h->priv_data;
struct concat_nodes *nodes;
av_strstart(uri, "concat:", &uri);
/* creating data */
if (!(data = av_mallocz(sizeof(*data))))
return AVERROR(ENOMEM);
h->priv_data = data;
for (i = 0, len = 1; uri[i]; i++)
if (uri[i] == *AV_CAT_SEPARATOR)
/* integer overflow */
@ -81,7 +75,6 @@ static av_cold int concat_open(URLContext *h, const char *uri, int flags)
}
if (!(nodes = av_malloc(sizeof(*nodes) * len))) {
av_freep(&h->priv_data);
return AVERROR(ENOMEM);
} else
data->nodes = nodes;
@ -196,4 +189,5 @@ URLProtocol ff_concat_protocol = {
.url_read = concat_read,
.url_seek = concat_seek,
.url_close = concat_close,
.priv_data_size = sizeof(struct concat_data),
};

View File

@ -72,24 +72,17 @@ static int gopher_close(URLContext *h)
ffurl_close(s->hd);
s->hd = NULL;
}
av_freep(&h->priv_data);
return 0;
}
static int gopher_open(URLContext *h, const char *uri, int flags)
{
GopherContext *s;
GopherContext *s = h->priv_data;
char hostname[1024], auth[1024], path[1024], buf[1024];
int port, err;
h->is_streamed = 1;
s = av_malloc(sizeof(GopherContext));
if (!s) {
return AVERROR(ENOMEM);
}
h->priv_data = s;
/* needed in any case to build the host string */
av_url_split(NULL, 0, auth, sizeof(auth), hostname, sizeof(hostname), &port,
path, sizeof(path), uri);
@ -127,4 +120,5 @@ URLProtocol ff_gopher_protocol = {
.url_read = gopher_read,
.url_write = gopher_write,
.url_close = gopher_close,
.priv_data_size = sizeof(GopherContext),
};

View File

@ -52,7 +52,6 @@ static int rtmp_close(URLContext *s)
RTMP *r = s->priv_data;
RTMP_Close(r);
av_free(r);
return 0;
}
@ -70,13 +69,9 @@ static int rtmp_close(URLContext *s)
*/
static int rtmp_open(URLContext *s, const char *uri, int flags)
{
RTMP *r;
RTMP *r = s->priv_data;
int rc;
r = av_mallocz(sizeof(RTMP));
if (!r)
return AVERROR(ENOMEM);
switch (av_log_get_level()) {
default:
case AV_LOG_FATAL: rc = RTMP_LOGCRIT; break;
@ -103,11 +98,9 @@ static int rtmp_open(URLContext *s, const char *uri, int flags)
goto fail;
}
s->priv_data = r;
s->is_streamed = 1;
return 0;
fail:
av_free(r);
return rc;
}
@ -167,7 +160,8 @@ URLProtocol ff_rtmp_protocol = {
.url_close = rtmp_close,
.url_read_pause = rtmp_read_pause,
.url_read_seek = rtmp_read_seek,
.url_get_file_handle = rtmp_get_file_handle
.url_get_file_handle = rtmp_get_file_handle,
.priv_data_size = sizeof(RTMP),
};
URLProtocol ff_rtmpt_protocol = {
@ -178,7 +172,8 @@ URLProtocol ff_rtmpt_protocol = {
.url_close = rtmp_close,
.url_read_pause = rtmp_read_pause,
.url_read_seek = rtmp_read_seek,
.url_get_file_handle = rtmp_get_file_handle
.url_get_file_handle = rtmp_get_file_handle,
.priv_data_size = sizeof(RTMP),
};
URLProtocol ff_rtmpe_protocol = {
@ -189,7 +184,8 @@ URLProtocol ff_rtmpe_protocol = {
.url_close = rtmp_close,
.url_read_pause = rtmp_read_pause,
.url_read_seek = rtmp_read_seek,
.url_get_file_handle = rtmp_get_file_handle
.url_get_file_handle = rtmp_get_file_handle,
.priv_data_size = sizeof(RTMP),
};
URLProtocol ff_rtmpte_protocol = {
@ -200,7 +196,8 @@ URLProtocol ff_rtmpte_protocol = {
.url_close = rtmp_close,
.url_read_pause = rtmp_read_pause,
.url_read_seek = rtmp_read_seek,
.url_get_file_handle = rtmp_get_file_handle
.url_get_file_handle = rtmp_get_file_handle,
.priv_data_size = sizeof(RTMP),
};
URLProtocol ff_rtmps_protocol = {
@ -211,5 +208,6 @@ URLProtocol ff_rtmps_protocol = {
.url_close = rtmp_close,
.url_read_pause = rtmp_read_pause,
.url_read_seek = rtmp_read_seek,
.url_get_file_handle = rtmp_get_file_handle
.url_get_file_handle = rtmp_get_file_handle,
.priv_data_size = sizeof(RTMP),
};

View File

@ -68,7 +68,6 @@ static int mmsh_close(URLContext *h)
ffurl_close(mms->mms_hd);
av_free(mms->streams);
av_free(mms->asf_header);
av_freep(&h->priv_data);
return 0;
}
@ -217,12 +216,9 @@ static int mmsh_open(URLContext *h, const char *uri, int flags)
char httpname[256], path[256], host[128], location[1024];
char *stream_selection = NULL;
char headers[1024];
MMSHContext *mmsh;
MMSHContext *mmsh = h->priv_data;
MMSContext *mms;
mmsh = h->priv_data = av_mallocz(sizeof(MMSHContext));
if (!h->priv_data)
return AVERROR(ENOMEM);
mmsh->request_seq = h->is_streamed = 1;
mms = &mmsh->mms;
av_strlcpy(location, uri, sizeof(location));
@ -367,4 +363,5 @@ URLProtocol ff_mmsh_protocol = {
.url_open = mmsh_open,
.url_read = mmsh_read,
.url_close = mmsh_close,
.priv_data_size = sizeof(MMSHContext),
};

View File

@ -470,7 +470,6 @@ static int mms_close(URLContext *h)
/* free all separately allocated pointers in mms */
av_free(mms->streams);
av_free(mms->asf_header);
av_freep(&h->priv_data);
return 0;
}
@ -502,15 +501,12 @@ static void clear_stream_buffers(MMSContext *mms)
static int mms_open(URLContext *h, const char *uri, int flags)
{
MMSTContext *mmst;
MMSTContext *mmst = h->priv_data;
MMSContext *mms;
int port, err;
char tcpname[256];
h->is_streamed = 1;
mmst = h->priv_data = av_mallocz(sizeof(MMSTContext));
if (!h->priv_data)
return AVERROR(ENOMEM);
mms = &mmst->mms;
// only for MMS over TCP, so set proto = NULL
@ -628,4 +624,5 @@ URLProtocol ff_mmst_protocol = {
.url_open = mms_open,
.url_read = mms_read,
.url_close = mms_close,
.priv_data_size = sizeof(MMSTContext),
};

View File

@ -784,7 +784,6 @@ static int rtmp_close(URLContext *h)
av_freep(&rt->flv_data);
ffurl_close(rt->stream);
av_free(rt);
return 0;
}
@ -799,16 +798,12 @@ static int rtmp_close(URLContext *h)
*/
static int rtmp_open(URLContext *s, const char *uri, int flags)
{
RTMPContext *rt;
RTMPContext *rt = s->priv_data;
char proto[8], hostname[256], path[1024], *fname;
uint8_t buf[2048];
int port;
int ret;
rt = av_mallocz(sizeof(RTMPContext));
if (!rt)
return AVERROR(ENOMEM);
s->priv_data = rt;
rt->is_input = !(flags & AVIO_FLAG_WRITE);
av_url_split(proto, sizeof(proto), NULL, 0, hostname, sizeof(hostname), &port,
@ -1002,4 +997,5 @@ URLProtocol ff_rtmp_protocol = {
.url_read = rtmp_read,
.url_write = rtmp_write,
.url_close = rtmp_close,
.priv_data_size = sizeof(RTMPContext),
};

View File

@ -136,7 +136,7 @@ static void build_udp_url(char *buf, int buf_size,
static int rtp_open(URLContext *h, const char *uri, int flags)
{
RTPContext *s;
RTPContext *s = h->priv_data;
int rtp_port, rtcp_port,
ttl, connect,
local_rtp_port, local_rtcp_port, max_packet_size;
@ -145,11 +145,6 @@ static int rtp_open(URLContext *h, const char *uri, int flags)
char path[1024];
const char *p;
s = av_mallocz(sizeof(RTPContext));
if (!s)
return AVERROR(ENOMEM);
h->priv_data = s;
av_url_split(NULL, 0, NULL, 0, hostname, sizeof(hostname), &rtp_port,
path, sizeof(path), uri);
/* extract parameters */
@ -213,7 +208,6 @@ static int rtp_open(URLContext *h, const char *uri, int flags)
ffurl_close(s->rtp_hd);
if (s->rtcp_hd)
ffurl_close(s->rtcp_hd);
av_free(s);
return AVERROR(EIO);
}
@ -290,7 +284,6 @@ static int rtp_close(URLContext *h)
ffurl_close(s->rtp_hd);
ffurl_close(s->rtcp_hd);
av_free(s);
return 0;
}
@ -336,4 +329,5 @@ URLProtocol ff_rtp_protocol = {
.url_write = rtp_write,
.url_close = rtp_close,
.url_get_file_handle = rtp_get_file_handle,
.priv_data_size = sizeof(RTPContext),
};

View File

@ -39,7 +39,7 @@ static int tcp_open(URLContext *h, const char *uri, int flags)
{
struct addrinfo hints, *ai, *cur_ai;
int port, fd = -1;
TCPContext *s = NULL;
TCPContext *s = h->priv_data;
int listen_socket = 0;
const char *p;
char buf[256];
@ -135,12 +135,6 @@ static int tcp_open(URLContext *h, const char *uri, int flags)
goto fail;
}
}
s = av_malloc(sizeof(TCPContext));
if (!s) {
freeaddrinfo(ai);
return AVERROR(ENOMEM);
}
h->priv_data = s;
h->is_streamed = 1;
s->fd = fd;
freeaddrinfo(ai);
@ -193,7 +187,6 @@ static int tcp_close(URLContext *h)
{
TCPContext *s = h->priv_data;
closesocket(s->fd);
av_free(s);
return 0;
}
@ -210,4 +203,5 @@ URLProtocol ff_tcp_protocol = {
.url_write = tcp_write,
.url_close = tcp_close,
.url_get_file_handle = tcp_get_file_handle,
.priv_data_size = sizeof(TCPContext),
};

View File

@ -306,7 +306,7 @@ static int udp_open(URLContext *h, const char *uri, int flags)
{
char hostname[1024], localaddr[1024] = "";
int port, udp_fd = -1, tmp, bind_ret = -1;
UDPContext *s = NULL;
UDPContext *s = h->priv_data;
int is_output;
const char *p;
char buf[256];
@ -319,11 +319,6 @@ static int udp_open(URLContext *h, const char *uri, int flags)
is_output = !(flags & AVIO_FLAG_READ);
s = av_mallocz(sizeof(UDPContext));
if (!s)
return AVERROR(ENOMEM);
h->priv_data = s;
s->ttl = 16;
s->buffer_size = is_output ? UDP_TX_BUF_SIZE : UDP_MAX_PKT_SIZE;
@ -440,7 +435,6 @@ static int udp_open(URLContext *h, const char *uri, int flags)
fail:
if (udp_fd >= 0)
closesocket(udp_fd);
av_free(s);
return AVERROR(EIO);
}
@ -486,7 +480,6 @@ static int udp_close(URLContext *h)
if (s->is_multicast && (h->flags & AVIO_FLAG_READ))
udp_leave_multicast_group(s->udp_fd, (struct sockaddr *)&s->dest_addr);
closesocket(s->udp_fd);
av_free(s);
return 0;
}
@ -497,4 +490,5 @@ URLProtocol ff_udp_protocol = {
.url_write = udp_write,
.url_close = udp_close,
.url_get_file_handle = udp_get_file_handle,
.priv_data_size = sizeof(UDPContext),
};