[FFmpeg-devel] [PATCH] Adding mkdir option for img2enc (4th attempt)

Michael Niedermayer michael at niedermayer.cc
Mon Feb 5 03:12:17 EET 2018


On Sun, Feb 04, 2018 at 12:51:59PM +0000, Dr. Alan Barclay wrote:
> On 17/01/2018 11:15, Carl Eugen Hoyos wrote:
> >2018-01-17 11:56 GMT+01:00 Dr. Alan Barclay <alan at escribe.co.uk>:
> >
> >>Attached in a further patch - adding the error checks.
> >
> >Please merge this patch into your previous patch.
> 
> Both patches updated.
> 
> Alan.
> 
> >And please avoid top-posting here, Carl Eugen
> >_______________________________________________
> >ffmpeg-devel mailing list
> >ffmpeg-devel at ffmpeg.org
> >http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> 
[...]

> diff --git a/libavformat/internal.h b/libavformat/internal.h
> index 1e2a3e05a1..2e8fa85d08 100644
> --- a/libavformat/internal.h
> +++ b/libavformat/internal.h
> @@ -703,4 +703,11 @@ int ff_unlock_avformat(void);
>   */
>  void ff_format_set_url(AVFormatContext *s, char *url);
>  
> +/**
> + * Make the specified directory.
> + *
> + * @param path  path for directory
> + */
> +int ff_mkdir_p(const char *path);

the return code and its relation to errno should be documented or better
the function should return the error code like all other functions in ffmpeg
and not depend on errno

also the relation of pathes and url needs to be documented

is a "file://..." working or should it be a file path


[...]
>  img2enc.c |   16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
> 020db7642303243c3e0170376d0826158e44616f  0002-Adding-mkdir-option-for-img2enc.patch
> From 0b35e014cf36499f0b4b5e064b7f0ce71287649a Mon Sep 17 00:00:00 2001
> From: "Dr. Alan Barclay" <alan at escribe.co.uk>
> Date: Sun, 4 Feb 2018 12:21:51 +0000
> Subject: [PATCH 2/2] Adding mkdir option for img2enc.

update to doc/muxers.texi is missing



> 
> ---
>  libavformat/img2enc.c | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
> 
> diff --git a/libavformat/img2enc.c b/libavformat/img2enc.c
> index a09cc8ec50..8f3fd98018 100644
> --- a/libavformat/img2enc.c
> +++ b/libavformat/img2enc.c
> @@ -42,6 +42,7 @@ typedef struct VideoMuxData {
>      char target[4][1024];
>      int update;
>      int use_strftime;
> +    int use_mkdir;
>      int frame_pts;
>      const char *muxer;
>      int use_rename;
> @@ -114,6 +115,20 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
>                     img->img_number, img->path);
>              return AVERROR(EINVAL);
>          }
> +        if (img->use_mkdir) {
> +            const char *temp_path;
> +            char *temp_filename = av_strdup(filename);
> +            if (!temp_filename) {
> +                return AVERROR(ENOMEM);
> +            }
> +            temp_path = av_dirname(temp_filename);
> +            if (ff_mkdir_p(temp_path) == -1 && errno != EEXIST) {
> +                av_log(s, AV_LOG_ERROR, "Could not create directory %s\n", temp_path);
> +                av_free(temp_filename);
> +                return AVERROR(errno);
> +            }
> +            av_free(temp_filename);
> +        }
>          for (i = 0; i < 4; i++) {
>              snprintf(img->tmp[i], sizeof(img->tmp[i]), "%s.tmp", filename);
>              av_strlcpy(img->target[i], filename, sizeof(img->target[i]));
> @@ -212,6 +227,7 @@ static const AVOption muxoptions[] = {
>      { "update",       "continuously overwrite one file", OFFSET(update),  AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0,       1, ENC },
>      { "start_number", "set first number in the sequence", OFFSET(img_number), AV_OPT_TYPE_INT,  { .i64 = 1 }, 0, INT_MAX, ENC },
>      { "strftime",     "use strftime for filename", OFFSET(use_strftime),  AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, ENC },
> +    { "mkdir",        "make sub-dirs as required", OFFSET(use_mkdir),  AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, ENC },
>      { "frame_pts",    "use current frame pts for filename", OFFSET(frame_pts),  AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, ENC },
>      { "atomic_writing", "write files atomically (using temporary files and renames)", OFFSET(use_rename), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, ENC },
>      { NULL },
> -- 
> 2.11.0
> 

> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Democracy is the form of government in which you can choose your dictator
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20180205/b3d58e23/attachment.sig>


More information about the ffmpeg-devel mailing list