Re: [FFmpeg-devel] [PATCH 2/3] avformat/tee: use av_dict_pop

2023-06-25 Thread zhilizhao(赵志立)



> On May 1, 2023, at 19:44, Marvin Scholz  wrote:
> 
> This is a well-defined way to "steal" the value of the dict entry.
> ---
> libavformat/tee.c | 9 +
> 1 file changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/libavformat/tee.c b/libavformat/tee.c
> index cb555f52fd..70f3f2eb29 100644
> --- a/libavformat/tee.c
> +++ b/libavformat/tee.c
> @@ -157,6 +157,7 @@ static int open_slave(AVFormatContext *avf, char *slave, 
> TeeSlave *tee_slave)
> {
> int i, ret;
> AVDictionary *options = NULL, *bsf_options = NULL;
> +char *entry_val = NULL;
> AVDictionaryEntry *entry;
> char *filename;
> char *format = NULL, *select = NULL, *on_fail = NULL;
> @@ -171,15 +172,15 @@ static int open_slave(AVFormatContext *avf, char 
> *slave, TeeSlave *tee_slave)
> return ret;
> 
> #define CONSUME_OPTION(option, field, action) do {  \
> -if ((entry = av_dict_get(options, option, NULL, 0))) {  \
> -field = entry->value;   \
> +if ((!av_dict_pop(, option, NULL, _val, 0))) {\
> +field = entry_val;  \

Nit: You can remove the extra level of parentheses now.

> { action }  \
> -av_dict_set(, option, NULL, 0); \
> +av_freep(_val);   \
> }   \
> } while (0)
> #define STEAL_OPTION(option, field) \
> CONSUME_OPTION(option, field,   \
> -   entry->value = NULL; /* prevent it from being freed */)
> +   entry_val = NULL; /* prevent it from being freed */)
> #define PROCESS_OPTION(option, field, function, on_error)   \
> CONSUME_OPTION(option, field, if ((ret = function) < 0) { { on_error } 
> goto end; })
> 
> -- 
> 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".

___
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 2/3] avformat/tee: use av_dict_pop

2023-05-01 Thread Marvin Scholz
This is a well-defined way to "steal" the value of the dict entry.
---
 libavformat/tee.c | 9 +
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/libavformat/tee.c b/libavformat/tee.c
index cb555f52fd..70f3f2eb29 100644
--- a/libavformat/tee.c
+++ b/libavformat/tee.c
@@ -157,6 +157,7 @@ static int open_slave(AVFormatContext *avf, char *slave, 
TeeSlave *tee_slave)
 {
 int i, ret;
 AVDictionary *options = NULL, *bsf_options = NULL;
+char *entry_val = NULL;
 AVDictionaryEntry *entry;
 char *filename;
 char *format = NULL, *select = NULL, *on_fail = NULL;
@@ -171,15 +172,15 @@ static int open_slave(AVFormatContext *avf, char *slave, 
TeeSlave *tee_slave)
 return ret;
 
 #define CONSUME_OPTION(option, field, action) do {  \
-if ((entry = av_dict_get(options, option, NULL, 0))) {  \
-field = entry->value;   \
+if ((!av_dict_pop(, option, NULL, _val, 0))) {\
+field = entry_val;  \
 { action }  \
-av_dict_set(, option, NULL, 0); \
+av_freep(_val);   \
 }   \
 } while (0)
 #define STEAL_OPTION(option, field) \
 CONSUME_OPTION(option, field,   \
-   entry->value = NULL; /* prevent it from being freed */)
+   entry_val = NULL; /* prevent it from being freed */)
 #define PROCESS_OPTION(option, field, function, on_error)   \
 CONSUME_OPTION(option, field, if ((ret = function) < 0) { { on_error } 
goto end; })
 
-- 
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".