diff mbox series

[v4l-utils,2/6] v4l2-ctl: Add function get_codec_type

Message ID 20190120111520.114305-3-dafna3@gmail.com (mailing list archive)
State New, archived
Headers show
Series Support for source change in m2m decoder | expand

Commit Message

Dafna Hirschfeld Jan. 20, 2019, 11:15 a.m. UTC
Add function get_codec_type that returns the type
of codec NOT_CODEC/ENCODER/DEOCDER.
Move the functions get_cap_compose/crop_rect
to the start of the file.

Signed-off-by: Dafna Hirschfeld <dafna3@gmail.com>
---
 utils/v4l2-ctl/v4l2-ctl-streaming.cpp | 126 ++++++++++++++++++--------
 1 file changed, 88 insertions(+), 38 deletions(-)

Comments

Hans Verkuil Jan. 21, 2019, 9:24 a.m. UTC | #1
On 01/20/2019 12:15 PM, Dafna Hirschfeld wrote:
> Add function get_codec_type that returns the type
> of codec NOT_CODEC/ENCODER/DEOCDER.
> Move the functions get_cap_compose/crop_rect
> to the start of the file.
> 
> Signed-off-by: Dafna Hirschfeld <dafna3@gmail.com>
> ---
>  utils/v4l2-ctl/v4l2-ctl-streaming.cpp | 126 ++++++++++++++++++--------
>  1 file changed, 88 insertions(+), 38 deletions(-)
> 
> diff --git a/utils/v4l2-ctl/v4l2-ctl-streaming.cpp b/utils/v4l2-ctl/v4l2-ctl-streaming.cpp
> index 8a98b6bd..3e81fdfc 100644
> --- a/utils/v4l2-ctl/v4l2-ctl-streaming.cpp
> +++ b/utils/v4l2-ctl/v4l2-ctl-streaming.cpp
> @@ -82,6 +82,12 @@ static bool support_out_crop;
>  #define TS_WINDOW 241
>  #define FILE_HDR_ID			v4l2_fourcc('V', 'h', 'd', 'r')
>  
> +enum codec_type {
> +	NOT_CODEC,
> +	ENCODER,
> +	DECODER
> +};
> +
>  class fps_timestamps {
>  private:
>  	unsigned idx;
> @@ -334,6 +340,88 @@ void streaming_usage(void)
>  	       	V4L_STREAM_PORT);
>  }
>  
> +static int get_codec_type(cv4l_fd &fd, enum codec_type &codec_type)

Just have this function return enum codec_type, no need for it to return -1.
If it encounters any errors then it is not a codec.

Regards,

	Hans

