Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN
@ 2024-04-27 16:41 Zhao Zhili
  2024-04-28 10:34 ` Guo, Yejun
  0 siblings, 1 reply; 10+ messages in thread
From: Zhao Zhili @ 2024-04-27 16:41 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Zhao Zhili

From: Zhao Zhili <zhilizhao@tencent.com>

During the refactor progress, I have found some serious issues, which
is not resolved by the patchset:

1. Tensorflow backend is broken.

I think it doesn't work since 2021 at least. For example, it destroy a
thread and create a new thread for each frame, and it destroy an invalid
thread at the first frame:


    pthread_join(async_module->thread_id, &status);
    if (status == DNN_ASYNC_FAIL) {
        av_log(ctx, AV_LOG_ERROR, "Unable to start inference as previous inference failed.\n");
        return DNN_GENERIC_ERROR;
    }
    ret = pthread_create(&async_module->thread_id, NULL, async_thread_routine, async_module);


2. Openvino V1 doesn't compile. It doesn't compile and no one complains,
I think it's a hint to just keep the code for V2.

3. Error handling. It's easy to crash with incorrect command line arguments.

I don't have enough test case. Please share your test case and help on test.

Zhao Zhili (9):
  avfilter/dnn: Refactor DNN parameter configuration system
  avfilter/dnn_backend_openvino: Fix free context at random place
  avfilter/dnn_backend_openvino: simplify memory allocation
  avfilter/dnn_backend_tf: Remove one level of indentation
  avfilter/dnn_backend_tf: Fix free context at random place
  avfilter/dnn_backend_tf: Simplify memory allocation
  avfilter/dnn_backend_torch: Simplify memory allocation
  avfilter/dnn: Remove a level of dereference
  avfilter/dnn: Use dnn_backend_info_list to search for dnn module

 libavfilter/dnn/dnn_backend_common.h   |  13 +-
 libavfilter/dnn/dnn_backend_openvino.c | 210 ++++++++++---------------
 libavfilter/dnn/dnn_backend_tf.c       | 194 ++++++++++-------------
 libavfilter/dnn/dnn_backend_torch.cpp  | 112 +++++--------
 libavfilter/dnn/dnn_interface.c        | 107 ++++++++++---
 libavfilter/dnn_filter_common.c        |  38 ++++-
 libavfilter/dnn_filter_common.h        |  37 ++---
 libavfilter/dnn_interface.h            |  73 +++++++--
 libavfilter/vf_derain.c                |   5 +-
 libavfilter/vf_dnn_classify.c          |   3 +-
 libavfilter/vf_dnn_detect.c            |   3 +-
 libavfilter/vf_dnn_processing.c        |   3 +-
 libavfilter/vf_sr.c                    |   5 +-
 13 files changed, 428 insertions(+), 375 deletions(-)

-- 
2.34.1

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

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN
  2024-04-27 16:41 [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN Zhao Zhili
@ 2024-04-28 10:34 ` Guo, Yejun
  2024-04-28 10:55   ` Zhao Zhili
  0 siblings, 1 reply; 10+ messages in thread
From: Guo, Yejun @ 2024-04-28 10:34 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Zhao Zhili



> -----Original Message-----
> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of Zhao
> Zhili
> Sent: Sunday, April 28, 2024 12:42 AM
> To: ffmpeg-devel@ffmpeg.org
> Cc: Zhao Zhili <zhilizhao@tencent.com>
> Subject: [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN
> 
> From: Zhao Zhili <zhilizhao@tencent.com>
> 
> During the refactor progress, I have found some serious issues, which is not
> resolved by the patchset:
> 
> 1. Tensorflow backend is broken.
> 
> I think it doesn't work since 2021 at least. For example, it destroy a thread and
> create a new thread for each frame, and it destroy an invalid thread at the first
> frame:

It works from the day that code is merged, till today. It is by design to keep the
code simplicity by using the feature that pthread_join accepts a parameter that
is not a joinable thread.

Please share more info if you experienced a real case that it does not work.
> 
> 
>     pthread_join(async_module->thread_id, &status);
>     if (status == DNN_ASYNC_FAIL) {
>         av_log(ctx, AV_LOG_ERROR, "Unable to start inference as previous
> inference failed.\n");
>         return DNN_GENERIC_ERROR;
>     }
>     ret = pthread_create(&async_module->thread_id, NULL,
> async_thread_routine, async_module);
> 
> 
> 2. Openvino V1 doesn't compile. It doesn't compile and no one complains, I
> think it's a hint to just keep the code for V2.

In plan, and patch is welcome.

> 
> 3. Error handling. It's easy to crash with incorrect command line arguments.

Thanks, will review your patchset one by one, it may take some time.

> 
> I don't have enough test case. Please share your test case and help on test.
> 
> Zhao Zhili (9):
>   avfilter/dnn: Refactor DNN parameter configuration system
>   avfilter/dnn_backend_openvino: Fix free context at random place
>   avfilter/dnn_backend_openvino: simplify memory allocation
>   avfilter/dnn_backend_tf: Remove one level of indentation
>   avfilter/dnn_backend_tf: Fix free context at random place
>   avfilter/dnn_backend_tf: Simplify memory allocation
>   avfilter/dnn_backend_torch: Simplify memory allocation
>   avfilter/dnn: Remove a level of dereference
>   avfilter/dnn: Use dnn_backend_info_list to search for dnn module
> 
>  libavfilter/dnn/dnn_backend_common.h   |  13 +-
>  libavfilter/dnn/dnn_backend_openvino.c | 210 ++++++++++---------------
>  libavfilter/dnn/dnn_backend_tf.c       | 194 ++++++++++-------------
>  libavfilter/dnn/dnn_backend_torch.cpp  | 112 +++++--------
>  libavfilter/dnn/dnn_interface.c        | 107 ++++++++++---
>  libavfilter/dnn_filter_common.c        |  38 ++++-
>  libavfilter/dnn_filter_common.h        |  37 ++---
>  libavfilter/dnn_interface.h            |  73 +++++++--
>  libavfilter/vf_derain.c                |   5 +-
>  libavfilter/vf_dnn_classify.c          |   3 +-
>  libavfilter/vf_dnn_detect.c            |   3 +-
>  libavfilter/vf_dnn_processing.c        |   3 +-
>  libavfilter/vf_sr.c                    |   5 +-
>  13 files changed, 428 insertions(+), 375 deletions(-)
> 
> --
> 2.34.1
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email ffmpeg-devel-request@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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN
  2024-04-28 10:34 ` Guo, Yejun
