media: v4l2-ctrl: Add frame-skip std encoder control
Adds encoders standard v4l2 control for frame-skip. The control is a copy of a custom encoder control so that other v4l2 encoder drivers can use it. Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org> Reviewed-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
Родитель
69ff4b2caa
Коммит
44f5b2fffc
|
@ -602,6 +602,40 @@ enum v4l2_mpeg_video_bitrate_mode -
|
||||||
Encoder will decide the appropriate quantization parameter and
|
Encoder will decide the appropriate quantization parameter and
|
||||||
bitrate to produce requested frame quality.
|
bitrate to produce requested frame quality.
|
||||||
|
|
||||||
|
|
||||||
|
``V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE (enum)``
|
||||||
|
|
||||||
|
enum v4l2_mpeg_video_frame_skip_mode -
|
||||||
|
Indicates in what conditions the encoder should skip frames. If
|
||||||
|
encoding a frame would cause the encoded stream to be larger then a
|
||||||
|
chosen data limit then the frame will be skipped. Possible values
|
||||||
|
are:
|
||||||
|
|
||||||
|
|
||||||
|
.. tabularcolumns:: |p{9.2cm}|p{8.3cm}|
|
||||||
|
|
||||||
|
.. raw:: latex
|
||||||
|
|
||||||
|
\small
|
||||||
|
|
||||||
|
.. flat-table::
|
||||||
|
:header-rows: 0
|
||||||
|
:stub-columns: 0
|
||||||
|
|
||||||
|
* - ``V4L2_MPEG_FRAME_SKIP_MODE_DISABLED``
|
||||||
|
- Frame skip mode is disabled.
|
||||||
|
* - ``V4L2_MPEG_FRAME_SKIP_MODE_LEVEL_LIMIT``
|
||||||
|
- Frame skip mode enabled and buffer limit is set by the chosen
|
||||||
|
level and is defined by the standard.
|
||||||
|
* - ``V4L2_MPEG_FRAME_SKIP_MODE_BUF_LIMIT``
|
||||||
|
- Frame skip mode enabled and buffer limit is set by the
|
||||||
|
:ref:`VBV (MPEG1/2/4) <v4l2-mpeg-video-vbv-size>` or
|
||||||
|
:ref:`CPB (H264) buffer size <v4l2-mpeg-video-h264-cpb-size>` control.
|
||||||
|
|
||||||
|
.. raw:: latex
|
||||||
|
|
||||||
|
\normalsize
|
||||||
|
|
||||||
``V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION (integer)``
|
``V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION (integer)``
|
||||||
For every captured frame, skip this many subsequent frames (default
|
For every captured frame, skip this many subsequent frames (default
|
||||||
0).
|
0).
|
||||||
|
@ -1173,6 +1207,8 @@ enum v4l2_mpeg_video_h264_entropy_mode -
|
||||||
Quantization parameter for an B frame for MPEG4. Valid range: from 1
|
Quantization parameter for an B frame for MPEG4. Valid range: from 1
|
||||||
to 31.
|
to 31.
|
||||||
|
|
||||||
|
.. _v4l2-mpeg-video-vbv-size:
|
||||||
|
|
||||||
``V4L2_CID_MPEG_VIDEO_VBV_SIZE (integer)``
|
``V4L2_CID_MPEG_VIDEO_VBV_SIZE (integer)``
|
||||||
The Video Buffer Verifier size in kilobytes, it is used as a
|
The Video Buffer Verifier size in kilobytes, it is used as a
|
||||||
limitation of frame skip. The VBV is defined in the standard as a
|
limitation of frame skip. The VBV is defined in the standard as a
|
||||||
|
@ -1210,6 +1246,8 @@ enum v4l2_mpeg_video_h264_entropy_mode -
|
||||||
Force a key frame for the next queued buffer. Applicable to
|
Force a key frame for the next queued buffer. Applicable to
|
||||||
encoders. This is a general, codec-agnostic keyframe control.
|
encoders. This is a general, codec-agnostic keyframe control.
|
||||||
|
|
||||||
|
.. _v4l2-mpeg-video-h264-cpb-size:
|
||||||
|
|
||||||
``V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE (integer)``
|
``V4L2_CID_MPEG_VIDEO_H264_CPB_SIZE (integer)``
|
||||||
The Coded Picture Buffer size in kilobytes, it is used as a
|
The Coded Picture Buffer size in kilobytes, it is used as a
|
||||||
limitation of frame skip. The CPB is defined in the H264 standard as
|
limitation of frame skip. The CPB is defined in the H264 standard as
|
||||||
|
|
|
@ -591,6 +591,12 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
|
||||||
"External",
|
"External",
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
static const char * const mpeg_video_frame_skip[] = {
|
||||||
|
"Disabled",
|
||||||
|
"Level Limit",
|
||||||
|
"VBV/CPB Limit",
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:
|
case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:
|
||||||
|
@ -652,6 +658,8 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
|
||||||
return flash_strobe_source;
|
return flash_strobe_source;
|
||||||
case V4L2_CID_MPEG_VIDEO_HEADER_MODE:
|
case V4L2_CID_MPEG_VIDEO_HEADER_MODE:
|
||||||
return header_mode;
|
return header_mode;
|
||||||
|
case V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE:
|
||||||
|
return mpeg_video_frame_skip;
|
||||||
case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE:
|
case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE:
|
||||||
return multi_slice;
|
return multi_slice;
|
||||||
case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:
|
case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:
|
||||||
|
@ -846,6 +854,7 @@ const char *v4l2_ctrl_get_name(u32 id)
|
||||||
case V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE: return "H264 MB Level Rate Control";
|
case V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE: return "H264 MB Level Rate Control";
|
||||||
case V4L2_CID_MPEG_VIDEO_HEADER_MODE: return "Sequence Header Mode";
|
case V4L2_CID_MPEG_VIDEO_HEADER_MODE: return "Sequence Header Mode";
|
||||||
case V4L2_CID_MPEG_VIDEO_MAX_REF_PIC: return "Max Number of Reference Pics";
|
case V4L2_CID_MPEG_VIDEO_MAX_REF_PIC: return "Max Number of Reference Pics";
|
||||||
|
case V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE: return "Frame Skip Mode";
|
||||||
case V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP: return "H263 I-Frame QP Value";
|
case V4L2_CID_MPEG_VIDEO_H263_I_FRAME_QP: return "H263 I-Frame QP Value";
|
||||||
case V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP: return "H263 P-Frame QP Value";
|
case V4L2_CID_MPEG_VIDEO_H263_P_FRAME_QP: return "H263 P-Frame QP Value";
|
||||||
case V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP: return "H263 B-Frame QP Value";
|
case V4L2_CID_MPEG_VIDEO_H263_B_FRAME_QP: return "H263 B-Frame QP Value";
|
||||||
|
@ -1268,6 +1277,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
|
||||||
case V4L2_CID_FLASH_LED_MODE:
|
case V4L2_CID_FLASH_LED_MODE:
|
||||||
case V4L2_CID_FLASH_STROBE_SOURCE:
|
case V4L2_CID_FLASH_STROBE_SOURCE:
|
||||||
case V4L2_CID_MPEG_VIDEO_HEADER_MODE:
|
case V4L2_CID_MPEG_VIDEO_HEADER_MODE:
|
||||||
|
case V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE:
|
||||||
case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE:
|
case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE:
|
||||||
case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:
|
case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE:
|
||||||
case V4L2_CID_MPEG_VIDEO_H264_LEVEL:
|
case V4L2_CID_MPEG_VIDEO_H264_LEVEL:
|
||||||
|
|
|
@ -744,6 +744,12 @@ enum v4l2_cid_mpeg_video_hevc_size_of_length_field {
|
||||||
#define V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES (V4L2_CID_MPEG_BASE + 643)
|
#define V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES (V4L2_CID_MPEG_BASE + 643)
|
||||||
#define V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR (V4L2_CID_MPEG_BASE + 644)
|
#define V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR (V4L2_CID_MPEG_BASE + 644)
|
||||||
#define V4L2_CID_MPEG_VIDEO_CONSTANT_QUALITY (V4L2_CID_MPEG_BASE + 645)
|
#define V4L2_CID_MPEG_VIDEO_CONSTANT_QUALITY (V4L2_CID_MPEG_BASE + 645)
|
||||||
|
#define V4L2_CID_MPEG_VIDEO_FRAME_SKIP_MODE (V4L2_CID_MPEG_BASE + 646)
|
||||||
|
enum v4l2_mpeg_video_frame_skip_mode {
|
||||||
|
V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_DISABLED = 0,
|
||||||
|
V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_LEVEL_LIMIT = 1,
|
||||||
|
V4L2_MPEG_VIDEO_FRAME_SKIP_MODE_BUF_LIMIT = 2,
|
||||||
|
};
|
||||||
|
|
||||||
/* MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */
|
/* MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */
|
||||||
#define V4L2_CID_MPEG_CX2341X_BASE (V4L2_CTRL_CLASS_MPEG | 0x1000)
|
#define V4L2_CID_MPEG_CX2341X_BASE (V4L2_CTRL_CLASS_MPEG | 0x1000)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче