Merge commit '9e6b5e61a0c91e25e298d0a21b189c4c95443795'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 11 Apr 2013 19:49:26 +0000 (21:49 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 11 Apr 2013 19:50:53 +0000 (21:50 +0200)
* commit '9e6b5e61a0c91e25e298d0a21b189c4c95443795':
  img2enc: add an option for overwriting one file with subsequent images

Conflicts:
doc/muxers.texi
libavformat/img2enc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
doc/muxers.texi
libavformat/img2enc.c

diff --cc doc/muxers.texi
@@@ -241,48 -169,16 +241,50 @@@ ffmpeg -i in.avi -f image2 -frames:v 1 
  @end example
  
  @table @option
 -@item -start_number @var{number}
 -Start the sequence from @var{number}.
 +@item start_number @var{number}
 +Start the sequence from @var{number}. Default value is 1. Must be a
 +positive number.
  
- @item updatefirst 1|0
- If set to 1, update the first written image file again and
- again. Default value is 0.
+ @item -update @var{number}
+ If @var{number} is nonzero, the filename will always be interpreted as just a
+ filename, not a pattern, and this file will be continuously overwritten with new
+ images.
  @end table
  
 +The image muxer supports the .Y.U.V image file format. This format is
 +special in that that each image frame consists of three files, for
 +each of the YUV420P components. To read or write this image file format,
 +specify the name of the '.Y' file. The muxer will automatically open the
 +'.U' and '.V' files as required.
 +
 +@anchor{md5}
 +@section md5
 +
 +MD5 testing format.
 +
 +This muxer computes and prints the MD5 hash of all the input audio
 +and video frames. By default audio frames are converted to signed
 +16-bit raw audio and video frames to raw video before computing the
 +hash.
 +
 +The output of the muxer consists of a single line of the form:
 +MD5=@var{MD5}, where @var{MD5} is a hexadecimal number representing
 +the computed MD5 hash.
 +
 +For example to compute the MD5 hash of the input converted to raw
 +audio and video, and store it in the file @file{out.md5}:
 +@example
 +ffmpeg -i INPUT -f md5 out.md5
 +@end example
 +
 +You can print the MD5 to stdout with the command:
 +@example
 +ffmpeg -i INPUT -f md5 -
 +@end example
 +
 +See also the @ref{framemd5} muxer.
 +
  @section MOV/MP4/ISMV
  
  The mov/mp4/ismv muxer supports fragmentation. Normally, a MOV/MP4
@@@ -34,9 -32,8 +34,9 @@@ typedef struct 
      const AVClass *class;  /**< Class for private options. */
      int img_number;
      int is_pipe;
 +    int split_planes;       /**< use independent file for each Y, U, V plane */
      char path[1024];
-     int updatefirst;
+     int update;
  } VideoMuxData;
  
  static int write_header(AVFormatContext *s)
@@@ -75,14 -60,16 +75,16 @@@ static int write_packet(AVFormatContex
      int i;
  
      if (!img->is_pipe) {
-         if (av_get_frame_filename(filename, sizeof(filename),
-                                   img->path, img->img_number) < 0 && img->img_number > 1 && !img->updatefirst) {
+         if (img->update) {
+             av_strlcpy(filename, img->path, sizeof(filename));
+         } else if (av_get_frame_filename(filename, sizeof(filename), img->path, img->img_number) < 0 &&
+                    img->img_number > 1) {
              av_log(s, AV_LOG_ERROR,
 -                   "Could not get frame filename number %d from pattern '%s'\n",
 +                   "Could not get frame filename number %d from pattern '%s' (either set updatefirst or use a pattern like %%03d within the filename pattern)\n",
                     img->img_number, img->path);
 -            return AVERROR(EIO);
 +            return AVERROR(EINVAL);
          }
 -        for (i = 0; i < 3; i++) {
 +        for (i = 0; i < 4; i++) {
              if (avio_open2(&pb[i], filename, AVIO_FLAG_WRITE,
                             &s->interrupt_callback, NULL) < 0) {
                  av_log(s, AV_LOG_ERROR, "Could not open file : %s\n", filename);
  #define OFFSET(x) offsetof(VideoMuxData, x)
  #define ENC AV_OPT_FLAG_ENCODING_PARAM
  static const AVOption muxoptions[] = {
-     { "updatefirst",  "update the first image file",      OFFSET(updatefirst), AV_OPT_TYPE_INT, { .i64 = 0 }, 0,       1, ENC },
 -    { "start_number", "first number in the sequence", OFFSET(img_number), AV_OPT_TYPE_INT, { .i64 = 1 }, 1, INT_MAX, ENC },
++    { "updatefirst",  "continuously overwrite one file", OFFSET(update),  AV_OPT_TYPE_INT, { .i64 = 0 }, 0,       1, ENC },
+     { "update",       "continuously overwrite one file", OFFSET(update),  AV_OPT_TYPE_INT, { .i64 = 0 }, 0,       1, ENC },
 +    { "start_number", "set first number in the sequence", OFFSET(img_number), AV_OPT_TYPE_INT,  { .i64 = 1 }, 1, INT_MAX, ENC },
      { NULL },
  };