mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-28 20:53:54 +02:00
Deprecate av_open_input_* and remove their uses.
Deprecate the last remaining member of AVFormatParameters.
This commit is contained in:
parent
05e84c95c7
commit
603b8bc2a1
@ -91,9 +91,9 @@ static int movie_init(AVFilterContext *ctx)
|
|||||||
iformat = movie->format_name ? av_find_input_format(movie->format_name) : NULL;
|
iformat = movie->format_name ? av_find_input_format(movie->format_name) : NULL;
|
||||||
|
|
||||||
movie->format_ctx = NULL;
|
movie->format_ctx = NULL;
|
||||||
if ((ret = av_open_input_file(&movie->format_ctx, movie->file_name, iformat, 0, NULL)) < 0) {
|
if ((ret = avformat_open_input(&movie->format_ctx, movie->file_name, iformat, NULL)) < 0) {
|
||||||
av_log(ctx, AV_LOG_ERROR,
|
av_log(ctx, AV_LOG_ERROR,
|
||||||
"Failed to av_open_input_file '%s'\n", movie->file_name);
|
"Failed to avformat_open_input '%s'\n", movie->file_name);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
if ((ret = av_find_stream_info(movie->format_ctx)) < 0)
|
if ((ret = av_find_stream_info(movie->format_ctx)) < 0)
|
||||||
|
@ -473,6 +473,11 @@ static int applehttp_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
if (v->n_segments == 0)
|
if (v->n_segments == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (!(v->ctx = avformat_alloc_context())) {
|
||||||
|
ret = AVERROR(ENOMEM);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
v->index = i;
|
v->index = i;
|
||||||
v->needed = 1;
|
v->needed = 1;
|
||||||
v->parent = s;
|
v->parent = s;
|
||||||
@ -491,8 +496,8 @@ static int applehttp_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
NULL, 0, 0);
|
NULL, 0, 0);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
ret = av_open_input_stream(&v->ctx, &v->pb, v->segments[0]->url,
|
v->ctx->pb = &v->pb;
|
||||||
in_fmt, NULL);
|
ret = avformat_open_input(&v->ctx, v->segments[0]->url, in_fmt, NULL);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
v->stream_offset = stream_offset;
|
v->stream_offset = stream_offset;
|
||||||
|
@ -247,8 +247,8 @@ typedef struct AVFormatParameters {
|
|||||||
attribute_deprecated unsigned int mpeg2ts_compute_pcr:1;
|
attribute_deprecated unsigned int mpeg2ts_compute_pcr:1;
|
||||||
attribute_deprecated unsigned int initial_pause:1; /**< Do not begin to play the stream
|
attribute_deprecated unsigned int initial_pause:1; /**< Do not begin to play the stream
|
||||||
immediately (RTSP only). */
|
immediately (RTSP only). */
|
||||||
|
attribute_deprecated unsigned int prealloced_context:1;
|
||||||
#endif
|
#endif
|
||||||
unsigned int prealloced_context:1;
|
|
||||||
} AVFormatParameters;
|
} AVFormatParameters;
|
||||||
|
|
||||||
//! Demuxer will use avio_open, no opened file should be provided by the caller.
|
//! Demuxer will use avio_open, no opened file should be provided by the caller.
|
||||||
@ -1016,11 +1016,13 @@ int av_probe_input_buffer(AVIOContext *pb, AVInputFormat **fmt,
|
|||||||
const char *filename, void *logctx,
|
const char *filename, void *logctx,
|
||||||
unsigned int offset, unsigned int max_probe_size);
|
unsigned int offset, unsigned int max_probe_size);
|
||||||
|
|
||||||
|
#if FF_API_FORMAT_PARAMETERS
|
||||||
/**
|
/**
|
||||||
* Allocate all the structures needed to read an input stream.
|
* Allocate all the structures needed to read an input stream.
|
||||||
* This does not open the needed codecs for decoding the stream[s].
|
* This does not open the needed codecs for decoding the stream[s].
|
||||||
|
* @deprecated use avformat_open_input instead.
|
||||||
*/
|
*/
|
||||||
int av_open_input_stream(AVFormatContext **ic_ptr,
|
attribute_deprecated int av_open_input_stream(AVFormatContext **ic_ptr,
|
||||||
AVIOContext *pb, const char *filename,
|
AVIOContext *pb, const char *filename,
|
||||||
AVInputFormat *fmt, AVFormatParameters *ap);
|
AVInputFormat *fmt, AVFormatParameters *ap);
|
||||||
|
|
||||||
@ -1035,11 +1037,14 @@ int av_open_input_stream(AVFormatContext **ic_ptr,
|
|||||||
* @param ap Additional parameters needed when opening the file
|
* @param ap Additional parameters needed when opening the file
|
||||||
* (NULL if default).
|
* (NULL if default).
|
||||||
* @return 0 if OK, AVERROR_xxx otherwise
|
* @return 0 if OK, AVERROR_xxx otherwise
|
||||||
|
*
|
||||||
|
* @deprecated use avformat_open_input instead.
|
||||||
*/
|
*/
|
||||||
int av_open_input_file(AVFormatContext **ic_ptr, const char *filename,
|
attribute_deprecated int av_open_input_file(AVFormatContext **ic_ptr, const char *filename,
|
||||||
AVInputFormat *fmt,
|
AVInputFormat *fmt,
|
||||||
int buf_size,
|
int buf_size,
|
||||||
AVFormatParameters *ap);
|
AVFormatParameters *ap);
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Open an input stream and read the header. The codecs are not opened.
|
* Open an input stream and read the header. The codecs are not opened.
|
||||||
|
@ -774,7 +774,11 @@ static int read_gab2_sub(AVStream *st, AVPacket *pkt) {
|
|||||||
if (!(sub_demuxer = av_probe_input_format2(&pd, 1, &score)))
|
if (!(sub_demuxer = av_probe_input_format2(&pd, 1, &score)))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (!av_open_input_stream(&ast->sub_ctx, pb, "", sub_demuxer, NULL)) {
|
if (!(ast->sub_ctx = avformat_alloc_context()))
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
ast->sub_ctx->pb = pb;
|
||||||
|
if (!avformat_open_input(&ast->sub_ctx, "", sub_demuxer, NULL)) {
|
||||||
av_read_packet(ast->sub_ctx, &ast->sub_pkt);
|
av_read_packet(ast->sub_ctx, &ast->sub_pkt);
|
||||||
*st->codec = *ast->sub_ctx->streams[0]->codec;
|
*st->codec = *ast->sub_ctx->streams[0]->codec;
|
||||||
ast->sub_ctx->streams[0]->codec->extradata = NULL;
|
ast->sub_ctx->streams[0]->codec->extradata = NULL;
|
||||||
@ -1334,7 +1338,7 @@ static int avi_read_close(AVFormatContext *s)
|
|||||||
if (ast) {
|
if (ast) {
|
||||||
if (ast->sub_ctx) {
|
if (ast->sub_ctx) {
|
||||||
av_freep(&ast->sub_ctx->pb);
|
av_freep(&ast->sub_ctx->pb);
|
||||||
av_close_input_stream(ast->sub_ctx);
|
av_close_input_file(ast->sub_ctx);
|
||||||
}
|
}
|
||||||
av_free(ast->sub_buffer);
|
av_free(ast->sub_buffer);
|
||||||
av_free_packet(&ast->sub_pkt);
|
av_free_packet(&ast->sub_pkt);
|
||||||
|
@ -523,7 +523,7 @@ rdt_new_context (void)
|
|||||||
{
|
{
|
||||||
PayloadContext *rdt = av_mallocz(sizeof(PayloadContext));
|
PayloadContext *rdt = av_mallocz(sizeof(PayloadContext));
|
||||||
|
|
||||||
av_open_input_stream(&rdt->rmctx, NULL, "", &ff_rdt_demuxer, NULL);
|
avformat_open_input(&rdt->rmctx, "", &ff_rdt_demuxer, NULL);
|
||||||
|
|
||||||
return rdt;
|
return rdt;
|
||||||
}
|
}
|
||||||
@ -539,7 +539,7 @@ rdt_free_context (PayloadContext *rdt)
|
|||||||
av_freep(&rdt->rmst[i]);
|
av_freep(&rdt->rmst[i]);
|
||||||
}
|
}
|
||||||
if (rdt->rmctx)
|
if (rdt->rmctx)
|
||||||
av_close_input_stream(rdt->rmctx);
|
av_close_input_file(rdt->rmctx);
|
||||||
av_freep(&rdt->mlti_data);
|
av_freep(&rdt->mlti_data);
|
||||||
av_freep(&rdt->rmst);
|
av_freep(&rdt->rmst);
|
||||||
av_free(rdt);
|
av_free(rdt);
|
||||||
|
@ -107,10 +107,13 @@ int ff_wms_parse_sdp_a_line(AVFormatContext *s, const char *p)
|
|||||||
"Failed to fix invalid RTSP-MS/ASF min_pktsize\n");
|
"Failed to fix invalid RTSP-MS/ASF min_pktsize\n");
|
||||||
init_packetizer(&pb, buf, len);
|
init_packetizer(&pb, buf, len);
|
||||||
if (rt->asf_ctx) {
|
if (rt->asf_ctx) {
|
||||||
av_close_input_stream(rt->asf_ctx);
|
av_close_input_file(rt->asf_ctx);
|
||||||
rt->asf_ctx = NULL;
|
rt->asf_ctx = NULL;
|
||||||
}
|
}
|
||||||
ret = av_open_input_stream(&rt->asf_ctx, &pb, "", &ff_asf_demuxer, NULL);
|
if (!(rt->asf_ctx = avformat_alloc_context()))
|
||||||
|
return AVERROR(ENOMEM);
|
||||||
|
rt->asf_ctx->pb = &pb;
|
||||||
|
ret = avformat_open_input(&rt->asf_ctx, "", &ff_asf_demuxer, NULL);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
av_dict_copy(&s->metadata, rt->asf_ctx->metadata, 0);
|
av_dict_copy(&s->metadata, rt->asf_ctx->metadata, 0);
|
||||||
|
@ -52,7 +52,7 @@ static int sap_read_close(AVFormatContext *s)
|
|||||||
{
|
{
|
||||||
struct SAPState *sap = s->priv_data;
|
struct SAPState *sap = s->priv_data;
|
||||||
if (sap->sdp_ctx)
|
if (sap->sdp_ctx)
|
||||||
av_close_input_stream(sap->sdp_ctx);
|
av_close_input_file(sap->sdp_ctx);
|
||||||
if (sap->ann_fd)
|
if (sap->ann_fd)
|
||||||
ffurl_close(sap->ann_fd);
|
ffurl_close(sap->ann_fd);
|
||||||
av_freep(&sap->sdp);
|
av_freep(&sap->sdp);
|
||||||
@ -156,9 +156,8 @@ static int sap_read_header(AVFormatContext *s,
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
sap->sdp_ctx->max_delay = s->max_delay;
|
sap->sdp_ctx->max_delay = s->max_delay;
|
||||||
ap->prealloced_context = 1;
|
sap->sdp_ctx->pb = &sap->sdp_pb;
|
||||||
ret = av_open_input_stream(&sap->sdp_ctx, &sap->sdp_pb, "temp.sdp",
|
ret = avformat_open_input(&sap->sdp_ctx, "temp.sdp", infmt, NULL);
|
||||||
infmt, ap);
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
if (sap->sdp_ctx->ctx_flags & AVFMTCTX_NOHEADER)
|
if (sap->sdp_ctx->ctx_flags & AVFMTCTX_NOHEADER)
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include "libavcodec/internal.h"
|
#include "libavcodec/internal.h"
|
||||||
#include "libavutil/opt.h"
|
#include "libavutil/opt.h"
|
||||||
#include "libavutil/dict.h"
|
#include "libavutil/dict.h"
|
||||||
|
#include "libavutil/pixdesc.h"
|
||||||
#include "metadata.h"
|
#include "metadata.h"
|
||||||
#include "id3v2.h"
|
#include "id3v2.h"
|
||||||
#include "libavutil/avstring.h"
|
#include "libavutil/avstring.h"
|
||||||
@ -388,6 +389,47 @@ static int set_codec_from_probe_data(AVFormatContext *s, AVStream *st, AVProbeDa
|
|||||||
/************************************************************/
|
/************************************************************/
|
||||||
/* input media file */
|
/* input media file */
|
||||||
|
|
||||||
|
#if FF_API_FORMAT_PARAMETERS
|
||||||
|
static AVDictionary *convert_format_parameters(AVFormatParameters *ap)
|
||||||
|
{
|
||||||
|
char buf[1024];
|
||||||
|
AVDictionary *opts = NULL;
|
||||||
|
|
||||||
|
if (ap->time_base.num) {
|
||||||
|
snprintf(buf, sizeof(buf), "%d/%d", ap->time_base.den, ap->time_base.num);
|
||||||
|
av_dict_set(&opts, "framerate", buf, 0);
|
||||||
|
}
|
||||||
|
if (ap->sample_rate) {
|
||||||
|
snprintf(buf, sizeof(buf), "%d", ap->sample_rate);
|
||||||
|
av_dict_set(&opts, "sample_rate", buf, 0);
|
||||||
|
}
|
||||||
|
if (ap->channels) {
|
||||||
|
snprintf(buf, sizeof(buf), "%d", ap->channels);
|
||||||
|
av_dict_set(&opts, "channels", buf, 0);
|
||||||
|
}
|
||||||
|
if (ap->width || ap->height) {
|
||||||
|
snprintf(buf, sizeof(buf), "%dx%d", ap->width, ap->height);
|
||||||
|
av_dict_set(&opts, "video_size", buf, 0);
|
||||||
|
}
|
||||||
|
if (ap->pix_fmt != PIX_FMT_NONE) {
|
||||||
|
av_dict_set(&opts, "pixel_format", av_get_pix_fmt_name(ap->pix_fmt), 0);
|
||||||
|
}
|
||||||
|
if (ap->channel) {
|
||||||
|
snprintf(buf, sizeof(buf), "%d", ap->channel);
|
||||||
|
av_dict_set(&opts, "channel", buf, 0);
|
||||||
|
}
|
||||||
|
if (ap->standard) {
|
||||||
|
av_dict_set(&opts, "standard", ap->standard, 0);
|
||||||
|
}
|
||||||
|
if (ap->mpeg2ts_compute_pcr) {
|
||||||
|
av_dict_set(&opts, "mpeg2ts_compute_pcr", "1", 0);
|
||||||
|
}
|
||||||
|
if (ap->initial_pause) {
|
||||||
|
av_dict_set(&opts, "initial_pause", "1", 0);
|
||||||
|
}
|
||||||
|
return opts;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Open a media file from an IO stream. 'fmt' must be specified.
|
* Open a media file from an IO stream. 'fmt' must be specified.
|
||||||
*/
|
*/
|
||||||
@ -396,6 +438,7 @@ int av_open_input_stream(AVFormatContext **ic_ptr,
|
|||||||
AVInputFormat *fmt, AVFormatParameters *ap)
|
AVInputFormat *fmt, AVFormatParameters *ap)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
AVDictionary *opts;
|
||||||
AVFormatContext *ic;
|
AVFormatContext *ic;
|
||||||
AVFormatParameters default_ap;
|
AVFormatParameters default_ap;
|
||||||
|
|
||||||
@ -403,6 +446,7 @@ int av_open_input_stream(AVFormatContext **ic_ptr,
|
|||||||
ap=&default_ap;
|
ap=&default_ap;
|
||||||
memset(ap, 0, sizeof(default_ap));
|
memset(ap, 0, sizeof(default_ap));
|
||||||
}
|
}
|
||||||
|
opts = convert_format_parameters(ap);
|
||||||
|
|
||||||
if(!ap->prealloced_context)
|
if(!ap->prealloced_context)
|
||||||
ic = avformat_alloc_context();
|
ic = avformat_alloc_context();
|
||||||
@ -412,63 +456,15 @@ int av_open_input_stream(AVFormatContext **ic_ptr,
|
|||||||
err = AVERROR(ENOMEM);
|
err = AVERROR(ENOMEM);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
ic->iformat = fmt;
|
|
||||||
ic->pb = pb;
|
ic->pb = pb;
|
||||||
ic->duration = AV_NOPTS_VALUE;
|
|
||||||
ic->start_time = AV_NOPTS_VALUE;
|
|
||||||
av_strlcpy(ic->filename, filename, sizeof(ic->filename));
|
|
||||||
|
|
||||||
/* allocate private data */
|
err = avformat_open_input(ic_ptr, filename, fmt, &opts);
|
||||||
if (fmt->priv_data_size > 0) {
|
|
||||||
ic->priv_data = av_mallocz(fmt->priv_data_size);
|
|
||||||
if (!ic->priv_data) {
|
|
||||||
err = AVERROR(ENOMEM);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
if (fmt->priv_class) {
|
|
||||||
*(const AVClass**)ic->priv_data = fmt->priv_class;
|
|
||||||
av_opt_set_defaults(ic->priv_data);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
ic->priv_data = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// e.g. AVFMT_NOFILE formats will not have a AVIOContext
|
fail:
|
||||||
if (ic->pb)
|
av_dict_free(&opts);
|
||||||
ff_id3v2_read(ic, ID3v2_DEFAULT_MAGIC);
|
|
||||||
|
|
||||||
if (ic->iformat->read_header) {
|
|
||||||
err = ic->iformat->read_header(ic, ap);
|
|
||||||
if (err < 0)
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pb && !ic->data_offset)
|
|
||||||
ic->data_offset = avio_tell(ic->pb);
|
|
||||||
|
|
||||||
ic->raw_packet_buffer_remaining_size = RAW_PACKET_BUFFER_SIZE;
|
|
||||||
|
|
||||||
*ic_ptr = ic;
|
|
||||||
return 0;
|
|
||||||
fail:
|
|
||||||
if (ic) {
|
|
||||||
int i;
|
|
||||||
av_freep(&ic->priv_data);
|
|
||||||
for(i=0;i<ic->nb_streams;i++) {
|
|
||||||
AVStream *st = ic->streams[i];
|
|
||||||
if (st) {
|
|
||||||
av_free(st->priv_data);
|
|
||||||
av_free(st->codec->extradata);
|
|
||||||
av_free(st->codec);
|
|
||||||
av_free(st->info);
|
|
||||||
}
|
|
||||||
av_free(st);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
av_free(ic);
|
|
||||||
*ic_ptr = NULL;
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/** size of probe buffer, for guessing file type from file contents */
|
/** size of probe buffer, for guessing file type from file contents */
|
||||||
#define PROBE_BUF_MIN 2048
|
#define PROBE_BUF_MIN 2048
|
||||||
@ -541,69 +537,24 @@ int av_probe_input_buffer(AVIOContext *pb, AVInputFormat **fmt,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if FF_API_FORMAT_PARAMETERS
|
||||||
int av_open_input_file(AVFormatContext **ic_ptr, const char *filename,
|
int av_open_input_file(AVFormatContext **ic_ptr, const char *filename,
|
||||||
AVInputFormat *fmt,
|
AVInputFormat *fmt,
|
||||||
int buf_size,
|
int buf_size,
|
||||||
AVFormatParameters *ap)
|
AVFormatParameters *ap)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
AVProbeData probe_data, *pd = &probe_data;
|
AVDictionary *opts = convert_format_parameters(ap);
|
||||||
AVIOContext *pb = NULL;
|
|
||||||
void *logctx= ap && ap->prealloced_context ? *ic_ptr : NULL;
|
|
||||||
|
|
||||||
pd->filename = "";
|
if (!ap->prealloced_context)
|
||||||
if (filename)
|
|
||||||
pd->filename = filename;
|
|
||||||
pd->buf = NULL;
|
|
||||||
pd->buf_size = 0;
|
|
||||||
|
|
||||||
if (!fmt) {
|
|
||||||
/* guess format if no file can be opened */
|
|
||||||
fmt = av_probe_input_format(pd, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Do not open file if the format does not need it. XXX: specific
|
|
||||||
hack needed to handle RTSP/TCP */
|
|
||||||
if (!fmt || !(fmt->flags & AVFMT_NOFILE)) {
|
|
||||||
/* if no file needed do not try to open one */
|
|
||||||
if ((err=avio_open(&pb, filename, AVIO_FLAG_READ)) < 0) {
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
if (buf_size > 0) {
|
|
||||||
ffio_set_buf_size(pb, buf_size);
|
|
||||||
}
|
|
||||||
if (!fmt && (err = av_probe_input_buffer(pb, &fmt, filename, logctx, 0, logctx ? (*ic_ptr)->probesize : 0)) < 0) {
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* if still no format found, error */
|
|
||||||
if (!fmt) {
|
|
||||||
err = AVERROR_INVALIDDATA;
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* check filename in case an image number is expected */
|
|
||||||
if (fmt->flags & AVFMT_NEEDNUMBER) {
|
|
||||||
if (!av_filename_number_test(filename)) {
|
|
||||||
err = AVERROR(EINVAL);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
err = av_open_input_stream(ic_ptr, pb, filename, fmt, ap);
|
|
||||||
if (err)
|
|
||||||
goto fail;
|
|
||||||
return 0;
|
|
||||||
fail:
|
|
||||||
av_freep(&pd->buf);
|
|
||||||
if (pb)
|
|
||||||
avio_close(pb);
|
|
||||||
if (ap && ap->prealloced_context)
|
|
||||||
av_free(*ic_ptr);
|
|
||||||
*ic_ptr = NULL;
|
*ic_ptr = NULL;
|
||||||
return err;
|
|
||||||
|
|
||||||
|
err = avformat_open_input(ic_ptr, filename, fmt, &opts);
|
||||||
|
|
||||||
|
av_dict_free(&opts);
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* open input file and probe the format if necessary */
|
/* open input file and probe the format if necessary */
|
||||||
static int init_input(AVFormatContext *s, const char *filename)
|
static int init_input(AVFormatContext *s, const char *filename)
|
||||||
|
Loading…
Reference in New Issue
Block a user