#include "ytdlsb-mpv.h" #include "ytdlsb-utils.h" #include #include int ytdlsb_mpv_overlay_add(mpv_handle *m, int id, int x, int y, char *buf, size_t off, size_t w, size_t h, size_t stride, size_t dw, size_t dh ){ char *command_keys[] = { "name", "id", "x", "y", "file", "offset", "fmt", "w", "h", "stride", "dw", "dh", }; char filename[32]; // enough for 64bit int + 1byte prefix CKA(snprintf(filename, 32, "&%tu", (ptrdiff_t)((void *)buf - NULL)), < 32); mpv_node command_vals[] = { { .format = MPV_FORMAT_STRING, .u.string = "overlay-add", }, { .format = MPV_FORMAT_INT64, .u.int64 = TRY_NUMCAST(a, int64_t, id), }, { .format = MPV_FORMAT_INT64, .u.int64 = TRY_NUMCAST(a, int64_t, x), }, { .format = MPV_FORMAT_INT64, .u.int64 = TRY_NUMCAST(a, int64_t, y), }, { .format = MPV_FORMAT_STRING, .u.string = filename, }, { .format = MPV_FORMAT_INT64, .u.int64 = TRY_NUMCAST(a, int64_t, off), }, { .format = MPV_FORMAT_STRING, .u.string = "bgra", }, { .format = MPV_FORMAT_INT64, .u.int64 = TRY_NUMCAST(a, int64_t, w), }, { .format = MPV_FORMAT_INT64, .u.int64 = TRY_NUMCAST(a, int64_t, h), }, { .format = MPV_FORMAT_INT64, .u.int64 = TRY_NUMCAST(a, int64_t, stride), }, { .format = MPV_FORMAT_INT64, .u.int64 = TRY_NUMCAST(a, int64_t, dw), }, { .format = MPV_FORMAT_INT64, .u.int64 = TRY_NUMCAST(a, int64_t, dh), }, }; assert(sizeof(command_keys)/sizeof(command_keys[0]) == sizeof(command_vals)/sizeof(command_vals[0])); mpv_node_list command_list = { .num = sizeof(command_keys)/sizeof(command_keys[0]), .values = command_vals, .keys = command_keys, }; mpv_node command = { .format = MPV_FORMAT_NODE_MAP, .u.list = &command_list, }; CKM(err, mpv_command_node(m, &command, NULL)); return 0; a: abort(); err: return -1; } int ytdlsb_mpv_overlay_remove(mpv_handle *m, int id){ char *command_keys[] = {"name", "id"}; mpv_node command_vals[] = { { .format = MPV_FORMAT_STRING, .u.string = "overlay-remove", }, { .format = MPV_FORMAT_INT64, .u.int64 = TRY_NUMCAST(a, int64_t, id), }, }; assert(sizeof(command_keys)/sizeof(command_keys[0]) == sizeof(command_vals)/sizeof(command_vals[0])); mpv_node_list command_list = { .num = sizeof(command_keys)/sizeof(command_keys[0]), .values = command_vals, .keys = command_keys, }; mpv_node command = { .format = MPV_FORMAT_NODE_MAP, .u.list = &command_list, }; CKM(err, mpv_command_node(m, &command, NULL)); return 0; a: abort(); err: return -1; }