You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
3.4 KiB
157 lines
3.4 KiB
/* licence WTFPL */
|
|
/* Test driver for checking vout window behaviour */
|
|
/* Copyright © 2021 Alexandre Janniaux <ajanni@videolabs.io> */
|
|
|
|
#include <assert.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
#include <locale.h>
|
|
#include <errno.h>
|
|
|
|
#include <vlc/vlc.h>
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
# include <config.h>
|
|
#endif
|
|
|
|
#include <vlc_common.h>
|
|
#include <vlc_window.h>
|
|
|
|
#include "../lib/libvlc_internal.h"
|
|
|
|
static char *window_name = NULL;
|
|
|
|
int verbosity = 0;
|
|
|
|
static enum {
|
|
OPEN_CLOSE,
|
|
LIST_OUTPUT,
|
|
} current_mode = OPEN_CLOSE;
|
|
|
|
static void usage(const char *name, int ret)
|
|
{
|
|
fprintf(stderr, "Usage: %s [-w window_name] -l\n", name);
|
|
exit(ret);
|
|
}
|
|
|
|
/* extracts options from command line */
|
|
static void cmdline(int argc, char *argv[])
|
|
{
|
|
int opt;
|
|
while ((opt = getopt(argc, argv, "hlvw:")) != -1)
|
|
{
|
|
switch (opt)
|
|
{
|
|
case 'h':
|
|
usage(argv[0], 0);
|
|
break;
|
|
|
|
case 'l':
|
|
current_mode = LIST_OUTPUT;
|
|
break;
|
|
|
|
case 'v':
|
|
verbosity++;
|
|
if (verbosity > 2)
|
|
verbosity = 2;
|
|
break;
|
|
|
|
case 'w':
|
|
window_name = strdup(optarg);
|
|
break;
|
|
|
|
default:
|
|
usage(argv[0], 1);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
static libvlc_instance_t *create_libvlc(void)
|
|
{
|
|
char verbose_flag[2] = "0";
|
|
verbose_flag[0] = '0' + verbosity;
|
|
const char* const args[] = {
|
|
"--verbose", verbose_flag,
|
|
};
|
|
|
|
return libvlc_new(sizeof args / sizeof *args, args);
|
|
}
|
|
|
|
static void ReportOutput(
|
|
struct vlc_window *wnd,
|
|
const char *id,
|
|
const char *desc)
|
|
{
|
|
(void)wnd;
|
|
if (desc)
|
|
printf(" - output added %s: %s\n", id, desc);
|
|
else
|
|
printf(" - output removed %s\n", id);
|
|
}
|
|
|
|
static void ReportResized(
|
|
struct vlc_window *wnd,
|
|
unsigned width, unsigned height,
|
|
vlc_window_ack_cb ack_cb, void *opaque)
|
|
{
|
|
if (ack_cb)
|
|
ack_cb(wnd, width, height, opaque);
|
|
printf(" - window resized to %ux%u\n", width, height);
|
|
}
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
#ifdef TOP_BUILDDIR
|
|
setenv ("VLC_PLUGIN_PATH", TOP_BUILDDIR"/modules", 1);
|
|
setenv ("VLC_DATA_PATH", TOP_SRCDIR"/share", 1);
|
|
setenv ("VLC_LIB_PATH", TOP_BUILDDIR"/modules", 1);
|
|
#endif
|
|
|
|
/* mandatory to support UTF-8 filenames (provided the locale is well set)*/
|
|
setlocale(LC_ALL, "");
|
|
|
|
cmdline(argc, argv);
|
|
|
|
/* starts vlc */
|
|
libvlc_instance_t *libvlc = create_libvlc();
|
|
assert(libvlc);
|
|
|
|
vlc_object_t *root = &libvlc->p_libvlc_int->obj;
|
|
const struct vlc_window_callbacks list_cbs = {
|
|
.output_event = ReportOutput,
|
|
.resized = ReportResized,
|
|
};
|
|
|
|
const struct vlc_window_callbacks win_cbs = {
|
|
.resized = ReportResized,
|
|
};
|
|
|
|
const vlc_window_owner_t owner = {
|
|
.sys = NULL,
|
|
.cbs = (current_mode == LIST_OUTPUT) ? &list_cbs : &win_cbs,
|
|
};
|
|
|
|
const struct vlc_window_cfg cfg = {
|
|
.width = 800, .height = 600,
|
|
};
|
|
vlc_window_t *wnd = vlc_window_New(root, window_name, &owner, &cfg);
|
|
|
|
int ret = VLC_SUCCESS;
|
|
if (current_mode == OPEN_CLOSE)
|
|
{
|
|
ret = vlc_window_Enable(wnd);
|
|
|
|
if (ret == VLC_SUCCESS)
|
|
vlc_window_Disable(wnd);
|
|
}
|
|
|
|
vlc_window_Delete(wnd);
|
|
|
|
libvlc_release(libvlc);
|
|
|
|
free(window_name);
|
|
return (ret == VLC_SUCCESS) ? 0 : -1;
|
|
}
|
|
|