> +{
> +	struct v4l2_fmtdesc fmt_desc;
> +	int num_cap_fmts = 0;
> +	int num_compressed_cap_fmts = 0;
> +	int num_out_fmts = 0;
> +	int num_compressed_out_fmts = 0;
> +
> +	codec_type = NOT_CODEC;
> +	if (!fd.has_vid_m2m())
> +		return 0;
> +
> +	if (fd.enum_fmt(fmt_desc, true, 0, V4L2_BUF_TYPE_VIDEO_CAPTURE))
> +		return -1;
> +
> +	do {
> +		if (fmt_desc.flags & V4L2_FMT_FLAG_COMPRESSED)
> +			num_compressed_cap_fmts++;
> +		num_cap_fmts++;
> +	} while (!fd.enum_fmt(fmt_desc));
> +
> +
> +	if (fd.enum_fmt(fmt_desc, true, 0, V4L2_BUF_TYPE_VIDEO_OUTPUT))
> +		return -1;
> +
> +	do {
> +		if (fmt_desc.flags & V4L2_FMT_FLAG_COMPRESSED)
> +			num_compressed_out_fmts++;
> +		num_out_fmts++;
> +	} while (!fd.enum_fmt(fmt_desc));
> +
> +	if (num_compressed_out_fmts == 0 && num_compressed_cap_fmts == num_cap_fmts) {
> +		codec_type = ENCODER;
> +		return 0;
> +	}
> +
> +	if (num_compressed_cap_fmts == 0 && num_compressed_out_fmts == num_out_fmts) {
> +		codec_type = DECODER;
> +		return 0;
> +	}
> +
> +	return 0;
> +}
> +
> +static int get_cap_compose_rect(cv4l_fd &fd)
> +{
> +	v4l2_selection sel;
> +
> +	memset(&sel, 0, sizeof(sel));
> +	sel.type = vidcap_buftype;
> +	sel.target = V4L2_SEL_TGT_COMPOSE;
> +
> +	if (fd.g_selection(sel) == 0) {
> +		support_cap_compose = true;
> +		composed_width = sel.r.width;
> +		composed_height = sel.r.height;
> +		return 0;
> +	}
> +
> +	support_cap_compose = false;
> +	return 0;
> +}
> +
> +static int get_out_crop_rect(cv4l_fd &fd)
> +{
> +	v4l2_selection sel;
> +
> +	memset(&sel, 0, sizeof(sel));
> +	sel.type = vidout_buftype;
> +	sel.target = V4L2_SEL_TGT_CROP;
> +
> +	if (fd.g_selection(sel) == 0) {
> +		support_out_crop = true;
> +		cropped_width = sel.r.width;
> +		cropped_height = sel.r.height;
> +		return 0;
> +	}
> +
> +	support_out_crop = false;
> +	return 0;
> +}
> +
>  static void set_time_stamp(cv4l_buffer &buf)
>  {
>  	if ((buf.g_flags() & V4L2_BUF_FLAG_TIMESTAMP_MASK) != V4L2_BUF_FLAG_TIMESTAMP_COPY)
> @@ -2109,44 +2197,6 @@ done:
>  		fclose(file[OUT]);
>  }
>  
> -static int get_cap_compose_rect(cv4l_fd &fd)
> -{
> -	v4l2_selection sel;
> -
> -	memset(&sel, 0, sizeof(sel));
> -	sel.type = vidcap_buftype;
> -	sel.target = V4L2_SEL_TGT_COMPOSE;
> -
> -	if (fd.g_selection(sel) == 0) {
> -		support_cap_compose = true;
> -		composed_width = sel.r.width;
> -		composed_height = sel.r.height;
> -		return 0;
> -	}
> -
> -	support_cap_compose = false;
> -	return 0;
> -}
> -
> -static int get_out_crop_rect(cv4l_fd &fd)
> -{
> -	v4l2_selection sel;
> -
> -	memset(&sel, 0, sizeof(sel));
> -	sel.type = vidout_buftype;
> -	sel.target = V4L2_SEL_TGT_CROP;
> -
> -	if (fd.g_selection(sel) == 0) {
> -		support_out_crop = true;
> -		cropped_width = sel.r.width;
> -		cropped_height = sel.r.height;
> -		return 0;
> -	}
> -
> -	support_out_crop = false;
> -	return 0;
> -}
> -
>  void streaming_set(cv4l_fd &fd, cv4l_fd &out_fd)
>  {
>  	cv4l_disable_trace dt(fd);
>
diff mbox series

Patch

diff --git a/utils/v4l2-ctl/v4l2-ctl-streaming.cpp b/utils/v4l2-ctl/v4l2-ctl-streaming.cpp
index 8a98b6bd..3e81fdfc 100644
--- a/utils/v4l2-ctl/v4l2-ctl-streaming.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl-streaming.cpp
@@ -82,6 +82,12 @@  static bool support_out_crop;
 #define TS_WINDOW 241
 #define FILE_HDR_ID			v4l2_fourcc('V', 'h', 'd', 'r')
 
+enum codec_type {
+	NOT_CODEC,
+	ENCODER,
+	DECODER
+};
+
 class fps_timestamps {
 private:
 	unsigned idx;
@@ -334,6 +340,88 @@  void streaming_usage(void)
 	       	V4L_STREAM_PORT);
 }
 
