[FFmpeg-devel,V2,2/4] lavc/vaapi_encode: Add max slices number query.

Submitted by Jun Zhao on Aug. 2, 2017, 5:55 a.m.

Details

Message ID 30afe0b0-3706-6df4-67f3-caf059986214@gmail.com
State Superseded
Headers show

Commit Message

Jun Zhao Aug. 2, 2017, 5:55 a.m.
From 2a0bd4795fcf7d889c3c93b03e8698015a519260 Mon Sep 17 00:00:00 2001
From: Jun Zhao <jun.zhao@intel.com>
Date: Tue, 1 Aug 2017 04:16:30 -0400
Subject: [PATCH V2 2/4] lavc/vaapi_encode: Add max slices number query.

Add max slices number query.

Signed-off-by: Jun Zhao <jun.zhao@intel.com>
---
 libavcodec/vaapi_encode.c | 4 ++++
 libavcodec/vaapi_encode.h | 3 +++
 2 files changed, 7 insertions(+)

Comments

Mark Thompson Aug. 9, 2017, 9:29 p.m.
On 02/08/17 06:55, Jun Zhao wrote:
> From 2a0bd4795fcf7d889c3c93b03e8698015a519260 Mon Sep 17 00:00:00 2001
> From: Jun Zhao <jun.zhao@intel.com>
> Date: Tue, 1 Aug 2017 04:16:30 -0400
> Subject: [PATCH V2 2/4] lavc/vaapi_encode: Add max slices number query.
> 
> Add max slices number query.
> 
> Signed-off-by: Jun Zhao <jun.zhao@intel.com>
> ---
>  libavcodec/vaapi_encode.c | 4 ++++
>  libavcodec/vaapi_encode.h | 3 +++
>  2 files changed, 7 insertions(+)
> 
> diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c
> index 11d9803b5d..9fc70bdd55 100644
> --- a/libavcodec/vaapi_encode.c
> +++ b/libavcodec/vaapi_encode.c
> @@ -972,6 +972,7 @@ static av_cold int vaapi_encode_config_attributes(AVCodecContext *avctx)
>          { VAConfigAttribRTFormat         },
>          { VAConfigAttribRateControl      },
>          { VAConfigAttribEncMaxRefFrames  },
> +        { VAConfigAttribEncMaxSlices     },
>          { VAConfigAttribEncPackedHeaders },
>      };
>  
> @@ -1102,6 +1103,9 @@ static av_cold int vaapi_encode_config_attributes(AVCodecContext *avctx)
>              }
>          }
>          break;
> +        case VAConfigAttribEncMaxSlices:
> +            ctx->max_slices = attr[i].value;
> +            break;
>          case VAConfigAttribEncPackedHeaders:
>              if (ctx->va_packed_headers & ~attr[i].value) {
>                  // This isn't fatal, but packed headers are always
> diff --git a/libavcodec/vaapi_encode.h b/libavcodec/vaapi_encode.h
> index b542772aed..fd55aa6cdc 100644
> --- a/libavcodec/vaapi_encode.h
> +++ b/libavcodec/vaapi_encode.h
> @@ -103,6 +103,9 @@ typedef struct VAAPIEncodeContext {
>      // Supported packed headers (initially the desired set, modified
>      // later to what is actually supported).
>      unsigned int    va_packed_headers;
> +    // Supported max-slices number per frame. (0 means driver cannot
> +    // support max mutil-slices query)
> +    int             max_slices;
>  
>      // The required size of surfaces.  This is probably the input
>      // size (AVCodecContext.width|height) aligned up to whatever

A few lines further down:
    // Everything above this point must be set before calling
    // ff_vaapi_encode_init().

max_slices is not in this category, so it should be somewhere below.

> -- 
> 2.11.0
> 

Probably fine?  Without too much thought I would probably write this the other way around (check the value in vaapi_encode_config_attributes(), then know it is correct thereafter, like max_b_frames), but maybe that causes more problems with unexpected failure and needing to mess with MPEG-2.

- Mark
Jun Zhao Aug. 10, 2017, 2:49 a.m.
On 2017/8/10 5:29, Mark Thompson wrote:
> On 02/08/17 06:55, Jun Zhao wrote:
>> From 2a0bd4795fcf7d889c3c93b03e8698015a519260 Mon Sep 17 00:00:00 2001
>> From: Jun Zhao <jun.zhao@intel.com>
>> Date: Tue, 1 Aug 2017 04:16:30 -0400
>> Subject: [PATCH V2 2/4] lavc/vaapi_encode: Add max slices number query.
>>
>> Add max slices number query.
>>
>> Signed-off-by: Jun Zhao <jun.zhao@intel.com>
>> ---
>>  libavcodec/vaapi_encode.c | 4 ++++
>>  libavcodec/vaapi_encode.h | 3 +++
>>  2 files changed, 7 insertions(+)
>>
>> diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c
>> index 11d9803b5d..9fc70bdd55 100644
>> --- a/libavcodec/vaapi_encode.c
>> +++ b/libavcodec/vaapi_encode.c
>> @@ -972,6 +972,7 @@ static av_cold int vaapi_encode_config_attributes(AVCodecContext *avctx)
>>          { VAConfigAttribRTFormat         },
>>          { VAConfigAttribRateControl      },
>>          { VAConfigAttribEncMaxRefFrames  },
>> +        { VAConfigAttribEncMaxSlices     },
>>          { VAConfigAttribEncPackedHeaders },
>>      };
>>  
>> @@ -1102,6 +1103,9 @@ static av_cold int vaapi_encode_config_attributes(AVCodecContext *avctx)
>>              }
>>          }
>>          break;
>> +        case VAConfigAttribEncMaxSlices:
>> +            ctx->max_slices = attr[i].value;
>> +            break;
>>          case VAConfigAttribEncPackedHeaders:
>>              if (ctx->va_packed_headers & ~attr[i].value) {
>>                  // This isn't fatal, but packed headers are always
>> diff --git a/libavcodec/vaapi_encode.h b/libavcodec/vaapi_encode.h
>> index b542772aed..fd55aa6cdc 100644
>> --- a/libavcodec/vaapi_encode.h
>> +++ b/libavcodec/vaapi_encode.h
>> @@ -103,6 +103,9 @@ typedef struct VAAPIEncodeContext {
>>      // Supported packed headers (initially the desired set, modified
>>      // later to what is actually supported).
>>      unsigned int    va_packed_headers;
>> +    // Supported max-slices number per frame. (0 means driver cannot
>> +    // support max mutil-slices query)
>> +    int             max_slices;
>>  
>>      // The required size of surfaces.  This is probably the input
>>      // size (AVCodecContext.width|height) aligned up to whatever
> 
> A few lines further down:
>     // Everything above this point must be set before calling
>     // ff_vaapi_encode_init().
> 
> max_slices is not in this category, so it should be somewhere below.

Didn't get this comments in the code, with change the place.

> 
>> -- 
>> 2.11.0
>>
> 
> Probably fine?  Without too much thought I would probably write this the other way around (check the value in vaapi_encode_config_attributes(), then know it is correct thereafter, like max_b_frames), but maybe that causes more problems with unexpected failure and needing to mess with MPEG-2.

double-check the i965 master branch source code, only AVC/HEVC support the 
VAConfigAttribEncMaxSlices query, MPEG2 will return VA_ATTRIB_NOT_SUPPORTED, and
I will double check the old i965 release.
 
> 
> - Mark
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>

Patch hide | download patch | download mbox

diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c
index 11d9803b5d..9fc70bdd55 100644
--- a/libavcodec/vaapi_encode.c
+++ b/libavcodec/vaapi_encode.c
@@ -972,6 +972,7 @@  static av_cold int vaapi_encode_config_attributes(AVCodecContext *avctx)
         { VAConfigAttribRTFormat         },
         { VAConfigAttribRateControl      },
         { VAConfigAttribEncMaxRefFrames  },
+        { VAConfigAttribEncMaxSlices     },
         { VAConfigAttribEncPackedHeaders },
     };
 
@@ -1102,6 +1103,9 @@  static av_cold int vaapi_encode_config_attributes(AVCodecContext *avctx)
             }
         }
         break;
+        case VAConfigAttribEncMaxSlices:
+            ctx->max_slices = attr[i].value;
+            break;
         case VAConfigAttribEncPackedHeaders:
             if (ctx->va_packed_headers & ~attr[i].value) {
                 // This isn't fatal, but packed headers are always
diff --git a/libavcodec/vaapi_encode.h b/libavcodec/vaapi_encode.h
index b542772aed..fd55aa6cdc 100644
--- a/libavcodec/vaapi_encode.h
+++ b/libavcodec/vaapi_encode.h
@@ -103,6 +103,9 @@  typedef struct VAAPIEncodeContext {
     // Supported packed headers (initially the desired set, modified
     // later to what is actually supported).
     unsigned int    va_packed_headers;
+    // Supported max-slices number per frame. (0 means driver cannot
+    // support max mutil-slices query)
+    int             max_slices;
 
     // The required size of surfaces.  This is probably the input
     // size (AVCodecContext.width|height) aligned up to whatever