Re: [FFmpeg-devel] [PATCH v4] avcodec/vaapi_encode_h26x: passthrough A53 CC data as H264/HEVC SEI

2023-01-15 Thread Xiang, Haihao
On Ma, 2023-01-09 at 18:40 +, Aman Karmani wrote:
> From: Aman Karmani 
> 
> Signed-off-by: Aman Karmani 
> ---
> avcodec/vaapi_encode_h26x: passthrough A53 CC data as H264/HEVC SEI
> 
> v4: updated deps in configure v3: fix build failure v2: add control via
> sei parameter
> 
> Published-As: 
> https://github.com/ffstaging/FFmpeg/releases/tag/pr-ffstaging-46%2Ftmm1%2Fvaapi-a53cc-v4
> Fetch-It-Via: git fetch https://github.com/ffstaging/FFmpeg pr-ffstaging-
> 46/tmm1/vaapi-a53cc-v4
> Pull-Request: https://github.com/ffstaging/FFmpeg/pull/46
> 
> Range-diff vs v3:
> 
>  1:  149fa8e61c ! 1:  367db524fb avcodec/vaapi_encode_h26x: passthrough A53 CC
> data as H264/HEVC SEI
>  @@ Commit message
>   
>   Signed-off-by: Aman Karmani 
>   
>  + ## configure ##
>  +@@ configure: h264_qsv_decoder_select="h264_mp4toannexb_bsf qsvdec"
>  + h264_qsv_encoder_select="atsc_a53 qsvenc"
>  + h264_rkmpp_decoder_deps="rkmpp"
>  + h264_rkmpp_decoder_select="h264_mp4toannexb_bsf"
>  +-h264_vaapi_encoder_select="cbs_h264 vaapi_encode"
>  ++h264_vaapi_encoder_select="atsc_a53 cbs_h264 vaapi_encode"
>  + h264_v4l2m2m_decoder_deps="v4l2_m2m h264_v4l2_m2m"
>  + h264_v4l2m2m_decoder_select="h264_mp4toannexb_bsf"
>  + h264_v4l2m2m_encoder_deps="v4l2_m2m h264_v4l2_m2m"
>  +@@ configure: hevc_qsv_encoder_select="hevcparse qsvenc"
>  + hevc_rkmpp_decoder_deps="rkmpp"
>  + hevc_rkmpp_decoder_select="hevc_mp4toannexb_bsf"
>  + hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
>  +-hevc_vaapi_encoder_select="cbs_h265 vaapi_encode"
>  ++hevc_vaapi_encoder_select="atsc_a53 cbs_h265 vaapi_encode"
>  + hevc_v4l2m2m_decoder_deps="v4l2_m2m hevc_v4l2_m2m"
>  + hevc_v4l2m2m_decoder_select="hevc_mp4toannexb_bsf"
>  + hevc_v4l2m2m_encoder_deps="v4l2_m2m hevc_v4l2_m2m"
>  +
>## libavcodec/vaapi_encode_h264.c ##
>   @@
>#include "libavutil/internal.h"
> 
> 
>  configure  |  4 ++--
>  libavcodec/vaapi_encode_h264.c | 33 +++-
>  libavcodec/vaapi_encode_h265.c | 35 +-
>  3 files changed, 68 insertions(+), 4 deletions(-)
> 
> diff --git a/configure b/configure
> index e54649fa48..5ba1395bea 100755
> --- a/configure
> +++ b/configure
> @@ -3191,7 +3191,7 @@ h264_qsv_decoder_select="h264_mp4toannexb_bsf qsvdec"
>  h264_qsv_encoder_select="atsc_a53 qsvenc"
>  h264_rkmpp_decoder_deps="rkmpp"
>  h264_rkmpp_decoder_select="h264_mp4toannexb_bsf"
> -h264_vaapi_encoder_select="cbs_h264 vaapi_encode"
> +h264_vaapi_encoder_select="atsc_a53 cbs_h264 vaapi_encode"
>  h264_v4l2m2m_decoder_deps="v4l2_m2m h264_v4l2_m2m"
>  h264_v4l2m2m_decoder_select="h264_mp4toannexb_bsf"
>  h264_v4l2m2m_encoder_deps="v4l2_m2m h264_v4l2_m2m"
> @@ -3208,7 +3208,7 @@ hevc_qsv_encoder_select="hevcparse qsvenc"
>  hevc_rkmpp_decoder_deps="rkmpp"
>  hevc_rkmpp_decoder_select="hevc_mp4toannexb_bsf"
>  hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
> -hevc_vaapi_encoder_select="cbs_h265 vaapi_encode"
> +hevc_vaapi_encoder_select="atsc_a53 cbs_h265 vaapi_encode"
>  hevc_v4l2m2m_decoder_deps="v4l2_m2m hevc_v4l2_m2m"
>  hevc_v4l2m2m_decoder_select="hevc_mp4toannexb_bsf"
>  hevc_v4l2m2m_encoder_deps="v4l2_m2m hevc_v4l2_m2m"
> diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c
> index b1b503b2a6..9f9d77a0e9 100644
> --- a/libavcodec/vaapi_encode_h264.c
> +++ b/libavcodec/vaapi_encode_h264.c
> @@ -26,6 +26,7 @@
>  #include "libavutil/internal.h"
>  #include "libavutil/opt.h"
>  
> +#include "atsc_a53.h"
>  #include "avcodec.h"
>  #include "cbs.h"
>  #include "cbs_h264.h"
> @@ -40,6 +41,7 @@ enum {
>  SEI_TIMING = 0x01,
>  SEI_IDENTIFIER = 0x02,
>  SEI_RECOVERY_POINT = 0x04,
> +SEI_A53_CC = 0x08,
>  };
>  
>  // Random (version 4) ISO 11578 UUID.
> @@ -98,6 +100,8 @@ typedef struct VAAPIEncodeH264Context {
>  H264RawSEIRecoveryPointsei_recovery_point;
>  SEIRawUserDataUnregistered sei_identifier;
>  char  *sei_identifier_string;
> +SEIRawUserDataRegistered   sei_a53cc;
> +void  *sei_a53cc_data;
>  
>  int aud_needed;
>  int sei_needed;
> @@ -248,6 +252,13 @@ static int
> vaapi_encode_h264_write_extra_header(AVCodecContext *avctx,
>  if (err < 0)
>  goto fail;
>  }
> +if (priv->sei_needed & SEI_A53_CC) {
> +err = ff_cbs_sei_add_message(priv->cbc, au, 1,
> + SEI_TYPE_USER_DATA_REGISTERED_ITU_T_
> T35,
> + >sei_a53cc, NULL);
> +if (err < 0)
> +goto fail;
> +}
>  
>  priv->sei_needed = 0;
>  
> @@ -681,6 +692,22 @@ static int
> vaapi_encode_h264_init_picture_params(AVCodecContext *avctx,
>  priv->sei_needed |= SEI_RECOVERY_POINT;
>

[FFmpeg-devel] [PATCH v4] avcodec/vaapi_encode_h26x: passthrough A53 CC data as H264/HEVC SEI

2023-01-09 Thread Aman Karmani
From: Aman Karmani 

Signed-off-by: Aman Karmani 
---
avcodec/vaapi_encode_h26x: passthrough A53 CC data as H264/HEVC SEI

v4: updated deps in configure v3: fix build failure v2: add control via
sei parameter

Published-As: 
https://github.com/ffstaging/FFmpeg/releases/tag/pr-ffstaging-46%2Ftmm1%2Fvaapi-a53cc-v4
Fetch-It-Via: git fetch https://github.com/ffstaging/FFmpeg 
pr-ffstaging-46/tmm1/vaapi-a53cc-v4
Pull-Request: https://github.com/ffstaging/FFmpeg/pull/46

Range-diff vs v3:

 1:  149fa8e61c ! 1:  367db524fb avcodec/vaapi_encode_h26x: passthrough A53 CC 
data as H264/HEVC SEI
 @@ Commit message
  
  Signed-off-by: Aman Karmani 
  
 + ## configure ##
 +@@ configure: h264_qsv_decoder_select="h264_mp4toannexb_bsf qsvdec"
 + h264_qsv_encoder_select="atsc_a53 qsvenc"
 + h264_rkmpp_decoder_deps="rkmpp"
 + h264_rkmpp_decoder_select="h264_mp4toannexb_bsf"
 +-h264_vaapi_encoder_select="cbs_h264 vaapi_encode"
 ++h264_vaapi_encoder_select="atsc_a53 cbs_h264 vaapi_encode"
 + h264_v4l2m2m_decoder_deps="v4l2_m2m h264_v4l2_m2m"
 + h264_v4l2m2m_decoder_select="h264_mp4toannexb_bsf"
 + h264_v4l2m2m_encoder_deps="v4l2_m2m h264_v4l2_m2m"
 +@@ configure: hevc_qsv_encoder_select="hevcparse qsvenc"
 + hevc_rkmpp_decoder_deps="rkmpp"
 + hevc_rkmpp_decoder_select="hevc_mp4toannexb_bsf"
 + hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
 +-hevc_vaapi_encoder_select="cbs_h265 vaapi_encode"
 ++hevc_vaapi_encoder_select="atsc_a53 cbs_h265 vaapi_encode"
 + hevc_v4l2m2m_decoder_deps="v4l2_m2m hevc_v4l2_m2m"
 + hevc_v4l2m2m_decoder_select="hevc_mp4toannexb_bsf"
 + hevc_v4l2m2m_encoder_deps="v4l2_m2m hevc_v4l2_m2m"
 +
   ## libavcodec/vaapi_encode_h264.c ##
  @@
   #include "libavutil/internal.h"


 configure  |  4 ++--
 libavcodec/vaapi_encode_h264.c | 33 +++-
 libavcodec/vaapi_encode_h265.c | 35 +-
 3 files changed, 68 insertions(+), 4 deletions(-)

diff --git a/configure b/configure
index e54649fa48..5ba1395bea 100755
--- a/configure
+++ b/configure
@@ -3191,7 +3191,7 @@ h264_qsv_decoder_select="h264_mp4toannexb_bsf qsvdec"
 h264_qsv_encoder_select="atsc_a53 qsvenc"
 h264_rkmpp_decoder_deps="rkmpp"
 h264_rkmpp_decoder_select="h264_mp4toannexb_bsf"
-h264_vaapi_encoder_select="cbs_h264 vaapi_encode"
+h264_vaapi_encoder_select="atsc_a53 cbs_h264 vaapi_encode"
 h264_v4l2m2m_decoder_deps="v4l2_m2m h264_v4l2_m2m"
 h264_v4l2m2m_decoder_select="h264_mp4toannexb_bsf"
 h264_v4l2m2m_encoder_deps="v4l2_m2m h264_v4l2_m2m"
@@ -3208,7 +3208,7 @@ hevc_qsv_encoder_select="hevcparse qsvenc"
 hevc_rkmpp_decoder_deps="rkmpp"
 hevc_rkmpp_decoder_select="hevc_mp4toannexb_bsf"
 hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
-hevc_vaapi_encoder_select="cbs_h265 vaapi_encode"
+hevc_vaapi_encoder_select="atsc_a53 cbs_h265 vaapi_encode"
 hevc_v4l2m2m_decoder_deps="v4l2_m2m hevc_v4l2_m2m"
 hevc_v4l2m2m_decoder_select="hevc_mp4toannexb_bsf"
 hevc_v4l2m2m_encoder_deps="v4l2_m2m hevc_v4l2_m2m"
diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c
index b1b503b2a6..9f9d77a0e9 100644
--- a/libavcodec/vaapi_encode_h264.c
+++ b/libavcodec/vaapi_encode_h264.c
@@ -26,6 +26,7 @@
 #include "libavutil/internal.h"
 #include "libavutil/opt.h"
 
+#include "atsc_a53.h"
 #include "avcodec.h"
 #include "cbs.h"
 #include "cbs_h264.h"
@@ -40,6 +41,7 @@ enum {
 SEI_TIMING = 0x01,
 SEI_IDENTIFIER = 0x02,
 SEI_RECOVERY_POINT = 0x04,
+SEI_A53_CC = 0x08,
 };
 
 // Random (version 4) ISO 11578 UUID.
@@ -98,6 +100,8 @@ typedef struct VAAPIEncodeH264Context {
 H264RawSEIRecoveryPointsei_recovery_point;
 SEIRawUserDataUnregistered sei_identifier;
 char  *sei_identifier_string;
+SEIRawUserDataRegistered   sei_a53cc;
+void  *sei_a53cc_data;
 
 int aud_needed;
 int sei_needed;
@@ -248,6 +252,13 @@ static int 
vaapi_encode_h264_write_extra_header(AVCodecContext *avctx,
 if (err < 0)
 goto fail;
 }
+if (priv->sei_needed & SEI_A53_CC) {
+err = ff_cbs_sei_add_message(priv->cbc, au, 1,
+ 
SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35,
+ >sei_a53cc, NULL);
+if (err < 0)
+goto fail;
+}
 
 priv->sei_needed = 0;
 
@@ -681,6 +692,22 @@ static int 
vaapi_encode_h264_init_picture_params(AVCodecContext *avctx,
 priv->sei_needed |= SEI_RECOVERY_POINT;
 }
 
+if (priv->sei & SEI_A53_CC) {
+int err;
+size_t sei_a53cc_len;
+av_freep(>sei_a53cc_data);
+err = ff_alloc_a53_sei(pic->input_image, 0, >sei_a53cc_data, 
_a53cc_len);
+if (err < 0)
+return err;
+if (priv->sei_a53cc_data !=