@ 2024-04-28 10:55   ` Zhao Zhili
  2024-04-28 10:58     ` Paul B Mahol
  2024-04-29 10:29     ` Guo, Yejun
  0 siblings, 2 replies; 10+ messages in thread
From: Zhao Zhili @ 2024-04-28 10:55 UTC (permalink / raw)
  To: FFmpeg development discussions and patches



> On Apr 28, 2024, at 18:34, Guo, Yejun <yejun.guo-at-intel.com@ffmpeg.org> wrote:
> 
>> -----Original Message-----
>> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org <mailto:ffmpeg-devel-bounces@ffmpeg.org>> On Behalf Of Zhao
>> Zhili
>> Sent: Sunday, April 28, 2024 12:42 AM
>> To: ffmpeg-devel@ffmpeg.org <mailto:ffmpeg-devel@ffmpeg.org>
>> Cc: Zhao Zhili <zhilizhao@tencent.com <mailto:zhilizhao@tencent.com>>
>> Subject: [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN
>> 
>> From: Zhao Zhili <zhilizhao@tencent.com>
>> 
>> During the refactor progress, I have found some serious issues, which is not
>> resolved by the patchset:
>> 
>> 1. Tensorflow backend is broken.
>> 
>> I think it doesn't work since 2021 at least. For example, it destroy a thread and
>> create a new thread for each frame, and it destroy an invalid thread at the first
>> frame:
> 
> It works from the day that code is merged, till today. It is by design to keep the
> code simplicity by using the feature that pthread_join accepts a parameter that
> is not a joinable thread.
> 
> Please share more info if you experienced a real case that it does not work.

It will abort if ASSERT_LEVEL > 1.

#define ASSERT_PTHREAD_ABORT(func, ret) do {                            \
    char errbuf[AV_ERROR_MAX_STRING_SIZE] = "";                         \
    av_log(NULL, AV_LOG_FATAL, AV_STRINGIFY(func)                       \
           " failed with error: %s\n",                                  \
           av_make_error_string(errbuf, AV_ERROR_MAX_STRING_SIZE,       \
                                AVERROR(ret)));                         \
    abort();                                                            \
} while (0)

I think the check is there just to prevent call pthread_join(0, &ptr) by accident, so we
shouldn’t do that on purpose.

>> 
>> 
>>    pthread_join(async_module->thread_id, &status);
>>    if (status == DNN_ASYNC_FAIL) {
>>        av_log(ctx, AV_LOG_ERROR, "Unable to start inference as previous
>> inference failed.\n");
>>        return DNN_GENERIC_ERROR;
>>    }
>>    ret = pthread_create(&async_module->thread_id, NULL,
>> async_thread_routine, async_module);
>> 
>> 
>> 2. Openvino V1 doesn't compile. It doesn't compile and no one complains, I
>> think it's a hint to just keep the code for V2.
> 
> In plan, and patch is welcome.
> 
>> 
>> 3. Error handling. It's easy to crash with incorrect command line arguments.
> 
> Thanks, will review your patchset one by one, it may take some time.
> 
>> 
>> I don't have enough test case. Please share your test case and help on test.
>> 
>> Zhao Zhili (9):
>>  avfilter/dnn: Refactor DNN parameter configuration system
>>  avfilter/dnn_backend_openvino: Fix free context at random place
>>  avfilter/dnn_backend_openvino: simplify memory allocation
>>  avfilter/dnn_backend_tf: Remove one level of indentation
>>  avfilter/dnn_backend_tf: Fix free context at random place
>>  avfilter/dnn_backend_tf: Simplify memory allocation
>>  avfilter/dnn_backend_torch: Simplify memory allocation
>>  avfilter/dnn: Remove a level of dereference
>>  avfilter/dnn: Use dnn_backend_info_list to search for dnn module
>> 
>> libavfilter/dnn/dnn_backend_common.h   |  13 +-
>> libavfilter/dnn/dnn_backend_openvino.c | 210 ++++++++++---------------
>> libavfilter/dnn/dnn_backend_tf.c       | 194 ++++++++++-------------
>> libavfilter/dnn/dnn_backend_torch.cpp  | 112 +++++--------
>> libavfilter/dnn/dnn_interface.c        | 107 ++++++++++---
>> libavfilter/dnn_filter_common.c        |  38 ++++-
>> libavfilter/dnn_filter_common.h        |  37 ++---
>> libavfilter/dnn_interface.h            |  73 +++++++--
>> libavfilter/vf_derain.c                |   5 +-
>> libavfilter/vf_dnn_classify.c          |   3 +-
>> libavfilter/vf_dnn_detect.c            |   3 +-
>> libavfilter/vf_dnn_processing.c        |   3 +-
>> libavfilter/vf_sr.c                    |   5 +-
>> 13 files changed, 428 insertions(+), 375 deletions(-)
>> 
>> --
>> 2.34.1
>> 
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel@ffmpeg.org <mailto:ffmpeg-devel@ffmpeg.org>
>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>> 
>> To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org <mailto:ffmpeg-devel-request@ffmpeg.org>
>> with subject "unsubscribe".
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org <mailto:ffmpeg-devel@ffmpeg.org>
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org <mailto:ffmpeg-devel-request@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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN
  2024-04-28 10:55   ` Zhao Zhili
