Re: [FFmpeg-devel] /libavcodec/h264_slice.c: selectively discard MB to be decoded

2016-02-11 Thread Mehdi Hosseini
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 Hosseini 
wrote:

> 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

2016-02-11 Thread Moritz Barsnick
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

2016-02-11 Thread Moritz Barsnick
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

2016-02-11 Thread Mehdi Hosseini
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

2016-02-11 Thread Timothy Gu
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"

2016-02-11 Thread Tobias Rapp

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"

2016-02-11 Thread Tobias Rapp
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

2016-02-11 Thread Derek Buitenhuis
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()

2016-02-11 Thread Michael Niedermayer
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

2016-02-11 Thread Ponomarenko Andrey
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

2016-02-11 Thread Tobias Rapp
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

2016-02-11 Thread Tobias Rapp
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

2016-02-11 Thread Tobias Rapp
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

2016-02-11 Thread Tobias Rapp
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

2016-02-11 Thread Michael Niedermayer
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

2016-02-11 Thread Paul B Mahol
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.
___
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

2016-02-11 Thread Paul B Mahol
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.
___
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

2016-02-11 Thread Tobias Rapp

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.


___
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

2016-02-11 Thread Paul B Mahol
On 2/11/16, Tobias Rapp  wrote:
> 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

2016-02-11 Thread wm4
On Thu, 11 Feb 2016 13:12:14 +0100
Michael Niedermayer  wrote:

> 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

2016-02-11 Thread Tobias Rapp

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"?


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

2016-02-11 Thread Michael Niedermayer
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

2016-02-11 Thread James Almer
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

2016-02-11 Thread James Almer
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

2016-02-11 Thread Michael Niedermayer
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

2016-02-11 Thread James Darnley
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.

2016-02-11 Thread Kieran Kunhya
---
 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

2016-02-11 Thread Lou Logan
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.

2016-02-11 Thread Michael Niedermayer
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

2016-02-11 Thread Michael Niedermayer
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

2016-02-11 Thread Michael Niedermayer
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

2016-02-11 Thread Hendrik Leppkes
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

2016-02-11 Thread Michael Niedermayer
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

2016-02-11 Thread Paul B Mahol
Hi,

patch attached.
From 1fd9636e9040b2a6b321cdd16ebd392c8db2de1b Mon Sep 17 00:00:00 2001
From: Paul B Mahol 
Date: 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

2016-02-11 Thread Lou Logan
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

2016-02-11 Thread Michael Niedermayer
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

2016-02-11 Thread Γιώργος Μεταξάκης
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

2016-02-11 Thread Mark Reid
---
 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

2016-02-11 Thread Mark Reid
---
 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

2016-02-11 Thread Mark Reid
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

2016-02-11 Thread Paul B Mahol
On 2/10/16, Derek Buitenhuis  wrote:
> 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