mirror of
https://github.com/mpv-player/mpv
synced 2024-12-28 18:12:22 +00:00
49d1b42f70
This turned out ridiculously complex. I think it will have to be simplified some day. Main reason for the complexity are: - filtering properties by forcing clients to observe individual properties explicitly (to avoid spamming clients with changes they don't want) - optional retrieval of property value with the notification (the basic idea was that this is more user friendly) - allowing to the client to specify a format in which the value should be retrieved (because if a property changes its type, the client API couldn't convert it properly, and compatibility would break) I don't know yet which of these are important, and everything could change. In particular, the interface and semantics should be adjusted to reduce the implementation complexity. While I consider the API complete, there could (and probably will) be bugs left. Also while the implementation is complete, it's inefficient. The complexity of the property matching is O(a*b*c) with a clients, b observed properties, and c properties changing at once. I threw away an earlier implementation using bitmasks, because it was too unwieldy.
43 lines
1.5 KiB
C
43 lines
1.5 KiB
C
/*
|
|
* This file is part of MPlayer.
|
|
*
|
|
* MPlayer is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* MPlayer is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with MPlayer; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*/
|
|
|
|
#ifndef MPLAYER_COMMAND_H
|
|
#define MPLAYER_COMMAND_H
|
|
|
|
struct MPContext;
|
|
struct mp_cmd;
|
|
struct mp_log;
|
|
|
|
void command_init(struct MPContext *mpctx);
|
|
void command_uninit(struct MPContext *mpctx);
|
|
|
|
void run_command(struct MPContext *mpctx, struct mp_cmd *cmd);
|
|
char *mp_property_expand_string(struct MPContext *mpctx, const char *str);
|
|
char *mp_property_expand_escaped_string(struct MPContext *mpctx, const char *str);
|
|
void property_print_help(struct mp_log *log);
|
|
int mp_property_do(const char* name, int action, void* val,
|
|
struct MPContext *mpctx);
|
|
|
|
const struct m_option *mp_get_property_list(void);
|
|
int mp_find_property_index(const char *property);
|
|
|
|
void mp_notify(struct MPContext *mpctx, int event, void *arg);
|
|
void mp_notify_property(struct MPContext *mpctx, char *property);
|
|
|
|
#endif /* MPLAYER_COMMAND_H */
|