Re: [FFmpeg-devel] [PATCH 07/31] avutil: use av_dict_iterate

2022-11-27 Thread James Almer

On 11/26/2022 11:42 AM, Marvin Scholz wrote:



On 25 Nov 2022, at 13:50, Andreas Rheinhardt wrote:


Marvin Scholz:

---
  libavutil/opt.c| 12 ++--
  libavutil/tests/dict.c | 10 +-
  2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/libavutil/opt.c b/libavutil/opt.c
index a3940f47fb..0a909a8b22 100644
--- a/libavutil/opt.c
+++ b/libavutil/opt.c
@@ -1742,14 +1742,14 @@ void av_opt_free(void *obj)

  int av_opt_set_dict2(void *obj, AVDictionary **options, int search_flags)
  {
-AVDictionaryEntry *t = NULL;
+const AVDictionaryEntry *t = NULL;
  AVDictionary*tmp = NULL;
  int ret;

  if (!options)
  return 0;

-while ((t = av_dict_get(*options, "", t, AV_DICT_IGNORE_SUFFIX))) {
+while ((t = av_dict_iterate(*options, t))) {
  ret = av_opt_set(obj, t->key, t->value, search_flags);
  if (ret == AVERROR_OPTION_NOT_FOUND)
  ret = av_dict_set(, t->key, t->value, 0);
@@ -2137,16 +2137,16 @@ FF_ENABLE_DEPRECATION_WARNINGS
  case AV_OPT_TYPE_DICT: {
  AVDictionary *dict1 = NULL;
  AVDictionary *dict2 = *(AVDictionary **)dst;
-AVDictionaryEntry *en1 = NULL;
-AVDictionaryEntry *en2 = NULL;
+const AVDictionaryEntry *en1 = NULL;
+const AVDictionaryEntry *en2 = NULL;
  ret = av_dict_parse_string(, o->default_val.str, "=", ":", 0);
  if (ret < 0) {
  av_dict_free();
  return ret;
  }
  do {
-en1 = av_dict_get(dict1, "", en1, AV_DICT_IGNORE_SUFFIX);
-en2 = av_dict_get(dict2, "", en2, AV_DICT_IGNORE_SUFFIX);
+en1 = av_dict_iterate(dict1, en1);
+en2 = av_dict_iterate(dict2, en2);
  } while (en1 && en2 && !strcmp(en1->key, en2->key) && 
!strcmp(en1->value, en2->value));
  av_dict_free();
  return (!en1 && !en2);
diff --git a/libavutil/tests/dict.c b/libavutil/tests/dict.c
index d053545f4d..8c05752ea7 100644
--- a/libavutil/tests/dict.c
+++ b/libavutil/tests/dict.c
@@ -22,8 +22,8 @@

  static void print_dict(const AVDictionary *m)
  {
-AVDictionaryEntry *t = NULL;
-while ((t = av_dict_get(m, "", t, AV_DICT_IGNORE_SUFFIX)))
+const AVDictionaryEntry *t = NULL;
+while ((t = av_dict_iterate(m, t)))
  printf("%s %s   ", t->key, t->value);
  printf("\n");
  }
@@ -94,7 +94,7 @@ int main(void)
  if (av_dict_get(dict, NULL, NULL, 0))
  printf("av_dict_get() does not correctly handle NULL key.\n");
  e = NULL;
-while ((e = av_dict_get(dict, "", e, AV_DICT_IGNORE_SUFFIX)))
+while ((e = av_dict_iterate(dict, e)))
  printf("%s %s\n", e->key, e->value);
  av_dict_free();

@@ -106,7 +106,7 @@ int main(void)
  printf("av_dict_set does not correctly handle NULL key\n");

  e = NULL;
-while ((e = av_dict_get(dict, "", e, AV_DICT_IGNORE_SUFFIX)))
+while ((e = av_dict_iterate(dict, e)))
  printf("'%s' '%s'\n", e->key, e->value);
  av_dict_free();

@@ -122,7 +122,7 @@ int main(void)
  av_dict_set_int(, "12", 1, 0);
  av_dict_set_int(, "12", 2, AV_DICT_APPEND);
  e = NULL;
-while ((e = av_dict_get(dict, "", e, AV_DICT_IGNORE_SUFFIX)))
+while ((e = av_dict_iterate(dict, e)))
  printf("%s %s\n", e->key, e->value);
  av_dict_free();



This stops testing the old iterating pattern; instead it should
explicitly test that both patterns coincide.



Ok, I've removed this change for now from the pachset
as adding tests is not really what this patchset is about.

Additionally I do not fully understand how the testing works yet
so I don't know how I could write such a test.


This specific test just prints some hardcoded lines plus the output of 
av_dict_get() to stderr, and compares it with the reference in 
tests/ref/fate/dict.


What could be done is to either print both the output of the 
av_dict_get() and av_dict_iterate() iterations, or to compare the 
returned AVDictionaryEntry on each iteration and if they differ, print a 
line about it.

I can send a patch for that later.




- Andreas

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

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

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

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

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

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".


Re: [FFmpeg-devel] [PATCH 07/31] avutil: use av_dict_iterate

2022-11-26 Thread Marvin Scholz



On 25 Nov 2022, at 13:50, Andreas Rheinhardt wrote:

> Marvin Scholz:
>> ---
>>  libavutil/opt.c| 12 ++--
>>  libavutil/tests/dict.c | 10 +-
>>  2 files changed, 11 insertions(+), 11 deletions(-)
>>
>> diff --git a/libavutil/opt.c b/libavutil/opt.c
>> index a3940f47fb..0a909a8b22 100644
>> --- a/libavutil/opt.c
>> +++ b/libavutil/opt.c
>> @@ -1742,14 +1742,14 @@ void av_opt_free(void *obj)
>>
>>  int av_opt_set_dict2(void *obj, AVDictionary **options, int search_flags)
>>  {
>> -AVDictionaryEntry *t = NULL;
>> +const AVDictionaryEntry *t = NULL;
>>  AVDictionary*tmp = NULL;
>>  int ret;
>>
>>  if (!options)
>>  return 0;
>>
>> -while ((t = av_dict_get(*options, "", t, AV_DICT_IGNORE_SUFFIX))) {
>> +while ((t = av_dict_iterate(*options, t))) {
>>  ret = av_opt_set(obj, t->key, t->value, search_flags);
>>  if (ret == AVERROR_OPTION_NOT_FOUND)
>>  ret = av_dict_set(, t->key, t->value, 0);
>> @@ -2137,16 +2137,16 @@ FF_ENABLE_DEPRECATION_WARNINGS
>>  case AV_OPT_TYPE_DICT: {
>>  AVDictionary *dict1 = NULL;
>>  AVDictionary *dict2 = *(AVDictionary **)dst;
>> -AVDictionaryEntry *en1 = NULL;
>> -AVDictionaryEntry *en2 = NULL;
>> +const AVDictionaryEntry *en1 = NULL;
>> +const AVDictionaryEntry *en2 = NULL;
>>  ret = av_dict_parse_string(, o->default_val.str, "=", ":", 0);
>>  if (ret < 0) {
>>  av_dict_free();
>>  return ret;
>>  }
>>  do {
>> -en1 = av_dict_get(dict1, "", en1, AV_DICT_IGNORE_SUFFIX);
>> -en2 = av_dict_get(dict2, "", en2, AV_DICT_IGNORE_SUFFIX);
>> +en1 = av_dict_iterate(dict1, en1);
>> +en2 = av_dict_iterate(dict2, en2);
>>  } while (en1 && en2 && !strcmp(en1->key, en2->key) && 
>> !strcmp(en1->value, en2->value));
>>  av_dict_free();
>>  return (!en1 && !en2);
>> diff --git a/libavutil/tests/dict.c b/libavutil/tests/dict.c
>> index d053545f4d..8c05752ea7 100644
>> --- a/libavutil/tests/dict.c
>> +++ b/libavutil/tests/dict.c
>> @@ -22,8 +22,8 @@
>>
>>  static void print_dict(const AVDictionary *m)
>>  {
>> -AVDictionaryEntry *t = NULL;
>> -while ((t = av_dict_get(m, "", t, AV_DICT_IGNORE_SUFFIX)))
>> +const AVDictionaryEntry *t = NULL;
>> +while ((t = av_dict_iterate(m, t)))
>>  printf("%s %s   ", t->key, t->value);
>>  printf("\n");
>>  }
>> @@ -94,7 +94,7 @@ int main(void)
>>  if (av_dict_get(dict, NULL, NULL, 0))
>>  printf("av_dict_get() does not correctly handle NULL key.\n");
>>  e = NULL;
>> -while ((e = av_dict_get(dict, "", e, AV_DICT_IGNORE_SUFFIX)))
>> +while ((e = av_dict_iterate(dict, e)))
>>  printf("%s %s\n", e->key, e->value);
>>  av_dict_free();
>>
>> @@ -106,7 +106,7 @@ int main(void)
>>  printf("av_dict_set does not correctly handle NULL key\n");
>>
>>  e = NULL;
>> -while ((e = av_dict_get(dict, "", e, AV_DICT_IGNORE_SUFFIX)))
>> +while ((e = av_dict_iterate(dict, e)))
>>  printf("'%s' '%s'\n", e->key, e->value);
>>  av_dict_free();
>>
>> @@ -122,7 +122,7 @@ int main(void)
>>  av_dict_set_int(, "12", 1, 0);
>>  av_dict_set_int(, "12", 2, AV_DICT_APPEND);
>>  e = NULL;
>> -while ((e = av_dict_get(dict, "", e, AV_DICT_IGNORE_SUFFIX)))
>> +while ((e = av_dict_iterate(dict, e)))
>>  printf("%s %s\n", e->key, e->value);
>>  av_dict_free();
>>
>
> This stops testing the old iterating pattern; instead it should
> explicitly test that both patterns coincide.
>

Ok, I've removed this change for now from the pachset
as adding tests is not really what this patchset is about.

Additionally I do not fully understand how the testing works yet
so I don't know how I could write such a test.

> - Andreas
>
> ___
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".


Re: [FFmpeg-devel] [PATCH 07/31] avutil: use av_dict_iterate

2022-11-25 Thread Andreas Rheinhardt
Marvin Scholz:
> ---
>  libavutil/opt.c| 12 ++--
>  libavutil/tests/dict.c | 10 +-
>  2 files changed, 11 insertions(+), 11 deletions(-)
> 
> diff --git a/libavutil/opt.c b/libavutil/opt.c
> index a3940f47fb..0a909a8b22 100644
> --- a/libavutil/opt.c
> +++ b/libavutil/opt.c
> @@ -1742,14 +1742,14 @@ void av_opt_free(void *obj)
>  
>  int av_opt_set_dict2(void *obj, AVDictionary **options, int search_flags)
>  {
> -AVDictionaryEntry *t = NULL;
> +const AVDictionaryEntry *t = NULL;
>  AVDictionary*tmp = NULL;
>  int ret;
>  
>  if (!options)
>  return 0;
>  
> -while ((t = av_dict_get(*options, "", t, AV_DICT_IGNORE_SUFFIX))) {
> +while ((t = av_dict_iterate(*options, t))) {
>  ret = av_opt_set(obj, t->key, t->value, search_flags);
>  if (ret == AVERROR_OPTION_NOT_FOUND)
>  ret = av_dict_set(, t->key, t->value, 0);
> @@ -2137,16 +2137,16 @@ FF_ENABLE_DEPRECATION_WARNINGS
>  case AV_OPT_TYPE_DICT: {
>  AVDictionary *dict1 = NULL;
>  AVDictionary *dict2 = *(AVDictionary **)dst;
> -AVDictionaryEntry *en1 = NULL;
> -AVDictionaryEntry *en2 = NULL;
> +const AVDictionaryEntry *en1 = NULL;
> +const AVDictionaryEntry *en2 = NULL;
>  ret = av_dict_parse_string(, o->default_val.str, "=", ":", 0);
>  if (ret < 0) {
>  av_dict_free();
>  return ret;
>  }
>  do {
> -en1 = av_dict_get(dict1, "", en1, AV_DICT_IGNORE_SUFFIX);
> -en2 = av_dict_get(dict2, "", en2, AV_DICT_IGNORE_SUFFIX);
> +en1 = av_dict_iterate(dict1, en1);
> +en2 = av_dict_iterate(dict2, en2);
>  } while (en1 && en2 && !strcmp(en1->key, en2->key) && 
> !strcmp(en1->value, en2->value));
>  av_dict_free();
>  return (!en1 && !en2);
> diff --git a/libavutil/tests/dict.c b/libavutil/tests/dict.c
> index d053545f4d..8c05752ea7 100644
> --- a/libavutil/tests/dict.c
> +++ b/libavutil/tests/dict.c
> @@ -22,8 +22,8 @@
>  
>  static void print_dict(const AVDictionary *m)
>  {
> -AVDictionaryEntry *t = NULL;
> -while ((t = av_dict_get(m, "", t, AV_DICT_IGNORE_SUFFIX)))
> +const AVDictionaryEntry *t = NULL;
> +while ((t = av_dict_iterate(m, t)))
>  printf("%s %s   ", t->key, t->value);
>  printf("\n");
>  }
> @@ -94,7 +94,7 @@ int main(void)
>  if (av_dict_get(dict, NULL, NULL, 0))
>  printf("av_dict_get() does not correctly handle NULL key.\n");
>  e = NULL;
> -while ((e = av_dict_get(dict, "", e, AV_DICT_IGNORE_SUFFIX)))
> +while ((e = av_dict_iterate(dict, e)))
>  printf("%s %s\n", e->key, e->value);
>  av_dict_free();
>  
> @@ -106,7 +106,7 @@ int main(void)
>  printf("av_dict_set does not correctly handle NULL key\n");
>  
>  e = NULL;
> -while ((e = av_dict_get(dict, "", e, AV_DICT_IGNORE_SUFFIX)))
> +while ((e = av_dict_iterate(dict, e)))
>  printf("'%s' '%s'\n", e->key, e->value);
>  av_dict_free();
>  
> @@ -122,7 +122,7 @@ int main(void)
>  av_dict_set_int(, "12", 1, 0);
>  av_dict_set_int(, "12", 2, AV_DICT_APPEND);
>  e = NULL;
> -while ((e = av_dict_get(dict, "", e, AV_DICT_IGNORE_SUFFIX)))
> +while ((e = av_dict_iterate(dict, e)))
>  printf("%s %s\n", e->key, e->value);
>  av_dict_free();
>  

This stops testing the old iterating pattern; instead it should
explicitly test that both patterns coincide.

- Andreas

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

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".


[FFmpeg-devel] [PATCH 07/31] avutil: use av_dict_iterate

2022-11-24 Thread Marvin Scholz
---
 libavutil/opt.c| 12 ++--
 libavutil/tests/dict.c | 10 +-
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/libavutil/opt.c b/libavutil/opt.c
index a3940f47fb..0a909a8b22 100644
--- a/libavutil/opt.c
+++ b/libavutil/opt.c
@@ -1742,14 +1742,14 @@ void av_opt_free(void *obj)
 
 int av_opt_set_dict2(void *obj, AVDictionary **options, int search_flags)
 {
-AVDictionaryEntry *t = NULL;
+const AVDictionaryEntry *t = NULL;
 AVDictionary*tmp = NULL;
 int ret;
 
 if (!options)
 return 0;
 
-while ((t = av_dict_get(*options, "", t, AV_DICT_IGNORE_SUFFIX))) {
+while ((t = av_dict_iterate(*options, t))) {
 ret = av_opt_set(obj, t->key, t->value, search_flags);
 if (ret == AVERROR_OPTION_NOT_FOUND)
 ret = av_dict_set(, t->key, t->value, 0);
@@ -2137,16 +2137,16 @@ FF_ENABLE_DEPRECATION_WARNINGS
 case AV_OPT_TYPE_DICT: {
 AVDictionary *dict1 = NULL;
 AVDictionary *dict2 = *(AVDictionary **)dst;
-AVDictionaryEntry *en1 = NULL;
-AVDictionaryEntry *en2 = NULL;
+const AVDictionaryEntry *en1 = NULL;
+const AVDictionaryEntry *en2 = NULL;
 ret = av_dict_parse_string(, o->default_val.str, "=", ":", 0);
 if (ret < 0) {
 av_dict_free();
 return ret;
 }
 do {
-en1 = av_dict_get(dict1, "", en1, AV_DICT_IGNORE_SUFFIX);
-en2 = av_dict_get(dict2, "", en2, AV_DICT_IGNORE_SUFFIX);
+en1 = av_dict_iterate(dict1, en1);
+en2 = av_dict_iterate(dict2, en2);
 } while (en1 && en2 && !strcmp(en1->key, en2->key) && 
!strcmp(en1->value, en2->value));
 av_dict_free();
 return (!en1 && !en2);
diff --git a/libavutil/tests/dict.c b/libavutil/tests/dict.c
index d053545f4d..8c05752ea7 100644
--- a/libavutil/tests/dict.c
+++ b/libavutil/tests/dict.c
@@ -22,8 +22,8 @@
 
 static void print_dict(const AVDictionary *m)
 {
-AVDictionaryEntry *t = NULL;
-while ((t = av_dict_get(m, "", t, AV_DICT_IGNORE_SUFFIX)))
+const AVDictionaryEntry *t = NULL;
+while ((t = av_dict_iterate(m, t)))
 printf("%s %s   ", t->key, t->value);
 printf("\n");
 }
@@ -94,7 +94,7 @@ int main(void)
 if (av_dict_get(dict, NULL, NULL, 0))
 printf("av_dict_get() does not correctly handle NULL key.\n");
 e = NULL;
-while ((e = av_dict_get(dict, "", e, AV_DICT_IGNORE_SUFFIX)))
+while ((e = av_dict_iterate(dict, e)))
 printf("%s %s\n", e->key, e->value);
 av_dict_free();
 
@@ -106,7 +106,7 @@ int main(void)
 printf("av_dict_set does not correctly handle NULL key\n");
 
 e = NULL;
-while ((e = av_dict_get(dict, "", e, AV_DICT_IGNORE_SUFFIX)))
+while ((e = av_dict_iterate(dict, e)))
 printf("'%s' '%s'\n", e->key, e->value);
 av_dict_free();
 
@@ -122,7 +122,7 @@ int main(void)
 av_dict_set_int(, "12", 1, 0);
 av_dict_set_int(, "12", 2, AV_DICT_APPEND);
 e = NULL;
-while ((e = av_dict_get(dict, "", e, AV_DICT_IGNORE_SUFFIX)))
+while ((e = av_dict_iterate(dict, e)))
 printf("%s %s\n", e->key, e->value);
 av_dict_free();
 
-- 
2.37.0 (Apple Git-136)

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

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".