mirror of
https://github.com/morgan9e/UxPlay
synced 2026-04-15 00:34:05 +09:00
add the -f videoflip option, modeled on flip and rotate in RPiPlay
This commit is contained in:
@@ -33,10 +33,18 @@ extern "C" {
|
||||
#include "../lib/logger.h"
|
||||
#include "../lib/raop_ntp.h"
|
||||
|
||||
typedef enum videoflip_e {
|
||||
NONE,
|
||||
LEFT,
|
||||
RIGHT,
|
||||
INVERT,
|
||||
VFLIP,
|
||||
HFLIP,
|
||||
} videoflip_t;
|
||||
|
||||
typedef struct video_renderer_s video_renderer_t;
|
||||
|
||||
video_renderer_t *video_renderer_init(logger_t *logger, const char *server_name);
|
||||
video_renderer_t *video_renderer_init(logger_t *logger, const char *server_name, videoflip_t videoflip);
|
||||
void video_renderer_start(video_renderer_t *renderer);
|
||||
void video_renderer_render_buffer(video_renderer_t *renderer, raop_ntp_t *ntp, unsigned char* data, int data_len, uint64_t pts, int type);
|
||||
void video_renderer_flush(video_renderer_t *renderer);
|
||||
|
||||
@@ -53,7 +53,7 @@ static gboolean check_plugins (void)
|
||||
return ret;
|
||||
}
|
||||
|
||||
video_renderer_t *video_renderer_init(logger_t *logger, const char *server_name) {
|
||||
video_renderer_t *video_renderer_init(logger_t *logger, const char *server_name, videoflip_t videoflip) {
|
||||
video_renderer_t *renderer;
|
||||
GError *error = NULL;
|
||||
|
||||
@@ -71,8 +71,29 @@ video_renderer_t *video_renderer_init(logger_t *logger, const char *server_name)
|
||||
|
||||
assert(check_plugins ());
|
||||
|
||||
renderer->pipeline = gst_parse_launch("appsrc name=video_source stream-type=0 format=GST_FORMAT_TIME is-live=true !"
|
||||
"queue ! decodebin ! videoconvert ! autovideosink name=video_sink sync=false", &error);
|
||||
GString *launch = g_string_new("appsrc name=video_source stream-type=0 format=GST_FORMAT_TIME is-live=true !"
|
||||
"queue ! decodebin ! videoconvert ! ");
|
||||
|
||||
/* image transform */
|
||||
switch (videoflip) {
|
||||
case LEFT:
|
||||
g_string_append(launch, "videoflip method=counterclockwise ! ");
|
||||
break;
|
||||
case RIGHT:
|
||||
g_string_append(launch, "videoflip method=clockwise ! ");
|
||||
break;
|
||||
case INVERT:
|
||||
g_string_append(launch, "videoflip method=rotate-180 ! ");
|
||||
break;
|
||||
case HFLIP:
|
||||
g_string_append(launch, "videoflip method=horizontal-flip ! ");
|
||||
break;
|
||||
case VFLIP:
|
||||
g_string_append(launch, "videoflip method=vertical-flip ! ");
|
||||
}
|
||||
|
||||
g_string_append(launch, "autovideosink name=video_sink sync=false");
|
||||
renderer->pipeline = gst_parse_launch(launch->str, &error);
|
||||
g_assert (renderer->pipeline);
|
||||
|
||||
renderer->appsrc = gst_bin_get_by_name (GST_BIN (renderer->pipeline), "video_source");
|
||||
|
||||
Reference in New Issue
Block a user