summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-01-19 20:03:17 +0100
committerwm4 <wm4@nowhere>2015-01-19 21:26:42 +0100
commite972ff4857d6b7f6cd8240e199185fca39d5ea47 (patch)
tree181e275a9db9f3f06ed60773c51e6257416e45ec
parent64f72687ce4227fc5e6f3636c8fd0078a8e098a2 (diff)
downloadmpv-e972ff4857d6b7f6cd8240e199185fca39d5ea47.tar.bz2
mpv-e972ff4857d6b7f6cd8240e199185fca39d5ea47.tar.xz
client API: minor cleanup
Try not to put "everything" into mpv_wait_event: move out the code for generating log message events.
-rw-r--r--player/client.c45
1 files changed, 28 insertions, 17 deletions
diff --git a/player/client.c b/player/client.c
index c4f02b84c8..6a21596eb3 100644
--- a/player/client.c
+++ b/player/client.c
@@ -126,6 +126,7 @@ struct mpv_handle {
struct mp_log_buffer *messages;
};
+static bool gen_log_message_event(struct mpv_handle *ctx);
static bool gen_property_change_event(struct mpv_handle *ctx);
static void notify_property_events(struct mpv_handle *ctx, uint64_t event_mask);
@@ -755,23 +756,8 @@ mpv_event *mpv_wait_event(mpv_handle *ctx, double timeout)
if (gen_property_change_event(ctx))
break;
// Pop item from message queue, and return as event.
- if (ctx->messages) {
- struct mp_log_buffer_entry *msg =
- mp_msg_log_buffer_read(ctx->messages);
- if (msg) {
- event->event_id = MPV_EVENT_LOG_MESSAGE;
- struct mpv_event_log_message *cmsg = talloc_ptrtype(event, cmsg);
- *cmsg = (struct mpv_event_log_message){
- .prefix = msg->prefix,
- .level = mp_log_levels[msg->level],
- .log_level = mp_mpv_log_levels[msg->level],
- .text = msg->text,
- };
- talloc_steal(event, msg);
- event->data = cmsg;
- break;
- }
- }
+ if (gen_log_message_event(ctx))
+ break;
int r = wait_wakeup(ctx, deadline);
if (r == ETIMEDOUT)
break;
@@ -1543,6 +1529,31 @@ int mpv_request_log_messages(mpv_handle *ctx, const char *min_level)
return 0;
}
+// Set ctx->cur_event to a generated log message event, if any available.
+static bool gen_log_message_event(struct mpv_handle *ctx)
+{
+ if (ctx->messages) {
+ struct mp_log_buffer_entry *msg =
+ mp_msg_log_buffer_read(ctx->messages);
+ if (msg) {
+ struct mpv_event_log_message *cmsg =
+ talloc_ptrtype(ctx->cur_event, cmsg);
+ *cmsg = (struct mpv_event_log_message){
+ .prefix = msg->prefix,
+ .level = mp_log_levels[msg->level],
+ .log_level = mp_mpv_log_levels[msg->level],
+ .text = msg->text,
+ };
+ *ctx->cur_event = (struct mpv_event){
+ .event_id = MPV_EVENT_LOG_MESSAGE,
+ .data = cmsg,
+ };
+ return true;
+ }
+ }
+ return false;
+}
+
int mpv_get_wakeup_pipe(mpv_handle *ctx)
{
pthread_mutex_lock(&ctx->wakeup_lock);