[FFmpeg-devel] [PATCH] lavf/avio: do not include bprint.h.
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
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
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
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
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
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.
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
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
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
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
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.
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().
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.
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().
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().
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().
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()
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.
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.
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.
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
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
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
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
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
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
-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
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)
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.
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)
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