[FFmpeg-devel] [PATCH] lavf/avio: do not include bprint.h.

2014-07-24 Thread Nicolas George
C++ chokes on the definition of AVBPrint.
Including avio.h from c++ code used to work.
Fix trac ticket #3800.

Signed-off-by: Nicolas George 
---
 libavformat/avio.h| 3 +--
 libavformat/aviobuf.c | 1 +
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/libavformat/avio.h b/libavformat/avio.h
index 9b16843..e607df5 100644
--- a/libavformat/avio.h
+++ b/libavformat/avio.h
@@ -31,7 +31,6 @@
 #include "libavutil/common.h"
 #include "libavutil/dict.h"
 #include "libavutil/log.h"
-#include "libavutil/bprint.h"
 
 #include "libavformat/version.h"
 
@@ -507,6 +506,6 @@ int64_t avio_seek_time(AVIOContext *h, int stream_index,
  * @return 0 for success (max_size bytes read or EOF reached), negative error
  * code otherwise
  */
-int avio_read_to_bprint(AVIOContext *h, AVBPrint *pb, size_t max_size);
+int avio_read_to_bprint(AVIOContext *h, struct AVBPrint *pb, size_t max_size);
 
 #endif /* AVFORMAT_AVIO_H */
diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c
index 463d90a..24c6b79 100644
--- a/libavformat/aviobuf.c
+++ b/libavformat/aviobuf.c
@@ -19,6 +19,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include "libavutil/bprint.h"
 #include "libavutil/crc.h"
 #include "libavutil/dict.h"
 #include "libavutil/intreadwrite.h"
-- 
2.0.1

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH]Print a warning if the invalid tiff tag type 0 is found in an exif tag

2014-07-24 Thread Thilo Borgmann
Am 22.07.14 17:43, schrieb Carl Eugen Hoyos:
> Hi!
> 
> FFmpeg currently requests a sample if an exif tag with tag type 0 is found.
> Attached patch prints a warning instead, fixes ticket #3792.
> 
> Please comment, Carl Eugen

ok.

-Thilo

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH]Ignore xing number of frames if filesize is wrong

2014-07-24 Thread Carl Eugen Hoyos
On Saturday 19 July 2014 04:40:47 pm Joakim Plate wrote:
> Carl Eugen Hoyos  ag.or.at> writes:
> > Hi!
> >
> > Attached patch fixes ticket #3777 for me, analyzed by Oliver Fromme.
>
> What about streaming growing files? It's pretty good to know number of
> frames of the complete mp3 at start of playback?