@ 2024-04-28 10:58     ` Paul B Mahol
  2024-04-28 11:21       ` Zhao Zhili
  2024-04-29 10:29     ` Guo, Yejun
  1 sibling, 1 reply; 10+ messages in thread
From: Paul B Mahol @ 2024-04-28 10:58 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Extremely low quality filters, both in source code quality and
performance/security and output quality should be queued for removal.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN
  2024-04-28 10:58     ` Paul B Mahol
@ 2024-04-28 11:21       ` Zhao Zhili
  2024-04-29  3:59         ` Chen, Wenbin
  0 siblings, 1 reply; 10+ messages in thread
From: Zhao Zhili @ 2024-04-28 11:21 UTC (permalink / raw)
  To: FFmpeg development discussions and patches


> On Apr 28, 2024, at 18:58, Paul B Mahol <onemda@gmail.com> wrote:
> 
> Extremely low quality filters, both in source code quality and
> performance/security and output quality should be queued for removal.

I don’t think there is any replacement for the function provided by dnn_detect,
which is very important for ROI encoding.

> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN
  2024-04-28 11:21       ` Zhao Zhili
@ 2024-04-29  3:59         ` Chen, Wenbin
  0 siblings, 0 replies; 10+ messages in thread
From: Chen, Wenbin @ 2024-04-29  3:59 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

