#include "media.h"
#include "options.h"
#include "subdev.h"
-#include "tools.h"
/* -----------------------------------------------------------------------------
* Links setup
* Formats setup
*/
-static struct {
- const char *name;
- enum v4l2_mbus_pixelcode code;
-} mbus_formats[] = {
- { "YUYV", V4L2_MBUS_FMT_YUYV16_1X16 },
- { "UYVY", V4L2_MBUS_FMT_UYVY16_1X16 },
- { "SGRBG10", V4L2_MBUS_FMT_SGRBG10_1X10 },
- { "SGRBG10_DPCM8", V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8 },
-};
-
-static const char *pixelcode_to_string(enum v4l2_mbus_pixelcode code)
-{
- unsigned int i;
-
- for (i = 0; i < ARRAY_SIZE(mbus_formats); ++i) {
- if (mbus_formats[i].code == code)
- return mbus_formats[i].name;
- }
-
- return "unknown";
-}
-
static int parse_format(struct v4l2_mbus_framefmt *format, const char *p, char **endp)
{
+ enum v4l2_mbus_pixelcode code;
unsigned int width, height;
- unsigned int i;
char *end;
for (; isspace(*p); ++p);
for (end = (char *)p; !isspace(*end) && *end != '\0'; ++end);
- for (i = 0; i < ARRAY_SIZE(mbus_formats); ++i) {
- if (strncmp(mbus_formats[i].name, p, end - p) == 0)
- break;
- }
-
- if (i == ARRAY_SIZE(mbus_formats))
+ code = string_to_pixelcode(p, end - p);
+ if (code == (enum v4l2_mbus_pixelcode)-1)
return -EINVAL;
for (p = end; isspace(*p); ++p);
memset(format, 0, sizeof(*format));
format->width = width;
format->height = height;
- format->code = mbus_formats[i].code;
+ format->code = code;
return 0;
}
#include <linux/media.h>
#include "media.h"
+#include "subdev.h"
#include "tools.h"
static const char *media_entity_type_to_string(unsigned type)
}
}
+static const char *media_pad_type_to_string(unsigned type)
+{
+ static const struct {
+ __u32 type;
+ const char *name;
+ } types[] = {
+ { MEDIA_PAD_TYPE_INPUT, "Input" },
+ { MEDIA_PAD_TYPE_OUTPUT, "Output" },
+ };
+
+ unsigned int i;
+
+ for (i = 0; i < ARRAY_SIZE(types); i++) {
+ if (types[i].type == type)
+ return types[i].name;
+ }
+
+ return "Unknown";
+}
+
/*
* media_entity_remote_pad -
*/
{
unsigned int i, j, k;
unsigned int padding;
+ int ret;
printf("Device topology\n");
printf("%*cdevice node name %s\n", padding, ' ', entity->devname);
for (j = 0; j < entity->info.pads; j++) {
+ struct media_entity_pad *pad = &entity->pads[j];
+ struct v4l2_mbus_framefmt format;
+
+ printf("\tpad%u: %s", j, media_pad_type_to_string(pad->type));
+
+ if (entity->info.type == MEDIA_ENTITY_TYPE_SUBDEV) {
+ ret = v4l2_subdev_get_format(entity, &format, j,
+ V4L2_SUBDEV_FORMAT_ACTIVE);
+ if (ret == 0)
+ printf(" [%s %ux%u]", pixelcode_to_string(format.code),
+ format.width, format.height);
+ }
+
+ printf("\n");
+
for (k = 0; k < entity->info.links; k++) {
struct media_entity_link *link = &entity->links[k];
link->source->index != j)
continue;
- printf("\tpad%u -> '%s':pad%u [", link->source->index,
+ printf("\t\t-> '%s':pad%u [",
link->sink->entity->info.name, link->sink->index);
if (link->flags & MEDIA_LINK_FLAG_IMMUTABLE)
#include "media.h"
#include "subdev.h"
+#include "tools.h"
+
+static struct {
+ const char *name;
+ enum v4l2_mbus_pixelcode code;
+} mbus_formats[] = {
+ { "YUYV", V4L2_MBUS_FMT_YUYV16_1X16 },
+ { "UYVY", V4L2_MBUS_FMT_UYVY16_1X16 },
+ { "SGRBG10", V4L2_MBUS_FMT_SGRBG10_1X10 },
+ { "SGRBG10_DPCM8", V4L2_MBUS_FMT_SGRBG10_DPCM8_1X8 },
+};
+
+const char *pixelcode_to_string(enum v4l2_mbus_pixelcode code)
+{
+ unsigned int i;
+
+ for (i = 0; i < ARRAY_SIZE(mbus_formats); ++i) {
+ if (mbus_formats[i].code == code)
+ return mbus_formats[i].name;
+ }
+
+ return "unknown";
+}
+
+enum v4l2_mbus_pixelcode string_to_pixelcode(const char *string,
+ unsigned int length)
+{
+ unsigned int i;
+
+ for (i = 0; i < ARRAY_SIZE(mbus_formats); ++i) {
+ if (strncmp(mbus_formats[i].name, string, length) == 0)
+ break;
+ }
+
+ if (i == ARRAY_SIZE(mbus_formats))
+ return (enum v4l2_mbus_pixelcode)-1;
+
+ return mbus_formats[i].code;
+}
static int v4l2_subdev_open(struct media_entity *entity)
{
struct media_entity;
+const char *pixelcode_to_string(enum v4l2_mbus_pixelcode code);
+enum v4l2_mbus_pixelcode string_to_pixelcode(const char *string,
+ unsigned int length);
+
int v4l2_subdev_get_format(struct media_entity *entity,
struct v4l2_mbus_framefmt *format, unsigned int pad,
enum v4l2_subdev_format which);