static struct firmware *firmware_new(const char *path) { int ret; const char *sha1; struct firmware *firmware; const char *firmware_repository_path = config_get(CONFIG_REPOSITORY_PATH); ULOGD("indexing firmware %s", path); firmware = calloc(1, sizeof(*firmware)); if (firmware == NULL) return NULL; firmware->entity.folder = folder_find(FIRMWARES_FOLDER_NAME); if (ut_file_is_dir(path)) { firmware->path = realpath(path, NULL); if (firmware->path == NULL) { ret = -errno; ULOGE("strdup: %m"); goto err; } ULOGI("real path is %s", firmware->path); } else { ret = asprintf(&firmware->path, "%s/%s", firmware_repository_path, path); if (ret == -1) { firmware->path = NULL; ULOGE("asprintf error"); errno = -ENOMEM; goto err; } } /* force sha1 computation while in parallel section */ sha1 = compute_sha1(firmware); if (sha1 == NULL) goto err; ret = mount_firmware(firmware); if (ret < 0) ULOGW("read_firmware_info failed: %s\n", strerror(-ret)); ULOGD("indexing firmware %s done", path); return firmware; err: firmware_delete(&firmware); return NULL; }
static void client_event_cb(struct pomp_ctx *ctx, enum pomp_event event, struct pomp_conn *conn, const struct pomp_msg *msg, void *userdata) { int fd, msgid; unsigned int bufsize; void *video_buffer; GstVideoFormat videoformat; unsigned int width, height; switch (event) { case POMP_EVENT_CONNECTED: ULOGI("connected to pimp user filter"); break; case POMP_EVENT_DISCONNECTED: ULOGI("disconnected from pimp user filter"); break; case POMP_EVENT_MSG: switch (msgid = pomp_msg_get_id(msg)) { case SEND_FD: pomp_msg_read(msg, "%x%u%u%u%u", &fd, &bufsize, &videoformat, &width, &height); ULOGI("received a FD from pimp: %d", fd); video_buffer = mmap(NULL, bufsize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); s_app.process(video_buffer, bufsize, videoformat, width, height, s_app.priv); pomp_ctx_send(ctx, BUFFER_PROCESSING_DONE, NULL); break; default: ULOGW("received unknown message id from pimp : %d", msgid); break; } break; default: ULOGE("Unknown event: %d", event); break; } }