stdin patch by (Charles Yates <charles dot yates at pandora dot be>)
authorCharles Yates <charles.yates@pandora.be>
Fri, 29 Aug 2003 20:51:10 +0000 (20:51 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 29 Aug 2003 20:51:10 +0000 (20:51 +0000)
* removes use of read_key and getchar when input is received on stdin
(this was corrupting the packet reading)
* terminates av_encode when a termination signal is received (use of
ctrl-c issued a term_exit and subsequent uses of q failed)
* specific correction to yuv4mpeg pipe reading - the defined header was
too short to allow for extended yuv4mpeg flags [as used by smil2yuv and
y4mscaler and accepted by mjpeg tools]

Originally committed as revision 2183 to svn://svn.ffmpeg.org/ffmpeg/trunk

ffmpeg.c
libavformat/yuv4mpeg.c

index e62280d..0b6da2e 100644 (file)
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -162,6 +162,8 @@ static char *video_standard = "ntsc";
 static char *audio_grab_format = "audio_device";
 static char *audio_device = NULL;
 
+static int using_stdin = 0;
+
 #define DEFAULT_PASS_LOGFILENAME "ffmpeg2pass"
 
 typedef struct AVOutputStream {
@@ -1139,14 +1141,15 @@ static int av_encode(AVFormatContext **output_files,
     }
 
 #ifndef CONFIG_WIN32
-    fprintf(stderr, "Press [q] to stop encoding\n");
+    if ( !using_stdin )
+        fprintf(stderr, "Press [q] to stop encoding\n");
 #endif
     term_init();
 
     stream_no_data = 0;
     key = -1;
 
-    for(;;) {
+    for(; received_sigterm == 0;) {
         int file_index, ist_index;
         AVPacket pkt;
         uint8_t *ptr;
@@ -1160,7 +1163,7 @@ static int av_encode(AVFormatContext **output_files,
         
     redo:
         /* if 'q' pressed, exits */
-        if (key) {
+        if (!using_stdin) {
             /* read_key() returns 0 on EOF */
             key = read_key();
             if (key == 'q')
@@ -1991,6 +1994,9 @@ static void opt_input_file(const char *filename)
     if (!strcmp(filename, "-"))
         filename = "pipe:";
 
+    using_stdin |= !strcmp(filename, "pipe:" ) || 
+                   !strcmp( filename, "/dev/stdin" );
+
     /* get default parameters from command line */
     memset(ap, 0, sizeof(*ap));
     ap->sample_rate = audio_sample_rate;
@@ -2366,13 +2372,19 @@ static void opt_output_file(const char *filename)
             if (url_exist(filename)) {
                 int c;
                 
-                printf("File '%s' already exists. Overwrite ? [y/N] ", filename);
-                fflush(stdout);
-                c = getchar();
-                if (toupper(c) != 'Y') {
-                    fprintf(stderr, "Not overwriting - exiting\n");
+                if ( !using_stdin ) {
+                    fprintf(stderr,"File '%s' already exists. Overwrite ? [y/N] ", filename);
+                    fflush(stderr);
+                    c = getchar();
+                    if (toupper(c) != 'Y') {
+                        fprintf(stderr, "Not overwriting - exiting\n");
+                        exit(1);
+                    }
+                               }
+                               else {
+                    fprintf(stderr,"File '%s' already exists. Exiting.\n", filename);
                     exit(1);
-                }
+                               }
             }
         }
         
index 83b5ff2..c898436 100644 (file)
@@ -173,7 +173,8 @@ AVOutputFormat yuv4mpegpipe_oformat = {
     .flags = AVFMT_RAWPICTURE,
 };
 
-#define MAX_YUV4_HEADER 50
+/* Header size increased to allow room for optional flags */
+#define MAX_YUV4_HEADER 80
 #define MAX_FRAME_HEADER 10
 
 static int yuv4_read_header(AVFormatContext *s, AVFormatParameters *ap)