On 07/11/2016 05:14 PM, Jean-Christophe Trotin wrote:
> This patch adds the H.264 video encoding capability in the V4L2 HVA
> video encoder driver for STMicroelectronics SoC (hva-h264.c).
> 
> The main supported features are:
> - profile: baseline, main, high, stereo high
> - level: up to 4.2
> - bitrate mode: CBR, VBR
> - entropy mode: CABAC, CAVLC
> - video aspect: 1x1 only
> 
> Signed-off-by: Yannick Fertre <yannick.fer...@st.com>
> Signed-off-by: Jean-Christophe Trotin <jean-christophe.tro...@st.com>
> ---
>  drivers/media/platform/sti/hva/Makefile   |    2 +-
>  drivers/media/platform/sti/hva/hva-h264.c | 1053 
> +++++++++++++++++++++++++++++
>  drivers/media/platform/sti/hva/hva-v4l2.c |  107 ++-
>  drivers/media/platform/sti/hva/hva.h      |  115 +++-
>  4 files changed, 1270 insertions(+), 7 deletions(-)
>  create mode 100644 drivers/media/platform/sti/hva/hva-h264.c
> 

<snip>

> diff --git a/drivers/media/platform/sti/hva/hva.h 
> b/drivers/media/platform/sti/hva/hva.h
> index 9a1b503b..a81f313 100644
> --- a/drivers/media/platform/sti/hva/hva.h
> +++ b/drivers/media/platform/sti/hva/hva.h
> @@ -23,6 +23,9 @@
>  
>  #define HVA_PREFIX "[---:----]"
>  
> +extern const struct hva_enc nv12h264enc;
> +extern const struct hva_enc nv21h264enc;
> +
>  /**
>   * struct hva_frameinfo - information about hva frame
>   *
> @@ -67,13 +70,35 @@ struct hva_streaminfo {
>   * @gop_size:       groupe of picture size
>   * @bitrate:        bitrate (in kbps)
>   * @aspect:         video aspect
> + * @profile:        H.264 profile
> + * @level:          H.264 level
> + * @entropy_mode:   H.264 entropy mode (CABAC or CVLC)
> + * @cpb_size:       coded picture buffer size (in kbps)
> + * @dct8x8:         transform mode 8x8 enable
> + * @qpmin:          minimum quantizer
> + * @qpmax:          maximum quantizer
> + * @vui_sar:        pixel aspect ratio enable
> + * @vui_sar_idc:    pixel aspect ratio identifier
> + * @sei_fp:         sei frame packing arrangement enable
> + * @sei_fp_type:    sei frame packing arrangement type
>   */
>  struct hva_controls {
> -     struct v4l2_fract                       time_per_frame;
> -     enum v4l2_mpeg_video_bitrate_mode       bitrate_mode;
> -     u32                                     gop_size;
> -     u32                                     bitrate;
> -     enum v4l2_mpeg_video_aspect             aspect;
> +     struct v4l2_fract                                       time_per_frame;
> +     enum v4l2_mpeg_video_bitrate_mode                       bitrate_mode;
> +     u32                                                     gop_size;
> +     u32                                                     bitrate;
> +     enum v4l2_mpeg_video_aspect                             aspect;
> +     enum v4l2_mpeg_video_h264_profile                       profile;
> +     enum v4l2_mpeg_video_h264_level                         level;
> +     enum v4l2_mpeg_video_h264_entropy_mode                  entropy_mode;
> +     u32                                                     cpb_size;
> +     bool                                                    dct8x8;
> +     u32                                                     qpmin;
> +     u32                                                     qpmax;
> +     bool                                                    vui_sar;
> +     enum v4l2_mpeg_video_h264_vui_sar_idc                   vui_sar_idc;
> +     bool                                                    sei_fp;
> +     enum v4l2_mpeg_video_h264_sei_fp_arrangement_type       sei_fp_type;
>  };
>  
>  /**
> @@ -281,4 +306,84 @@ struct hva_enc {
>                                 struct hva_stream *stream);
>  };
>  
> +static inline const char *profile_str(unsigned int p)
> +{
> +     switch (p) {
> +     case V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE:
> +             return "baseline profile";
> +     case V4L2_MPEG_VIDEO_H264_PROFILE_MAIN:
> +             return "main profile";
> +     case V4L2_MPEG_VIDEO_H264_PROFILE_EXTENDED:
> +             return "extended profile";
> +     case V4L2_MPEG_VIDEO_H264_PROFILE_HIGH:
> +             return "high profile";
> +     case V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10:
> +             return "high 10 profile";
> +     case V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422:
> +             return "high 422 profile";
> +     case V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_PREDICTIVE:
> +             return "high 444 predictive profile";
> +     case V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_10_INTRA:
> +             return "high 10 intra profile";
> +     case V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_422_INTRA:
> +             return "high 422 intra profile";
> +     case V4L2_MPEG_VIDEO_H264_PROFILE_HIGH_444_INTRA:
> +             return "high 444 intra profile";
> +     case V4L2_MPEG_VIDEO_H264_PROFILE_CAVLC_444_INTRA:
> +             return "calvc 444 intra profile";
> +     case V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_BASELINE:
> +             return "scalable baseline profile";
> +     case V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH:
> +             return "scalable high profile";
> +     case V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH_INTRA:
> +             return "scalable high intra profile";
> +     case V4L2_MPEG_VIDEO_H264_PROFILE_STEREO_HIGH:
> +             return "stereo high profile";
> +     case V4L2_MPEG_VIDEO_H264_PROFILE_MULTIVIEW_HIGH:
> +             return "multiview high profile";
> +     default:
> +             return "unknown profile";
> +     }
> +}
> +
> +static inline const char *level_str(enum v4l2_mpeg_video_h264_level l)
> +{
> +     switch (l) {
> +     case V4L2_MPEG_VIDEO_H264_LEVEL_1_0:
> +             return "level 1.0";
> +     case V4L2_MPEG_VIDEO_H264_LEVEL_1B:
> +             return "level 1b";
> +     case V4L2_MPEG_VIDEO_H264_LEVEL_1_1:
> +             return "level 1.1";
> +     case V4L2_MPEG_VIDEO_H264_LEVEL_1_2:
> +             return "level 1.2";
> +     case V4L2_MPEG_VIDEO_H264_LEVEL_1_3:
> +             return "level 1.3";
> +     case V4L2_MPEG_VIDEO_H264_LEVEL_2_0:
> +             return "level 2.0";
> +     case V4L2_MPEG_VIDEO_H264_LEVEL_2_1:
> +             return "level 2.1";
> +     case V4L2_MPEG_VIDEO_H264_LEVEL_2_2:
> +             return "level 2.2";
> +     case V4L2_MPEG_VIDEO_H264_LEVEL_3_0:
> +             return "level 3.0";
> +     case V4L2_MPEG_VIDEO_H264_LEVEL_3_1:
> +             return "level 3.1";
> +     case V4L2_MPEG_VIDEO_H264_LEVEL_3_2:
> +             return "level 3.2";
> +     case V4L2_MPEG_VIDEO_H264_LEVEL_4_0:
> +             return "level 4.0";
> +     case V4L2_MPEG_VIDEO_H264_LEVEL_4_1:
> +             return "level 4.1";
> +     case V4L2_MPEG_VIDEO_H264_LEVEL_4_2:
> +             return "level 4.2";
> +     case V4L2_MPEG_VIDEO_H264_LEVEL_5_0:
> +             return "level 5.0";
> +     case V4L2_MPEG_VIDEO_H264_LEVEL_5_1:
> +             return "level 5.1";
> +     default:
> +             return "unknown level";
> +     }
> +}

These two static inlines should be replaced. You can get the menu strings 
directly
with v4l2_ctrl_get_menu(). No need to duplicate these strings here.

Regards,

        Hans

> +
>  #endif /* HVA_H */
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to