Re: [FFmpeg-devel] /libavcodec/h264_slice.c: selectively discard MB to be decoded
Hi all, I want to discard some MBs of a B-FRAME from decoding. In fact, I want to avoid some special MBs to be decoded and instead copying MBs of one of its parents. Note that no B-Frame is encoded as a reference frame. The best function for me to discard a list of MB is: (/libavcodec/h264_slice.c) static int decode_slice(struct AVCodecContext *avctx, void *arg) FRAME_MBAFF(h) is false and the clip entropy is cabac. 1)How can I disable ret = ff_h264_decode_mb_cabac(h, sl); and ff_h264_hl_decode_mb(h, sl) for a macro block where (sl->mb_x==my_x_id && sl->mb_y==my_y_id) with no effect on decoding the rest of MBs in a B-Frame? 2) If not possible, is it possible to call ret = ff_h264_decode_mb_cabac(h, sl); but don't execute ff_h264_hl_decode_mb(h, sl) for some specific MBs (again with not effects on other MBs) Thank you. On Thu, Feb 11, 2016 at 1:08 AM, Mehdi Hosseiniwrote: > Hi all, > > I want to discard some MBs of a B-FRAME from decoding. In fact, I want to > avoid some special MB to be decoded and instead copy the MB of one of its > parents. Note that no B-Frame is reference. The best function for me to > discard a list of MB is: > > (/libavcodec/h264_slice.c) static int decode_slice(struct AVCodecContext > *avctx, void *arg) > > FRAME_MBAFF(h) > > ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 2/2] lavc/ccaption_dec: implement special and extended character sets
On Wed, Feb 10, 2016 at 22:21:10 -0800, Aman Gupta wrote: > +enum cc_charset { > +CCSET_BASIC_AMERICAN, > +CCSET_SPECIAL_AMERICAN, > +CCSET_EXTENDED_SPANISH_FRENCH, > +CCSET_EXTENDED_PORTUGUESE_GERMAN, > +}; Do these correspond to these from EIA-608?: https://en.wikipedia.org/wiki/EIA-608#Extended_Western_European_character_set Perhaps mention that somewhere. I was a bit startled by their contents, but that was just me, because their names don't mention the "Miscellaneous" and "Danish" parts. Moritz ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] /libavcodec/h264_slice.c: selectively discard MB to be decoded
On Thu, Feb 11, 2016 at 01:20:52 -0800, Mehdi Hosseini wrote: > I want to discard some MBs of a B-FRAME from decoding. In fact, I want to > avoid some special MBs to be decoded and instead copying MBs of one of its > parents. Note that no B-Frame is encoded as a reference frame. The best > function for me to discard a list of MB is: For help with use of the ffmpeg/libav* libraries, please refer to the libav-user mailing list: https://ffmpeg.org/mailman/listinfo/libav-user Moritz ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] /libavcodec/h264_slice.c: selectively discard MB to be decoded
Hi all, I want to discard some MBs of a B-FRAME from decoding. In fact, I want to avoid some special MB to be decoded and instead copy the MB of one of its parents. Note that no B-Frame is reference. The best function for me to discard a list of MB is: (/libavcodec/h264_slice.c) static int decode_slice(struct AVCodecContext *avctx, void *arg) FRAME_MBAFF(h) ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH] fate/source: Attempt to fix BSD sed
I apparently used a GNU extension in the !{} syntax. Remove that rule and the cause of it. --- cmdutils.h | 4 ++-- tests/fate/source-check.sh | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/cmdutils.h b/cmdutils.h index 7f3db2a..83ea4ad 100644 --- a/cmdutils.h +++ b/cmdutils.h @@ -19,8 +19,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifndef FFMPEG_CMDUTILS_H -#define FFMPEG_CMDUTILS_H +#ifndef CMDUTILS_H +#define CMDUTILS_H #include diff --git a/tests/fate/source-check.sh b/tests/fate/source-check.sh index 1947b52..50939f9 100755 --- a/tests/fate/source-check.sh +++ b/tests/fate/source-check.sh @@ -19,7 +19,6 @@ git grep -L -E "This file is part of FFmpeg|This file is part of libswresample|" echo Headers without standard inclusion guards: for f in `git ls-files | grep '\.h$'` ; do macro="`echo $f | sed \ --e '/\/\|^ff/!{s/\(.*\)/ffmpeg\/\1/}' \ -e 's/^lib//' \ -e 's/[^A-Za-z0-9]\{1\,\}/_/g' \ -e 's/_\(a\|v\|av\)f_/_/' \ -- 2.1.4 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] avfilter/f_metadata: rename "string" into "same_str"
On 11.02.2016 15:39, Tobias Rapp wrote: Rename function option value "string" into "same_str". Remove obsolete "length" option. Signed-off-by: Tobias Rapp--- libavfilter/f_metadata.c | 32 +++- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/libavfilter/f_metadata.c b/libavfilter/f_metadata.c index ae0208e..7cf286e 100644 --- a/libavfilter/f_metadata.c +++ b/libavfilter/f_metadata.c @@ -48,7 +48,7 @@ enum MetadataMode { }; enum MetadataFunction { -METADATAF_STRING, +METADATAF_SAME_STR, METADATAF_STARTS_WITH, METADATAF_LESS, METADATAF_EQUAL, @@ -75,7 +75,6 @@ typedef struct MetadataContext { int mode; char *key; char *value; -int length; int function; char *expr_str; @@ -86,7 +85,7 @@ typedef struct MetadataContext { char *file_str; int (*compare)(struct MetadataContext *s, - const char *value1, const char *value2, size_t length); + const char *value1, const char *value2); void (*print)(AVFilterContext *ctx, const char *msg, ...) av_printf_format(2, 3); } MetadataContext; @@ -102,29 +101,28 @@ static const AVOption filt_name##_options[] = { \ { "key", "set metadata key", OFFSET(key),AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, FLAGS }, \ { "value", "set metadata value", OFFSET(value), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, FLAGS }, \ { "function", "function for comparing values", OFFSET(function), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, METADATAF_NB-1, FLAGS, "function" }, \ -{ "string", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_STRING }, 0, 3, FLAGS, "function" }, \ +{ "same_str",NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_SAME_STR },0, 3, FLAGS, "function" }, \ { "starts_with", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_STARTS_WITH }, 0, 0, FLAGS, "function" }, \ { "less",NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_LESS}, 0, 3, FLAGS, "function" }, \ { "equal", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_EQUAL }, 0, 3, FLAGS, "function" }, \ { "greater", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_GREATER }, 0, 3, FLAGS, "function" }, \ { "expr",NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_EXPR}, 0, 3, FLAGS, "function" }, \ { "expr", "set expression for expr function", OFFSET(expr_str), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, FLAGS }, \ -{ "length", "compare up to N chars for string function", OFFSET(length), AV_OPT_TYPE_INT,{.i64 = INT_MAX }, 1, INT_MAX, FLAGS }, \ { "file", "set file where to print metadata information", OFFSET(file_str), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS }, \ { NULL } \ } -static int string(MetadataContext *s, const char *value1, const char *value2, size_t length) +static int same_str(MetadataContext *s, const char *value1, const char *value2) { -return !strncmp(value1, value2, length); +return !strcmp(value1, value2); } -static int starts_with(MetadataContext *s, const char *value1, const char *value2, size_t length) +static int starts_with(MetadataContext *s, const char *value1, const char *value2) { return !strncmp(value1, value2, strlen(value2)); } -static int equal(MetadataContext *s, const char *value1, const char *value2, size_t length) +static int equal(MetadataContext *s, const char *value1, const char *value2) { float f1, f2; @@ -134,7 +132,7 @@ static int equal(MetadataContext *s, const char *value1, const char *value2, siz return fabsf(f1 - f2) < FLT_EPSILON; } -static int less(MetadataContext *s, const char *value1, const char *value2, size_t length) +static int less(MetadataContext *s, const char *value1, const char *value2) { float f1, f2; @@ -144,7 +142,7 @@ static int less(MetadataContext *s, const char *value1, const char *value2, size return (f1 - f2) < FLT_EPSILON; } -static int greater(MetadataContext *s, const char *value1, const char *value2, size_t length) +static int greater(MetadataContext *s, const char *value1, const char *value2) { float f1, f2; @@ -154,7 +152,7 @@ static int greater(MetadataContext *s, const char *value1, const char *value2, s return (f2 - f1) < FLT_EPSILON; } -static int parse_expr(MetadataContext *s, const char *value1, const char *value2, size_t length) +static int parse_expr(MetadataContext *s, const char *value1, const char *value2) { double f1, f2; @@ -205,8 +203,8 @@ static av_cold int init(AVFilterContext *ctx) } switch (s->function) { -case METADATAF_STRING: -s->compare = string; +case METADATAF_SAME_STR: +s->compare = same_str; break; case METADATAF_STARTS_WITH: s->compare = starts_with; @@ -289,7 +287,7 @@ static int filter_frame(AVFilterLink *inlink,
[FFmpeg-devel] [PATCH] avfilter/f_metadata: rename "string" into "same_str"
Rename function option value "string" into "same_str". Remove obsolete "length" option. Signed-off-by: Tobias Rapp--- libavfilter/f_metadata.c | 32 +++- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/libavfilter/f_metadata.c b/libavfilter/f_metadata.c index ae0208e..7cf286e 100644 --- a/libavfilter/f_metadata.c +++ b/libavfilter/f_metadata.c @@ -48,7 +48,7 @@ enum MetadataMode { }; enum MetadataFunction { -METADATAF_STRING, +METADATAF_SAME_STR, METADATAF_STARTS_WITH, METADATAF_LESS, METADATAF_EQUAL, @@ -75,7 +75,6 @@ typedef struct MetadataContext { int mode; char *key; char *value; -int length; int function; char *expr_str; @@ -86,7 +85,7 @@ typedef struct MetadataContext { char *file_str; int (*compare)(struct MetadataContext *s, - const char *value1, const char *value2, size_t length); + const char *value1, const char *value2); void (*print)(AVFilterContext *ctx, const char *msg, ...) av_printf_format(2, 3); } MetadataContext; @@ -102,29 +101,28 @@ static const AVOption filt_name##_options[] = { \ { "key", "set metadata key", OFFSET(key),AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, FLAGS }, \ { "value", "set metadata value", OFFSET(value), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, FLAGS }, \ { "function", "function for comparing values", OFFSET(function), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, METADATAF_NB-1, FLAGS, "function" }, \ -{ "string", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_STRING }, 0, 3, FLAGS, "function" }, \ +{ "same_str",NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_SAME_STR },0, 3, FLAGS, "function" }, \ { "starts_with", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_STARTS_WITH }, 0, 0, FLAGS, "function" }, \ { "less",NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_LESS }, 0, 3, FLAGS, "function" }, \ { "equal", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_EQUAL }, 0, 3, FLAGS, "function" }, \ { "greater", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_GREATER }, 0, 3, FLAGS, "function" }, \ { "expr",NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_EXPR }, 0, 3, FLAGS, "function" }, \ { "expr", "set expression for expr function", OFFSET(expr_str), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, FLAGS }, \ -{ "length", "compare up to N chars for string function", OFFSET(length), AV_OPT_TYPE_INT,{.i64 = INT_MAX }, 1, INT_MAX, FLAGS }, \ { "file", "set file where to print metadata information", OFFSET(file_str), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS }, \ { NULL } \ } -static int string(MetadataContext *s, const char *value1, const char *value2, size_t length) +static int same_str(MetadataContext *s, const char *value1, const char *value2) { -return !strncmp(value1, value2, length); +return !strcmp(value1, value2); } -static int starts_with(MetadataContext *s, const char *value1, const char *value2, size_t length) +static int starts_with(MetadataContext *s, const char *value1, const char *value2) { return !strncmp(value1, value2, strlen(value2)); } -static int equal(MetadataContext *s, const char *value1, const char *value2, size_t length) +static int equal(MetadataContext *s, const char *value1, const char *value2) { float f1, f2; @@ -134,7 +132,7 @@ static int equal(MetadataContext *s, const char *value1, const char *value2, siz return fabsf(f1 - f2) < FLT_EPSILON; } -static int less(MetadataContext *s, const char *value1, const char *value2, size_t length) +static int less(MetadataContext *s, const char *value1, const char *value2) { float f1, f2; @@ -144,7 +142,7 @@ static int less(MetadataContext *s, const char *value1, const char *value2, size return (f1 - f2) < FLT_EPSILON; } -static int greater(MetadataContext *s, const char *value1, const char *value2, size_t length) +static int greater(MetadataContext *s, const char *value1, const char *value2) { float f1, f2; @@ -154,7 +152,7 @@ static int greater(MetadataContext *s, const char *value1, const char *value2, s return (f2 - f1) < FLT_EPSILON; } -static int parse_expr(MetadataContext *s, const char *value1, const char *value2, size_t length) +static int parse_expr(MetadataContext *s, const char *value1, const char *value2) { double f1, f2; @@ -205,8 +203,8 @@ static av_cold int init(AVFilterContext *ctx) } switch (s->function) { -case METADATAF_STRING: -s->compare = string; +case METADATAF_SAME_STR: +s->compare = same_str; break; case METADATAF_STARTS_WITH: s->compare = starts_with; @@ -289,7 +287,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) if (!s->value && e && e->value) { return
Re: [FFmpeg-devel] [PATCH] avcodec: Remove libutvideo support
On 2/10/2016 4:33 PM, Paul B Mahol wrote: > I'm fine by this, but it would be nice to have SIMD and 10 bit support > in decoder. I agree with the latter. I'd argue, however, we don't actually support 10-bit via the wrapper anyway, since you can't even build the library. ;) - Derek ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH] avutil/avstring: add a "ALL" entry and the possibility to negate matches to av_match_name()
This will extend the whitelist features to allow blacklisting individual protocols and to explicitly force everything to be enabled. Signed-off-by: Michael Niedermayer--- libavutil/avstring.c | 15 ++- libavutil/avstring.h |5 + 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/libavutil/avstring.c b/libavutil/avstring.c index 57fe74d..85fb3e9 100644 --- a/libavutil/avstring.c +++ b/libavutil/avstring.c @@ -326,13 +326,18 @@ int av_match_name(const char *name, const char *names) return 0; namelen = strlen(name); -while ((p = strchr(names, ','))) { +while (*names) { +int negate = '-' == *names; +p = strchr(names, ','); +if (!p) +p = names + strlen(names); +names += negate; len = FFMAX(p - names, namelen); -if (!av_strncasecmp(name, names, len)) -return 1; -names = p + 1; +if (!av_strncasecmp(name, names, len) || !strncmp("ALL", names, FFMAX(3, p - names))) +return !negate; +names = p + (*p == ','); } -return !av_strcasecmp(name, names); +return 0; } int av_utf8_decode(int32_t *codep, const uint8_t **bufp, const uint8_t *buf_end, diff --git a/libavutil/avstring.h b/libavutil/avstring.h index a46d012..ea08d4f 100644 --- a/libavutil/avstring.h +++ b/libavutil/avstring.h @@ -284,6 +284,11 @@ const char *av_dirname(char *path); /** * Match instances of a name in a comma-separated list of names. + * List entries are checked from 0 to the end of the names list, + * the first match ends further proessing. If a entry prefixed with '-' + * matches than 0 is returned. the "ALL" list entry is considered to + * match all names. + * * @param name Name to look for. * @param names List of names. * @return 1 on match, 0 otherwise. -- 1.7.9.5 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] List of FFmpeg API changes
10.02.2016, 21:21, "Nicolas George": > Le nonidi 19 pluviôse, an CCXXIV, Ponomarenko Andrey a écrit : >> I continue maintaining list of API changes in FFmpeg here: >> http://abi-laboratory.pro/tracker/timeline/ffmpeg/ > > Interesting. Out of curiosity, is it automated? If so, how do you handle > changes in structure fields, especially for parts of the structure that are > marked public versus private in the documentation? > Hello Nicolas, The analysis is automated with the help of the ABI Tracker tool: https://github.com/lvc/abi-tracker The tool checks all symbols and data types declared in public headers only (installed by `make install`). The identifying of the private part in public C-header files should be done manually for now. The private part (private headers, symbols, types and fields) should be described in the profile to regenerate public ABI report. May be we can automate this by analysis of docs or code annotations in future. The report for ffmpeg is not cleared from private ABI changes yet. I'll try to do this soon. Any help with identifying of false positives in the report is very welcome. Thank you. ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH 2/4] avfilter/f_metadata: add starts_with string function
Signed-off-by: Tobias Rapp--- doc/filters.texi | 4 libavfilter/f_metadata.c | 10 ++ 2 files changed, 14 insertions(+) diff --git a/doc/filters.texi b/doc/filters.texi index 6c5003f..0b874b2 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -8500,6 +8500,10 @@ Can be one of following: Values are interpreted as strings, returns true if @code{value} is same as metadata value up to N chars as set in @code{length} option. +@item starts_with +Values are interpreted as strings, returns true if metadata value starts with +the @code{value} option string. + @item less Values are interpreted as floats, returns true if metadata value is less than @code{value}. diff --git a/libavfilter/f_metadata.c b/libavfilter/f_metadata.c index e0ea30b..20681c5 100644 --- a/libavfilter/f_metadata.c +++ b/libavfilter/f_metadata.c @@ -49,6 +49,7 @@ enum MetadataMode { enum MetadataFunction { METADATAF_STRING, +METADATAF_STARTS_WITH, METADATAF_LESS, METADATAF_EQUAL, METADATAF_GREATER, @@ -98,6 +99,7 @@ static const AVOption filt_name##_options[] = { \ { "value", "set metadata value", OFFSET(value), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, FLAGS }, \ { "function", "function for comparing values", OFFSET(function), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, METADATAF_NB-1, FLAGS, "function" }, \ { "string", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_STRING }, 0, 3, FLAGS, "function" }, \ +{ "starts_with", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_STARTS_WITH }, 0, 0, FLAGS, "function" }, \ { "less",NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_LESS}, 0, 3, FLAGS, "function" }, \ { "equal", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_EQUAL }, 0, 3, FLAGS, "function" }, \ { "greater", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_GREATER }, 0, 3, FLAGS, "function" }, \ @@ -112,6 +114,11 @@ static int string(MetadataContext *s, const char *value1, const char *value2, si return !strncmp(value1, value2, length); } +static int starts_with(MetadataContext *s, const char *value1, const char *value2, size_t length) +{ +return !strncmp(value1, value2, strlen(value2)); +} + static int equal(MetadataContext *s, const char *value1, const char *value2, size_t length) { float f1, f2; @@ -175,6 +182,9 @@ static av_cold int init(AVFilterContext *ctx) case METADATAF_STRING: s->compare = string; break; +case METADATAF_STARTS_WITH: + s->compare = starts_with; + break; case METADATAF_LESS: s->compare = less; break; -- 1.9.1 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH 3/4] avfilter/f_metadata: add support for file output
Signed-off-by: Tobias Rapp--- doc/filters.texi | 6 + libavfilter/f_metadata.c | 66 2 files changed, 67 insertions(+), 5 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index 0b874b2..8264498 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -8530,6 +8530,12 @@ Float representation of @code{value} from metadata key. @item VALUE2 Float representation of @code{value} as supplied by user in @code{value} option. @end table + +@item file +If specified in @code{print} mode, output is written to the named file. When +filename equals "-" data is written to standard output. +If @code{file} option is not set, output is written to the log with AV_LOG_INFO +loglevel. @end table @subsection Examples diff --git a/libavfilter/f_metadata.c b/libavfilter/f_metadata.c index 20681c5..2cfe29b 100644 --- a/libavfilter/f_metadata.c +++ b/libavfilter/f_metadata.c @@ -82,8 +82,12 @@ typedef struct MetadataContext { AVExpr *expr; double var_values[VAR_VARS_NB]; +FILE *file; +char *file_str; + int (*compare)(struct MetadataContext *s, const char *value1, const char *value2, size_t length); +void (*print)(AVFilterContext *ctx, const char *msg, ...) av_printf_format(2, 3); } MetadataContext; #define OFFSET(x) offsetof(MetadataContext, x) @@ -106,6 +110,7 @@ static const AVOption filt_name##_options[] = { \ { "expr",NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_EXPR}, 0, 3, FLAGS, "function" }, \ { "expr", "set expression for expr function", OFFSET(expr_str), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, FLAGS }, \ { "length", "compare up to N chars for string function", OFFSET(length), AV_OPT_TYPE_INT,{.i64 = INT_MAX }, 1, INT_MAX, FLAGS }, \ +{ "file", "set file where to print metadata information", OFFSET(file_str), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS }, \ { NULL }\ } @@ -162,6 +167,27 @@ static int parse_expr(MetadataContext *s, const char *value1, const char *value2 return av_expr_eval(s->expr, s->var_values, NULL); } +static void print_log(AVFilterContext *ctx, const char *msg, ...) +{ +va_list argument_list; + +va_start(argument_list, msg); +if (msg) +av_vlog(ctx, AV_LOG_INFO, msg, argument_list); +va_end(argument_list); +} + +static void print_file(AVFilterContext *ctx, const char *msg, ...) +{ +MetadataContext *s = ctx->priv; +va_list argument_list; + +va_start(argument_list, msg); +if (msg) +vfprintf(s->file, msg, argument_list); +va_end(argument_list); +} + static av_cold int init(AVFilterContext *ctx) { MetadataContext *s = ctx->priv; @@ -213,9 +239,37 @@ static av_cold int init(AVFilterContext *ctx) } } +if (s->file_str) { +if (!strcmp(s->file_str, "-")) { +s->file = stdout; +} else { +s->file = fopen(s->file_str, "w"); +if (!s->file) { +int err = AVERROR(errno); +char buf[128]; +av_strerror(err, buf, sizeof(buf)); +av_log(ctx, AV_LOG_ERROR, "Could not open file %s: %s\n", + s->file_str, buf); +return err; +} +} + s->print = print_file; +} else { + s->print = print_log; +} + return 0; } +static av_cold void uninit(AVFilterContext *ctx) +{ +MetadataContext *s = ctx->priv; + +if (s->file && s->file != stdout) +fclose(s->file); +s->file = NULL; +} + static int filter_frame(AVFilterLink *inlink, AVFrame *frame) { AVFilterContext *ctx = inlink->dst; @@ -255,14 +309,14 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) break; case METADATA_PRINT: if (!s->key && e) { -av_log(ctx, AV_LOG_INFO, "frame %"PRId64" pts %"PRId64"\n", inlink->frame_count, frame->pts); -av_log(ctx, AV_LOG_INFO, "%s=%s\n", e->key, e->value); +s->print(ctx, "frame %"PRId64" pts %"PRId64"\n", inlink->frame_count, frame->pts); +s->print(ctx, "%s=%s\n", e->key, e->value); while ((e = av_dict_get(metadata, "", e, AV_DICT_IGNORE_SUFFIX)) != NULL) { -av_log(ctx, AV_LOG_INFO, "%s=%s\n", e->key, e->value); +s->print(ctx, "%s=%s\n", e->key, e->value); } } else if (e && e->value && (!s->value || (e->value && s->compare(s, e->value, s->value, s->length { -av_log(ctx, AV_LOG_INFO, "frame %"PRId64" pts %"PRId64"\n", inlink->frame_count, frame->pts); -av_log(ctx, AV_LOG_INFO, "%s=%s\n", s->key, e->value); +s->print(ctx, "frame %"PRId64" pts %"PRId64"\n", inlink->frame_count, frame->pts); +s->print(ctx, "%s=%s\n", s->key, e->value); }
[FFmpeg-devel] [PATCH 4/4] avfilter/f_metadata: whitespace clean-up
Signed-off-by: Tobias Rapp--- libavfilter/f_metadata.c | 16 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/libavfilter/f_metadata.c b/libavfilter/f_metadata.c index 2cfe29b..957c534 100644 --- a/libavfilter/f_metadata.c +++ b/libavfilter/f_metadata.c @@ -91,8 +91,8 @@ typedef struct MetadataContext { } MetadataContext; #define OFFSET(x) offsetof(MetadataContext, x) -#define DEFINE_OPTIONS(filt_name, FLAGS)\ -static const AVOption filt_name##_options[] = { \ +#define DEFINE_OPTIONS(filt_name, FLAGS) \ +static const AVOption filt_name##_options[] = { \ { "mode", "set a mode of operation", OFFSET(mode), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, METADATA_NB-1, FLAGS, "mode" }, \ { "select", "select frame",0, AV_OPT_TYPE_CONST, {.i64 = METADATA_SELECT }, 0, 0, FLAGS, "mode" }, \ { "add","add new metadata",0, AV_OPT_TYPE_CONST, {.i64 = METADATA_ADD },0, 0, FLAGS, "mode" }, \ @@ -102,16 +102,16 @@ static const AVOption filt_name##_options[] = { \ { "key", "set metadata key", OFFSET(key),AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, FLAGS }, \ { "value", "set metadata value", OFFSET(value), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, FLAGS }, \ { "function", "function for comparing values", OFFSET(function), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, METADATAF_NB-1, FLAGS, "function" }, \ -{ "string", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_STRING }, 0, 3, FLAGS, "function" }, \ +{ "string", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_STRING }, 0, 3, FLAGS, "function" }, \ { "starts_with", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_STARTS_WITH }, 0, 0, FLAGS, "function" }, \ -{ "less",NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_LESS}, 0, 3, FLAGS, "function" }, \ -{ "equal", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_EQUAL }, 0, 3, FLAGS, "function" }, \ -{ "greater", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_GREATER }, 0, 3, FLAGS, "function" }, \ -{ "expr",NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_EXPR}, 0, 3, FLAGS, "function" }, \ +{ "less",NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_LESS }, 0, 3, FLAGS, "function" }, \ +{ "equal", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_EQUAL }, 0, 3, FLAGS, "function" }, \ +{ "greater", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_GREATER }, 0, 3, FLAGS, "function" }, \ +{ "expr",NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_EXPR }, 0, 3, FLAGS, "function" }, \ { "expr", "set expression for expr function", OFFSET(expr_str), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, FLAGS }, \ { "length", "compare up to N chars for string function", OFFSET(length), AV_OPT_TYPE_INT,{.i64 = INT_MAX }, 1, INT_MAX, FLAGS }, \ { "file", "set file where to print metadata information", OFFSET(file_str), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS }, \ -{ NULL }\ +{ NULL } \ } static int string(MetadataContext *s, const char *value1, const char *value2, size_t length) -- 1.9.1 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH 1/4] avfilter/f_metadata: avoid float rounding problems
Signed-off-by: Tobias Rapp--- libavfilter/f_metadata.c | 8 +--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/libavfilter/f_metadata.c b/libavfilter/f_metadata.c index 40ab6bb..e0ea30b 100644 --- a/libavfilter/f_metadata.c +++ b/libavfilter/f_metadata.c @@ -23,6 +23,8 @@ * filter for manipulating frame metadata */ +#include + #include "libavutil/avassert.h" #include "libavutil/avstring.h" #include "libavutil/eval.h" @@ -117,7 +119,7 @@ static int equal(MetadataContext *s, const char *value1, const char *value2, siz if (sscanf(value1, "%f", ) + sscanf(value2, "%f", ) != 2) return 0; -return f1 == f2; +return fabsf(f1 - f2) < FLT_EPSILON; } static int less(MetadataContext *s, const char *value1, const char *value2, size_t length) @@ -127,7 +129,7 @@ static int less(MetadataContext *s, const char *value1, const char *value2, size if (sscanf(value1, "%f", ) + sscanf(value2, "%f", ) != 2) return 0; -return f1 < f2; +return (f1 - f2) < FLT_EPSILON; } static int greater(MetadataContext *s, const char *value1, const char *value2, size_t length) @@ -137,7 +139,7 @@ static int greater(MetadataContext *s, const char *value1, const char *value2, s if (sscanf(value1, "%f", ) + sscanf(value2, "%f", ) != 2) return 0; -return f1 > f2; +return (f2 - f1) < FLT_EPSILON; } static int parse_expr(MetadataContext *s, const char *value1, const char *value2, size_t length) -- 1.9.1 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH] doc/protocols: document protocol_whitelist
Signed-off-by: Michael Niedermayer--- doc/protocols.texi | 16 1 file changed, 16 insertions(+) diff --git a/doc/protocols.texi b/doc/protocols.texi index 05c4bdb..f790351 100644 --- a/doc/protocols.texi +++ b/doc/protocols.texi @@ -1,3 +1,19 @@ +@chapter Protocol Options +@c man begin PROTOCOL OPTIONS + +The libavformat library provides some generic global options, which +can be set on all the protocols. In addition each protocol may support +so-called private options, which are specific for that component. + +The list of supported options follows: + +@table @option +@item protocol_whitelist @var{list} (@emph{input}) +"," separated List of allowed protocols. +@end table + +@c man end PROTOCOL OPTIONS + @chapter Protocols @c man begin PROTOCOLS -- 1.7.9.5 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 4/4] avfilter/f_metadata: whitespace clean-up
On 2/11/16, Tobias Rappwrote: > Signed-off-by: Tobias Rapp > --- > libavfilter/f_metadata.c | 16 > 1 file changed, 8 insertions(+), 8 deletions(-) > Patches LGTM. Removed tabs from patches, gonna apply it soon. ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 4/4] avfilter/f_metadata: whitespace clean-up
On 2/11/16, Tobias Rappwrote: > On 11.02.2016 14:12, Paul B Mahol wrote: >> On 2/11/16, Tobias Rapp wrote: >>> Signed-off-by: Tobias Rapp >>> --- >>> libavfilter/f_metadata.c | 16 >>> 1 file changed, 8 insertions(+), 8 deletions(-) >>> >> >> Patches LGTM. >> >> Removed tabs from patches, gonna apply it soon. > > Sorry for the tabs, I forgot to add "set expandtab" in .vimrc on my machine. > > I guess after patch #2 the "string" function can be reduced to check for > full string match only and doesn't need "length" anymore? If you agree > what about renaming "string" to "same_str"? OK, will do it. ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 4/4] avfilter/f_metadata: whitespace clean-up
On 11.02.2016 15:00, Paul B Mahol wrote: On 2/11/16, Tobias Rappwrote: On 11.02.2016 14:12, Paul B Mahol wrote: On 2/11/16, Tobias Rapp wrote: Signed-off-by: Tobias Rapp --- libavfilter/f_metadata.c | 16 1 file changed, 8 insertions(+), 8 deletions(-) Patches LGTM. Removed tabs from patches, gonna apply it soon. Sorry for the tabs, I forgot to add "set expandtab" in .vimrc on my machine. I guess after patch #2 the "string" function can be reduced to check for full string match only and doesn't need "length" anymore? If you agree what about renaming "string" to "same_str"? OK, will do it. I didn't intend to assign the patch writing task to you, just wanted to know your opinion. ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 4/4] avfilter/f_metadata: whitespace clean-up
On 2/11/16, Tobias Rappwrote: > On 11.02.2016 15:00, Paul B Mahol wrote: >> On 2/11/16, Tobias Rapp wrote: >>> On 11.02.2016 14:12, Paul B Mahol wrote: On 2/11/16, Tobias Rapp wrote: > Signed-off-by: Tobias Rapp > --- >libavfilter/f_metadata.c | 16 >1 file changed, 8 insertions(+), 8 deletions(-) > Patches LGTM. Removed tabs from patches, gonna apply it soon. >>> >>> Sorry for the tabs, I forgot to add "set expandtab" in .vimrc on my >>> machine. >>> >>> I guess after patch #2 the "string" function can be reduced to check for >>> full string match only and doesn't need "length" anymore? If you agree >>> what about renaming "string" to "same_str"? >> >> OK, will do it. > > I didn't intend to assign the patch writing task to you, just wanted to > know your opinion. If you want to write than feel free to do it. > ___ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] doc/protocols: document protocol_whitelist
On Thu, 11 Feb 2016 13:12:14 +0100 Michael Niedermayerwrote: > Signed-off-by: Michael Niedermayer > --- > doc/protocols.texi | 16 > 1 file changed, 16 insertions(+) > > diff --git a/doc/protocols.texi b/doc/protocols.texi > index 05c4bdb..f790351 100644 > --- a/doc/protocols.texi > +++ b/doc/protocols.texi > @@ -1,3 +1,19 @@ > +@chapter Protocol Options > +@c man begin PROTOCOL OPTIONS > + > +The libavformat library provides some generic global options, which > +can be set on all the protocols. In addition each protocol may support > +so-called private options, which are specific for that component. > + > +The list of supported options follows: > + > +@table @option > +@item protocol_whitelist @var{list} (@emph{input}) > +"," separated List of allowed protocols. > +@end table > + > +@c man end PROTOCOL OPTIONS > + > @chapter Protocols > @c man begin PROTOCOLS > This doesn't say how to disable/enable all, and what is the default. ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH 4/4] avfilter/f_metadata: whitespace clean-up
On 11.02.2016 14:12, Paul B Mahol wrote: On 2/11/16, Tobias Rappwrote: Signed-off-by: Tobias Rapp --- libavfilter/f_metadata.c | 16 1 file changed, 8 insertions(+), 8 deletions(-) Patches LGTM. Removed tabs from patches, gonna apply it soon. Sorry for the tabs, I forgot to add "set expandtab" in .vimrc on my machine. I guess after patch #2 the "string" function can be reduced to check for full string match only and doesn't need "length" anymore? If you agree what about renaming "string" to "same_str"? Regards, Tobias ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] avcodec/cfhd: Check the number of tag/value pairs
On Fri, Feb 12, 2016 at 12:01:16AM +, Kieran Kunhya wrote: > On Thu, 11 Feb 2016 at 21:12 Michael Niedermayer> wrote: > > > Fixes potentially long loop > > Fixes: CID1351382/11 > > > > Signed-off-by: Michael Niedermayer > > --- > > libavcodec/cfhd.c |5 + > > 1 file changed, 5 insertions(+) > > > > diff --git a/libavcodec/cfhd.c b/libavcodec/cfhd.c > > index 2436aae..5ecfcef 100644 > > --- a/libavcodec/cfhd.c > > +++ b/libavcodec/cfhd.c > > @@ -344,6 +344,11 @@ static int cfhd_decode(AVCodecContext *avctx, void > > *data, int *got_frame, > > break; > > } else if (tag == 2) { > > av_log(avctx, AV_LOG_DEBUG, "tag=2 header - skipping %i > > tag/value pairs\n", data); > > +if (data > bytestream2_get_bytes_left() / 4) { > > +av_log(avctx, AV_LOG_ERROR, "too many tag/value pairs > > (%d)\n", data); > > +ret = AVERROR_INVALIDDATA; > > +break; > > +} > > for (i = 0; i < data; i++) { > > uint16_t tag2 = bytestream2_get_be16(); > > uint16_t val2 = bytestream2_get_be16(); > > -- > > 1.7.9.5 > > > > ___ > > ffmpeg-devel mailing list > > ffmpeg-devel@ffmpeg.org > > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > > Ok applied thanks [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB I know you won't believe me, but the highest form of Human Excellence is to question oneself and others. -- Socrates signature.asc Description: Digital signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH 1/2] x86: add some more helper macros to check for slow cpuflags
Signed-off-by: James Almer--- libavutil/cpu_internal.h | 11 +++ libavutil/x86/cpu.h | 4 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/libavutil/cpu_internal.h b/libavutil/cpu_internal.h index 2105298..6c352ab 100644 --- a/libavutil/cpu_internal.h +++ b/libavutil/cpu_internal.h @@ -24,13 +24,16 @@ #define CPUEXT_SUFFIX(flags, suffix, cpuext)\ (HAVE_ ## cpuext ## suffix && ((flags) & AV_CPU_FLAG_ ## cpuext)) -#define CPUEXT_SUFFIX_FAST(flags, suffix, cpuext) \ +#define CPUEXT_SUFFIX_FAST2(flags, suffix, cpuext, slow_cpuext) \ (HAVE_ ## cpuext ## suffix && ((flags) & AV_CPU_FLAG_ ## cpuext) && \ - !((flags) & AV_CPU_FLAG_ ## cpuext ## SLOW)) + !((flags) & AV_CPU_FLAG_ ## slow_cpuext ## SLOW)) -#define CPUEXT_SUFFIX_SLOW(flags, suffix, cpuext) \ +#define CPUEXT_SUFFIX_SLOW2(flags, suffix, cpuext, slow_cpuext) \ (HAVE_ ## cpuext ## suffix && ((flags) & AV_CPU_FLAG_ ## cpuext) && \ - ((flags) & AV_CPU_FLAG_ ## cpuext ## SLOW)) + ((flags) & AV_CPU_FLAG_ ## slow_cpuext ## SLOW)) + +#define CPUEXT_SUFFIX_FAST(flags, suffix, cpuext) CPUEXT_SUFFIX_FAST2(flags, suffix, cpuext, cpuext) +#define CPUEXT_SUFFIX_SLOW(flags, suffix, cpuext) CPUEXT_SUFFIX_SLOW2(flags, suffix, cpuext, cpuext) #define CPUEXT(flags, cpuext) CPUEXT_SUFFIX(flags, , cpuext) #define CPUEXT_FAST(flags, cpuext) CPUEXT_SUFFIX_FAST(flags, , cpuext) diff --git a/libavutil/x86/cpu.h b/libavutil/x86/cpu.h index dc102c6..f171037 100644 --- a/libavutil/x86/cpu.h +++ b/libavutil/x86/cpu.h @@ -68,8 +68,12 @@ #define EXTERNAL_AVX_SLOW(flags)CPUEXT_SUFFIX_SLOW(flags, _EXTERNAL, AVX) #define EXTERNAL_XOP(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, XOP) #define EXTERNAL_FMA3(flags)CPUEXT_SUFFIX(flags, _EXTERNAL, FMA3) +#define EXTERNAL_FMA3_FAST(flags) CPUEXT_SUFFIX_FAST2(flags, _EXTERNAL, FMA3, AVX) +#define EXTERNAL_FMA3_SLOW(flags) CPUEXT_SUFFIX_SLOW2(flags, _EXTERNAL, FMA3, AVX) #define EXTERNAL_FMA4(flags)CPUEXT_SUFFIX(flags, _EXTERNAL, FMA4) #define EXTERNAL_AVX2(flags)CPUEXT_SUFFIX(flags, _EXTERNAL, AVX2) +#define EXTERNAL_AVX2_FAST(flags) CPUEXT_SUFFIX_FAST2(flags, _EXTERNAL, AVX2, AVX) +#define EXTERNAL_AVX2_SLOW(flags) CPUEXT_SUFFIX_SLOW2(flags, _EXTERNAL, AVX2, AVX) #define EXTERNAL_AESNI(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AESNI) #define INLINE_AMD3DNOW(flags) CPUEXT_SUFFIX(flags, _INLINE, AMD3DNOW) -- 2.7.0 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH 2/2] x86: use the new helper macros where useful
Signed-off-by: James Almer--- libavcodec/x86/hevcdsp_init.c | 11 ++- libavcodec/x86/huffyuvencdsp_mmx.c | 2 +- libavcodec/x86/jpeg2000dsp_init.c | 2 +- libavcodec/x86/mlpdsp_init.c| 2 +- libavcodec/x86/synth_filter_init.c | 2 +- libavcodec/x86/v210enc_init.c | 2 +- libavcodec/x86/vp9dsp_init.c| 2 +- libavcodec/x86/vp9dsp_init_16bpp.c | 2 +- libavcodec/x86/vp9dsp_init_16bpp_template.c | 2 +- libavutil/x86/float_dsp_init.c | 2 +- libavutil/x86/lls_init.c| 2 +- libswresample/x86/audio_convert_init.c | 2 +- libswresample/x86/resample_init.c | 2 +- 13 files changed, 22 insertions(+), 13 deletions(-) diff --git a/libavcodec/x86/hevcdsp_init.c b/libavcodec/x86/hevcdsp_init.c index 0de0163..09eb06d 100644 --- a/libavcodec/x86/hevcdsp_init.c +++ b/libavcodec/x86/hevcdsp_init.c @@ -753,6 +753,10 @@ void ff_hevc_dsp_init_x86(HEVCDSPContext *c, const int bit_depth) c->transform_add[3]= ff_hevc_transform_add32_8_avx; } if (EXTERNAL_AVX2(cpu_flags)) { +c->sao_band_filter[0] = ff_hevc_sao_band_filter_8_8_avx2; +c->sao_band_filter[1] = ff_hevc_sao_band_filter_16_8_avx2; +} +if (EXTERNAL_AVX2_FAST(cpu_flags)) { c->idct_dc[2] = ff_hevc_idct16x16_dc_8_avx2; c->idct_dc[3] = ff_hevc_idct32x32_dc_8_avx2; if (ARCH_X86_64) { @@ -897,7 +901,9 @@ void ff_hevc_dsp_init_x86(HEVCDSPContext *c, const int bit_depth) SAO_BAND_INIT(10, avx); } if (EXTERNAL_AVX2(cpu_flags)) { - +c->sao_band_filter[0] = ff_hevc_sao_band_filter_8_10_avx2; +} +if (EXTERNAL_AVX2_FAST(cpu_flags)) { c->idct_dc[2] = ff_hevc_idct16x16_dc_10_avx2; c->idct_dc[3] = ff_hevc_idct32x32_dc_10_avx2; if (ARCH_X86_64) { @@ -1095,6 +1101,9 @@ void ff_hevc_dsp_init_x86(HEVCDSPContext *c, const int bit_depth) SAO_BAND_INIT(12, avx); } if (EXTERNAL_AVX2(cpu_flags)) { +c->sao_band_filter[0] = ff_hevc_sao_band_filter_8_12_avx2; +} +if (EXTERNAL_AVX2_FAST(cpu_flags)) { c->idct_dc[2] = ff_hevc_idct16x16_dc_12_avx2; c->idct_dc[3] = ff_hevc_idct32x32_dc_12_avx2; diff --git a/libavcodec/x86/huffyuvencdsp_mmx.c b/libavcodec/x86/huffyuvencdsp_mmx.c index 0ba4358..9767b21 100644 --- a/libavcodec/x86/huffyuvencdsp_mmx.c +++ b/libavcodec/x86/huffyuvencdsp_mmx.c @@ -98,7 +98,7 @@ av_cold void ff_huffyuvencdsp_init_x86(HuffYUVEncDSPContext *c) c->diff_bytes = ff_diff_bytes_sse2; } -if (EXTERNAL_AVX2(cpu_flags)) { +if (EXTERNAL_AVX2_FAST(cpu_flags)) { c->diff_bytes = ff_diff_bytes_avx2; } } diff --git a/libavcodec/x86/jpeg2000dsp_init.c b/libavcodec/x86/jpeg2000dsp_init.c index 0dbd2db..baa8138 100644 --- a/libavcodec/x86/jpeg2000dsp_init.c +++ b/libavcodec/x86/jpeg2000dsp_init.c @@ -44,7 +44,7 @@ av_cold void ff_jpeg2000dsp_init_x86(Jpeg2000DSPContext *c) c->mct_decode[FF_DWT97] = ff_ict_float_avx; } -if (EXTERNAL_AVX2(cpu_flags)) { +if (EXTERNAL_AVX2_FAST(cpu_flags)) { c->mct_decode[FF_DWT53] = ff_rct_int_avx2; } } diff --git a/libavcodec/x86/mlpdsp_init.c b/libavcodec/x86/mlpdsp_init.c index e9d9b1b..7f5e6b1 100644 --- a/libavcodec/x86/mlpdsp_init.c +++ b/libavcodec/x86/mlpdsp_init.c @@ -199,6 +199,6 @@ av_cold void ff_mlpdsp_init_x86(MLPDSPContext *c) #endif if (ARCH_X86_64 && EXTERNAL_SSE4(cpu_flags)) c->mlp_rematrix_channel = ff_mlp_rematrix_channel_sse4; -if (ARCH_X86_64 && EXTERNAL_AVX2(cpu_flags) && cpu_flags & AV_CPU_FLAG_BMI2) +if (ARCH_X86_64 && EXTERNAL_AVX2_FAST(cpu_flags) && cpu_flags & AV_CPU_FLAG_BMI2) c->mlp_rematrix_channel = ff_mlp_rematrix_channel_avx2_bmi2; } diff --git a/libavcodec/x86/synth_filter_init.c b/libavcodec/x86/synth_filter_init.c index 0649ea2..9ef00cd 100644 --- a/libavcodec/x86/synth_filter_init.c +++ b/libavcodec/x86/synth_filter_init.c @@ -67,7 +67,7 @@ av_cold void ff_synth_filter_init_x86(SynthFilterContext *s) if (EXTERNAL_AVX_FAST(cpu_flags)) { s->synth_filter_float = synth_filter_avx; } -if (EXTERNAL_FMA3(cpu_flags) && !(cpu_flags & AV_CPU_FLAG_AVXSLOW)) { +if (EXTERNAL_FMA3_FAST(cpu_flags)) { s->synth_filter_float = synth_filter_fma3; } #endif /* HAVE_YASM */ diff --git a/libavcodec/x86/v210enc_init.c b/libavcodec/x86/v210enc_init.c index ee48e80..8abb152 100644 --- a/libavcodec/x86/v210enc_init.c +++ b/libavcodec/x86/v210enc_init.c @@ -45,7 +45,7 @@ av_cold void ff_v210enc_init_x86(V210EncContext *s) if (EXTERNAL_AVX(cpu_flags)) s->pack_line_8 = ff_v210_planar_pack_8_avx; -if (EXTERNAL_AVX2(cpu_flags)) { +if (EXTERNAL_AVX2_FAST(cpu_flags)) { s->pack_line_8 =
[FFmpeg-devel] [PATCH] avfilter/af_anequalizer: Avoid loss of precision when calculating nyquist frequency
Fixes: CID1351398 Fixes: CID1351400 Signed-off-by: Michael Niedermayer--- libavfilter/af_anequalizer.c |4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavfilter/af_anequalizer.c b/libavfilter/af_anequalizer.c index b646814..a344c77 100644 --- a/libavfilter/af_anequalizer.c +++ b/libavfilter/af_anequalizer.c @@ -610,7 +610,7 @@ static int config_input(AVFilterLink *inlink) } if (s->filters[s->nb_filters].freq < 0 || -s->filters[s->nb_filters].freq > inlink->sample_rate / 2) +s->filters[s->nb_filters].freq > inlink->sample_rate / 2.0) s->filters[s->nb_filters].ignore = 1; if (s->filters[s->nb_filters].channel < 0 || @@ -645,7 +645,7 @@ static int process_command(AVFilterContext *ctx, const char *cmd, const char *ar if (filter < 0 || filter >= s->nb_filters) return AVERROR(EINVAL); -if (freq < 0 || freq > inlink->sample_rate / 2) +if (freq < 0 || freq > inlink->sample_rate / 2.0) return AVERROR(EINVAL); s->filters[filter].freq = freq; -- 1.7.9.5 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [patch] gdigrab-mouse-dpi-awareness
On 2016-02-11 23:19, Γιώργος Μεταξάκης wrote: > Subject: [PATCH] mouse dpi awareness > > --- > libavdevice/gdigrab.c | 28 +++- > 1 file changed, 15 insertions(+), 13 deletions(-) > > diff --git a/libavdevice/gdigrab.c b/libavdevice/gdigrab.c > index 4428a34..60f184e 100644 > --- a/libavdevice/gdigrab.c > +++ b/libavdevice/gdigrab.c > @@ -71,6 +71,8 @@ struct gdigrab { > > #define REGION_WND_BORDER 3 > > + > + > /** > * Callback to handle Windows messages for the region outline window. > * Please don't add random whitespace changes. > @@ -235,8 +237,7 @@ gdigrab_read_header(AVFormatContext *s1) > AVStream *st = NULL; > > int bpp; > -int vertres; > -int desktopvertres; > + > RECT virtual_rect; > RECT clip_rect; > BITMAP bmp; > @@ -279,8 +280,8 @@ gdigrab_read_header(AVFormatContext *s1) > GetClientRect(hwnd, _rect); > } else { > /* desktop -- get the right height and width for scaling DPI */ > -vertres = GetDeviceCaps(source_hdc, VERTRES); > -desktopvertres = GetDeviceCaps(source_hdc, DESKTOPVERTRES); > +int vertres = GetDeviceCaps(source_hdc, VERTRES); > +int desktopvertres = GetDeviceCaps(source_hdc, DESKTOPVERTRES); > virtual_rect.left = GetSystemMetrics(SM_XVIRTUALSCREEN); > virtual_rect.top = GetSystemMetrics(SM_YVIRTUALSCREEN); > virtual_rect.right = (virtual_rect.left + > GetSystemMetrics(SM_CXVIRTUALSCREEN)) * desktopvertres / vertres; Is this change just moving the declaration? > @@ -431,8 +432,10 @@ error: > static void paint_mouse_pointer(AVFormatContext *s1, struct gdigrab *gdigrab) > { > CURSORINFO ci = {0}; > + int vertres = GetDeviceCaps(gdigrab->source_hdc, VERTRES); > +int desktopvertres = GetDeviceCaps(gdigrab->source_hdc, DESKTOPVERTRES); > > -#define CURSOR_ERROR(str) \ > + #define CURSOR_ERROR(str) \ > if (!gdigrab->cursor_error_printed) { \ > WIN32_API_ERROR(str); \ > gdigrab->cursor_error_printed = 1; \ > @@ -459,12 +462,7 @@ static void paint_mouse_pointer(AVFormatContext *s1, > struct gdigrab *gdigrab) > icon = CopyCursor(LoadCursor(NULL, IDC_ARROW)); > } > > -if (!GetIconInfo(icon, )) { > -CURSOR_ERROR("Could not get icon info"); > -goto icon_error; > -} > - > -pos.x = ci.ptScreenPos.x - clip_rect.left - info.xHotspot; > +pos.x = ci.ptScreenPos.x - clip_rect.left - info.xHotspot; > pos.y = ci.ptScreenPos.y - clip_rect.top - info.yHotspot; > > if (hwnd) { No Tabs! Why did you remove the GetIconInfo() call? You need that to fill the info data structure you use right here. > @@ -478,7 +476,11 @@ static void paint_mouse_pointer(AVFormatContext *s1, > struct gdigrab *gdigrab) > goto icon_error; > } > } > - > + > + //that would keep the correct location of mouse with hidpi > screens > +pos.x = pos.x * desktopvertres / vertres; > +pos.y = pos.y * desktopvertres / vertres; > + > av_log(s1, AV_LOG_DEBUG, "Cursor pos (%li,%li) -> (%li,%li)\n", > ci.ptScreenPos.x, ci.ptScreenPos.y, pos.x, pos.y); > You probably want to round that division and add some brackets so the division happens last. The change you want to make is probably right but I would have to check the docs before signing off. > @@ -639,4 +641,4 @@ AVInputFormat ff_gdigrab_demuxer = { > .read_close = gdigrab_read_close, > .flags = AVFMT_NOFILE, > .priv_class = _class, > -}; > +}; > \ No newline at end of file I think you need a better editor. What were the symptoms of the problem before your fix? Was the cursor being drawn too large or to small? The second last chunk suggests it was in the wrong position. signature.asc Description: OpenPGP digital signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH] avcodec/cfhd: Fix errors with valid files.
--- libavcodec/cfhd.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libavcodec/cfhd.c b/libavcodec/cfhd.c index 0773ffa..6dc22ca 100644 --- a/libavcodec/cfhd.c +++ b/libavcodec/cfhd.c @@ -313,7 +313,7 @@ static int cfhd_decode(AVCodecContext *avctx, void *data, int *got_frame, s->plane[s->channel_num].band[0][0].width = data; s->plane[s->channel_num].band[0][0].stride = data; av_log(avctx, AV_LOG_DEBUG, "Lowpass width %"PRIu16"\n", data); -if (data < 2 || (data & 1) || data > s->plane[s->channel_num].band[0][0].a_width) { +if (data < 2 || data > s->plane[s->channel_num].band[0][0].a_width) { av_log(avctx, AV_LOG_ERROR, "Invalid lowpass width\n"); ret = AVERROR(EINVAL); break; @@ -354,7 +354,7 @@ static int cfhd_decode(AVCodecContext *avctx, void *data, int *got_frame, s->plane[s->channel_num].band[s->level][s->subband_num].width = data; s->plane[s->channel_num].band[s->level][s->subband_num].stride = FFALIGN(data, 8); av_log(avctx, AV_LOG_DEBUG, "Highpass width %i channel %i level %i subband %i\n", data, s->channel_num, s->level, s->subband_num); -if (data < 2 || (data & 1)) { +if (data < 2) { av_log(avctx, AV_LOG_ERROR, "Invalid highpass width\n"); ret = AVERROR(EINVAL); break; @@ -371,7 +371,7 @@ static int cfhd_decode(AVCodecContext *avctx, void *data, int *got_frame, s->plane[s->channel_num].band[s->level][s->subband_num].width = data; s->plane[s->channel_num].band[s->level][s->subband_num].stride = FFALIGN(data, 8); av_log(avctx, AV_LOG_DEBUG, "Highpass width2 %i\n", data); -if (data < 2 || (data & 1)) { +if (data < 2) { av_log(avctx, AV_LOG_ERROR, "Invalid highpass width2\n"); ret = AVERROR(EINVAL); break; -- 1.9.1 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH] doc/filters: add geq diagonal split screen example
Signed-off-by: Lou Logan--- doc/filters.texi | 7 +++ 1 file changed, 7 insertions(+) diff --git a/doc/filters.texi b/doc/filters.texi index 35f5050..4e34b98 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -7485,6 +7485,13 @@ by the linear gradient: @example ffmpeg -i input.mp4 -filter_complex "geq=lum=255*(Y/H),format=gray[grad];[0:v]boxblur=4[blur];[blur][grad]alphamerge[alpha];[0:v][alpha]overlay" output.mp4 @end example + +@item +Diagonal split screen to compare filter effect: +@example +ffmpeg -i input -filter_complex "[0:v]geq=lum=if(gt(X\,Y*(W/H))\,255),format=gray[alpha];[0:v][alpha]alphamerge,curves=preset=color_negative[filtered];[0:v][filtered]overlay" output +@end example + @end itemize @section gradfun -- 2.7.0 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] avcodec/cfhd: Fix errors with valid files.
On Fri, Feb 12, 2016 at 12:26:48AM +, Kieran Kunhya wrote: > --- > libavcodec/cfhd.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) if thats what valid files use then this pretty much must be correct [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB it is not once nor twice but times without number that the same ideas make their appearance in the world. -- Aristotle signature.asc Description: Digital signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] avcodec: only warn about hwaccel with frame threads
On Mon, Feb 08, 2016 at 04:35:05PM -0500, Ronald S. Bultje wrote: > Hi, > > On Tue, Jan 26, 2016 at 5:23 PM, Andreas Cadhalpun < > andreas.cadhal...@googlemail.com> wrote: > > > On 25.01.2016 00:53, Hendrik Leppkes wrote: > > > On Sat, Jan 23, 2016 at 3:52 PM, Andreas Cadhalpun > > >wrote: > > >> On 23.01.2016 15:10, Hendrik Leppkes wrote: > > >>> On Sat, Jan 23, 2016 at 2:45 PM, Ronald S. Bultje > > wrote: > > Both of you keep shouting from one side of the room to the other > > without > > trying to actually converge to a point that might somehow be mutually > > acceptable. I'm getting very grumbly here. > > > > >>> > > >>> I'm not trying to be unreasonable here, all I'm asking for at this > > >>> point is to make sure the new vp9 hwaccel doesn't break spectacularly > > >>> when MT is turned on before its allowed back. > > >> > > >> OK, that would be fine with me. > > >> > > >> Do you agree that the attached patch is sufficient for this? > > >> > > > > > > YUV420P will not remain the only format available for hwaccel, I > > > already have some work pending to allow Profile2/10-bit as well, so > > > the check should be further out. > > > > OK. Though if Ronald manages to (hopefully soon) find a solution for > > automatically throttling the hwaccel threads to 1, this check will be > > removed again anyway. > > > > > It would also log every time the function executes, no matter if > > > hwaccel is requested or not, unfortunately I don't see a way to fix > > > that nicely since the decoder doesn't know if the user is going to > > > activate hwaccel. > > > > Indeed. But since that is anyway logged in setup_hwaccel there > > is not really much need for another warning here. I've thus reduced > > the log level to verbose. Attached is an updated patch. > > > See attached for what I had in mind, and along with this you can then > remove the current blocking code in libavcodec/utils.c which you're > complaining about. > > So, this _sometimes_ works for dxva2/vp9, but it still fails sometimes. > Hendrik thinks it's related to dxva2 generic buffer handling, not > vp9-related anymore, and in line with that, it's indeed true that > h264/dxva2 hwaccel+threading fails also. vdpau hwaccel+mt works, but has no > vp9 so we can't confirm if vp9 is fine here. I haven't found anyone with > vaapi vp9 yet... > > Hendrik is not against applying this, but the question is whether it's > helpful, because if you remove the libavcodec/utils.c block, mt+hwaccel for > dxva2 will fail again (easily reproduced with make THREADS=4 HWACCEL=dxva2 > fate-h264/vp9 -k). Hendrik suggested possibly putting locks around the > dxva2 picture pool, but that's stupid. Also, this whole setup still doesn't > allow much room for adaptive fallback and delayed hw decoding (i.e. having > multiple buffers in the hw queue), since the hw is disabled without flush > as soon as we switch between hw and fallback... > > Ronald > vp9.c | 60 +++- > 1 file changed, 35 insertions(+), 25 deletions(-) > 84b2a1d29ea965ee24ef82b0de63c0f6b91e9af6 > 0001-vp9-only-call-ff_get_format-on-stream-format-changes.patch > From ec0a1e148d60a203a5bb82a8e9d7d3b97c5503dd Mon Sep 17 00:00:00 2001 > From: "Ronald S. Bultje" > Date: Mon, 8 Feb 2016 16:29:09 -0500 > Subject: [PATCH] vp9: only call ff_get_format on stream format changes. > > In practice, this means we don't call it N times for N-threaded decoding. iam in favor of this patch multiple calls to ff_get_format() has lead to complaints in the past from developers of multiple applications IIRC Also we should get some solution into git for FFmpeg 3.0 for the hwaccel-mt case. [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB The greatest way to live with honor in this world is to be what we pretend to be. -- Socrates signature.asc Description: Digital signature ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH 2/2] avfilter/vf_zoompan: Initialize ret
Silences: CID1351394 Signed-off-by: Michael Niedermayer--- libavfilter/vf_zoompan.c |2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavfilter/vf_zoompan.c b/libavfilter/vf_zoompan.c index 8d0103b..99a1a34 100644 --- a/libavfilter/vf_zoompan.c +++ b/libavfilter/vf_zoompan.c @@ -266,7 +266,7 @@ static int request_frame(AVFilterLink *outlink) ZPContext *s = ctx->priv; AVFrame *in = s->in; double zoom=1, dx=0, dy=0; -int ret; +int ret = -1; if (in) { ret = output_single_frame(ctx, in, s->var_values, s->current_frame, -- 1.7.9.5 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [patch] gdigrab-mouse-dpi-awareness
On Thu, Feb 11, 2016 at 11:19 PM, Γιώργος Μεταξάκηςwrote: > Hello I have tried to send that email with git send-email but failed, so i > will send the patch here, i hope it is okay. > > I am an engineer at Jumpshare (https://jumpshare.com) working on the native > file sharing app for Windows. We were using gdigrab device for screen > capture, we played around a bit and realized it wasn't working on high dpi > displays, so we fixed it. High DPI displays are getting more common so we > feel happy to contribute this fix to FFmpeg. We hope it will get approved > soon. > > Let me know if you've any questions or feedback. I look forward to hearing > from you soon. > The patch contains a bunch of style errors which make it impossible to commit it as such right now - We generally do not allow tabs for indentation, or any form of trailing whitespace - It contains a few unrelated whitespace changes - Some of the changes seem unnecessary (ie. changing the scope of the variables in the first hunks), please try to create a patch as small as possible. Thank you for contributing. - Hendrik ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH 1/2] avfilter/vf_zoompan: Fix use of uninitialized variables
Fixes: CID1351392 Fixes: CID1351393 Fixes: CID1351395 Signed-off-by: Michael Niedermayer--- libavfilter/vf_zoompan.c |2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavfilter/vf_zoompan.c b/libavfilter/vf_zoompan.c index 8d640e7..8d0103b 100644 --- a/libavfilter/vf_zoompan.c +++ b/libavfilter/vf_zoompan.c @@ -265,7 +265,7 @@ static int request_frame(AVFilterLink *outlink) AVFilterContext *ctx = outlink->src; ZPContext *s = ctx->priv; AVFrame *in = s->in; -double zoom, dx, dy; +double zoom=1, dx=0, dy=0; int ret; if (in) { -- 1.7.9.5 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH] avfilter: add loop filters
Hi, patch attached. From 1fd9636e9040b2a6b321cdd16ebd392c8db2de1b Mon Sep 17 00:00:00 2001 From: Paul B MaholDate: Thu, 11 Feb 2016 22:05:54 +0100 Subject: [PATCH] avfilter: add loop filters Signed-off-by: Paul B Mahol --- libavfilter/Makefile | 2 + libavfilter/allfilters.c | 2 + libavfilter/f_loop.c | 220 +++ 3 files changed, 224 insertions(+) create mode 100644 libavfilter/f_loop.c diff --git a/libavfilter/Makefile b/libavfilter/Makefile index 8916588..35ac53a 100644 --- a/libavfilter/Makefile +++ b/libavfilter/Makefile @@ -38,6 +38,7 @@ OBJS-$(CONFIG_AGATE_FILTER) += af_agate.o OBJS-$(CONFIG_AINTERLEAVE_FILTER)+= f_interleave.o OBJS-$(CONFIG_ALIMITER_FILTER) += af_alimiter.o OBJS-$(CONFIG_ALLPASS_FILTER)+= af_biquads.o +OBJS-$(CONFIG_ALOOP_FILTER) += f_loop.o OBJS-$(CONFIG_AMERGE_FILTER) += af_amerge.o OBJS-$(CONFIG_AMETADATA_FILTER) += f_metadata.o OBJS-$(CONFIG_AMIX_FILTER) += af_amix.o @@ -180,6 +181,7 @@ OBJS-$(CONFIG_INTERLACE_FILTER) += vf_interlace.o OBJS-$(CONFIG_INTERLEAVE_FILTER) += f_interleave.o OBJS-$(CONFIG_KERNDEINT_FILTER) += vf_kerndeint.o OBJS-$(CONFIG_LENSCORRECTION_FILTER) += vf_lenscorrection.o +OBJS-$(CONFIG_LOOP_FILTER) += f_loop.o OBJS-$(CONFIG_LUT3D_FILTER) += vf_lut3d.o OBJS-$(CONFIG_LUT_FILTER)+= vf_lut.o OBJS-$(CONFIG_LUTRGB_FILTER) += vf_lut.o diff --git a/libavfilter/allfilters.c b/libavfilter/allfilters.c index fa7d304..6331fe5 100644 --- a/libavfilter/allfilters.c +++ b/libavfilter/allfilters.c @@ -58,6 +58,7 @@ void avfilter_register_all(void) REGISTER_FILTER(AINTERLEAVE,ainterleave,af); REGISTER_FILTER(ALIMITER, alimiter, af); REGISTER_FILTER(ALLPASS,allpass,af); +REGISTER_FILTER(ALOOP, aloop, af); REGISTER_FILTER(AMERGE, amerge, af); REGISTER_FILTER(AMETADATA, ametadata, af); REGISTER_FILTER(AMIX, amix, af); @@ -201,6 +202,7 @@ void avfilter_register_all(void) REGISTER_FILTER(INTERLEAVE, interleave, vf); REGISTER_FILTER(KERNDEINT, kerndeint, vf); REGISTER_FILTER(LENSCORRECTION, lenscorrection, vf); +REGISTER_FILTER(LOOP, loop, vf); REGISTER_FILTER(LUT3D, lut3d, vf); REGISTER_FILTER(LUT,lut,vf); REGISTER_FILTER(LUTRGB, lutrgb, vf); diff --git a/libavfilter/f_loop.c b/libavfilter/f_loop.c new file mode 100644 index 000..beef4fc --- /dev/null +++ b/libavfilter/f_loop.c @@ -0,0 +1,220 @@ +/* + * Copyright (c) 2016 Paul B Mahol + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libavutil/avassert.h" +#include "libavutil/fifo.h" +#include "libavutil/internal.h" +#include "libavutil/opt.h" +#include "avfilter.h" +#include "audio.h" +#include "formats.h" +#include "internal.h" +#include "video.h" + +typedef struct LoopContext { +const AVClass *class; + +AVFrame **frames; +int nb_frames; +int current_frame; +int64_t start_pts; +int64_t duration; + +int loop; +int size; +int64_t start; +} LoopContext; + +#define OFFSET(x) offsetof(LoopContext, x) +#define DEFINE_OPTIONS(filt_name, FLAGS) \ +static const AVOption filt_name##_options[] = { \ +{ "loop", "number of loops", OFFSET(loop), AV_OPT_TYPE_INT, {.i64 = 0 }, -1, INT_MAX, FLAGS }, \ +{ "size", "max number of frames to loop", OFFSET(size), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT16_MAX, FLAGS }, \ +{ "start", "set the loop start frame", OFFSET(start), AV_OPT_TYPE_INT64, {.i64 = 0 }, 0, INT64_MAX, FLAGS }, \ +{ NULL } \ +} + +static av_cold int init(AVFilterContext *ctx) +{ +LoopContext *s = ctx->priv; + +s->frames = av_calloc(s->size, sizeof(*s->frames)); +if (!s->frames) +return AVERROR(ENOMEM); + +return 0; +} + +static av_cold void uninit(AVFilterContext *ctx) +{ +LoopContext *s =
Re: [FFmpeg-devel] FFplay with 2 video streams in concurrent time
On Thu, 11 Feb 2016 07:56:48 +, Chau Pham wrote: > Anyway, I have found the way to play 2 video streams.. Thank you for sharing your solution. ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH] avcodec/cfhd: Check the number of tag/value pairs
Fixes potentially long loop Fixes: CID1351382/11 Signed-off-by: Michael Niedermayer--- libavcodec/cfhd.c |5 + 1 file changed, 5 insertions(+) diff --git a/libavcodec/cfhd.c b/libavcodec/cfhd.c index 2436aae..5ecfcef 100644 --- a/libavcodec/cfhd.c +++ b/libavcodec/cfhd.c @@ -344,6 +344,11 @@ static int cfhd_decode(AVCodecContext *avctx, void *data, int *got_frame, break; } else if (tag == 2) { av_log(avctx, AV_LOG_DEBUG, "tag=2 header - skipping %i tag/value pairs\n", data); +if (data > bytestream2_get_bytes_left() / 4) { +av_log(avctx, AV_LOG_ERROR, "too many tag/value pairs (%d)\n", data); +ret = AVERROR_INVALIDDATA; +break; +} for (i = 0; i < data; i++) { uint16_t tag2 = bytestream2_get_be16(); uint16_t val2 = bytestream2_get_be16(); -- 1.7.9.5 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [patch] gdigrab-mouse-dpi-awareness
Hello I have tried to send that email with git send-email but failed, so i will send the patch here, i hope it is okay. I am an engineer at Jumpshare (https://jumpshare.com) working on the native file sharing app for Windows. We were using gdigrab device for screen capture, we played around a bit and realized it wasn't working on high dpi displays, so we fixed it. High DPI displays are getting more common so we feel happy to contribute this fix to FFmpeg. We hope it will get approved soon. Let me know if you've any questions or feedback. I look forward to hearing from you soon. -- Metaksakis Georgios FORTH - ICS Work : (0030) 281 139 2583 Mobile : (0030) 697 369 3871 0001-mouse-dpi-awareness.patch Description: Binary data ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH v2 1/2] libavcodec/dnxhddec: refactor header prefix parsing
--- libavcodec/dnxhddata.c | 17 + libavcodec/dnxhddata.h | 11 +++ libavcodec/dnxhddec.c | 11 --- 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/libavcodec/dnxhddata.c b/libavcodec/dnxhddata.c index 82fbfdf..5b909b6 100644 --- a/libavcodec/dnxhddata.c +++ b/libavcodec/dnxhddata.c @@ -23,6 +23,13 @@ #include "dnxhddata.h" #include "libavutil/common.h" +static const uint8_t dnxhd_headers[DNXHD_HEADER_VERSIONS][5] = { +{ 0x00, 0x00, 0x02, 0x80, 0x01 }, +{ 0x00, 0x00, 0x02, 0x80, 0x02 }, +{ 0x00, 0x00, 0x02, 0x80, 0x03 }, +{ 0x00, 0x00, 0x03, 0x8C, 0x03 }, +}; + /* The quantization tables below are in zigzag order! */ /* Used in CID 1235, 1256, 1270 */ @@ -1102,6 +1109,16 @@ int avpriv_dnxhd_get_interlaced(int cid) return ff_dnxhd_cid_table[i].flags & DNXHD_INTERLACED ? 1 : 0; } +DNXHD_Header avpriv_dnxhd_parse_prefix(const uint8_t *buf) +{ + int i; + for (i = 0; i < DNXHD_HEADER_VERSIONS; i++) { +if (!memcmp(buf, dnxhd_headers[i], 5)) + return i; + } + return DNXHD_HEADER_UNKNOWN; +} + int ff_dnxhd_find_cid(AVCodecContext *avctx, int bit_depth) { int i, j; diff --git a/libavcodec/dnxhddata.h b/libavcodec/dnxhddata.h index d973888..b388df8 100644 --- a/libavcodec/dnxhddata.h +++ b/libavcodec/dnxhddata.h @@ -34,6 +34,16 @@ /** Indicate that a CIDEntry value must be read in the bitstream */ #define DNXHD_VARIABLE 0 +/** Known header versions */ +typedef enum { +DNXHD_HEADER_INITIAL= 0, +DNXHD_HEADER_444= 1, +DNXHD_HEADER_HR1= 2, +DNXHD_HEADER_HR2= 3, +DNXHD_HEADER_VERSIONS, +DNXHD_HEADER_UNKNOWN +} DNXHD_Header; + typedef struct CIDEntry { int cid; unsigned int width, height; @@ -61,5 +71,6 @@ void ff_dnxhd_print_profiles(AVCodecContext *avctx, int loglevel); int avpriv_dnxhd_get_frame_size(int cid); int avpriv_dnxhd_get_interlaced(int cid); +DNXHD_Header avpriv_dnxhd_parse_prefix(const uint8_t *buf); #endif /* AVCODEC_DNXHDDATA_H */ diff --git a/libavcodec/dnxhddec.c b/libavcodec/dnxhddec.c index 5c09c64..c111def 100644 --- a/libavcodec/dnxhddec.c +++ b/libavcodec/dnxhddec.c @@ -163,10 +163,6 @@ static int dnxhd_decode_header(DNXHDContext *ctx, AVFrame *frame, const uint8_t *buf, int buf_size, int first_field) { -static const uint8_t header_prefix[]= { 0x00, 0x00, 0x02, 0x80, 0x01 }; -static const uint8_t header_prefix444[] = { 0x00, 0x00, 0x02, 0x80, 0x02 }; -static const uint8_t header_prefixhr1[] = { 0x00, 0x00, 0x02, 0x80, 0x03 }; -static const uint8_t header_prefixhr2[] = { 0x00, 0x00, 0x03, 0x8C, 0x03 }; int i, cid, ret; int old_bit_depth = ctx->bit_depth, bitdepth; @@ -176,8 +172,9 @@ static int dnxhd_decode_header(DNXHDContext *ctx, AVFrame *frame, return AVERROR_INVALIDDATA; } -if (memcmp(buf, header_prefix, 5) && memcmp(buf, header_prefix444, 5) && -memcmp(buf, header_prefixhr1, 5) && memcmp(buf, header_prefixhr2, 5)) { +DNXHD_Header header_prefix = avpriv_dnxhd_parse_prefix(buf); + +if (header_prefix == DNXHD_HEADER_UNKNOWN) { av_log(ctx->avctx, AV_LOG_ERROR, "unknown header 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\n", buf[0], buf[1], buf[2], buf[3], buf[4]); @@ -279,7 +276,7 @@ static int dnxhd_decode_header(DNXHDContext *ctx, AVFrame *frame, ctx->bit_depth, ctx->mbaff, ctx->act); // Newer format supports variable mb_scan_index sizes -if (!memcmp(buf, header_prefixhr2, 5)) { +if (header_prefix == DNXHD_HEADER_HR2) { ctx->data_offset = 0x170 + (ctx->mb_height << 2); } else { if (ctx->mb_height > 68 || -- 2.4.1 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH v2 2/2] libavcodec/dnxhd_parser: add parser and probe support raw 444 and dnxhr formats
--- libavcodec/dnxhd_parser.c | 11 +++ libavformat/dnxhddec.c| 7 --- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/libavcodec/dnxhd_parser.c b/libavcodec/dnxhd_parser.c index fffb98f..96f6eff 100644 --- a/libavcodec/dnxhd_parser.c +++ b/libavcodec/dnxhd_parser.c @@ -25,8 +25,8 @@ */ #include "parser.h" - -#define DNXHD_HEADER_PREFIX 0x02800100 +#include "dnxhddata.h" +#include "libavutil/bswap.h" typedef struct { ParseContext pc; @@ -39,6 +39,7 @@ static int dnxhd_find_frame_end(DNXHDParserContext *dctx, { ParseContext *pc = >pc; uint64_t state = pc->state64; +uint64_t header_prefix; int pic_found = pc->frame_start_found; int i = 0; int interlaced = dctx->interlaced; @@ -47,7 +48,8 @@ static int dnxhd_find_frame_end(DNXHDParserContext *dctx, if (!pic_found) { for (i = 0; i < buf_size; i++) { state = (state << 8) | buf[i]; -if ((state & 0xff00LL) == DNXHD_HEADER_PREFIX) { +header_prefix = av_bswap64(state & 0xff00LL) >> 16; +if (avpriv_dnxhd_parse_prefix((uint8_t*)_prefix) != DNXHD_HEADER_UNKNOWN) { i++; pic_found = 1; interlaced = (state&2)>>1; /* byte following the 5-byte header prefix */ @@ -62,7 +64,8 @@ static int dnxhd_find_frame_end(DNXHDParserContext *dctx, return 0; for (; i < buf_size; i++) { state = (state << 8) | buf[i]; -if ((state & 0xff00LL) == DNXHD_HEADER_PREFIX) { +header_prefix = av_bswap64(state & 0xff00LL) >> 16; +if (avpriv_dnxhd_parse_prefix((uint8_t*)_prefix) != DNXHD_HEADER_UNKNOWN) { if (!interlaced || dctx->cur_field) { pc->frame_start_found = 0; pc->state64 = -1; diff --git a/libavformat/dnxhddec.c b/libavformat/dnxhddec.c index 37e52d5..adcbaf5 100644 --- a/libavformat/dnxhddec.c +++ b/libavformat/dnxhddec.c @@ -23,21 +23,22 @@ #include "libavutil/intreadwrite.h" #include "avformat.h" #include "rawdec.h" +#include "libavcodec/dnxhddata.h" static int dnxhd_probe(AVProbeData *p) { -static const uint8_t header[] = {0x00,0x00,0x02,0x80,0x01}; int w, h, compression_id; if (p->buf_size < 0x2c) return 0; -if (memcmp(p->buf, header, 5)) +if (avpriv_dnxhd_parse_prefix(p->buf) == DNXHD_HEADER_UNKNOWN) return 0; h = AV_RB16(p->buf + 0x18); w = AV_RB16(p->buf + 0x1a); if (!w || !h) return 0; compression_id = AV_RB32(p->buf + 0x28); -if (compression_id < 1235 || compression_id > 1260) +if ((compression_id < 1235 || compression_id > 1260) && +(compression_id < 1270 || compression_id > 1274)) return 0; return AVPROBE_SCORE_MAX; } -- 2.4.1 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
[FFmpeg-devel] [PATCH v2 0/2] libavcodec/dnxhd_parser: add parser and probe support raw 444 and dnxhr formats
changes since v1: broke into 2 patches, parser and probe now source header prefixes values from dnxhddata.c Mark Reid (2): libavcodec/dnxhddec: refactor header prefix parsing libavcodec/dnxhd_parser: add parser and probe support raw 444 and dnxhr formats libavcodec/dnxhd_parser.c | 11 +++ libavcodec/dnxhddata.c| 17 + libavcodec/dnxhddata.h| 11 +++ libavcodec/dnxhddec.c | 11 --- libavformat/dnxhddec.c| 7 --- 5 files changed, 43 insertions(+), 14 deletions(-) -- 2.4.1 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Re: [FFmpeg-devel] [PATCH] options_table: update maximum bitrate limit
On 2/10/16, Derek Buitenhuiswrote: > On 2/10/2016 3:26 PM, Rostislav Pehlivanov wrote: >> The type of the option has been changed but the limit was apparently >> forgotten. >> Some video codes can handle bitrates of over ~2.2 Gbps (like VC-2). >> >> Signed-off-by: Rostislav Pehlivanov >> --- >> libavcodec/options_table.h | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) > > Since bit_rate is 64 bits now, I see no issue. +1 ___ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel