• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright 2022 Collabora Ltd.
4  */
5 
6 #ifndef V4L2_TRACER_COMMON_H
7 #define V4L2_TRACER_COMMON_H
8 
9 #include "v4l2-info.h"
10 #include "codec-fwht.h"
11 #include "media-info.h"
12 #include <algorithm>
13 #include <dirent.h>
14 #include <fcntl.h>
15 #include <getopt.h>
16 #include <json.h>
17 #include <linux/media.h>
18 #include <linux/videodev2.h>
19 #include <list>
20 #include <poll.h>
21 #include <pthread.h>
22 #include <stdexcept>
23 #include <stdio.h>
24 #include <stdlib.h>
25 #include <string.h>
26 #include <sys/ioctl.h>
27 #include <sys/mman.h>
28 #include <sys/types.h>
29 #include <sys/stat.h>
30 #include <unistd.h>
31 #include <unordered_map>
32 #include <vector>
33 
34 #define STR(x) #x
35 #define STRING(x) STR(x)
36 
37 #ifdef HAVE_STRERRORNAME_NP
38 #define STRERR(x) strerrorname_np(x)
39 #else
40 #define STRERR(x) strerror(x)
41 #endif
42 
43 #ifndef __FILE_NAME__
44 #define __FILE_NAME__ __FILE__
45 #endif
46 
47 #define line_info(fmt, args...)					\
48 	do {								\
49 		fprintf(stderr, "%s:%s:%d " fmt "\n",			\
50 		        __FILE_NAME__, __func__, __LINE__, ##args);	\
51 	} while (0)							\
52 
53 #define debug_line_info(fmt, args...)		\
54 	do {					\
55 		if (is_debug())			\
56 			line_info(fmt, ##args);	\
57 	} while (0)				\
58 
59 struct val_def {
60 	__s64 val;
61 	const char *str;
62 };
63 
64 bool is_debug(void);
65 bool is_verbose(void);
66 void print_v4l2_tracer_info(void);
67 void print_usage(void);
68 std::string ver2s(unsigned int version);
69 std::string number2s_oct(long num);
70 std::string number2s(long num);
71 std::string val2s(long val, const val_def *def);
72 std::string fl2s(unsigned val, const flag_def *def);
73 std::string fl2s_buffer(__u32 flags);
74 std::string fl2s_fwht(__u32 flags);
75 long s2number(const char *char_str);
76 long s2val(const char *char_str, const val_def *def);
77 unsigned long s2flags(const char *char_str, const flag_def *def);
78 unsigned long s2flags_buffer(const char *char_str);
79 unsigned long s2flags_fwht(const char *char_str);
80 std::string which2s(unsigned long which);
81 std::string get_path_media(std::string driver);
82 std::string get_path_video(int media_fd, std::list<std::string> linked_entities);
83 std::list<std::string> get_linked_entities(int media_fd, std::string path_video);
84 
85 constexpr val_def which_val_def[] = {
86 	{ V4L2_CTRL_WHICH_CUR_VAL,	"V4L2_CTRL_WHICH_CUR_VAL" },
87 	{ V4L2_CTRL_WHICH_DEF_VAL,	"V4L2_CTRL_WHICH_DEF_VAL" },
88 	{ V4L2_CTRL_WHICH_REQUEST_VAL,	"V4L2_CTRL_WHICH_REQUEST_VAL" },
89 	{ -1, "" }
90 };
91 
92 constexpr val_def open_val_def[] = {
93 	{ O_RDONLY,	"O_RDONLY" },
94 	{ O_WRONLY,	"O_WRONLY" },
95 	{ O_RDWR,	"O_RDWR" },
96 	{ -1, "" }
97 };
98 
99 #include "v4l2-tracer-info-gen.h"
100 
101 #endif
102