[FFmpeg-devel] Issue an error when forced format cannot be honnored
Etienne Buira
etienne.buira.lists
Tue Oct 27 16:15:27 CET 2009
On Tue, Oct 27, 2009 at 03:28:49PM +0100, Etienne Buira wrote:
> On Tue, Oct 27, 2009 at 01:58:20PM +0100, Michael Niedermayer wrote:
> > On Mon, Oct 26, 2009 at 10:10:45PM +0100, Etienne Buira wrote:
> > > On Mon, Oct 26, 2009 at 06:58:10PM +0100, Michael Niedermayer wrote:
> > > > On Sun, Oct 25, 2009 at 12:11:05AM +0200, Etienne Buira wrote:
> > > ...
> > > > above is a slightly cleaner variant alternatively maybe the actual string
> > > > could be stored and the format searched when the in/out is clearer
> > > > there are probably other options but keeping a second variable
> > > > (forced_format) in sync seems a little fragile to me
> > >
> > > Hi.
> > >
> > > Does this patch look better?
> > >
> > > With this patch, I don't see the need to keep file_iformat and
> > > file_oformat globals, so there is a second patch to make them local to
> > > opt_{in,out}put_file.
> >
> > both patches ok, if tested, also i assume you checked that there are no
> > missing =NULL inits?
>
> Oops, nice to ask, there was an init missing.
> New patch attached as a simple patch, because both changes were
> dependant and related. Ask me if you want a split.
Re-oops, best with patch...
>
> > ...
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at mplayerhq.hu
> https://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel
-------------- next part --------------
Index: ffmpeg.c
===================================================================
--- ffmpeg.c (revision 20376)
+++ ffmpeg.c (working copy)
@@ -91,6 +91,7 @@
#define MAX_FILES 20
+static char *last_asked_format = NULL;
static AVFormatContext *input_files[MAX_FILES];
static int64_t input_files_ts_offset[MAX_FILES];
static double input_files_ts_scale[MAX_FILES][MAX_STREAMS];
@@ -109,8 +110,6 @@
static AVMetaDataMap meta_data_maps[MAX_FILES];
static int nb_meta_data_maps;
-static AVInputFormat *file_iformat;
-static AVOutputFormat *file_oformat;
static int frame_width = 0;
static int frame_height = 0;
static float frame_aspect_ratio = 0;
@@ -2384,12 +2383,7 @@
fprintf(stderr, "pgmyuv format is deprecated, use image2\n");
}
- file_iformat = av_find_input_format(arg);
- file_oformat = guess_format(arg, NULL, NULL);
- if (!file_iformat && !file_oformat) {
- fprintf(stderr, "Unknown input or output format: %s\n", arg);
- av_exit(1);
- }
+ last_asked_format = arg;
}
static void opt_video_rc_override_string(const char *arg)
@@ -2831,9 +2825,15 @@
{
AVFormatContext *ic;
AVFormatParameters params, *ap = ¶ms;
+ AVInputFormat *file_iformat = NULL;
int err, i, ret, rfps, rfps_base;
int64_t timestamp;
+ if (last_asked_format) {
+ file_iformat = av_find_input_format(last_asked_format);
+ last_asked_format = NULL;
+ }
+
if (!strcmp(filename, "-"))
filename = "pipe:";
@@ -2985,8 +2985,6 @@
dump_format(ic, nb_input_files, filename, 0);
nb_input_files++;
- file_iformat = NULL;
- file_oformat = NULL;
video_channel = 0;
@@ -3337,6 +3335,7 @@
int use_video, use_audio, use_subtitle;
int input_has_video, input_has_audio, input_has_subtitle;
AVFormatParameters params, *ap = ¶ms;
+ AVOutputFormat *file_oformat;
if (!strcmp(filename, "-"))
filename = "pipe:";
@@ -3347,7 +3346,14 @@
av_exit(1);
}
- if (!file_oformat) {
+ if (last_asked_format) {
+ file_oformat = guess_format(last_asked_format, NULL, NULL);
+ if (!file_oformat) {
+ fprintf(stderr, "Requested output format '%s' is not a suitable output format\n", last_asked_format);
+ av_exit(1);
+ }
+ last_asked_format = NULL;
+ } else {
file_oformat = guess_format(NULL, filename, NULL);
if (!file_oformat) {
fprintf(stderr, "Unable to find a suitable output format for '%s'\n",
@@ -3470,10 +3476,6 @@
oc->flags |= AVFMT_FLAG_NONBLOCK;
set_context_opts(oc, avformat_opts, AV_OPT_FLAG_ENCODING_PARAM);
-
- /* reset some options */
- file_oformat = NULL;
- file_iformat = NULL;
}
/* same option as mencoder */
More information about the ffmpeg-devel
mailing list