struct mxr_layer *mxr_graph_layer_create(struct mxr_device *mdev, int idx) { struct mxr_layer *layer; int ret; struct mxr_layer_ops ops = { .release = mxr_graph_layer_release, .buffer_set = mxr_graph_buffer_set, .stream_set = mxr_graph_stream_set, .format_set = mxr_graph_format_set, .fix_geometry = mxr_graph_fix_geometry, .chromakey_enable = mixer_graph_chromakey_enable, .chromakey_value = mixer_graph_chromakey_value, .change_priority = mixer_graph_change_priority, .layer_blend_enable = mixer_graph_layer_blend_enable, .layer_blend_alpha = mixer_graph_layer_blend_alpha, .pixel_blend_enable= mixer_graph_pixel_blend_enable, }; char name[32]; sprintf(name, "graph%d", idx); layer = mxr_base_layer_create(mdev, idx, name, &ops); if (layer == NULL) { mxr_err(mdev, "failed to initialize layer(%d) base\n", idx); goto fail; } layer->fmt_array = mxr_graph_format; layer->fmt_array_size = ARRAY_SIZE(mxr_graph_format); ret = mxr_base_layer_register(layer); if (ret) goto fail_layer; return layer; fail_layer: mxr_base_layer_release(layer); fail: return NULL; }
struct mxr_layer *mxr_vp_layer_create(struct mxr_device *mdev, int cur_mxr, int idx, int nr) { struct mxr_layer *layer; int ret; struct mxr_layer_ops ops = { .release = mxr_vp_layer_release, .buffer_set = mxr_vp_buffer_set, .stream_set = mxr_vp_stream_set, .format_set = mxr_vp_format_set, .fix_geometry = mxr_vp_fix_geometry, }; char name[32]; sprintf(name, "mxr%d_video%d", cur_mxr, idx); layer = mxr_base_layer_create(mdev, idx, name, &ops); if (layer == NULL) { mxr_err(mdev, "failed to initialize layer(%d) base\n", idx); goto fail; } layer->fmt_array = mxr_video_format; layer->fmt_array_size = ARRAY_SIZE(mxr_video_format); layer->minor = nr; layer->type = MXR_LAYER_TYPE_VIDEO; ret = mxr_base_layer_register(layer); if (ret) goto fail_layer; layer->cur_mxr = cur_mxr; return layer; fail_layer: mxr_base_layer_release(layer); fail: return NULL; }
struct mxr_layer *mxr_graph_layer_create(struct mxr_device *mdev, int idx) { struct mxr_layer *layer; int ret; const struct mxr_layer_ops ops = { .release = mxr_graph_layer_release, .buffer_set = mxr_graph_buffer_set, .stream_set = mxr_graph_stream_set, .format_set = mxr_graph_format_set, .fix_geometry = mxr_graph_fix_geometry, }; char name[32]; sprintf(name, "graph%d", idx); layer = mxr_base_layer_create(mdev, idx, name, &ops); if (layer == NULL) { mxr_err(mdev, "failed to initialize layer(%d) base\n", idx); goto fail; } layer->fmt_array = mxr_graph_format; layer->fmt_array_size = ARRAY_SIZE(mxr_graph_format); ret = mxr_base_layer_register(layer); if (ret) goto fail_layer; return layer; fail_layer: mxr_base_layer_release(layer); fail: return NULL; }
static void mxr_vp_layer_release(struct mxr_layer *layer) { mxr_base_layer_unregister(layer); mxr_base_layer_release(layer); }
static void mxr_video_layer_release(struct mxr_layer *layer) { mxr_base_layer_release(layer); }