This is true (ticket #2590 contains an example).

New patch attached.

Please review, Carl Eugen
diff --git a/libavformat/mp3dec.c b/libavformat/mp3dec.c
index 8335388..4016e94 100644
--- a/libavformat/mp3dec.c
+++ b/libavformat/mp3dec.c
@@ -138,6 +138,7 @@ static void mp3_parse_info_tag(AVFormatContext *s, AVStream 
*st,
 
 MP3DecContext *mp3 = s->priv_data;
 static const int64_t xing_offtbl[2][2] = {{32, 17}, {17,9}};
+uint64_t min, delta, fsize;
 
 /* Check for Xing / Info tag */
 avio_skip(s->pb, xing_offtbl[c->lsf == 1][c->nb_channels == 1]);
@@ -151,6 +152,15 @@ static void mp3_parse_info_tag(AVFormatContext *s, 
AVStream *st,
 mp3->frames = avio_rb32(s->pb);
 if (v & XING_FLAG_SIZE)
 mp3->header_filesize = avio_rb32(s->pb);
+fsize = avio_size(s->pb);
+min = FFMIN(fsize, mp3->header_filesize);
+delta = FFMAX(fsize, mp3->header_filesize) - min;
+if (fsize && fsize > mp3->header_filesize && delta > min >> 4) {
+mp3->frames = 0;
+} else if (fsize && delta > min >> 4) {
+av_log(s, AV_LOG_WARNING,
+   "filesize and duration do not match (growing file?)\n");
+}
 if (v & XING_FLAG_TOC)
 read_xing_toc(s, mp3->header_filesize, av_rescale_q(mp3->frames,
(AVRational){spf, c->sample_rate},
@@ -399,7 +409,10 @@ static int mp3_seek(AVFormatContext *s, int stream_index, 
int64_t timestamp,
 int i, j;
 int dir = (flags&AVSEEK_FLAG_BACKWARD) ? -1 : 1;
 
-if (mp3->is_cbr && st->duration > 0 && mp3->header_filesize > 
s->data_offset) {
+if (   mp3->is_cbr
+&& st->duration > 0
+&& mp3->header_filesize > s->data_offset
+&& mp3->frames) {
 int64_t filesize = avio_size(s->pb);
 int64_t duration;
 if (filesize <= s->data_offset)
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] Test of mail system pllease ignore

2014-07-24 Thread tim nicholson
Should munge the from headers
-- 
Tim.
Key Fingerprint 38CF DB09 3ED0 F607 8B67 6CED 0C0B FC44 8B0B FC83
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] web/style: Add a comment in the generated css file for the doc in the main repo

2014-07-24 Thread Michael Niedermayer
On Thu, Jul 24, 2014 at 08:06:43AM +0200, db0company wrote:
> ---
>  README |2 +-
>  src/css_credit |6 ++
>  2 files changed, 7 insertions(+), 1 deletions(-)
>  create mode 100644 src/css_credit

applied

thanks

[...]
-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

There will always be a question for which you do not know the correct answer.


signature.asc
Description: Digital signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] Test of mail system pllease ignore

2014-07-24 Thread Michael Niedermayer
Hi Tim

On Thu, Jul 24, 2014 at 12:48:11PM +0100, tim nicholson wrote:
> Should munge the from headers

for the record, works great

also, thanks alot for working on / fixing yahoo/DMARC/DKIM on
ffmpeg/mplayer MLs

[...]

-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

There will always be a question for which you do not know the correct answer.


signature.asc
Description: Digital signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] lavf/avio: do not include bprint.h.

2014-07-24 Thread Michael Niedermayer
On Thu, Jul 24, 2014 at 09:34:10AM +0200, Nicolas George wrote:
> C++ chokes on the definition of AVBPrint.
> Including avio.h from c++ code used to work.
> Fix trac ticket #3800.
> 
> Signed-off-by: Nicolas George 
> ---
>  libavformat/avio.h| 3 +--
>  libavformat/aviobuf.c | 1 +
>  2 files changed, 2 insertions(+), 2 deletions(-)

LGTM

[...]
-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

No human being will ever know the Truth, for even if they happen to say it
by chance, they would not even known they had done so. -- Xenophanes


signature.asc
Description: Digital signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH]Ignore xing number of frames if filesize is?wrong

2014-07-24 Thread Michael Niedermayer
On Thu, Jul 24, 2014 at 12:50:55PM +0200, Carl Eugen Hoyos wrote:
> On Saturday 19 July 2014 04:40:47 pm Joakim Plate wrote:
> > Carl Eugen Hoyos  ag.or.at> writes:
> > > Hi!
> > >
> > > Attached patch fixes ticket #3777 for me, analyzed by Oliver Fromme.
> >
> > What about streaming growing files? It's pretty good to know number of
> > frames of the complete mp3 at start of playback?
> 
> This is true (ticket #2590 contains an example).
> 
> New patch attached.
> 
> Please review, Carl Eugen

>  mp3dec.c |   15 ++-
>  1 file changed, 14 insertions(+), 1 deletion(-)
> e354c8374f6f9655a2a4c1904636218cc4bc9ee6  patchmp3duration2.diff
> diff --git a/libavformat/mp3dec.c b/libavformat/mp3dec.c
> index 8335388..4016e94 100644

breaks fate

stddev: 6864.49 PSNR: 19.60 MAXDIFF:40809 bytes:   882432/   884736
Test mp3-float-extra_overread failed. Look at 
tests/data/fate/mp3-float-extra_overread.err for details.
make: *** [fate-mp3-float-extra_overread] Error 1

[...]

-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

No human being will ever know the Truth, for even if they happen to say it
by chance, they would not even known they had done so. -- Xenophanes


signature.asc
Description: Digital signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH]Ignore xing number of frames if filesize is wrong

2014-07-24 Thread Carl Eugen Hoyos
On Thursday 24 July 2014 03:00:02 pm Michael Niedermayer wrote:
> On Thu, Jul 24, 2014 at 12:50:55PM +0200, Carl Eugen Hoyos wrote:
> > On Saturday 19 July 2014 04:40:47 pm Joakim Plate wrote:
> > > Carl Eugen Hoyos  ag.or.at> writes:
> > > > Hi!
> > > >
> > > > Attached patch fixes ticket #3777 for me, analyzed by Oliver Fromme.
> > >
> > > What about streaming growing files? It's pretty good to know number of
> > > frames of the complete mp3 at start of playback?
> >
> > This is true (ticket #2590 contains an example).
> >
> > New patch attached.
> >
> > Please review, Carl Eugen
> >
> >  mp3dec.c |   15 ++-
> >  1 file changed, 14 insertions(+), 1 deletion(-)
> > e354c8374f6f9655a2a4c1904636218cc4bc9ee6  patchmp3duration2.diff
> > diff --git a/libavformat/mp3dec.c b/libavformat/mp3dec.c
> > index 8335388..4016e94 100644
>
> breaks fate

New patch attached.

Thank you, Carl Eugen
diff --git a/libavformat/mp3dec.c b/libavformat/mp3dec.c
index 8335388..688f235 100644
--- a/libavformat/mp3dec.c
+++ b/libavformat/mp3dec.c
@@ -138,6 +138,7 @@ static void mp3_parse_info_tag(AVFormatContext *s, AVStream 
*st,
 
 MP3DecContext *mp3 = s->priv_data;
 static const int64_t xing_offtbl[2][2] = {{32, 17}, {17,9}};
+uint64_t fsize = avio_size(s->pb);
 
 /* Check for Xing / Info tag */
 avio_skip(s->pb, xing_offtbl[c->lsf == 1][c->nb_channels == 1]);
@@ -151,6 +152,17 @@ static void mp3_parse_info_tag(AVFormatContext *s, 
AVStream *st,
 mp3->frames = avio_rb32(s->pb);
 if (v & XING_FLAG_SIZE)
 mp3->header_filesize = avio_rb32(s->pb);
+if (fsize && mp3->header_filesize) {
+uint64_t min, delta;
+min = FFMIN(fsize, mp3->header_filesize);
+delta = FFMAX(fsize, mp3->header_filesize) - min;
+if (fsize > mp3->header_filesize && delta > min >> 4) {
+mp3->frames = 0;
+} else if (delta > min >> 4) {
+av_log(s, AV_LOG_WARNING,
+   "filesize and duration do not match (growing file?)\n");
+}
+}
 if (v & XING_FLAG_TOC)
 read_xing_toc(s, mp3->header_filesize, av_rescale_q(mp3->frames,
(AVRational){spf, c->sample_rate},
@@ -399,7 +411,10 @@ static int mp3_seek(AVFormatContext *s, int stream_index, 
int64_t timestamp,
 int i, j;
 int dir = (flags&AVSEEK_FLAG_BACKWARD) ? -1 : 1;
 
-if (mp3->is_cbr && st->duration > 0 && mp3->header_filesize > 
s->data_offset) {
+if (   mp3->is_cbr
+&& st->duration > 0
+&& mp3->header_filesize > s->data_offset
+&& mp3->frames) {
 int64_t filesize = avio_size(s->pb);
 int64_t duration;
 if (filesize <= s->data_offset)
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH]Ignore xing number of frames if filesize is wrong

2014-07-24 Thread Michael Niedermayer
On Thu, Jul 24, 2014 at 03:15:56PM +0200, Carl Eugen Hoyos wrote:
> On Thursday 24 July 2014 03:00:02 pm Michael Niedermayer wrote:
> > On Thu, Jul 24, 2014 at 12:50:55PM +0200, Carl Eugen Hoyos wrote:
> > > On Saturday 19 July 2014 04:40:47 pm Joakim Plate wrote:
> > > > Carl Eugen Hoyos  ag.or.at> writes:
> > > > > Hi!
> > > > >
> > > > > Attached patch fixes ticket #3777 for me, analyzed by Oliver Fromme.
> > > >
> > > > What about streaming growing files? It's pretty good to know number of
> > > > frames of the complete mp3 at start of playback?
> > >
> > > This is true (ticket #2590 contains an example).
> > >
> > > New patch attached.
> > >
> > > Please review, Carl Eugen
> > >
> > >  mp3dec.c |   15 ++-
> > >  1 file changed, 14 insertions(+), 1 deletion(-)
> > > e354c8374f6f9655a2a4c1904636218cc4bc9ee6  patchmp3duration2.diff
> > > diff --git a/libavformat/mp3dec.c b/libavformat/mp3dec.c
> > > index 8335388..4016e94 100644
> >
> > breaks fate
> 
> New patch attached.
> 
> Thank you, Carl Eugen

>  mp3dec.c |   17 -
>  1 file changed, 16 insertions(+), 1 deletion(-)
> ad2e4e19110a314cbcf1c97640940846c15c85a0  patchmp3duration3.diff
> diff --git a/libavformat/mp3dec.c b/libavformat/mp3dec.c
> index 8335388..688f235 100644

probably ok

[...]

-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

DNS cache poisoning attacks, popular search engine, Google internet authority
dont be evil, please


signature.asc
Description: Digital signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] ffplay: remove dead code

2014-07-24 Thread Michael Niedermayer
Hi

On Thu, Jul 17, 2014 at 06:02:02PM -0700, Timothy Gu wrote:
> Signed-off-by: Timothy Gu 
> ---
>  ffplay.c | 2 --
>  1 file changed, 2 deletions(-)
> 
> diff --git a/ffplay.c b/ffplay.c
> index af0e199..8abbeae 100644
> --- a/ffplay.c
> +++ b/ffplay.c
> @@ -775,8 +775,6 @@ static void blend_subrect(AVPicture *dst, const 
> AVSubtitleRect *rect, int imgw,
>  lum[0] = ALPHA_BLEND(a, lum[0], y, 0);
>  
>  YUVA_IN(y, u, v, a, p + BPP, pal);
> -u1 += u;
> -v1 += v;
>  a1 += a;
>  lum[1] = ALPHA_BLEND(a, lum[1], y, 0);
>  cb[0] = ALPHA_BLEND(a1 >> 2, cb[0], u, 1);

CC-ing ffplay maintainer, so he doesnt miss this

[...]
-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Everything should be made as simple as possible, but not simpler.
-- Albert Einstein


signature.asc
Description: Digital signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH 1/4] lavfi: add filter messages infrastructure.

2014-07-24 Thread Nicolas George
Messaages are passed as frames with a negative format code,
only to filter that declare supporting them.
The only message for now is EOF; this mechanism augments
the current mechanism based on request_frame() returning
AVERROR_EOF, with the advantage that the EOF message carries
a timestamp.
The messages are a purely internal API and do not leak to
the application.

Signed-off-by: Nicolas George 
---
 libavfilter/avfilter.c | 68 --
 libavfilter/internal.h | 34 +
 2 files changed, 95 insertions(+), 7 deletions(-)

diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index 7b11467..fb41e71 100644
--- a/libavfilter/avfilter.c
+++ b/libavfilter/avfilter.c
@@ -346,15 +346,16 @@ int ff_request_frame(AVFilterLink *link)
 ret = link->srcpad->request_frame(link);
 else if (link->src->inputs[0])
 ret = ff_request_frame(link->src->inputs[0]);
-if (ret == AVERROR_EOF && link->partial_buf) {
-AVFrame *pbuf = link->partial_buf;
-link->partial_buf = NULL;
-ret = ff_filter_frame_framed(link, pbuf);
-}
 if (ret < 0) {
+if (!link->frame_requested) {
+av_assert0(ret == AVERROR_EOF);
+ret = 0;
+}
 link->frame_requested = 0;
-if (ret == AVERROR_EOF)
-link->closed = 1;
+if (ret == AVERROR_EOF) {
+ret = ff_filter_link_close(link, AV_NOPTS_VALUE);
+return ret < 0 ? ret : AVERROR_EOF;
+}
 } else {
 av_assert0(!link->frame_requested ||
link->flags & FF_LINK_FLAG_REQUEST_LOOP);
@@ -1132,10 +1133,52 @@ static int ff_filter_frame_needs_framing(AVFilterLink 
*link, AVFrame *frame)
 return ret;
 }
 
+static int ff_filter_frame_message(AVFilterLink *link, AVFrame *frame)
+{
+AVFrame *pbuf = link->partial_buf;
+int ret;
+
+if (pbuf) {
+link->partial_buf = NULL;
+if ((ret = ff_filter_frame_framed(link, pbuf)) < 0)
+return ret;
+}
+
+if ((link->dst->filter->flags & FF_FILTER_FLAG_SUPPORT_MESSAGES)) {
+ret = link->dstpad->filter_frame ?
+  link->dstpad->filter_frame(link, frame) :
+  default_filter_frame(link, frame);
+if (ret < 0)
+return ret;
+}
+
+switch (frame->format) {
+
+case FF_FRAME_MSG_EOF:
+link->closed = 1;
+break;
+
+case 0:
+case FF_FRAME_MSG_NOP:
+/* Not implemented yet because not used either for now.
+   Caveat: if the same message frame is forwarded to the next filter
+   and the next filter changes the type, the type change must not be
+   taken into account for the first link. */
+
+default:
+av_assert0(!"reached");
+}
+
+return ret;
+}
+
 int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
 {
 FF_TPRINTF_START(NULL, filter_frame); ff_tlog_link(NULL, link, 1); 
ff_tlog(NULL, " "); ff_tlog_ref(NULL, frame, 1);
 
+if (frame->format < -1)
+return ff_filter_frame_message(link, frame);
+
 /* Consistency checks */
 if (link->type == AVMEDIA_TYPE_VIDEO) {
 if (strcmp(link->dst->filter->name, "scale")) {
@@ -1162,6 +1205,17 @@ int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
 }
 }
 
+int ff_filter_link_close(AVFilterLink *link, int64_t pts)
+{
+AVFrame frame = { };
+
+if (link->closed)
+return 0;
+frame.format = FF_FRAME_MSG_EOF;
+frame.pts = pts;
+return ff_filter_frame(link, &frame);
+}
+
 const AVClass *avfilter_get_class(void)
 {
 return &avfilter_class;
diff --git a/libavfilter/internal.h b/libavfilter/internal.h
index 308b115..de249a4 100644
--- a/libavfilter/internal.h
+++ b/libavfilter/internal.h
@@ -374,4 +374,38 @@ AVFilterContext *ff_filter_alloc(const AVFilter *filter, 
const char *inst_name);
  */
 void ff_filter_graph_remove_filter(AVFilterGraph *graph, AVFilterContext 
*filter);
 
+/**
+ * The filter can accept messages.
+ */
+#define FF_FILTER_FLAG_SUPPORT_MESSAGES (1 << 24)
+
+/**
+ * Types of messages that can be passer to a filter.
+ * Messages are passed as AVFrame structures with a negative format field.
+ * The framework will take default actions based on the message type.
+ * The destination filter is allowed to reset the type to inhibit the
+ * default actions.
+ */
+enum {
+/**
+ * Do not do anything.
+ * Can be used by the destination filter to inhibit default handling.
+ */
+FF_FRAME_MSG_NOP = -1,
+
+/**
+ * The input has reached EOF.
+ * The pts field holds the timestamp of the end of the stream,
+ * therefore allowing to compute the duration of the last frame.
+ * The frame structure still belongs to the framework and must not be
+ * stored by the destination filter; it also may be incomplete.
+ */
+FF_FRAME_MSG_EOF = AVERR

[FFmpeg-devel] [PATCH 2/4] lavfi/buffersrc: add add av_buffersrc_close().

2014-07-24 Thread Nicolas George
Also deprecate adding a NULL frame to mark EOF.

TODO APIchanges entry, version bump.

Signed-off-by: Nicolas George 
---
 libavfilter/buffersrc.c | 40 ++--
 libavfilter/buffersrc.h | 15 +++
 2 files changed, 45 insertions(+), 10 deletions(-)

diff --git a/libavfilter/buffersrc.c b/libavfilter/buffersrc.c
index 27d3db0..6d71587 100644
--- a/libavfilter/buffersrc.c
+++ b/libavfilter/buffersrc.c
@@ -63,6 +63,7 @@ typedef struct BufferSourceContext {
 char*channel_layout_str;
 
 int eof;
+int64_t eof_pts;
 } BufferSourceContext;
 
 #define CHECK_VIDEO_PARAM_CHANGE(s, c, width, height, format)\
@@ -77,6 +78,27 @@ typedef struct BufferSourceContext {
 return AVERROR(EINVAL);\
 }
 
+static int push_if_flag(AVFilterContext *ctx, int flags)
+{
+return (flags & AV_BUFFERSRC_FLAG_PUSH) ?
+ctx->output_pads[0].request_frame(ctx->outputs[0]) : 0;
+}
+
+int av_buffersrc_close(AVFilterContext *ctx, int64_t pts, int flags)
+{
+BufferSourceContext *s = ctx->priv;
+
+if (pts == AV_NOPTS_VALUE) {
+av_log(ctx, AV_LOG_WARNING, "No EOF timestamp\n");
+/* FIXME use duration for audio */
+pts = av_rescale_q(ctx->outputs[0]->current_pts,
+   AV_TIME_BASE_Q, ctx->outputs[0]->time_base) + 1;
+}
+s->eof_pts = pts;
+s->eof = 1;
+return push_if_flag(ctx, flags);
+}
+
 int attribute_align_arg av_buffersrc_write_frame(AVFilterContext *ctx, const 
AVFrame *frame)
 {
 return av_buffersrc_add_frame_flags(ctx, (AVFrame *)frame,
@@ -125,8 +147,7 @@ static int av_buffersrc_add_frame_internal(AVFilterContext 
*ctx,
 s->nb_failed_requests = 0;
 
 if (!frame) {
-s->eof = 1;
-return 0;
+return av_buffersrc_close(ctx, AV_NOPTS_VALUE, flags);
 } else if (s->eof)
 return AVERROR(EINVAL);
 
@@ -177,11 +198,7 @@ static int av_buffersrc_add_frame_internal(AVFilterContext 
*ctx,
 return ret;
 }
 
-if ((flags & AV_BUFFERSRC_FLAG_PUSH))
-if ((ret = ctx->output_pads[0].request_frame(ctx->outputs[0])) < 0)
-return ret;
-
-return 0;
+return push_if_flag(ctx, flags);
 }
 
 #if FF_API_AVFILTERBUFFER
@@ -211,8 +228,7 @@ int av_buffersrc_add_ref(AVFilterContext *ctx, 
AVFilterBufferRef *buf,
 int ret = 0, planes, i;
 
 if (!buf) {
-s->eof = 1;
-return 0;
+return av_buffersrc_close(ctx, AV_NOPTS_VALUE, flags);
 } else if (s->eof)
 return AVERROR(EINVAL);
 
@@ -487,10 +503,14 @@ static int request_frame(AVFilterLink *link)
 {
 BufferSourceContext *c = link->src->priv;
 AVFrame *frame;
+int ret;
 
 if (!av_fifo_size(c->fifo)) {
-if (c->eof)
+if (c->eof) {
+if ((ret = ff_filter_link_close(link, c->eof_pts)) < 0)
+return ret;
 return AVERROR_EOF;
+}
 c->nb_failed_requests++;
 return AVERROR(EAGAIN);
 }
diff --git a/libavfilter/buffersrc.h b/libavfilter/buffersrc.h
index ea34c04..28ca545 100644
--- a/libavfilter/buffersrc.h
+++ b/libavfilter/buffersrc.h
@@ -145,6 +145,8 @@ int av_buffersrc_add_frame(AVFilterContext *ctx, AVFrame 
*frame);
  *
  * @param buffer_src  pointer to a buffer source context
  * @param frame   a frame, or NULL to mark EOF
+ *(Using NULL to mark EOF is deprecated, use
+ *av_buffersrc_close() instead.)
  * @param flags   a combination of AV_BUFFERSRC_FLAG_*
  * @return>= 0 in case of success, a negative AVERROR code
  *in case of failure
@@ -154,6 +156,19 @@ int av_buffersrc_add_frame_flags(AVFilterContext 
*buffer_src,
 
 
 /**
+ * Close a buffer source.
+ *
+ * This cause EOF to be propagated along the filter graph.
+ *
+ * @param buffer_src  pointer to a buffer source context
+ * @param pts the timestamp of the end of stream
+ * @param flags   a combination of AV_BUFFERSRC_FLAG_*
+ * @return>= 0 in case of success, a negative AVERROR code
+ *in case of failure
+ */
+int av_buffersrc_close(AVFilterContext *buffer_src, int64_t pts, int flags);
+
+/**
  * @}
  */
 
-- 
2.0.1

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH 4/4] lavfi/vf_fps: accept EOF timestamp.

2014-07-24 Thread Nicolas George
This makes the FPS filter duplicate the last frame to take
its duration into account, exactly like the other ones.

TODO find corresponding trac ticket(s).

Signed-off-by: Nicolas George 
---
 libavfilter/vf_fps.c | 59 +++-
 1 file changed, 40 insertions(+), 19 deletions(-)


Note: this will not work if there are filters before vf_fps, unless they
are converted to accept messages and forward the end timestamp.
When more filters are adapted, a warning could be added.


diff --git a/libavfilter/vf_fps.c b/libavfilter/vf_fps.c
index a38633d..7028f28 100644
--- a/libavfilter/vf_fps.c
+++ b/libavfilter/vf_fps.c
@@ -28,6 +28,7 @@
 #include 
 #include 
 
+#include "libavutil/avassert.h"
 #include "libavutil/common.h"
 #include "libavutil/fifo.h"
 #include "libavutil/mathematics.h"
@@ -88,11 +89,13 @@ static av_cold int init(AVFilterContext *ctx)
 return 0;
 }
 
+/* FIXME: misnommer, the frames are discarded, not flushed */
 static void flush_fifo(AVFifoBuffer *fifo)
 {
 while (av_fifo_size(fifo)) {
 AVFrame *tmp;
 av_fifo_generic_read(fifo, &tmp, sizeof(tmp), NULL);
+av_log(0, 16, "discard frame %d %ld\n", tmp->format, tmp->pts);
 av_frame_free(&tmp);
 }
 }
@@ -131,25 +134,10 @@ static int request_frame(AVFilterLink *outlink)
 
 while (ret >= 0 && s->frames_out == frames_out)
 ret = ff_request_frame(ctx->inputs[0]);
-
-/* flush the fifo */
-if (ret == AVERROR_EOF && av_fifo_size(s->fifo)) {
-int i;
-for (i = 0; av_fifo_size(s->fifo); i++) {
-AVFrame *buf;
-
-av_fifo_generic_read(s->fifo, &buf, sizeof(buf), NULL);
-buf->pts = av_rescale_q(s->first_pts, ctx->inputs[0]->time_base,
-outlink->time_base) + s->frames_out;
-
-if ((ret = ff_filter_frame(outlink, buf)) < 0)
-return ret;
-
-s->frames_out++;
-}
-return 0;
+if (ret == AVERROR_EOF) {
+flush_fifo(s->fifo);
+av_assert1(!av_fifo_size(s->fifo));
 }
-
 return ret;
 }
 
@@ -157,6 +145,7 @@ static int write_to_fifo(AVFifoBuffer *fifo, AVFrame *buf)
 {
 int ret;
 
+av_assert1(buf->format >= 0);
 if (!av_fifo_space(fifo) &&
 (ret = av_fifo_realloc2(fifo, 2*av_fifo_size(fifo {
 av_frame_free(&buf);
@@ -167,6 +156,25 @@ static int write_to_fifo(AVFifoBuffer *fifo, AVFrame *buf)
 return 0;
 }
 
+static int flush_fifo_to_out(AVFilterContext *ctx)
+{
+FPSContext *s = ctx->priv;
+AVFilterLink *outlink = ctx->outputs[0];
+AVFrame *frame;
+int ret;
+
+while (av_fifo_size(s->fifo)) {
+
+av_fifo_generic_read(s->fifo, &frame, sizeof(frame), NULL);
+frame->pts = av_rescale_q(s->first_pts, ctx->inputs[0]->time_base,
+outlink->time_base) + s->frames_out;
+if ((ret = ff_filter_frame(outlink, frame)) < 0)
+return ret;
+s->frames_out++;
+}
+return 0;
+}
+
 static int filter_frame(AVFilterLink *inlink, AVFrame *buf)
 {
 AVFilterContext*ctx = inlink->dst;
@@ -194,6 +202,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *buf)
 } else {
 s->first_pts = buf->pts;
 }
+} else if (buf->format < 0) {
+return 0;
 } else {
 av_log(ctx, AV_LOG_WARNING, "Discarding initial frame(s) with no "
"timestamp.\n");
@@ -203,8 +213,18 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *buf)
 return 0;
 }
 
+if (buf->format < 0) {
+if (buf->format != FF_FRAME_MSG_EOF)
+return 0;
+if (buf->pts == AV_NOPTS_VALUE)
+return flush_fifo_to_out(ctx);
+if (!av_fifo_size(s->fifo))
+return 0;
+}
+
 /* now wait for the next timestamp */
 if (buf->pts == AV_NOPTS_VALUE || av_fifo_size(s->fifo) <= 0) {
+av_assert1(buf->format >= 0);
 return write_to_fifo(s->fifo, buf);
 }
 
@@ -264,7 +284,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *buf)
 }
 flush_fifo(s->fifo);
 
-ret = write_to_fifo(s->fifo, buf);
+ret = buf->format < 0 ? 0 : write_to_fifo(s->fifo, buf);
 
 return ret;
 }
@@ -295,6 +315,7 @@ AVFilter ff_vf_fps = {
 .uninit  = uninit,
 .priv_size   = sizeof(FPSContext),
 .priv_class  = &fps_class,
+.flags   = FF_FILTER_FLAG_SUPPORT_MESSAGES,
 .inputs  = avfilter_vf_fps_inputs,
 .outputs = avfilter_vf_fps_outputs,
 };
-- 
2.0.1

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH 3/4] ffmpeg: use av_buffersrc_close().

2014-07-24 Thread Nicolas George
Signed-off-by: Nicolas George 
---
 ffmpeg.c | 14 --
 1 file changed, 4 insertions(+), 10 deletions(-)

diff --git a/ffmpeg.c b/ffmpeg.c
index 1c1a559..3ac6620 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -1741,12 +1741,9 @@ static int decode_audio(InputStream *ist, AVPacket *pkt, 
int *got_output)
 
 if (!*got_output || ret < 0) {
 if (!pkt->size) {
+int64_t pts = av_rescale_q(ist->next_pts, AV_TIME_BASE_Q, 
ist->st->time_base);
 for (i = 0; i < ist->nb_filters; i++)
-#if 1
-av_buffersrc_add_ref(ist->filters[i]->filter, NULL, 0);
-#else
-av_buffersrc_add_frame(ist->filters[i]->filter, NULL);
-#endif
+av_buffersrc_close(ist->filters[i]->filter, pts, 0);
 }
 return ret;
 }
@@ -1894,12 +1891,9 @@ static int decode_video(InputStream *ist, AVPacket *pkt, 
int *got_output)
 
 if (!*got_output || ret < 0) {
 if (!pkt->size) {
+int64_t pts = av_rescale_q(ist->next_pts, AV_TIME_BASE_Q, 
ist->st->time_base);
 for (i = 0; i < ist->nb_filters; i++)
-#if 1
-av_buffersrc_add_ref(ist->filters[i]->filter, NULL, 0);
-#else
-av_buffersrc_add_frame(ist->filters[i]->filter, NULL);
-#endif
+av_buffersrc_close(ist->filters[i]->filter, pts, 0);
 }
 return ret;
 }
-- 
2.0.1

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH 2/4] lavfi/buffersrc: add add av_buffersrc_close().

2014-07-24 Thread wm4
On Thu, 24 Jul 2014 15:39:43 +0200
Nicolas George  wrote:

> Also deprecate adding a NULL frame to mark EOF.

No, you can't do this. It breaks compatibility with Libav; also what's
even the purpose of this (API) change?

> TODO APIchanges entry, version bump.
> 
> Signed-off-by: Nicolas George 
> ---
>  libavfilter/buffersrc.c | 40 ++--
>  libavfilter/buffersrc.h | 15 +++
>  2 files changed, 45 insertions(+), 10 deletions(-)
> 
> diff --git a/libavfilter/buffersrc.c b/libavfilter/buffersrc.c
> index 27d3db0..6d71587 100644
> --- a/libavfilter/buffersrc.c
> +++ b/libavfilter/buffersrc.c
> @@ -63,6 +63,7 @@ typedef struct BufferSourceContext {
>  char*channel_layout_str;
>  
>  int eof;
> +int64_t eof_pts;
>  } BufferSourceContext;
>  
>  #define CHECK_VIDEO_PARAM_CHANGE(s, c, width, height, format)\
> @@ -77,6 +78,27 @@ typedef struct BufferSourceContext {
>  return AVERROR(EINVAL);\
>  }
>  
> +static int push_if_flag(AVFilterContext *ctx, int flags)
> +{
> +return (flags & AV_BUFFERSRC_FLAG_PUSH) ?
> +ctx->output_pads[0].request_frame(ctx->outputs[0]) : 0;
> +}
> +
> +int av_buffersrc_close(AVFilterContext *ctx, int64_t pts, int flags)
> +{
> +BufferSourceContext *s = ctx->priv;
> +
> +if (pts == AV_NOPTS_VALUE) {
> +av_log(ctx, AV_LOG_WARNING, "No EOF timestamp\n");
> +/* FIXME use duration for audio */
> +pts = av_rescale_q(ctx->outputs[0]->current_pts,
> +   AV_TIME_BASE_Q, ctx->outputs[0]->time_base) + 1;
> +}
> +s->eof_pts = pts;
> +s->eof = 1;
> +return push_if_flag(ctx, flags);
> +}
> +
>  int attribute_align_arg av_buffersrc_write_frame(AVFilterContext *ctx, const 
> AVFrame *frame)
>  {
>  return av_buffersrc_add_frame_flags(ctx, (AVFrame *)frame,
> @@ -125,8 +147,7 @@ static int 
> av_buffersrc_add_frame_internal(AVFilterContext *ctx,
>  s->nb_failed_requests = 0;
>  
>  if (!frame) {
> -s->eof = 1;
> -return 0;
> +return av_buffersrc_close(ctx, AV_NOPTS_VALUE, flags);
>  } else if (s->eof)
>  return AVERROR(EINVAL);
>  
> @@ -177,11 +198,7 @@ static int 
> av_buffersrc_add_frame_internal(AVFilterContext *ctx,
>  return ret;
>  }
>  
> -if ((flags & AV_BUFFERSRC_FLAG_PUSH))
> -if ((ret = ctx->output_pads[0].request_frame(ctx->outputs[0])) < 0)
> -return ret;
> -
> -return 0;
> +return push_if_flag(ctx, flags);
>  }
>  
>  #if FF_API_AVFILTERBUFFER
> @@ -211,8 +228,7 @@ int av_buffersrc_add_ref(AVFilterContext *ctx, 
> AVFilterBufferRef *buf,
>  int ret = 0, planes, i;
>  
>  if (!buf) {
> -s->eof = 1;
> -return 0;
> +return av_buffersrc_close(ctx, AV_NOPTS_VALUE, flags);
>  } else if (s->eof)
>  return AVERROR(EINVAL);
>  
> @@ -487,10 +503,14 @@ static int request_frame(AVFilterLink *link)
>  {
>  BufferSourceContext *c = link->src->priv;
>  AVFrame *frame;
> +int ret;
>  
>  if (!av_fifo_size(c->fifo)) {
> -if (c->eof)
> +if (c->eof) {
> +if ((ret = ff_filter_link_close(link, c->eof_pts)) < 0)
> +return ret;
>  return AVERROR_EOF;
> +}
>  c->nb_failed_requests++;
>  return AVERROR(EAGAIN);
>  }
> diff --git a/libavfilter/buffersrc.h b/libavfilter/buffersrc.h
> index ea34c04..28ca545 100644
> --- a/libavfilter/buffersrc.h
> +++ b/libavfilter/buffersrc.h
> @@ -145,6 +145,8 @@ int av_buffersrc_add_frame(AVFilterContext *ctx, AVFrame 
> *frame);
>   *
>   * @param buffer_src  pointer to a buffer source context
>   * @param frame   a frame, or NULL to mark EOF
> + *(Using NULL to mark EOF is deprecated, use
> + *av_buffersrc_close() instead.)
>   * @param flags   a combination of AV_BUFFERSRC_FLAG_*
>   * @return>= 0 in case of success, a negative AVERROR code
>   *in case of failure
> @@ -154,6 +156,19 @@ int av_buffersrc_add_frame_flags(AVFilterContext 
> *buffer_src,
>  
>  
>  /**
> + * Close a buffer source.
> + *
> + * This cause EOF to be propagated along the filter graph.
> + *
> + * @param buffer_src  pointer to a buffer source context
> + * @param pts the timestamp of the end of stream
> + * @param flags   a combination of AV_BUFFERSRC_FLAG_*
> + * @return>= 0 in case of success, a negative AVERROR code
> + *in case of failure
> + */
> +int av_buffersrc_close(AVFilterContext *buffer_src, int64_t pts, int flags);
> +
> +/**
>   * @}
>   */
>  

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH 2/4] lavfi/buffersrc: add add av_buffersrc_close().

2014-07-24 Thread Nicolas George
Le sextidi 6 thermidor, an CCXXII, wm4 a écrit :
> No, you can't do this.

Yes, I can.

> It breaks compatibility with Libav;

No, it does not. Removing it would break compatibility. Deprecating it does
nothing.

> also what's even the purpose of this (API) change?

Fixing a long-standing issue, see the rest of the series.

Regards,

-- 
  Nicolas George


signature.asc
Description: Digital signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] hevc: propagate error code from set_sps()

2014-07-24 Thread Michael Niedermayer
On Thu, Jul 17, 2014 at 06:26:44PM -0700, Timothy Gu wrote:
> Signed-off-by: Timothy Gu 
> ---
>  libavcodec/hevc.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)

applied

thanks

[...]
-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Everything should be made as simple as possible, but not simpler.
-- Albert Einstein


signature.asc
Description: Digital signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH 1/4] lavfi: add filter messages infrastructure.

2014-07-24 Thread Michael Niedermayer
On Thu, Jul 24, 2014 at 03:39:42PM +0200, Nicolas George wrote:
> Messaages are passed as frames with a negative format code,
> only to filter that declare supporting them.
> The only message for now is EOF; this mechanism augments
> the current mechanism based on request_frame() returning
> AVERROR_EOF, with the advantage that the EOF message carries
> a timestamp.
> The messages are a purely internal API and do not leak to
> the application.
> 
> Signed-off-by: Nicolas George 

the 4 patch set seems to break fate
TESTswr-resample-s16p-48000-2626
stddev:3.88 PSNR: 84.54 MAXDIFF:   15 bytes:96000/20416
Test swr-resample-s16p-8000-44100 failed. Look at 
tests/data/fate/swr-resample-s16p-8000-44100.err for details.
make: *** [fate-swr-resample-s16p-8000-44100] Error 1
make: *** Waiting for unfinished jobs
stddev:2.27 PSNR: 89.19 MAXDIFF:7 bytes:96000/20416
Test swr-resample-s16p-8000-48000 failed. Look at 
tests/data/fate/swr-resample-s16p-8000-48000.err for details.
make: *** [fate-swr-resample-s16p-8000-48000] Error 1
stddev:1.19 PSNR: 94.80 MAXDIFF:4 bytes:   529200/20418
Test swr-resample-s16p-44100-48000 failed. Look at 
tests/data/fate/swr-resample-s16p-44100-48000.err for details.
make: *** [fate-swr-resample-s16p-44100-48000] Error 1
stddev: 1395.14 PSNR: 33.44 MAXDIFF: 8594 bytes:31512/20416
Test swr-resample-s16p-2626-44100 failed. Look at 
tests/data/fate/swr-resample-s16p-2626-44100.err for details.
make: *** [fate-swr-resample-s16p-2626-44100] Error 1
stddev:   10.18 PSNR: 76.17 MAXDIFF:   27 bytes:   576000/19304
Test swr-resample-s16p-48000-2626 failed. Look at 
tests/data/fate/swr-resample-s16p-48000-2626.err for details.
make: *** [fate-swr-resample-s16p-48000-2626] Error 1
stddev: 1395.21 PSNR: 33.44 MAXDIFF: 8606 bytes:31512/20416
Test swr-resample-s16p-2626-96000 failed. Look at 
tests/data/fate/swr-resample-s16p-2626-96000.err for details.
make: *** [fate-swr-resample-s16p-2626-96000] Error 1


[...]
-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

No snowflake in an avalanche ever feels responsible. -- Voltaire


signature.asc
Description: Digital signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH 1/4] lavfi: add filter messages infrastructure.

2014-07-24 Thread Nicolas George
Le sextidi 6 thermidor, an CCXXII, Michael Niedermayer a écrit :
> the 4 patch set seems to break fate
> TESTswr-resample-s16p-48000-2626
> stddev:3.88 PSNR: 84.54 MAXDIFF:   15 bytes:96000/20416
> Test swr-resample-s16p-8000-44100 failed. Look at 
> tests/data/fate/swr-resample-s16p-8000-44100.err for details.
> make: *** [fate-swr-resample-s16p-8000-44100] Error 1
> make: *** Waiting for unfinished jobs
> stddev:2.27 PSNR: 89.19 MAXDIFF:7 bytes:96000/20416
> Test swr-resample-s16p-8000-48000 failed. Look at 
> tests/data/fate/swr-resample-s16p-8000-48000.err for details.
> make: *** [fate-swr-resample-s16p-8000-48000] Error 1
> stddev:1.19 PSNR: 94.80 MAXDIFF:4 bytes:   529200/20418
> Test swr-resample-s16p-44100-48000 failed. Look at 
> tests/data/fate/swr-resample-s16p-44100-48000.err for details.
> make: *** [fate-swr-resample-s16p-44100-48000] Error 1
> stddev: 1395.14 PSNR: 33.44 MAXDIFF: 8594 bytes:31512/20416
> Test swr-resample-s16p-2626-44100 failed. Look at 
> tests/data/fate/swr-resample-s16p-2626-44100.err for details.
> make: *** [fate-swr-resample-s16p-2626-44100] Error 1
> stddev:   10.18 PSNR: 76.17 MAXDIFF:   27 bytes:   576000/19304
> Test swr-resample-s16p-48000-2626 failed. Look at 
> tests/data/fate/swr-resample-s16p-48000-2626.err for details.
> make: *** [fate-swr-resample-s16p-48000-2626] Error 1
> stddev: 1395.21 PSNR: 33.44 MAXDIFF: 8606 bytes:31512/20416
> Test swr-resample-s16p-2626-96000 failed. Look at 
> tests/data/fate/swr-resample-s16p-2626-96000.err for details.
> make: *** [fate-swr-resample-s16p-2626-96000] Error 1

Thanks for testing. I usually build without libavresample, so I did not see
this set of errors. I will look into it.

Regards,

-- 
  Nicolas George


signature.asc
Description: Digital signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH] lavfi/setpts: allow to parse a metadata tag as a timestamp.

2014-07-24 Thread Nicolas George
Signed-off-by: Nicolas George 
---
 doc/filters.texi  | 22 ++
 libavfilter/setpts.c  | 64 ++-
 libavfilter/version.h |  2 +-
 3 files changed, 86 insertions(+), 2 deletions(-)

diff --git a/doc/filters.texi b/doc/filters.texi
index a7919a3..bbb 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -10317,6 +10317,19 @@ This filter accepts the following options:
 @item expr
 The expression which is evaluated for each frame to construct its timestamp.
 
+@item parsemeta
+The name of a metadata tag to parse as a timestamp.
+The timestamp is always parsed as UTC.
+
+@item parsemeta_fmt
+The format to use when parsing the metadata tag specified in parsemeta.
+The syntax is the one used by @code{av_small_strptime()}.
+The value @code{exif} can be used as an abbreviation for
+@code{%Y:%m:%d %H:%M:%S} and @code{iso} for @code{%Y-%m-%dT%H:%M:%SZ}.
+If not specified, all the known formats are tried in turn.
+
+@item 
+
 @end table
 
 The expression is evaluated through the eval API and can contain the following
@@ -10378,6 +10391,9 @@ instead.
 @item RTCSTART
 The wallclock (RTC) time at the start of the movie in microseconds.
 
+@item TAG
+The parsed metadata tag, in seconds since the Unix Epoch.
+
 @item TB
 The timebase of the input timestamps.
 
@@ -10434,6 +10450,12 @@ Generate timestamps by counting samples:
 asetpts=N/SR/TB
 @end example
 
+@item
+Use the EXIF metadata as a timestamp:
+@example
+asetpts=setpts=TAG/TB:parsemeta=DateTime:parsemeta_fmt=exif
+@end example
+
 @end itemize
 
 @section settb, asettb
diff --git a/libavfilter/setpts.c b/libavfilter/setpts.c
index 0db0218..a476e24 100644
--- a/libavfilter/setpts.c
+++ b/libavfilter/setpts.c
@@ -24,10 +24,12 @@
  * video presentation timestamp (PTS) modification filter
  */
 
+#include 
 #include "libavutil/eval.h"
 #include "libavutil/internal.h"
 #include "libavutil/mathematics.h"
 #include "libavutil/opt.h"
+#include "libavutil/parseutils.h"
 #include "libavutil/time.h"
 #include "audio.h"
 #include "avfilter.h"
@@ -50,6 +52,7 @@ static const char *const var_names[] = {
 "STARTPTS",///< PTS at start of movie
 "STARTT",  ///< time at start of movie
 "T",   ///< original time in the file of the frame
+"TAG", ///< date parsed from metadata, in seconds since the Epoch
 "TB",  ///< timebase
 "RTCTIME", ///< wallclock (RTC) time in micro seconds
 "RTCSTART",///< wallclock (RTC) time at the start of the movie in 
micro seconds
@@ -74,6 +77,7 @@ enum var_name {
 VAR_STARTPTS,
 VAR_STARTT,
 VAR_T,
+VAR_TAG,
 VAR_TB,
 VAR_RTCTIME,
 VAR_RTCSTART,
@@ -82,9 +86,16 @@ enum var_name {
 VAR_VARS_NB
 };
 
+static const char *const date_formats[][2] = {
+{ "exif", "%Y:%m:%d %H:%M:%S" },
+{ "iso",  "%Y-%m-%dT%H:%M:%SZ" },
+};
+
 typedef struct SetPTSContext {
 const AVClass *class;
 char *expr_str;
+char *parsemeta;
+char *parsemeta_fmt;
 AVExpr *expr;
 double var_values[VAR_VARS_NB];
 enum AVMediaType type;
@@ -93,7 +104,7 @@ typedef struct SetPTSContext {
 static av_cold int init(AVFilterContext *ctx)
 {
 SetPTSContext *setpts = ctx->priv;
-int ret;
+int i, ret;
 
 if ((ret = av_expr_parse(&setpts->expr, setpts->expr_str,
  var_names, NULL, NULL, NULL, NULL, 0, ctx)) < 0) {
@@ -101,6 +112,23 @@ static av_cold int init(AVFilterContext *ctx)
 return ret;
 }
 
+if (setpts->parsemeta_fmt) {
+if (!setpts->parsemeta)
+av_log(ctx, AV_LOG_WARNING,
+   "No metadata tag to parse, format ignored\n");
+for (i = 0; i < FF_ARRAY_ELEMS(date_formats); i++)
+if (!strcmp(date_formats[i][0], setpts->parsemeta_fmt))
+break;
+if (i < FF_ARRAY_ELEMS(date_formats)) {
+av_log(ctx, AV_LOG_VERBOSE,
+   "Using format '%s' for metadata\n", date_formats[i][1]);
+av_free(setpts->parsemeta_fmt);
+setpts->parsemeta_fmt = av_strdup(date_formats[i][1]);
+if (!setpts->parsemeta_fmt)
+return AVERROR(ENOMEM);
+}
+}
+
 setpts->var_values[VAR_N]   = 0.0;
 setpts->var_values[VAR_S]   = 0.0;
 setpts->var_values[VAR_PREV_INPTS]  = NAN;
@@ -109,6 +137,7 @@ static av_cold int init(AVFilterContext *ctx)
 setpts->var_values[VAR_PREV_OUTT]   = NAN;
 setpts->var_values[VAR_STARTPTS]= NAN;
 setpts->var_values[VAR_STARTT]  = NAN;
+setpts->var_values[VAR_TAG] = NAN;
 return 0;
 }
 
@@ -135,6 +164,36 @@ static int config_input(AVFilterLink *inlink)
 return 0;
 }
 
+static double parse_metadata(AVFilterContext *ctx, const AVFrame *frame)
+{
+SetPTSContext *setpts = ctx->priv;
+AVDictionaryEntry *tag;
+struct tm tm = { 0 };
+char *rest;
+int i;
+
+if (!setpts->parsemeta)
+return N

[FFmpeg-devel] [PATCH] x86: hevc_mc: replace simple leas by adds

2014-07-24 Thread Christophe Gisquet
Hi,

the impact is relatively important (3 to 25 cycles, ie up to 2%) so I
also include bench.patch if anybody wants to confirm the timings.

Although I thought openhevc's MC code was faster, the benchmarked
functions are faster in ffmpeg. I didn't investigate if there are any
MC functions much slower in ffmpeg or if there's something else
occurring.

-- 
Christophe
From 36dbc9b67269579e23345ec225ffa270d472b94e Mon Sep 17 00:00:00 2001
From: Christophe Gisquet 
Date: Thu, 24 Jul 2014 17:23:47 +0200
Subject: [PATCH 10/10] x86: hevc_mc: replace simple leas by adds

lea is detrimental for those simple cases. No impact overall to
the change though.

Before:
15017 decicycles in q, 1016152 runs, 32424 skips
15382 decicycles in q_bi, 1013673 runs, 34903 skips
3713 decicycles in e, 2074534 runs, 22618 skips
3901 decicycles in e_bi, 2065509 runs, 31643 skips
7852 decicycles in q_uni, 520165 runs, 4123 skips
2398 decicycles in e_uni, 1043339 runs, 5237 skips

After:
14898 decicycles in q, 1016295 runs, 32281 skips
15119 decicycles in q_bi, 1015392 runs, 33184 skips
3682 decicycles in e, 2073224 runs, 23928 skips
3720 decicycles in e_bi, 2065043 runs, 32109 skips
7643 decicycles in q_uni, 520280 runs, 4008 skips
2363 decicycles in e_uni, 1043780 runs, 4796 skips
---
 libavcodec/x86/hevc_mc.asm | 120 ++---
 1 file changed, 60 insertions(+), 60 deletions(-)

diff --git a/libavcodec/x86/hevc_mc.asm b/libavcodec/x86/hevc_mc.asm
index 5cf37d0..30edc52 100644
--- a/libavcodec/x86/hevc_mc.asm
+++ b/libavcodec/x86/hevc_mc.asm
@@ -520,8 +520,8 @@ cglobal hevc_put_hevc_uni_pel_pixels%1_%2, 5, 5, 3, dst, dststride, src, srcstri
 .loop
 SIMPLE_LOAD   %1, %2, srcq, m0
 PEL_%2STORE%1   dstq, m0, m1
-lea dstq, [dstq+dststrideq]  ; dst += dststride
-lea srcq, [srcq+srcstrideq]  ; src += srcstride
+add dstq, dststrideq ; dst += dststride
+add srcq, srcstrideq ; src += srcstride
 dec  heightd ; cmp height
 jnz   .loop  ; height loop
 RET
@@ -535,8 +535,8 @@ cglobal hevc_put_hevc_bi_pel_pixels%1_%2, 7, 7, 6, dst, dststride, src, srcstrid
 MC_PIXEL_COMPUTE  %1, %2
 BI_COMPUTE%1, %2, m0, m1, m3, m4, m5
 PEL_%2STORE%1   dstq, m0, m1
-lea dstq, [dstq+dststrideq]  ; dst += dststride
-lea srcq, [srcq+srcstrideq]  ; src += srcstride
+add dstq, dststrideq ; dst += dststride
+add srcq, srcstrideq ; src += srcstride
 leasrc2q, [src2q+2*src2strideq]  ; src += srcstride
 dec  heightd ; cmp height
 jnz   .loop  ; height loop
@@ -573,8 +573,8 @@ cglobal hevc_put_hevc_uni_epel_h%1_%2, 6, 7, 7, dst, dststride, src, srcstride,
 EPEL_COMPUTE  %2, %1, m4, m5
 UNI_COMPUTE   %1, %2, m0, m1, m6
 PEL_%2STORE%1   dstq, m0, m1
-lea dstq, [dstq+dststrideq]  ; dst += dststride
-lea srcq, [srcq+srcstrideq]  ; src += srcstride
+add dstq, dststrideq ; dst += dststride
+add srcq, srcstrideq ; src += srcstride
 dec  heightd ; cmp height
 jnz   .loop  ; height loop
 RET
@@ -588,8 +588,8 @@ cglobal hevc_put_hevc_bi_epel_h%1_%2, 8, 9, 7, dst, dststride, src, srcstride, s
 SIMPLE_BILOAD %1, src2q, m2, m3
 BI_COMPUTE%1, %2, m0, m1, m2, m3, m6
 PEL_%2STORE%1   dstq, m0, m1
-lea dstq, [dstq+dststrideq]  ; dst += dststride
-lea srcq, [srcq+srcstrideq]  ; src += srcstride
+add dstq, dststrideq ; dst += dststride
+add srcq, srcstrideq ; src += srcstride
 leasrc2q, [src2q+2*src2strideq]  ; src += srcstride
 dec  heightd ; cmp height
 jnz   .loop  ; height loop
@@ -623,8 +623,8 @@ cglobal hevc_put_hevc_uni_epel_v%1_%2, 7, 8, 7, dst, dststride, src, srcstride,
 EPEL_COMPUTE  %2, %1, m4, m5
 UNI_COMPUTE   %1, %2, m0, m1, m6
 PEL_%2STORE%1   dstq, m0, m1
-lea dstq, [dstq+dststrideq]  ; dst += dststride
-lea srcq, [srcq+srcstrideq]  ; src += srcstride
+add dstq, dststrideq ; dst += dststride
+add srcq, srcstrideq ; src += srcstride
 dec  heightd ; cmp height
 jnz   .loop  ; height loop
 RET
@@ -641,8 +641,8 @@ cglobal hevc_put_hevc_bi_epel_v%1_%2, 9, 10, 7, dst, dststride, src, srcstride,
 SIMPLE_BILOAD %1, src2q, m2, m3
 BI_COMPUTE%1, %2, m0, m1, m2, m3, m6

Re: [FFmpeg-devel] [PATCH] ffplay: remove dead code

2014-07-24 Thread Marton Balint


On Thu, 24 Jul 2014, Michael Niedermayer wrote:


Hi

On Thu, Jul 17, 2014 at 06:02:02PM -0700, Timothy Gu wrote:

Signed-off-by: Timothy Gu 
---
 ffplay.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/ffplay.c b/ffplay.c
index af0e199..8abbeae 100644
--- a/ffplay.c
+++ b/ffplay.c
@@ -775,8 +775,6 @@ static void blend_subrect(AVPicture *dst, const 
AVSubtitleRect *rect, int imgw,
 lum[0] = ALPHA_BLEND(a, lum[0], y, 0);

 YUVA_IN(y, u, v, a, p + BPP, pal);
-u1 += u;
-v1 += v;
 a1 += a;
 lum[1] = ALPHA_BLEND(a, lum[1], y, 0);
 cb[0] = ALPHA_BLEND(a1 >> 2, cb[0], u, 1);


I have a feeling that the ALPHA_BLENDs should use u1 and v1 respectively, 
and not u and v, so this is not the proper fix.




CC-ing ffplay maintainer, so he doesnt miss this


yeah, sorry for the delay.

Regards,
Marton
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] Use makeinfo to generate html doc for the new website

2014-07-24 Thread Timothy Gu
On Jul 23, 2014 7:44 PM, "Michael Niedermayer"  wrote:
>
> On Wed, Jul 23, 2014 at 05:20:10PM -0700, Timothy Gu wrote:
> > On Sun, Jul 20, 2014 at 2:26 PM, Timothy Gu 
wrote:
> > > texi2html is deprecated by upstream in favor of makeinfo/texi2any.
See:
> > >
> > > -
https://www.gnu.org/software/texinfo/manual/texinfo/html_node/texi2html.html
> > > - https://wiki.debian.org/Texi2htmlTransition
> > > - https://lists.debian.org/debian-devel/2013/05/msg01516.html
> > >
> > > This is actually two separate changes. But as makeinfo and texi2html
> > > adopt 2 (very) different init file syntaxes, it is easier to do the
two
> > > transitions at once.
> > >
> > > Based on a patch by Andreas Cadhalpun <
andreas.cadhal...@googlemail.com>.
> > >
> > > Fixes Trac ticket #3232.
> > >
> > > Signed-off-by: Timothy Gu 
> > > ---
> > >
> > > Removed some now-extraneous settings.
> > >
> > >  configure |   5 +-
> > >  doc/Makefile  |   8 +-
> > >  doc/platform.texi |   2 +-
> > >  doc/t2h.init  | 123 --
> > >  doc/t2h.pm| 220
++
> > >  5 files changed, 226 insertions(+), 132 deletions(-)
> > >  delete mode 100644 doc/t2h.init
> > >  create mode 100644 doc/t2h.pm
> >
> > Ping
>
> does this patchset affect how the html output looks ?

Yes.

The pros about this patch set:

- the double title is removed (see e.g. https://ffmpeg.org/ffmpeg.html) and
bogus "FFmpeg documentation" for all the doc pages are changed to the real
one.

- For client-side doc generation the title style is more consistent with
the website (the underline is removed and background is darker)

- @float is handled more elegantly (see the currently really out-of-place
output that looks like Libav's:
https://ffmpeg.org/general.html#OpenCORE_002c-VisualOn_002c-and-Fraunhofer-libraries
)

The neutral changes made by this set:
- Chapter titles are now . I can change this back to  if desired
but I think  is more visually appealing.
- Chapter titles follow the format of (1 Blah) instead of (1. Blah).
Section title format is not changed.

The cons:
- Anchor names are changed.

>
> also applying this patchset will not affect how our server
> generates the html, as it does not execute files from git.
> If its intended to also change what the server does, this would need
> some volunteer to update the scripts used.

OK. You can send me privately the server scripts and I'll see what I can do.

Timothy
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] web/style: Add a comment in the generated css file for the doc in the main repo

2014-07-24 Thread Andreas Cadhalpun

On 24.07.2014 08:06, db0company wrote:

---
  README |2 +-
  src/css_credit |6 ++
  2 files changed, 7 insertions(+), 1 deletions(-)
  create mode 100644 src/css_credit

diff --git a/README b/README
index 93854ee..2276820 100644
--- a/README
+++ b/README
@@ -29,7 +29,7 @@ To generate the documentation pages:

  In case of a major CSS update, please also update the `style.min.css` file in
  the main FFmpeg repo:
-  $ cat /path/to/ffmpeg-web/htdocs/css/{bootstrap.min.css,style.min.css} > 
/path/to/ffmpeg/doc/style.min.css
+  $ cat /path/to/ffmpeg-web/src/css_credit 
/path/to/ffmpeg-web/htdocs/css/{bootstrap.min.css,style.min.css} > 
/path/to/ffmpeg/doc/style.min.css


  WEBSITE DEVELOPERS INSTRUCTIONS
diff --git a/src/css_credit b/src/css_credit
new file mode 100644
index 000..27efb02
--- /dev/null
+++ b/src/css_credit
@@ -0,0 +1,6 @@
+/*
+ * This file has been generated from the website repo:
+ * git://ffmpeg.org/ffmpeg-web
+ * Any modification must be applied on the src/less/style.less source file 
first.
+ */
+


It would be great, if you could also include copyright and license here.

Best regards,
Andreas
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] Use makeinfo to generate html doc for the new website

2014-07-24 Thread Michael Niedermayer
On Thu, Jul 24, 2014 at 01:17:23PM -0700, Timothy Gu wrote:
[...]

> The cons:
> - Anchor names are changed.

are there any linkes that use these anchors ?


> 
> >
> > also applying this patchset will not affect how our server
> > generates the html, as it does not execute files from git.
> > If its intended to also change what the server does, this would need
> > some volunteer to update the scripts used.
> 
> OK. You can send me privately the server scripts and I'll see what I can do.

done

[...]
-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Let us carefully observe those good qualities wherein our enemies excel us
and endeavor to excel them, by avoiding what is faulty, and imitating what
is excellent in them. -- Plutarch


signature.asc
Description: Digital signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] Use makeinfo to generate html doc for the new website

2014-07-24 Thread Timothy Gu
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1



On 07/24/2014 04:20 PM, Michael Niedermayer wrote:
> On Thu, Jul 24, 2014 at 01:17:23PM -0700, Timothy Gu wrote: [...]
> 
>> The cons: - Anchor names are changed.
> 
> are there any linkes that use these anchors ?

Never mind, the anchors are preserved.

Timothy
-BEGIN PGP SIGNATURE-
Version: GnuPG v1
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQIcBAEBAgAGBQJT0bjnAAoJEH/msJW1grDU1zEP/0pLGHVuoQZ6Fxof0FJSh5yb
3HguqdhPHiVXalb9Bio1Zw0HRsaYBUNqZaNoexbGXjKy2XobzMlblZxfWe8ESok9
Q65B+eJpgLmEqSGEPgjF4o58BDiaY3f3NbgYgAtfapehgjjqTrjy5smfpzSkKqGf
I3rPdsou5qrlV2v1yLE0zNYkdAnFGNyLivuRNestSCoA1TQzBxHL28Kh7w1S8axR
ZZUlKFzlt0RVizG3dmNyQZ/qQtSks3hkazzvLBV75nhvttCsbtISyCOyICqA+RmH
vSX3mPlizR86mKmpcFGlUXVj5zI6CE75C32J0INj7p9auQI+QUUO7eXbVEMoWEsb
1PswxluB6Dgq3q+27Usd708VRn38U2ZGrkBefAWTI8bf/yx3ECm5quQ7acyvbQCr
p2fSbgUScJeCz2tf02kK/rrR1+p1w0UBLFMVjjY1t88fssEvPT1jPExrMmJHcRbV
p3VNpmAOjTgMmeh/Qlm3rrMUspxFeg/rjTI/KImPJkEwZuufnHPHp3FTs1g3H47V
cHBqsnW5hqi1mpor5WVRvm5dcmet2L5l9EWOWXcbF4K094bLlnjk2f9zqB/j3nv8
bUiWWiGMmWATx2JyUtaC3iA0bIqGKiEKxuvL1MU8POCVlaHDslNFn8u/h4/E3Qla
FC48+Khgs/rQAO78DvzY
=ftun
-END PGP SIGNATURE-
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] ffplay: remove dead code

2014-07-24 Thread Timothy Gu


On 07/24/2014 11:54 AM, Marton Balint wrote:
> 
> On Thu, 24 Jul 2014, Michael Niedermayer wrote:
> 
>> Hi
>>
>> On Thu, Jul 17, 2014 at 06:02:02PM -0700, Timothy Gu wrote:
>>> Signed-off-by: Timothy Gu 
>>> ---
>>>  ffplay.c | 2 --
>>>  1 file changed, 2 deletions(-)
>>>
>>> diff --git a/ffplay.c b/ffplay.c
>>> index af0e199..8abbeae 100644
>>> --- a/ffplay.c
>>> +++ b/ffplay.c
>>> @@ -775,8 +775,6 @@ static void blend_subrect(AVPicture *dst, const
>>> AVSubtitleRect *rect, int imgw,
>>>  lum[0] = ALPHA_BLEND(a, lum[0], y, 0);
>>>
>>>  YUVA_IN(y, u, v, a, p + BPP, pal);
>>> -u1 += u;
>>> -v1 += v;
>>>  a1 += a;
>>>  lum[1] = ALPHA_BLEND(a, lum[1], y, 0);
>>>  cb[0] = ALPHA_BLEND(a1 >> 2, cb[0], u, 1);
> 
> I have a feeling that the ALPHA_BLENDs should use u1 and v1
> respectively, and not u and v, so this is not the proper fix.

Consider this patch dropped, and do what you think is correct then.

[...]

Timothy
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH] RELEASE_NOTES: fix WebVTT decoder typo (-> encoder)

2014-07-24 Thread Timothy Gu
Found-by: Clément Bœsch 
Signed-off-by: Timothy Gu 
---

I'm so sorry I didn't see Clément's comment on this during the patch 
review stage…

---
 RELEASE_NOTES | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/RELEASE_NOTES b/RELEASE_NOTES
index 0780595..6323cf5 100644
--- a/RELEASE_NOTES
+++ b/RELEASE_NOTES
@@ -105,7 +105,7 @@
  Other interesting new features including hqx video filter, a pixel art
  scaling filter; a fixed-point AC-3 decoder contributed by Imagination
  Technologies; an On2 TrueMotion VP7 video decoder; an HTML5 WebVTT
- subtitle decoder that allows creation of WebVTT from any text-based
+ subtitle encoder that allows creation of WebVTT from any text-based
  subtitles; and an 1-bit Direct Stream Digital audio decoder.
 
  ┌┐
-- 
1.9.1

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] lavf/avio: do not include bprint.h.

2014-07-24 Thread Michael Niedermayer
On Thu, Jul 24, 2014 at 02:56:04PM +0200, Michael Niedermayer wrote:
> On Thu, Jul 24, 2014 at 09:34:10AM +0200, Nicolas George wrote:
> > C++ chokes on the definition of AVBPrint.
> > Including avio.h from c++ code used to work.
> > Fix trac ticket #3800.
> > 
> > Signed-off-by: Nicolas George 
> > ---
> >  libavformat/avio.h| 3 +--
> >  libavformat/aviobuf.c | 1 +
> >  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> LGTM

i took the liberty to apply this as i suspect it fixes an issue
zeronoe reported too
That is:  Getting a compile error with the latest FFmpeg 
"libavutil/bprint.h:35:48: error: types may not be defined in 'sizeof' 
expressions"

[...]

-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

I do not agree with what you have to say, but I'll defend to the death your
right to say it. -- Voltaire


signature.asc
Description: Digital signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] RELEASE_NOTES: fix WebVTT decoder typo (-> encoder)

2014-07-24 Thread Timothy Gu
On Thu, Jul 24, 2014 at 7:39 PM, Timothy Gu  wrote:
> Found-by: Clément Bœsch 
> Signed-off-by: Timothy Gu 
> ---
>
> I'm so sorry I didn't see Clément's comment on this during the patch
> review stage…
>
> ---
>  RELEASE_NOTES | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

BTW this patch is meant for 2.3 branch, and
https://ffmpeg.org/index.html and https://ffmpeg.org/download.html
should also be changed.

[...]

Timothy
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel