Deprecate the last remaining member of AVFormatParameters.tags/n0.8
| @@ -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, | |||||
| in_fmt, NULL); | |||||
| v->ctx->pb = &v->pb; | |||||
| 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; | |||||
| ret = av_open_input_stream(&sap->sdp_ctx, &sap->sdp_pb, "temp.sdp", | |||||
| infmt, ap); | |||||
| sap->sdp_ctx->pb = &sap->sdp_pb; | |||||
| ret = avformat_open_input(&sap->sdp_ctx, "temp.sdp", infmt, NULL); | |||||
| 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 */ | |||||
| 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 | |||||
| if (ic->pb) | |||||
| ff_id3v2_read(ic, ID3v2_DEFAULT_MAGIC); | |||||
| err = avformat_open_input(ic_ptr, filename, fmt, &opts); | |||||
| 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; | |||||
| fail: | |||||
| av_dict_free(&opts); | |||||
| 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; | |||||
| AVIOContext *pb = NULL; | |||||
| void *logctx= ap && ap->prealloced_context ? *ic_ptr : NULL; | |||||
| pd->filename = ""; | |||||
| 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; | |||||
| } | |||||
| } | |||||
| AVDictionary *opts = convert_format_parameters(ap); | |||||
| /* if still no format found, error */ | |||||
| if (!fmt) { | |||||
| err = AVERROR_INVALIDDATA; | |||||
| goto fail; | |||||
| } | |||||
| if (!ap->prealloced_context) | |||||
| *ic_ptr = NULL; | |||||
| /* 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; | |||||
| 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) | ||||