Re: [FFmpeg-devel] [PATCH] add an option to forbid the fallback to sw when hardware init fails

2018-11-08 Thread Fu, Linjie
> -Original Message-
> From: ffmpeg-devel [mailto:ffmpeg-devel-boun...@ffmpeg.org] On Behalf
> Of Hendrik Leppkes
> Sent: Tuesday, October 30, 2018 17:11
> To: FFmpeg development discussions and patches  de...@ffmpeg.org>
> Subject: Re: [FFmpeg-devel] [PATCH] add an option to forbid the fallback to
> sw when hardware init fails
> 
> On Tue, Oct 30, 2018 at 10:08 AM Linjie Fu  wrote:
> >
> > Currently ff_get_format will go through all usable choices if the
> > chosen format was not supported. It will fallback to software if
> > the hardware init fails.
> >
> > According to the comment in ticket #7519, provided an option
> > "-fallback_forbid 1" to return directly if hardware init fails
> > and forbid the fallback to software.
> >
> > Signed-off-by: Linjie Fu 
> > ---
> >  libavcodec/avcodec.h   |  8 
> >  libavcodec/decode.c| 11 +--
> >  libavcodec/options_table.h |  1 +
> >  3 files changed, 18 insertions(+), 2 deletions(-)
> >
> > diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
> > index 705a3ce4f3..fac3c6acb2 100644
> > --- a/libavcodec/avcodec.h
> > +++ b/libavcodec/avcodec.h
> > @@ -3312,6 +3312,14 @@ typedef struct AVCodecContext {
> >   * used as reference pictures).
> >   */
> >  int extra_hw_frames;
> > +
> > +/**
> > + * - forbid the fallback to software path in ff_get_format
> > + * - when the hardware init fails. (0 -> disabled)
> > + * - encoding: unused.
> > + * - decoding: Set by user.
> > + */
> > +int fallback_forbid;
> >  } AVCodecContext;
> >
> 
> This is really something user-code should implement, its easy enough
> to detect in eg. get_buffer2, and return an error from there.
> 
> - Hendrik

Thanks for your review, will modify in user-code and detect in get_buffer().

Best regards,
Linjie, Fu.
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] add an option to forbid the fallback to sw when hardware init fails

2018-10-30 Thread Hendrik Leppkes
On Tue, Oct 30, 2018 at 10:08 AM Linjie Fu  wrote:
>
> Currently ff_get_format will go through all usable choices if the
> chosen format was not supported. It will fallback to software if
> the hardware init fails.
>
> According to the comment in ticket #7519, provided an option
> "-fallback_forbid 1" to return directly if hardware init fails
> and forbid the fallback to software.
>
> Signed-off-by: Linjie Fu 
> ---
>  libavcodec/avcodec.h   |  8 
>  libavcodec/decode.c| 11 +--
>  libavcodec/options_table.h |  1 +
>  3 files changed, 18 insertions(+), 2 deletions(-)
>
> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
> index 705a3ce4f3..fac3c6acb2 100644
> --- a/libavcodec/avcodec.h
> +++ b/libavcodec/avcodec.h
> @@ -3312,6 +3312,14 @@ typedef struct AVCodecContext {
>   * used as reference pictures).
>   */
>  int extra_hw_frames;
> +
> +/**
> + * - forbid the fallback to software path in ff_get_format
> + * - when the hardware init fails. (0 -> disabled)
> + * - encoding: unused.
> + * - decoding: Set by user.
> + */
> +int fallback_forbid;
>  } AVCodecContext;
>

This is really something user-code should implement, its easy enough
to detect in eg. get_buffer2, and return an error from there.

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


[FFmpeg-devel] [PATCH] add an option to forbid the fallback to sw when hardware init fails

2018-10-30 Thread Linjie Fu
Currently ff_get_format will go through all usable choices if the
chosen format was not supported. It will fallback to software if
the hardware init fails.

According to the comment in ticket #7519, provided an option
"-fallback_forbid 1" to return directly if hardware init fails
and forbid the fallback to software.

Signed-off-by: Linjie Fu 
---
 libavcodec/avcodec.h   |  8 
 libavcodec/decode.c| 11 +--
 libavcodec/options_table.h |  1 +
 3 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 705a3ce4f3..fac3c6acb2 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -3312,6 +3312,14 @@ typedef struct AVCodecContext {
  * used as reference pictures).
  */
 int extra_hw_frames;
+
+/**
+ * - forbid the fallback to software path in ff_get_format
+ * - when the hardware init fails. (0 -> disabled)
+ * - encoding: unused.
+ * - decoding: Set by user.
+ */
+int fallback_forbid;
 } AVCodecContext;
 
 #if FF_API_CODEC_GET_SET
diff --git a/libavcodec/decode.c b/libavcodec/decode.c
index 4607e9f318..edadbd7e03 100644
--- a/libavcodec/decode.c
+++ b/libavcodec/decode.c
@@ -1441,8 +1441,15 @@ int ff_get_format(AVCodecContext *avctx, const enum 
AVPixelFormat *fmt)
 av_log(avctx, AV_LOG_DEBUG, "Format %s requires hwaccel "
"initialisation.\n", desc->name);
 err = hwaccel_init(avctx, hw_config);
-if (err < 0)
-goto try_again;
+if (err < 0) {
+if (avctx->fallback_forbid) {
+av_log(avctx, AV_LOG_ERROR, "Format %s not usable, 
fallback "
+"was forbidden.\n", desc->name);
+ret = AV_PIX_FMT_NONE;
+break;
+} else
+goto try_again;
+}
 }
 ret = user_choice;
 break;
diff --git a/libavcodec/options_table.h b/libavcodec/options_table.h
index 099261e168..73f0333eeb 100644
--- a/libavcodec/options_table.h
+++ b/libavcodec/options_table.h
@@ -479,6 +479,7 @@ static const AVOption avcodec_options[] = {
 {"allow_high_depth", "allow to output YUV pixel formats with a different 
chroma sampling than 4:2:0 and/or other than 8 bits per component", 0, 
AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH }, INT_MIN, 
INT_MAX, V | D, "hwaccel_flags"},
 {"allow_profile_mismatch", "attempt to decode anyway if HW accelerated 
decoder's supported profiles do not exactly match the stream", 0, 
AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH }, INT_MIN, 
INT_MAX, V | D, "hwaccel_flags"},
 {"extra_hw_frames", "Number of extra hardware frames to allocate for the 
user", OFFSET(extra_hw_frames), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, 
V|D },
+{"fallback_forbid", "forbid the fallback to software path when hardware init 
fails", OFFSET(fallback_forbid), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, V|D },
 {NULL},
 };
 
-- 
2.17.1

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