mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Merge remote-tracking branch 'lukaszmluki/master'
* lukaszmluki/master: lavd/avdevice: always free detected devices on error lavf/http: return error from seek on invalid whence lavf/http: return error on seeking to negative postion lavf/avio: fix ffurl_alloc error checks Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
c832bf0c38
@ -101,6 +101,7 @@ int avdevice_dev_to_app_control_message(struct AVFormatContext *s, enum AVDevToA
|
|||||||
|
|
||||||
int avdevice_list_devices(AVFormatContext *s, AVDeviceInfoList **device_list)
|
int avdevice_list_devices(AVFormatContext *s, AVDeviceInfoList **device_list)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
av_assert0(s);
|
av_assert0(s);
|
||||||
av_assert0(device_list);
|
av_assert0(device_list);
|
||||||
av_assert0(s->oformat || s->iformat);
|
av_assert0(s->oformat || s->iformat);
|
||||||
@ -113,8 +114,12 @@ int avdevice_list_devices(AVFormatContext *s, AVDeviceInfoList **device_list)
|
|||||||
if (!(*device_list))
|
if (!(*device_list))
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
if (s->oformat)
|
if (s->oformat)
|
||||||
return s->oformat->get_device_list(s, *device_list);
|
ret = s->oformat->get_device_list(s, *device_list);
|
||||||
return s->iformat->get_device_list(s, *device_list);
|
else
|
||||||
|
ret = s->iformat->get_device_list(s, *device_list);
|
||||||
|
if (ret < 0)
|
||||||
|
avdevice_free_list_devices(device_list);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void avdevice_free_list_devices(AVDeviceInfoList **device_list)
|
void avdevice_free_list_devices(AVDeviceInfoList **device_list)
|
||||||
|
@ -270,7 +270,7 @@ int ffurl_open(URLContext **puc, const char *filename, int flags,
|
|||||||
const AVIOInterruptCB *int_cb, AVDictionary **options)
|
const AVIOInterruptCB *int_cb, AVDictionary **options)
|
||||||
{
|
{
|
||||||
int ret = ffurl_alloc(puc, filename, flags, int_cb);
|
int ret = ffurl_alloc(puc, filename, flags, int_cb);
|
||||||
if (ret)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
if (options && (*puc)->prot->priv_data_class &&
|
if (options && (*puc)->prot->priv_data_class &&
|
||||||
(ret = av_opt_set_dict((*puc)->priv_data, options)) < 0)
|
(ret = av_opt_set_dict((*puc)->priv_data, options)) < 0)
|
||||||
@ -399,7 +399,7 @@ int avio_check(const char *url, int flags)
|
|||||||
{
|
{
|
||||||
URLContext *h;
|
URLContext *h;
|
||||||
int ret = ffurl_alloc(&h, url, flags, NULL);
|
int ret = ffurl_alloc(&h, url, flags, NULL);
|
||||||
if (ret)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if (h->prot->url_check) {
|
if (h->prot->url_check) {
|
||||||
|
@ -979,16 +979,21 @@ static int64_t http_seek(URLContext *h, int64_t off, int whence)
|
|||||||
else if ((s->filesize == -1 && whence == SEEK_END) || h->is_streamed)
|
else if ((s->filesize == -1 && whence == SEEK_END) || h->is_streamed)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* we save the old context in case the seek fails */
|
|
||||||
old_buf_size = s->buf_end - s->buf_ptr;
|
|
||||||
memcpy(old_buf, s->buf_ptr, old_buf_size);
|
|
||||||
s->hd = NULL;
|
|
||||||
if (whence == SEEK_CUR)
|
if (whence == SEEK_CUR)
|
||||||
off += s->off;
|
off += s->off;
|
||||||
else if (whence == SEEK_END)
|
else if (whence == SEEK_END)
|
||||||
off += s->filesize;
|
off += s->filesize;
|
||||||
|
else if (whence != SEEK_SET)
|
||||||
|
return AVERROR(EINVAL);
|
||||||
|
if (off < 0)
|
||||||
|
return AVERROR(EINVAL);
|
||||||
s->off = off;
|
s->off = off;
|
||||||
|
|
||||||
|
/* we save the old context in case the seek fails */
|
||||||
|
old_buf_size = s->buf_end - s->buf_ptr;
|
||||||
|
memcpy(old_buf, s->buf_ptr, old_buf_size);
|
||||||
|
s->hd = NULL;
|
||||||
|
|
||||||
/* if it fails, continue on old connection */
|
/* if it fails, continue on old connection */
|
||||||
av_dict_copy(&options, s->chained_options, 0);
|
av_dict_copy(&options, s->chained_options, 0);
|
||||||
if (http_open_cnx(h, &options) < 0) {
|
if (http_open_cnx(h, &options) < 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user