diff --git a/Makefile b/Makefile index 6b07033d41..22030da47c 100644 --- a/Makefile +++ b/Makefile @@ -160,8 +160,7 @@ ifeq ($(HAVE_SDL), 1) LIBS += $(GBM_LIBS) $(DRM_LIBS) $(EGL_LIBS) else ifeq ($(HAVE_VIDEOCORE), 1) OBJ += gfx/context/vc_egl_ctx.o - # videocore's libEGL needs libGLESv2 linked as well - LIBS += -lGLESv2 -lEGL + # videocore's libs set later else ifeq ($(HAVE_GLES), 1) OBJ += gfx/context/xegl_ctx.o DEFINES += $(EGL_CFLAGS) @@ -179,10 +178,15 @@ ifeq ($(HAVE_SDL), 1) endif endif endif + + ifeq ($(HAVE_VG), 1) + OBJ += gfx/vg.o + DEFINES += $(VG_CFLAGS) + LIBS += $(VG_LIBS) + endif endif ifeq ($(HAVE_VIDEOCORE), 1) - OBJ += gfx/rpi.o LIBS += -lOpenVG -lGLESv2 -lEGL -lbcm_host -lvcos -lvchiq_arm endif diff --git a/config.def.h b/config.def.h index 4ff811f77d..75bfb53ca8 100644 --- a/config.def.h +++ b/config.def.h @@ -37,7 +37,7 @@ enum VIDEO_WII, VIDEO_XENON360, VIDEO_XDK_D3D, - VIDEO_RPI, + VIDEO_VG, VIDEO_NULL, AUDIO_RSOUND, @@ -69,7 +69,7 @@ enum }; #if defined(HAVE_VIDEOCORE) -#define VIDEO_DEFAULT_DRIVER VIDEO_RPI +#define VIDEO_DEFAULT_DRIVER VIDEO_VG #elif defined(HAVE_OPENGL) || defined(__CELLOS_LV2__) #define VIDEO_DEFAULT_DRIVER VIDEO_GL #elif defined(GEKKO) @@ -78,6 +78,8 @@ enum #define VIDEO_DEFAULT_DRIVER VIDEO_XENON360 #elif (defined(_XBOX1) || defined(_XBOX360)) && (defined(HAVE_D3D8) || defined(HAVE_D3D9)) #define VIDEO_DEFAULT_DRIVER VIDEO_XDK_D3D +#elif defined(HAVE_VG) +#define VIDEO_DEFAULT_DRIVER VIDEO_VG #elif defined(HAVE_XVIDEO) #define VIDEO_DEFAULT_DRIVER VIDEO_XVIDEO #elif defined(HAVE_SDL) diff --git a/driver.c b/driver.c index c1e9f49499..df926a1805 100644 --- a/driver.c +++ b/driver.c @@ -100,8 +100,8 @@ static const video_driver_t *video_drivers[] = { #ifdef GEKKO &video_gx, #endif -#ifdef HAVE_VIDEOCORE - &video_rpi, +#ifdef HAVE_VG + &video_vg, #endif &video_null, }; diff --git a/driver.h b/driver.h index a6d4d11f42..80a6335ea3 100644 --- a/driver.h +++ b/driver.h @@ -254,7 +254,7 @@ extern const video_driver_t video_xenon360; extern const video_driver_t video_xvideo; extern const video_driver_t video_xdk_d3d; extern const video_driver_t video_sdl; -extern const video_driver_t video_rpi; +extern const video_driver_t video_vg; extern const video_driver_t video_ext; extern const video_driver_t video_null; extern const input_driver_t input_sdl; diff --git a/gfx/vg.c b/gfx/vg.c index 5481cc6582..a8ccb31951 100644 --- a/gfx/vg.c +++ b/gfx/vg.c @@ -56,134 +56,134 @@ typedef struct VGPaint mPaintFg; VGPaint mPaintBg; #endif -} rpi_t; +} vg_t; -static void rpi_set_nonblock_state(void *data, bool state) +static void vg_set_nonblock_state(void *data, bool state) { (void)data; gfx_ctx_set_swap_interval(state ? 0 : 1, true); } -static void *rpi_init(const video_info_t *video, const input_driver_t **input, void **input_data) +static void *vg_init(const video_info_t *video, const input_driver_t **input, void **input_data) { - rpi_t *rpi = (rpi_t*)calloc(1, sizeof(rpi_t)); - if (!rpi) + vg_t *vg = (vg_t*)calloc(1, sizeof(vg_t)); + if (!vg) return NULL; - if (!eglBindAPI(EGL_OPENVG_API)) + if (!eglBindAPI(EGL_vg_API)) return NULL; if (!gfx_ctx_init()) { - free(rpi); + free(vg); return NULL; } - gfx_ctx_get_video_size(&rpi->mScreenWidth, &rpi->mScreenHeight); - RARCH_LOG("Detecting screen resolution %ux%u.\n", rpi->mScreenWidth, rpi->mScreenHeight); + gfx_ctx_get_video_size(&vg->mScreenWidth, &vg->mScreenHeight); + RARCH_LOG("Detecting screen resolution %ux%u.\n", vg->mScreenWidth, vg->mScreenHeight); gfx_ctx_set_swap_interval(video->vsync ? 1 : 0, false); - rpi->mTexType = video->rgb32 ? VG_sABGR_8888 : VG_sARGB_1555; - rpi->mKeepAspect = video->force_aspect; + vg->mTexType = video->rgb32 ? VG_sABGR_8888 : VG_sARGB_1555; + vg->mKeepAspect = video->force_aspect; // check for SD televisions: they should always be 4:3 - if (rpi->mScreenWidth == 720 && (rpi->mScreenHeight == 480 || rpi->mScreenHeight == 576)) - rpi->mScreenAspect = 4.0f / 3.0f; + if ((vg->mScreenWidth == 640 || vg->mScreenWidth == 720) && (vg->mScreenHeight == 480 || vg->mScreenHeight == 576)) + vg->mScreenAspect = 4.0f / 3.0f; else - rpi->mScreenAspect = (float)rpi->mScreenWidth / rpi->mScreenHeight; + vg->mScreenAspect = (float)vg->mScreenWidth / vg->mScreenHeight; VGfloat clearColor[4] = {0, 0, 0, 1}; vgSetfv(VG_CLEAR_COLOR, 4, clearColor); - rpi->mTextureWidth = rpi->mTextureHeight = video->input_scale * RARCH_SCALE_BASE; + vg->mTextureWidth = vg->mTextureHeight = video->input_scale * RARCH_SCALE_BASE; // We can't use the native format because there's no sXRGB_1555 type and // emulation cores can send 0 in the top bit. We lose some speed on // conversion but I doubt it has any real affect, since we are only drawing // one image at the end of the day. Still keep the alpha channel for ABGR. - rpi->mImage = vgCreateImage(video->rgb32 ? VG_sABGR_8888 : VG_sXBGR_8888, - rpi->mTextureWidth, rpi->mTextureHeight, + vg->mImage = vgCreateImage(video->rgb32 ? VG_sABGR_8888 : VG_sXBGR_8888, + vg->mTextureWidth, vg->mTextureHeight, video->smooth ? VG_IMAGE_QUALITY_BETTER : VG_IMAGE_QUALITY_NONANTIALIASED); - rpi_set_nonblock_state(rpi, !video->vsync); + vg_set_nonblock_state(vg, !video->vsync); gfx_ctx_input_driver(input, input_data); #ifdef HAVE_FREETYPE if (g_settings.video.font_enable) { - rpi->mFont = vgCreateFont(0); - rpi->mFontHeight = g_settings.video.font_size * (g_settings.video.font_scale ? (float) rpi->mScreenWidth / 1280.0f : 1.0f); + vg->mFont = vgCreateFont(0); + vg->mFontHeight = g_settings.video.font_size * (g_settings.video.font_scale ? (float) vg->mScreenWidth / 1280.0f : 1.0f); const char *path = g_settings.video.font_path; if (!*path || !path_file_exists(path)) path = font_renderer_get_default_font(); - rpi->mFontRenderer = font_renderer_new(path, rpi->mFontHeight); + vg->mFontRenderer = font_renderer_new(path, vg->mFontHeight); - if (rpi->mFont != VG_INVALID_HANDLE && rpi->mFontRenderer) + if (vg->mFont != VG_INVALID_HANDLE && vg->mFontRenderer) { - rpi->mFontsOn = true; + vg->mFontsOn = true; - rpi->mPaintFg = vgCreatePaint(); - rpi->mPaintBg = vgCreatePaint(); + vg->mPaintFg = vgCreatePaint(); + vg->mPaintBg = vgCreatePaint(); VGfloat paintFg[] = { g_settings.video.msg_color_r, g_settings.video.msg_color_g, g_settings.video.msg_color_b, 1.0f }; VGfloat paintBg[] = { g_settings.video.msg_color_r / 2.0f, g_settings.video.msg_color_g / 2.0f, g_settings.video.msg_color_b / 2.0f, 0.5f }; - vgSetParameteri(rpi->mPaintFg, VG_PAINT_TYPE, VG_PAINT_TYPE_COLOR); - vgSetParameterfv(rpi->mPaintFg, VG_PAINT_COLOR, 4, paintFg); + vgSetParameteri(vg->mPaintFg, VG_PAINT_TYPE, VG_PAINT_TYPE_COLOR); + vgSetParameterfv(vg->mPaintFg, VG_PAINT_COLOR, 4, paintFg); - vgSetParameteri(rpi->mPaintBg, VG_PAINT_TYPE, VG_PAINT_TYPE_COLOR); - vgSetParameterfv(rpi->mPaintBg, VG_PAINT_COLOR, 4, paintBg); + vgSetParameteri(vg->mPaintBg, VG_PAINT_TYPE, VG_PAINT_TYPE_COLOR); + vgSetParameterfv(vg->mPaintBg, VG_PAINT_COLOR, 4, paintBg); } } #endif - return rpi; + return vg; } -static void rpi_free(void *data) +static void vg_free(void *data) { - rpi_t *rpi = (rpi_t*)data; + vg_t *vg = (vg_t*)data; - vgDestroyImage(rpi->mImage); + vgDestroyImage(vg->mImage); #ifdef HAVE_FREETYPE - if (rpi->mFontsOn) + if (vg->mFontsOn) { - vgDestroyFont(rpi->mFont); - font_renderer_free(rpi->mFontRenderer); - vgDestroyPaint(rpi->mPaintFg); - vgDestroyPaint(rpi->mPaintBg); + vgDestroyFont(vg->mFont); + font_renderer_free(vg->mFontRenderer); + vgDestroyPaint(vg->mPaintFg); + vgDestroyPaint(vg->mPaintBg); } #endif gfx_ctx_destroy(); - free(rpi); + free(vg); } #ifdef HAVE_FREETYPE -static void rpi_render_message(rpi_t *rpi, const char *msg) +static void vg_render_message(vg_t *vg, const char *msg) { - free(rpi->mLastMsg); - rpi->mLastMsg = strdup(msg); + free(vg->mLastMsg); + vg->mLastMsg = strdup(msg); - if (rpi->mMsgLength) + if (vg->mMsgLength) { - while (--rpi->mMsgLength) - vgClearGlyph(rpi->mFont, rpi->mMsgLength); + while (--vg->mMsgLength) + vgClearGlyph(vg->mFont, vg->mMsgLength); - vgClearGlyph(rpi->mFont, 0); + vgClearGlyph(vg->mFont, 0); } struct font_output_list out; - font_renderer_msg(rpi->mFontRenderer, msg, &out); + font_renderer_msg(vg->mFontRenderer, msg, &out); struct font_output *head = out.head; while (head) { - if (rpi->mMsgLength >= 1024) + if (vg->mMsgLength >= 1024) break; VGfloat origin[2], escapement[2]; @@ -200,40 +200,40 @@ static void rpi_render_message(rpi_t *rpi, const char *msg) for (unsigned i = 0; i < head->height; i++) vgImageSubData(img, head->output + head->pitch * i, head->pitch, VG_A_8, 0, head->height - i - 1, head->width, 1); - vgSetGlyphToImage(rpi->mFont, rpi->mMsgLength, img, origin, escapement); + vgSetGlyphToImage(vg->mFont, vg->mMsgLength, img, origin, escapement); vgDestroyImage(img); - rpi->mMsgLength++; + vg->mMsgLength++; head = head->next; } font_renderer_free_output(&out); - for (unsigned i = 0; i < rpi->mMsgLength; i++) - rpi->mGlyphIndices[i] = i; + for (unsigned i = 0; i < vg->mMsgLength; i++) + vg->mGlyphIndices[i] = i; } -static void rpi_draw_message(rpi_t *rpi, const char *msg) +static void vg_draw_message(vg_t *vg, const char *msg) { - if (!rpi->mLastMsg || strcmp(rpi->mLastMsg, msg)) - rpi_render_message(rpi, msg); + if (!vg->mLastMsg || strcmp(vg->mLastMsg, msg)) + vg_render_message(vg, msg); vgSeti(VG_SCISSORING, VG_FALSE); vgSeti(VG_IMAGE_MODE, VG_DRAW_IMAGE_STENCIL); VGfloat origins[] = { - rpi->mScreenWidth * g_settings.video.msg_pos_x - 2.0f, - rpi->mScreenHeight * g_settings.video.msg_pos_y - 2.0f, + vg->mScreenWidth * g_settings.video.msg_pos_x - 2.0f, + vg->mScreenHeight * g_settings.video.msg_pos_y - 2.0f, }; vgSetfv(VG_GLYPH_ORIGIN, 2, origins); - vgSetPaint(rpi->mPaintBg, VG_FILL_PATH); - vgDrawGlyphs(rpi->mFont, rpi->mMsgLength, rpi->mGlyphIndices, NULL, NULL, VG_FILL_PATH, VG_TRUE); + vgSetPaint(vg->mPaintBg, VG_FILL_PATH); + vgDrawGlyphs(vg->mFont, vg->mMsgLength, vg->mGlyphIndices, NULL, NULL, VG_FILL_PATH, VG_TRUE); origins[0] += 2.0f; origins[1] += 2.0f; vgSetfv(VG_GLYPH_ORIGIN, 2, origins); - vgSetPaint(rpi->mPaintFg, VG_FILL_PATH); - vgDrawGlyphs(rpi->mFont, rpi->mMsgLength, rpi->mGlyphIndices, NULL, NULL, VG_FILL_PATH, VG_TRUE); + vgSetPaint(vg->mPaintFg, VG_FILL_PATH); + vgDrawGlyphs(vg->mFont, vg->mMsgLength, vg->mGlyphIndices, NULL, NULL, VG_FILL_PATH, VG_TRUE); vgSeti(VG_SCISSORING, VG_TRUE); vgSeti(VG_IMAGE_MODE, VG_DRAW_IMAGE_NORMAL); @@ -241,83 +241,83 @@ static void rpi_draw_message(rpi_t *rpi, const char *msg) #endif -static void rpi_calculate_quad(rpi_t *rpi) +static void vg_calculate_quad(vg_t *vg) { // set viewport for aspect ratio, taken from the OpenGL driver - if (rpi->mKeepAspect) + if (vg->mKeepAspect) { float desired_aspect = g_settings.video.aspect_ratio; // If the aspect ratios of screen and desired aspect ratio are sufficiently equal (floating point stuff), // assume they are actually equal. - if (fabs(rpi->mScreenAspect - desired_aspect) < 0.0001) + if (fabs(vg->mScreenAspect - desired_aspect) < 0.0001) { - rpi->x1 = 0; - rpi->y1 = 0; - rpi->x2 = rpi->mScreenWidth; - rpi->y2 = rpi->mScreenHeight; + vg->x1 = 0; + vg->y1 = 0; + vg->x2 = vg->mScreenWidth; + vg->y2 = vg->mScreenHeight; } - else if (rpi->mScreenAspect > desired_aspect) + else if (vg->mScreenAspect > desired_aspect) { - float delta = (desired_aspect / rpi->mScreenAspect - 1.0) / 2.0 + 0.5; - rpi->x1 = rpi->mScreenWidth * (0.5 - delta); - rpi->y1 = 0; - rpi->x2 = 2.0 * rpi->mScreenWidth * delta + rpi->x1; - rpi->y2 = rpi->mScreenHeight + rpi->y1; + float delta = (desired_aspect / vg->mScreenAspect - 1.0) / 2.0 + 0.5; + vg->x1 = vg->mScreenWidth * (0.5 - delta); + vg->y1 = 0; + vg->x2 = 2.0 * vg->mScreenWidth * delta + vg->x1; + vg->y2 = vg->mScreenHeight + vg->y1; } else { - float delta = (rpi->mScreenAspect / desired_aspect - 1.0) / 2.0 + 0.5; - rpi->x1 = 0; - rpi->y1 = rpi->mScreenHeight * (0.5 - delta); - rpi->x2 = rpi->mScreenWidth + rpi->x1; - rpi->y2 = 2.0 * rpi->mScreenHeight * delta + rpi->y1; + float delta = (vg->mScreenAspect / desired_aspect - 1.0) / 2.0 + 0.5; + vg->x1 = 0; + vg->y1 = vg->mScreenHeight * (0.5 - delta); + vg->x2 = vg->mScreenWidth + vg->x1; + vg->y2 = 2.0 * vg->mScreenHeight * delta + vg->y1; } } else { - rpi->x1 = 0; - rpi->y1 = 0; - rpi->x2 = rpi->mScreenWidth; - rpi->y2 = rpi->mScreenHeight; + vg->x1 = 0; + vg->y1 = 0; + vg->x2 = vg->mScreenWidth; + vg->y2 = vg->mScreenHeight; } - rpi->scissor[0] = rpi->x1; - rpi->scissor[1] = rpi->y1; - rpi->scissor[2] = rpi->x2 - rpi->x1; - rpi->scissor[3] = rpi->y2 - rpi->y1; + vg->scissor[0] = vg->x1; + vg->scissor[1] = vg->y1; + vg->scissor[2] = vg->x2 - vg->x1; + vg->scissor[3] = vg->y2 - vg->y1; - vgSetiv(VG_SCISSOR_RECTS, 4, rpi->scissor); + vgSetiv(VG_SCISSOR_RECTS, 4, vg->scissor); } -static bool rpi_frame(void *data, const void *frame, unsigned width, unsigned height, unsigned pitch, const char *msg) +static bool vg_frame(void *data, const void *frame, unsigned width, unsigned height, unsigned pitch, const char *msg) { - rpi_t *rpi = (rpi_t*)data; - rpi->frame_count++; + vg_t *vg = (vg_t*)data; + vg->frame_count++; - if (width != rpi->mRenderWidth || height != rpi->mRenderHeight) + if (width != vg->mRenderWidth || height != vg->mRenderHeight) { - rpi->mRenderWidth = width; - rpi->mRenderHeight = height; - rpi_calculate_quad(rpi); + vg->mRenderWidth = width; + vg->mRenderHeight = height; + vg_calculate_quad(vg); vguComputeWarpQuadToQuad( - rpi->x1, rpi->y1, rpi->x2, rpi->y1, rpi->x2, rpi->y2, rpi->x1, rpi->y2, + vg->x1, vg->y1, vg->x2, vg->y1, vg->x2, vg->y2, vg->x1, vg->y2, // needs to be flipped, Khronos loves their bottom-left origin 0, height, width, height, width, 0, 0, 0, - rpi->mTransformMatrix); + vg->mTransformMatrix); vgSeti(VG_MATRIX_MODE, VG_MATRIX_IMAGE_USER_TO_SURFACE); - vgLoadMatrix(rpi->mTransformMatrix); + vgLoadMatrix(vg->mTransformMatrix); } vgSeti(VG_SCISSORING, VG_FALSE); - vgClear(0, 0, rpi->mScreenWidth, rpi->mScreenHeight); + vgClear(0, 0, vg->mScreenWidth, vg->mScreenHeight); vgSeti(VG_SCISSORING, VG_TRUE); - vgImageSubData(rpi->mImage, frame, pitch, rpi->mTexType, 0, 0, width, height); - vgDrawImage(rpi->mImage); + vgImageSubData(vg->mImage, frame, pitch, vg->mTexType, 0, 0, width, height); + vgDrawImage(vg->mImage); #ifdef HAVE_FREETYPE - if (msg && rpi->mFontsOn) - rpi_draw_message(rpi, msg); + if (msg && vg->mFontsOn) + vg_draw_message(vg, msg); #else (void)msg; #endif @@ -327,30 +327,30 @@ static bool rpi_frame(void *data, const void *frame, unsigned width, unsigned he return true; } -static bool rpi_alive(void *data) +static bool vg_alive(void *data) { - rpi_t *rpi = (rpi_t*)data; + vg_t *vg = (vg_t*)data; bool quit, resize; gfx_ctx_check_window(&quit, - &resize, &rpi->mScreenWidth, &rpi->mScreenHeight, - rpi->frame_count); + &resize, &vg->mScreenWidth, &vg->mScreenHeight, + vg->frame_count); return !quit; } -static bool rpi_focus(void *data) +static bool vg_focus(void *data) { (void)data; return gfx_ctx_window_has_focus(); } -const video_driver_t video_rpi = { - rpi_init, - rpi_frame, - rpi_set_nonblock_state, - rpi_alive, - rpi_focus, +const video_driver_t video_vg = { + vg_init, + vg_frame, + vg_set_nonblock_state, + vg_alive, + vg_focus, NULL, - rpi_free, - "rpi" + vg_free, + "vg" }; diff --git a/qb/config.libs.sh b/qb/config.libs.sh index 960e5a982a..6130d177f3 100644 --- a/qb/config.libs.sh +++ b/qb/config.libs.sh @@ -18,6 +18,7 @@ if [ "$HAVE_VIDEOCORE" = 'yes' ]; then [ -d /opt/vc/include ] && add_include_dirs /opt/vc/include [ -d /opt/vc/include/interface/vcos/pthreads ] && add_include_dirs /opt/vc/include/interface/vcos/pthreads HAVE_GLES='yes' + HAVE_VG='yes' fi if [ "$LIBRETRO" ]; then @@ -137,9 +138,11 @@ if [ "$HAVE_KMS" = "yes" ]; then fi [ "$HAVE_GLES" = "yes" ] && HAVE_EGL=yes && HAVE_XML=yes +[ "$HAVE_VG" = "yes" ] && HAVE_EGL=yes if [ "$HAVE_VIDEOCORE" != "yes" ]; then check_pkgconf EGL egl check_pkgconf GLES glesv2 + check_pkgconf VG vg fi check_pkgconf XML libxml-2.0 @@ -160,6 +163,6 @@ check_pkgconf PYTHON python3 add_define_make OS "$OS" # Creates config.mk and config.h. -VARS="ALSA OSS OSS_BSD OSS_LIB AL RSOUND ROAR JACK COREAUDIO PULSE SDL OPENGL GLES EGL KMS GBM DRM DYLIB GETOPT_LONG THREADS CG XML SDL_IMAGE LIBPNG DYNAMIC FFMPEG AVCODEC AVFORMAT AVUTIL CONFIGFILE FREETYPE XVIDEO X11 XEXT NETPLAY NETWORK_CMD STDIN_CMD COMMAND SOCKET_LEGACY FBO PBO STRL PYTHON FFMPEG_ALLOC_CONTEXT3 FFMPEG_AVCODEC_OPEN2 FFMPEG_AVIO_OPEN FFMPEG_AVFORMAT_WRITE_HEADER FFMPEG_AVFORMAT_NEW_STREAM FFMPEG_AVCODEC_ENCODE_AUDIO2 FFMPEG_AVCODEC_ENCODE_VIDEO2 SINC FIXED_POINT BSV_MOVIE VIDEOCORE" +VARS="ALSA OSS OSS_BSD OSS_LIB AL RSOUND ROAR JACK COREAUDIO PULSE SDL OPENGL GLES VG EGL KMS GBM DRM DYLIB GETOPT_LONG THREADS CG XML SDL_IMAGE LIBPNG DYNAMIC FFMPEG AVCODEC AVFORMAT AVUTIL CONFIGFILE FREETYPE XVIDEO X11 XEXT NETPLAY NETWORK_CMD STDIN_CMD COMMAND SOCKET_LEGACY FBO PBO STRL PYTHON FFMPEG_ALLOC_CONTEXT3 FFMPEG_AVCODEC_OPEN2 FFMPEG_AVIO_OPEN FFMPEG_AVFORMAT_WRITE_HEADER FFMPEG_AVFORMAT_NEW_STREAM FFMPEG_AVCODEC_ENCODE_AUDIO2 FFMPEG_AVCODEC_ENCODE_VIDEO2 SINC FIXED_POINT BSV_MOVIE VIDEOCORE" create_config_make config.mk $VARS create_config_header config.h $VARS diff --git a/settings.c b/settings.c index e43fdbab79..f55d0b3f7e 100644 --- a/settings.c +++ b/settings.c @@ -92,8 +92,8 @@ const char *config_get_default_video(void) return "sdl"; case VIDEO_EXT: return "ext"; - case VIDEO_RPI: - return "rpi"; + case VIDEO_VG: + return "vg"; case VIDEO_NULL: return "null"; default: