struct media_device *media_open_debug( const char *name, void (*debug_handler)(void *, ...), void *debug_priv) { struct media_device *media; int ret; media = calloc(1, sizeof(*media)); if (media == NULL) return NULL; media_debug_set_handler(media, debug_handler, debug_priv); media_dbg(media, "Opening media device %s\n", name); media->fd = open(name, O_RDWR); if (media->fd < 0) { media_close(media); media_dbg(media, "%s: Can't open media device %s\n", __func__, name); return NULL; } ret = ioctl(media->fd, MEDIA_IOC_DEVICE_INFO, &media->info); if (ret < 0) { media_dbg(media, "%s: Unable to retrieve media device " "information for device %s (%s)\n", __func__, name, strerror(errno)); media_close(media); return NULL; } media_dbg(media, "Enumerating entities\n"); ret = media_enum_entities(media); if (ret < 0) { media_dbg(media, "%s: Unable to enumerate entities for device %s (%s)\n", __func__, name, strerror(-ret)); media_close(media); return NULL; } media_dbg(media, "Found %u entities\n", media->entities_count); media_dbg(media, "Enumerating pads and links\n"); ret = media_enum_links(media); if (ret < 0) { media_dbg(media, "%s: Unable to enumerate pads and linksfor device %s\n", __func__, name); media_close(media); return NULL; } return media; }
/* * media_open - */ struct media_device *media_open(const char *name, int verbose) { struct media_device *media; int ret; media = malloc(sizeof(*media)); if (media == NULL) { printf("%s: unable to allocate memory\n", __func__); return NULL; } memset(media, 0, sizeof(*media)); if (verbose) printf("Opening media device %s\n", name); media->fd = open(name, O_RDWR); if (media->fd < 0) { media_close(media); printf("%s: Can't open media device %s\n", __func__, name); return NULL; } if (verbose) printf("Enumerating entities\n"); ret = media_enum_entities(media); if (ret < 0) { printf("%s: Unable to enumerate entities for device %s (%s)\n", __func__, name, strerror(-ret)); media_close(media); return NULL; } if (verbose) { printf("Found %u entities\n", media->entities_count); printf("Enumerating pads and links\n"); } ret = media_enum_links(media); if (ret < 0) { printf("%s: Unable to enumerate pads and linksfor device %s\n", __func__, name); media_close(media); return NULL; } return media; }