diff mbox

[FFmpeg-devel] libavformat/segment: strftime date sub-directories

Message ID CAAMvbhF=OF8GPMtFrL-NS4D90J=8D10MvgU_U_oOLSnV9phGcA@mail.gmail.com
State Superseded
Headers show

Commit Message

James Dutton Sept. 25, 2018, 2:37 p.m. UTC
Updated patch.
This one applies on top of
commit bb660800a55f5171f77316941afe2e62534ee72c


On 25 September 2018 at 15:00, Steven Liu <lq@chinaffmpeg.org> wrote:

>
>
> > On Sep 25, 2018, at 20:33, James Courtier-Dutton <james.dutton@gmail.com>
> wrote:
> >
> > On 25 September 2018 at 10:22, Moritz Barsnick <barsnick@gmx.net> wrote:
> >
> >>
> >> Steven already posted a patch proposal to this list, factoring out the
> >> function:
> >> https://patchwork.ffmpeg.org/patch/10471/
> >> http://ffmpeg.org/pipermail/ffmpeg-devel/2018-September/234538.html
> >>
> >>
> > That looks fine by me. I can resubmit my segment.c patch once 10471
> reaches
> > master tree or at least somewhere I can cherry pick from.
> >
> > Kind Regards
> >
> > James
> > _______________________________________________
> > ffmpeg-devel mailing list
> > ffmpeg-devel@ffmpeg.org
> > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> Okay, you can go on do this, i have pushed that patch.
>
> Thanks
> Steven
>
>
>
>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
diff mbox

Patch

From 292a7802fe906399fb59267eb87d93624920409d Mon Sep 17 00:00:00 2001
From: James Courtier-Dutton <James.Dutton@gmail.com>
Date: Tue, 25 Sep 2018 15:32:16 +0100
Subject: [PATCH] avformat/segment: strftime date sub-directories

Automatically create sub-directories if needed based on date.
E.g.
ffmpeg ... -timelimit 2147483647 -f segment -strftime 1 -segment_time 10 "%Y/%m/%d/%Y-%m-%d_%H-%M-%S.mkv"

Signed-off-by: James Courtier-Dutton <James.Dutton@gmail.com>
---
 libavformat/segment.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/libavformat/segment.c b/libavformat/segment.c
index 7fb4dc7..57fce8d 100644
--- a/libavformat/segment.c
+++ b/libavformat/segment.c
@@ -200,12 +200,27 @@  static int set_segment_filename(AVFormatContext *s)
     if (seg->use_strftime) {
         time_t now0;
         struct tm *tm, tmpbuf;
+        const char *dir;
+        char *fn_copy;
         time(&now0);
         tm = localtime_r(&now0, &tmpbuf);
         if (!strftime(buf, sizeof(buf), s->url, tm)) {
             av_log(oc, AV_LOG_ERROR, "Could not get segment filename with strftime\n");
             return AVERROR(EINVAL);
         }
+        /* Automatically create directories if needed */
+        /* E.g. %Y/%m/%d/%Y-%m-%d_%H-%M-%S.mkv */
+        fn_copy = av_strdup(buf);
+        if (!fn_copy) {
+            return AVERROR(ENOMEM);
+        }
+        dir = av_dirname(fn_copy);
+        if (ff_mkdir_p(dir) == -1 && errno != EEXIST) {
+            av_log(oc, AV_LOG_ERROR, "Could not create directory %s with use_localtime_mkdir\n", dir);
+            av_free(fn_copy);
+            return AVERROR(errno);
+        }
+        av_free(fn_copy);
     } else if (av_get_frame_filename(buf, sizeof(buf),
                                      s->url, seg->segment_idx) < 0) {
         av_log(oc, AV_LOG_ERROR, "Invalid segment filename template '%s'\n", s->url);
-- 
2.7.4