+static int get_codec_type(cv4l_fd &fd, enum codec_type &codec_type)
+{
+	struct v4l2_fmtdesc fmt_desc;
+	int num_cap_fmts = 0;
+	int num_compressed_cap_fmts = 0;
+	int num_out_fmts = 0;
+	int num_compressed_out_fmts = 0;
+
+	codec_type = NOT_CODEC;
+	if (!fd.has_vid_m2m())
+		return 0;
+
+	if (fd.enum_fmt(fmt_desc, true, 0, V4L2_BUF_TYPE_VIDEO_CAPTURE))
+		return -1;
+
+	do {
+		if (fmt_desc.flags & V4L2_FMT_FLAG_COMPRESSED)
+			num_compressed_cap_fmts++;
+		num_cap_fmts++;
+	} while (!fd.enum_fmt(fmt_desc));
+
+
+	if (fd.enum_fmt(fmt_desc, true, 0, V4L2_BUF_TYPE_VIDEO_OUTPUT))
+		return -1;
+
+	do {
+		if (fmt_desc.flags & V4L2_FMT_FLAG_COMPRESSED)
+			num_compressed_out_fmts++;
+		num_out_fmts++;
+	} while (!fd.enum_fmt(fmt_desc));
+
+	if (num_compressed_out_fmts == 0 && num_compressed_cap_fmts == num_cap_fmts) {
+		codec_type = ENCODER;
+		return 0;
+	}
+
+	if (num_compressed_cap_fmts == 0 && num_compressed_out_fmts == num_out_fmts) {
+		codec_type = DECODER;
+		return 0;
+	}
+
+	return 0;
+}
+
+static int get_cap_compose_rect(cv4l_fd &fd)
+{
+	v4l2_selection sel;
+
+	memset(&sel, 0, sizeof(sel));
+	sel.type = vidcap_buftype;
+	sel.target = V4L2_SEL_TGT_COMPOSE;
+
+	if (fd.g_selection(sel) == 0) {
+		support_cap_compose = true;
+		composed_width = sel.r.width;
+		composed_height = sel.r.height;
+		return 0;
+	}
+
+	support_cap_compose = false;
+	return 0;
+}
+
+static int get_out_crop_rect(cv4l_fd &fd)
+{
+	v4l2_selection sel;
+
+	memset(&sel, 0, sizeof(sel));
+	sel.type = vidout_buftype;
+	sel.target = V4L2_SEL_TGT_CROP;
+
+	if (fd.g_selection(sel) == 0) {
+		support_out_crop = true;
+		cropped_width = sel.r.width;
+		cropped_height = sel.r.height;
+		return 0;
+	}
+
+	support_out_crop = false;
+	return 0;
+}
+
 static void set_time_stamp(cv4l_buffer &buf)
 {
 	if ((buf.g_flags() & V4L2_BUF_FLAG_TIMESTAMP_MASK) != V4L2_BUF_FLAG_TIMESTAMP_COPY)
@@ -2109,44 +2197,6 @@  done:
 		fclose(file[OUT]);
 }
 
-static int get_cap_compose_rect(cv4l_fd &fd)
-{
-	v4l2_selection sel;
-
-	memset(&sel, 0, sizeof(sel));
-	sel.type = vidcap_buftype;
-	sel.target = V4L2_SEL_TGT_COMPOSE;
-
-	if (fd.g_selection(sel) == 0) {
-		support_cap_compose = true;
-		composed_width = sel.r.width;
-		composed_height = sel.r.height;
-		return 0;
-	}
-
-	support_cap_compose = false;
-	return 0;
-}
-
-static int get_out_crop_rect(cv4l_fd &fd)
-{
-	v4l2_selection sel;
-
-	memset(&sel, 0, sizeof(sel));
-	sel.type = vidout_buftype;
-	sel.target = V4L2_SEL_TGT_CROP;
-
-	if (fd.g_selection(sel) == 0) {
-		support_out_crop = true;
-		cropped_width = sel.r.width;
-		cropped_height = sel.r.height;
-		return 0;
-	}
-
-	support_out_crop = false;
-	return 0;
-}
-
 void streaming_set(cv4l_fd &fd, cv4l_fd &out_fd)
 {
 	cv4l_disable_trace dt(fd);