diff options
author | Fabrice Bellard <fabrice@bellard.org> | 2002-05-25 22:25:13 +0000 |
---|---|---|
committer | Fabrice Bellard <fabrice@bellard.org> | 2002-05-25 22:25:13 +0000 |
commit | bf5af5687569e34d6e3a4d31fc6bb5dc44efdb29 (patch) | |
tree | 6031d09b12d94dba52b5dfa4b955b33c0430164f /ffmpeg.c | |
parent | 5cbcf02cf109035293936f55217c20c9004813d4 (diff) | |
download | ffmpeg-bf5af5687569e34d6e3a4d31fc6bb5dc44efdb29.tar.gz |
license/copyright change - fixed memory leaks
Originally committed as revision 587 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'ffmpeg.c')
-rw-r--r-- | ffmpeg.c | 105 |
1 files changed, 50 insertions, 55 deletions
@@ -1,20 +1,20 @@ /* * FFmpeg main - * Copyright (c) 2000, 2001, 2002 Gerard Lantau + * Copyright (c) 2000, 2001, 2002 Fabrice Bellard * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, + * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #define HAVE_AV_CONFIG_H #include "avformat.h" @@ -26,10 +26,10 @@ #include <sys/ioctl.h> #include <sys/time.h> #include <termios.h> -#include <time.h> #include <sys/resource.h> -#include <ctype.h> #endif +#include <time.h> +#include <ctype.h> #define MAXINT64 INT64_C(0x7fffffffffffffff) @@ -114,6 +114,13 @@ static int do_psnr = 0; static int do_vstats = 0; static int mpeg_vcd = 0; +#ifndef CONFIG_AUDIO_OSS +const char *audio_device = "none"; +#endif +#ifndef CONFIG_VIDEO4LINUX +const char *v4l_device = "none"; +#endif + typedef struct AVOutputStream { int file_index; /* file index */ int index; /* stream index in the output file */ @@ -517,9 +524,9 @@ static void do_video_stats(AVOutputStream *ost, { static FILE *fvstats=NULL; static INT64 total_size = 0; - struct tm *today; - time_t today2; char filename[40]; + time_t today2; + struct tm *today; AVCodecContext *enc; int frame_number; INT64 ti; @@ -902,11 +909,13 @@ static int av_encode(AVFormatContext **output_files, /* if none, if is finished */ if (file_index < 0) { if (stream_no_data) { +#ifndef CONFIG_WIN32 struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = 1000 * 1000 * 10; nanosleep(&ts, 0); +#endif stream_no_data = 0; continue; } @@ -929,12 +938,11 @@ static int av_encode(AVFormatContext **output_files, /* the following test is needed in case new streams appear dynamically in stream : we ignore them */ if (pkt.stream_index >= file_table[file_index].nb_streams) - continue; + goto discard_packet; ist_index = file_table[file_index].ist_index + pkt.stream_index; ist = ist_table[ist_index]; - if (ist->discard) { - continue; - } + if (ist->discard) + goto discard_packet; if (pkt.flags & PKT_FLAG_DROPPED_FRAME) ist->frame_number++; @@ -1079,6 +1087,7 @@ static int av_encode(AVFormatContext **output_files, } } } + discard_packet: av_free_packet(&pkt); /* dump report by using the first video and audio streams */ @@ -1219,6 +1228,8 @@ static int av_encode(AVFormatContext **output_files, for(i=0;i<nb_ostreams;i++) { ost = ost_table[i]; if (ost) { + fifo_free(&ost->fifo); /* works even if fifo is not + initialized but set to zero */ av_free(ost->pict_tmp.data[0]); if (ost->video_resample) img_resample_close(ost->img_resample_ctx); @@ -1261,20 +1272,20 @@ void show_licence(void) { printf( "ffmpeg version " FFMPEG_VERSION "\n" - "Copyright (c) 2000, 2001, 2002 Gerard Lantau\n" - "This program is free software; you can redistribute it and/or modify\n" - "it under the terms of the GNU General Public License as published by\n" - "the Free Software Foundation; either version 2 of the License, or\n" - "(at your option) any later version.\n" + "Copyright (c) 2000, 2001, 2002 Fabrice Bellard\n" + "This library is free software; you can redistribute it and/or\n" + "modify it under the terms of the GNU Lesser General Public\n" + "License as published by the Free Software Foundation; either\n" + "version 2 of the License, or (at your option) any later version.\n" "\n" - "This program is distributed in the hope that it will be useful,\n" + "This library is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" - "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" - "GNU General Public License for more details.\n" + "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n" + "Lesser General Public License for more details.\n" "\n" - "You should have received a copy of the GNU General Public License\n" - "along with this program; if not, write to the Free Software\n" - "Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n" + "You should have received a copy of the GNU Lesser General Public\n" + "License along with this library; if not, write to the Free Software\n" + "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" ); exit(1); } @@ -1399,7 +1410,6 @@ void opt_audio_channels(const char *arg) audio_channels = atoi(arg); } -#ifdef CONFIG_GRAB void opt_video_device(const char *arg) { v4l_device = strdup(arg); @@ -1409,7 +1419,6 @@ void opt_audio_device(const char *arg) { audio_device = strdup(arg); } -#endif void opt_audio_codec(const char *arg) { @@ -1562,6 +1571,8 @@ void opt_input_file(const char *filename) i, (float)enc->frame_rate / FRAME_RATE_BASE, (float)rfps / FRAME_RATE_BASE); } + /* update the current frame rate to match the stream frame rate */ + frame_rate = rfps; break; default: abort(); @@ -1823,8 +1834,6 @@ void opt_output_file(const char *filename) video_codec_id = CODEC_ID_NONE; } -#ifdef CONFIG_GRAB - /* prepare dummy protocols for grab */ void prepare_grab(void) { @@ -1873,7 +1882,7 @@ void prepare_grab(void) AVInputFormat *fmt1; fmt1 = av_find_input_format("video_grab_device"); if (av_open_input_file(&ic, "", fmt1, 0, ap) < 0) { - fprintf(stderr, "Could not open video grab device\n"); + fprintf(stderr, "Could not find video grab device\n"); exit(1); } /* by now video grab has one stream */ @@ -1886,7 +1895,7 @@ void prepare_grab(void) AVInputFormat *fmt1; fmt1 = av_find_input_format("audio_device"); if (av_open_input_file(&ic, "", fmt1, 0, ap) < 0) { - fprintf(stderr, "Could not open audio grab device\n"); + fprintf(stderr, "Could not find audio grab device\n"); exit(1); } input_files[nb_input_files] = ic; @@ -1895,22 +1904,12 @@ void prepare_grab(void) } } -#else - -void prepare_grab(void) -{ - fprintf(stderr, "Must supply at least one input file\n"); - exit(1); -} - -#endif - /* open the necessary output devices for playing */ void prepare_play(void) { - AVOutputFormat *ofmt; - ofmt = guess_format("audio_device", NULL, NULL); - if (!ofmt) { + file_iformat = NULL; + file_oformat = guess_format("audio_device", NULL, NULL); + if (!file_oformat) { fprintf(stderr, "Could not find audio device\n"); exit(1); } @@ -2008,7 +2007,7 @@ void show_help(void) prog = do_play ? "ffplay" : "ffmpeg"; - printf("%s version " FFMPEG_VERSION ", Copyright (c) 2000, 2001, 2002 Gerard Lantau\n", + printf("%s version " FFMPEG_VERSION ", Copyright (c) 2000, 2001, 2002 Fabrice Bellard\n", prog); if (!do_play) { @@ -2069,9 +2068,7 @@ const OptionDef options[] = { { "qblur", HAS_ARG | OPT_EXPERT, {(void*)opt_qblur}, "video quantiser scale blur (VBR)", "blur" }, { "qcomp", HAS_ARG | OPT_EXPERT, {(void*)opt_qcomp}, "video quantiser scale compression (VBR)", "compression" }, { "bt", HAS_ARG, {(void*)opt_video_bitrate_tolerance}, "set video bitrate tolerance (in kbit/s)", "tolerance" }, -#ifdef CONFIG_GRAB - { "vd", HAS_ARG | OPT_EXPERT, {(void*)opt_video_device}, "set video device", "device" }, -#endif + { "vd", HAS_ARG | OPT_EXPERT, {(void*)opt_video_device}, "set video grab device", "device" }, { "vcodec", HAS_ARG | OPT_EXPERT, {(void*)opt_video_codec}, "force video codec", "codec" }, { "me", HAS_ARG | OPT_EXPERT, {(void*)opt_motion_estimation}, "set motion estimation method", "method" }, @@ -2085,9 +2082,7 @@ const OptionDef options[] = { { "ar", HAS_ARG, {(void*)opt_audio_rate}, "set audio sampling rate (in Hz)", "rate" }, { "ac", HAS_ARG, {(void*)opt_audio_channels}, "set number of audio channels", "channels" }, { "an", OPT_BOOL, {(void*)&audio_disable}, "disable audio" }, -#ifdef CONFIG_GRAB { "ad", HAS_ARG | OPT_EXPERT, {(void*)opt_audio_device}, "set audio device", "device" }, -#endif { "acodec", HAS_ARG | OPT_EXPERT, {(void*)opt_audio_codec}, "force audio codec", "codec" }, { "deinterlace", OPT_BOOL | OPT_EXPERT, {(void*)&do_deinterlace}, "deinterlace pictures" }, |