> > On Apr 28, 2024, at 18:58, Paul B Mahol <onemda@gmail.com> wrote:
> >
> > Extremely low quality filters, both in source code quality and
> > performance/security and output quality should be queued for removal.

These filters cannot be removed because there are users using them.
What are your suggestions to improve them if you think they are low quality filters?

- Wenbin

> 
> I don’t think there is any replacement for the function provided by
> dnn_detect,
> which is very important for ROI encoding.
> 
> > _______________________________________________
> > ffmpeg-devel mailing list
> > ffmpeg-devel@ffmpeg.org
> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> >
> > To unsubscribe, visit link above, or email
> > ffmpeg-devel-request@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-request@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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN
  2024-04-28 10:55   ` Zhao Zhili
  2024-04-28 10:58     ` Paul B Mahol
@ 2024-04-29 10:29     ` Guo, Yejun
  2024-04-29 11:40       ` Zhao Zhili
  1 sibling, 1 reply; 10+ messages in thread
From: Guo, Yejun @ 2024-04-29 10:29 UTC (permalink / raw)
  To: FFmpeg development discussions and patches



> -----Original Message-----
> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of Zhao
> Zhili
> Sent: Sunday, April 28, 2024 6:55 PM
> To: FFmpeg development discussions and patches <ffmpeg-
> devel@ffmpeg.org>
> Subject: Re: [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN
> 
> 
> 
> > On Apr 28, 2024, at 18:34, Guo, Yejun <yejun.guo-at-
> intel.com@ffmpeg.org> wrote:
> >
> >> -----Original Message-----
> >> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org
> >> <mailto:ffmpeg-devel-bounces@ffmpeg.org>> On Behalf Of Zhao Zhili
> >> Sent: Sunday, April 28, 2024 12:42 AM
> >> To: ffmpeg-devel@ffmpeg.org <mailto:ffmpeg-devel@ffmpeg.org>
> >> Cc: Zhao Zhili <zhilizhao@tencent.com <mailto:zhilizhao@tencent.com>>
> >> Subject: [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN
> >>
> >> From: Zhao Zhili <zhilizhao@tencent.com>
> >>
> >> During the refactor progress, I have found some serious issues, which
> >> is not resolved by the patchset:
> >>
> >> 1. Tensorflow backend is broken.
> >>
> >> I think it doesn't work since 2021 at least. For example, it destroy
> >> a thread and create a new thread for each frame, and it destroy an
> >> invalid thread at the first
> >> frame:
> >
> > It works from the day that code is merged, till today. It is by design
> > to keep the code simplicity by using the feature that pthread_join
> > accepts a parameter that is not a joinable thread.
> >
> > Please share more info if you experienced a real case that it does not work.
> 
> It will abort if ASSERT_LEVEL > 1.
> 
> #define ASSERT_PTHREAD_ABORT(func, ret) do {                            \
>     char errbuf[AV_ERROR_MAX_STRING_SIZE] = "";                         \
>     av_log(NULL, AV_LOG_FATAL, AV_STRINGIFY(func)                       \
>            " failed with error: %s\n",                                  \
>            av_make_error_string(errbuf, AV_ERROR_MAX_STRING_SIZE,       \
>                                 AVERROR(ret)));                         \
>     abort();                                                            \
> } while (0)
> 
> I think the check is there just to prevent call pthread_join(0, &ptr) by accident,
> so we shouldn’t do that on purpose.
> 
Nice catch with configure assert level > 1, will fix, and patch also welcome, thanks.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN
  2024-04-29 10:29     ` Guo, Yejun
@ 2024-04-29 11:40       ` Zhao Zhili
  2024-04-30  2:55         ` Chen, Wenbin
  0 siblings, 1 reply; 10+ messages in thread
From: Zhao Zhili @ 2024-04-29 11:40 UTC (permalink / raw)
  To: FFmpeg development discussions and patches



> On Apr 29, 2024, at 18:29, Guo, Yejun <yejun.guo-at-intel.com@ffmpeg.org> wrote:
> 
> 
> 
>> -----Original Message-----
>> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of Zhao
>> Zhili
>> Sent: Sunday, April 28, 2024 6:55 PM
>> To: FFmpeg development discussions and patches <ffmpeg-
>> devel@ffmpeg.org>
>> Subject: Re: [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN
>> 
>> 
>> 
>>> On Apr 28, 2024, at 18:34, Guo, Yejun <yejun.guo-at-
>> intel.com@ffmpeg.org> wrote:
>>> 
>>>> -----Original Message-----
>>>> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org
>>>> <mailto:ffmpeg-devel-bounces@ffmpeg.org>> On Behalf Of Zhao Zhili
>>>> Sent: Sunday, April 28, 2024 12:42 AM
>>>> To: ffmpeg-devel@ffmpeg.org <mailto:ffmpeg-devel@ffmpeg.org>
>>>> Cc: Zhao Zhili <zhilizhao@tencent.com <mailto:zhilizhao@tencent.com>>
>>>> Subject: [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN
>>>> 
>>>> From: Zhao Zhili <zhilizhao@tencent.com>
>>>> 
>>>> During the refactor progress, I have found some serious issues, which
>>>> is not resolved by the patchset:
>>>> 
>>>> 1. Tensorflow backend is broken.
>>>> 
>>>> I think it doesn't work since 2021 at least. For example, it destroy
>>>> a thread and create a new thread for each frame, and it destroy an
>>>> invalid thread at the first
>>>> frame:
>>> 
>>> It works from the day that code is merged, till today. It is by design
>>> to keep the code simplicity by using the feature that pthread_join
>>> accepts a parameter that is not a joinable thread.
>>> 
>>> Please share more info if you experienced a real case that it does not work.
>> 
>> It will abort if ASSERT_LEVEL > 1.
>> 
>> #define ASSERT_PTHREAD_ABORT(func, ret) do {                            \
>>    char errbuf[AV_ERROR_MAX_STRING_SIZE] = "";                         \
>>    av_log(NULL, AV_LOG_FATAL, AV_STRINGIFY(func)                       \
>>           " failed with error: %s\n",                                  \
>>           av_make_error_string(errbuf, AV_ERROR_MAX_STRING_SIZE,       \
>>                                AVERROR(ret)));                         \
>>    abort();                                                            \
>> } while (0)
>> 
>> I think the check is there just to prevent call pthread_join(0, &ptr) by accident,
>> so we shouldn’t do that on purpose.
>> 
> Nice catch with configure assert level > 1, will fix, and patch also welcome, thanks.

If I read the code correctly, it destroy a thread and create a new thread for each
frame. I think this “async” mode isn’t common in ffmpeg’s design. Create new thread
for each frame can be heavy on some platforms. We use slice threading to improve
parallel, and thread with command queue to improve throughput. In this case with
tensorflow do the heavy lift, if it doesn’t support async operation, simple synchronous
operation with tensorflow backend should be find. The “async” mode is unnecessary
and use more resource  over the benefit it provides.

> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN
  2024-04-29 11:40       ` Zhao Zhili
@ 2024-04-30  2:55         ` Chen, Wenbin
  2024-04-30 14:07           ` Guo, Yejun
  0 siblings, 1 reply; 10+ messages in thread
From: Chen, Wenbin @ 2024-04-30  2:55 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

> > On Apr 29, 2024, at 18:29, Guo, Yejun <yejun.guo-at-intel.com@ffmpeg.org>
> wrote:
> >
> >
> >
> >> -----Original Message-----
> >> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of
> Zhao
> >> Zhili
> >> Sent: Sunday, April 28, 2024 6:55 PM
> >> To: FFmpeg development discussions and patches <ffmpeg-
> >> devel@ffmpeg.org>
> >> Subject: Re: [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN
> >>
> >>
> >>
> >>> On Apr 28, 2024, at 18:34, Guo, Yejun <yejun.guo-at-
> >> intel.com@ffmpeg.org> wrote:
> >>>
> >>>> -----Original Message-----
> >>>> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org
> >>>> <mailto:ffmpeg-devel-bounces@ffmpeg.org>> On Behalf Of Zhao Zhili
> >>>> Sent: Sunday, April 28, 2024 12:42 AM
> >>>> To: ffmpeg-devel@ffmpeg.org <mailto:ffmpeg-devel@ffmpeg.org>
> >>>> Cc: Zhao Zhili <zhilizhao@tencent.com
> <mailto:zhilizhao@tencent.com>>
> >>>> Subject: [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN
> >>>>
> >>>> From: Zhao Zhili <zhilizhao@tencent.com>
> >>>>
> >>>> During the refactor progress, I have found some serious issues, which
> >>>> is not resolved by the patchset:
> >>>>
> >>>> 1. Tensorflow backend is broken.
> >>>>
> >>>> I think it doesn't work since 2021 at least. For example, it destroy
> >>>> a thread and create a new thread for each frame, and it destroy an
> >>>> invalid thread at the first
> >>>> frame:
> >>>
> >>> It works from the day that code is merged, till today. It is by design
> >>> to keep the code simplicity by using the feature that pthread_join
> >>> accepts a parameter that is not a joinable thread.
> >>>
> >>> Please share more info if you experienced a real case that it does not
> work.
> >>
> >> It will abort if ASSERT_LEVEL > 1.
> >>
> >> #define ASSERT_PTHREAD_ABORT(func, ret) do {                            \
> >>    char errbuf[AV_ERROR_MAX_STRING_SIZE] = "";                         \
> >>    av_log(NULL, AV_LOG_FATAL, AV_STRINGIFY(func)                       \
> >>           " failed with error: %s\n",                                  \
> >>           av_make_error_string(errbuf, AV_ERROR_MAX_STRING_SIZE,       \
> >>                                AVERROR(ret)));                         \
> >>    abort();                                                            \
> >> } while (0)
> >>
> >> I think the check is there just to prevent call pthread_join(0, &ptr) by
> accident,
> >> so we shouldn’t do that on purpose.
> >>
> > Nice catch with configure assert level > 1, will fix, and patch also welcome,
> thanks.
> 
> If I read the code correctly, it destroy a thread and create a new thread for
> each
> frame. I think this “async” mode isn’t common in ffmpeg’s design. Create new
> thread
> for each frame can be heavy on some platforms. We use slice threading to
> improve
> parallel, and thread with command queue to improve throughput. In this
> case with
> tensorflow do the heavy lift, if it doesn’t support async operation, simple
> synchronous
> operation with tensorflow backend should be find. The “async” mode is
> unnecessary
> and use more resource  over the benefit it provides.

I think we need to keep async support.
1. Some model cannot make full use of resource. This may be caused by tensorflow
implementation or by model design. Async has benefit on this situation.
2. Async helps to build pipeline. You don't need to wait the output. If a "synchronous" filter
followed by another "synchronous" filter, it can be the bottle neck of the whole pipeline.

The benefit on these two situations will be more obvious if model is running on GPU.( Tensorflow
has not added device support yet.)

> 
> > _______________________________________________
> > ffmpeg-devel mailing list
> > ffmpeg-devel@ffmpeg.org
> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> >
> > To unsubscribe, visit link above, or email
> > ffmpeg-devel-request@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-request@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-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN
  2024-04-30  2:55         ` Chen, Wenbin
@ 2024-04-30 14:07           ` Guo, Yejun
  0 siblings, 0 replies; 10+ messages in thread
From: Guo, Yejun @ 2024-04-30 14:07 UTC (permalink / raw)
  To: FFmpeg development discussions and patches



> -----Original Message-----
> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of Chen,
> Wenbin
> Sent: Tuesday, April 30, 2024 10:55 AM
> To: FFmpeg development discussions and patches <ffmpeg-
> devel@ffmpeg.org>
> Subject: Re: [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN
> 
> > > On Apr 29, 2024, at 18:29, Guo, Yejun
> > > <yejun.guo-at-intel.com@ffmpeg.org>
> > wrote:
> > >
> > >
> > >
> > >> -----Original Message-----
> > >> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of
> > Zhao
> > >> Zhili
> > >> Sent: Sunday, April 28, 2024 6:55 PM
> > >> To: FFmpeg development discussions and patches <ffmpeg-
> > >> devel@ffmpeg.org>
> > >> Subject: Re: [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN
> > >>
> > >>
> > >>
> > >>> On Apr 28, 2024, at 18:34, Guo, Yejun <yejun.guo-at-
> > >> intel.com@ffmpeg.org> wrote:
> > >>>
> > >>>> -----Original Message-----
> > >>>> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org
> > >>>> <mailto:ffmpeg-devel-bounces@ffmpeg.org>> On Behalf Of Zhao Zhili
> > >>>> Sent: Sunday, April 28, 2024 12:42 AM
> > >>>> To: ffmpeg-devel@ffmpeg.org <mailto:ffmpeg-devel@ffmpeg.org>
> > >>>> Cc: Zhao Zhili <zhilizhao@tencent.com
> > <mailto:zhilizhao@tencent.com>>
> > >>>> Subject: [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN
> > >>>>
> > >>>> From: Zhao Zhili <zhilizhao@tencent.com>
> > >>>>
> > >>>> During the refactor progress, I have found some serious issues,
> > >>>> which is not resolved by the patchset:
> > >>>>
> > >>>> 1. Tensorflow backend is broken.
> > >>>>
> > >>>> I think it doesn't work since 2021 at least. For example, it
> > >>>> destroy a thread and create a new thread for each frame, and it
> > >>>> destroy an invalid thread at the first
> > >>>> frame:
> > >>>
> > >>> It works from the day that code is merged, till today. It is by
> > >>> design to keep the code simplicity by using the feature that
> > >>> pthread_join accepts a parameter that is not a joinable thread.
> > >>>
> > >>> Please share more info if you experienced a real case that it does
> > >>> not
> > work.
> > >>
> > >> It will abort if ASSERT_LEVEL > 1.
> > >>
> > >> #define ASSERT_PTHREAD_ABORT(func, ret) do {                            \
> > >>    char errbuf[AV_ERROR_MAX_STRING_SIZE] = "";                         \
> > >>    av_log(NULL, AV_LOG_FATAL, AV_STRINGIFY(func)                       \
> > >>           " failed with error: %s\n",                                  \
> > >>           av_make_error_string(errbuf, AV_ERROR_MAX_STRING_SIZE,       \
> > >>                                AVERROR(ret)));                         \
> > >>    abort();                                                            \
> > >> } while (0)
> > >>
> > >> I think the check is there just to prevent call pthread_join(0,
> > >> &ptr) by
> > accident,
> > >> so we shouldn’t do that on purpose.
> > >>
> > > Nice catch with configure assert level > 1, will fix, and patch also
> > > welcome,
> > thanks.
> >
> > If I read the code correctly, it destroy a thread and create a new
> > thread for each frame. I think this “async” mode isn’t common in
> > ffmpeg’s design. Create new thread for each frame can be heavy on some
> > platforms. We use slice threading to improve parallel, and thread with
> > command queue to improve throughput. In this case with tensorflow do
> > the heavy lift, if it doesn’t support async operation, simple
> > synchronous operation with tensorflow backend should be find. The
> > “async” mode is unnecessary and use more resource  over the benefit it
> > provides.
> 
> I think we need to keep async support.
> 1. Some model cannot make full use of resource. This may be caused by
> tensorflow implementation or by model design. Async has benefit on this
> situation.
> 2. Async helps to build pipeline. You don't need to wait the output. If a
> "synchronous" filter followed by another "synchronous" filter, it can be the
> bottle neck of the whole pipeline.
> 
> The benefit on these two situations will be more obvious if model is running
> on GPU.( Tensorflow has not added device support yet.)

Yes, the async mode (even with current vanilla implementation) helps performance 
with the overlap of CPU and GPU. By offloading the dnn filter to GPU, the CPU can 
do other things at the same time.

For tensorflow backend, to running on GPU, just download and use the GPU version
of tensorflow c lib, no need to set with any option.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

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

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2024-04-30 14:07 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-27 16:41 [FFmpeg-devel] [PATCH WIP 0/9] Refactor DNN Zhao Zhili
2024-04-28 10:34 ` Guo, Yejun
2024-04-28 10:55   ` Zhao Zhili
2024-04-28 10:58     ` Paul B Mahol
2024-04-28 11:21       ` Zhao Zhili
2024-04-29  3:59         ` Chen, Wenbin
2024-04-29 10:29     ` Guo, Yejun
2024-04-29 11:40       ` Zhao Zhili
2024-04-30  2:55         ` Chen, Wenbin
2024-04-30 14:07           ` Guo, Yejun

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git