Skip to content

Commit

Permalink
Added rotation by 90 degrees option
Browse files Browse the repository at this point in the history
  • Loading branch information
StevenHickson committed Jan 22, 2020
1 parent 05ed793 commit fcc4a65
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 9 deletions.
2 changes: 1 addition & 1 deletion renderers/video_renderer.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ typedef enum background_mode_e {

typedef struct video_renderer_s video_renderer_t;

video_renderer_t *video_renderer_init(logger_t *logger, background_mode_t background_mode, bool low_latency);
video_renderer_t *video_renderer_init(logger_t *logger, background_mode_t background_mode, bool low_latency, bool rotate);
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);
Expand Down
2 changes: 1 addition & 1 deletion renderers/video_renderer_dummy.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ struct video_renderer_s {
logger_t *logger;
};

video_renderer_t *video_renderer_init(logger_t *logger, background_mode_t background_mode, bool low_latency) {
video_renderer_t *video_renderer_init(logger_t *logger, background_mode_t background_mode, bool low_latency, bool rotate) {
video_renderer_t *renderer;
renderer = calloc(1, sizeof(video_renderer_t));
if (!renderer) {
Expand Down
25 changes: 22 additions & 3 deletions renderers/video_renderer_rpi.c
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ void omx_event_handler(void *userdata, COMPONENT_T *comp, OMX_U32 data) {
logger_log(renderer->logger, LOGGER_DEBUG, "Video renderer config change: %p: %d", comp, data);
}

int video_renderer_init_decoder(video_renderer_t *renderer) {
int video_renderer_init_decoder(video_renderer_t *renderer, bool rotate) {
memset(renderer->components, 0, sizeof(renderer->components));
memset(renderer->tunnels, 0, sizeof(renderer->tunnels));

Expand Down Expand Up @@ -250,6 +250,8 @@ int video_renderer_init_decoder(video_renderer_t *renderer) {
OMX_CONFIG_DISPLAYREGIONTYPE display_region;
memset(&display_region, 0, sizeof(OMX_CONFIG_DISPLAYREGIONTYPE));
display_region.nSize = sizeof(OMX_CONFIG_DISPLAYREGIONTYPE);
//OMX_DISPLAYTRANSFORMTYPE transform = OMX_DISPLAY_ROT180;
//display_region.transform = (OMX_DISPLAYTRANSFORMTYPE)6;
display_region.nVersion.nVersion = OMX_VERSION;
display_region.nPortIndex = 90;
display_region.set = OMX_DISPLAY_SET_FULLSCREEN | OMX_DISPLAY_SET_LAYER;
Expand All @@ -269,6 +271,23 @@ int video_renderer_init_decoder(video_renderer_t *renderer) {
return -15;
}

// Setup rotation
if (rotate) {
OMX_CONFIG_ROTATIONTYPE rotation;
memset(&rotation, 0, sizeof(OMX_CONFIG_ROTATIONTYPE));
rotation.nSize = sizeof(OMX_CONFIG_ROTATIONTYPE);
rotation.nRotation = -90;
rotation.nPortIndex = 90;
rotation.nVersion.nVersion = OMX_VERSION;
OMX_ERRORTYPE error = OMX_SetConfig(ilclient_get_handle(renderer->video_renderer), OMX_IndexConfigCommonRotate,
&rotation);
if (error != OMX_ErrorNone) {
printf("Error: %x\n", error);
video_renderer_destroy_decoder(renderer);
return -15;
}
}

// Set decoder format
ilclient_change_component_state(renderer->video_decoder, OMX_StateIdle);
OMX_VIDEO_PARAM_PORTFORMATTYPE format;
Expand All @@ -290,7 +309,7 @@ int video_renderer_init_decoder(video_renderer_t *renderer) {
return 1;
}

video_renderer_t *video_renderer_init(logger_t *logger, background_mode_t background_mode, bool low_latency) {
video_renderer_t *video_renderer_init(logger_t *logger, background_mode_t background_mode, bool low_latency, bool rotate) {
video_renderer_t *renderer;
renderer = calloc(1, sizeof(video_renderer_t));
if (!renderer) {
Expand All @@ -304,7 +323,7 @@ video_renderer_t *video_renderer_init(logger_t *logger, background_mode_t backgr
renderer->first_packet_time = 0;
renderer->input_frames = 0;

if (video_renderer_init_decoder(renderer) != 1) {
if (video_renderer_init_decoder(renderer, rotate) != 1) {
free(renderer);
renderer = NULL;
}
Expand Down
12 changes: 8 additions & 4 deletions rpiplay.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,11 @@
#define DEFAULT_AUDIO_DEVICE AUDIO_DEVICE_HDMI
#define DEFAULT_LOW_LATENCY false
#define DEFAULT_DEBUG_LOG false
#define DEFAULT_ROTATE false
#define DEFAULT_HW_ADDRESS { (char) 0x48, (char) 0x5d, (char) 0x60, (char) 0x7c, (char) 0xee, (char) 0x22 }

int start_server(std::vector<char> hw_addr, std::string name, background_mode_t background_mode,
audio_device_t audio_device, bool low_latency, bool debug_log);
audio_device_t audio_device, bool low_latency, bool debug_log, bool rotate);

int stop_server();

Expand Down Expand Up @@ -112,6 +113,7 @@ int main(int argc, char *argv[]) {
std::vector<char> server_hw_addr = DEFAULT_HW_ADDRESS;
audio_device_t audio_device = DEFAULT_AUDIO_DEVICE;
bool low_latency = DEFAULT_LOW_LATENCY;
bool rotate = DEFAULT_ROTATE;
bool debug_log = DEFAULT_DEBUG_LOG;

// Parse arguments
Expand Down Expand Up @@ -139,6 +141,8 @@ int main(int argc, char *argv[]) {
AUDIO_DEVICE_NONE;
} else if (arg == "-l") {
low_latency = !low_latency;
} else if (arg == "-r") {
rotate = !rotate;
} else if (arg == "-d") {
debug_log = !debug_log;
} else if (arg == "-h" || arg == "-v") {
Expand All @@ -153,7 +157,7 @@ int main(int argc, char *argv[]) {
parse_hw_addr(mac_address, server_hw_addr);
}

if (start_server(server_hw_addr, server_name, background, audio_device, low_latency, debug_log) != 0) {
if (start_server(server_hw_addr, server_name, background, audio_device, low_latency, debug_log, rotate) != 0) {
return 1;
}

Expand Down Expand Up @@ -224,7 +228,7 @@ extern "C" void log_callback(void *cls, int level, const char *msg) {
}

int start_server(std::vector<char> hw_addr, std::string name, background_mode_t background_mode,
audio_device_t audio_device, bool low_latency, bool debug_log) {
audio_device_t audio_device, bool low_latency, bool debug_log, bool rotate) {
raop_callbacks_t raop_cbs;
memset(&raop_cbs, 0, sizeof(raop_cbs));
raop_cbs.conn_init = conn_init;
Expand All @@ -250,7 +254,7 @@ int start_server(std::vector<char> hw_addr, std::string name, background_mode_t

if (low_latency) logger_log(render_logger, LOGGER_INFO, "Using low-latency mode");

if ((video_renderer = video_renderer_init(render_logger, background_mode, low_latency)) == NULL) {
if ((video_renderer = video_renderer_init(render_logger, background_mode, low_latency, rotate)) == NULL) {
LOGE("Could not init video renderer");
return -1;
}
Expand Down

0 comments on commit fcc4a65

Please sign in to comment.