summaryrefslogtreecommitdiffstats
path: root/DOCS/client_api_examples
Commit message (Collapse)AuthorAgeFilesLines
* vo_opengl_cb: deprecate mpv_opengl_cb_render()wm42015-04-092-6/+3
| | | | Its vp parameter made no sense anymore. Introduce a new one.
* vo_opengl_cb: add a function to report vsync timewm42015-04-092-0/+8
| | | | | | | And also let vo.c know of it. Currently, this does not help much, but will facilitate future improvements.
* cocoa: remove the setNextKeyView hackStefano Pigozzi2015-02-281-2/+14
| | | | | | Just use makeFirstResponder on the mpv events view from client code if you need the built in keyboard events (this is easier for dealing with view nesting).
* examples/cocoabasic: allow to send stop commandStefano Pigozzi2015-02-281-13/+19
|
* DOCS/client_api_examples/simple: fix optionwm42015-02-231-1/+1
| | | | | "input-x11-keyboard" still works, but is a deprecated alias with the same functionality.
* manpage: minor changeswm42015-01-231-1/+1
| | | | | | Mostly related to vo_opengl. Fix the opengl lscale option in the qml example too.
* build: remove bogus client API examples buildwm42015-01-233-5/+9
| | | | | | | | | | | The symlink trick made waf go crazy (deleting source files, getting tangled up in infinite recursion... I wish I was joking). This means we still can't build the client API examples in a reasonable way using the include files of the local repository (instead of globally installed headers). Not building them at all is better than deleting source files. Instead, provide some manual instructions how to build each example (except for the Qt examples, which provide qmake project files).
* DOCS/client_api_examples: fix locale nonsense in qml exampleswm42015-01-152-0/+10
| | | | | | | The Qt example already does this. I hoped this was restricted to QApplication only, but apparently Qt repeated this mistake with QGuiApplication (QGuiApplication was specifically added for QtQuick at a much later point, even though QApplication inherits from it).
* DOCS/client_api_examples: qml_direct: QWindow::size() is not thread-safewm42015-01-092-3/+4
| | | | | | We still keep the window pointer, because we want to call QQuickWindow::resetOpenGLState() (which runs on the rendering thread only). Interesting mess...
* DOCS/client_api_examples: qml: reduce number of fileswm42015-01-094-119/+116
| | | | This is annoying.
* DOCS/client_api_examples: add an alternative qml examplewm42015-01-086-0/+293
| | | | | | | | | | | This one avoids use of a FBO. It's less flexible, because it uses works around the whole QML rendering API. It seems to be the only way to get OpenGL rendering without any indirections, though. Parts of this example were insipired by Qt's "Squircle" example. Also add a README file with a short description of each example, to reduce the initial confusing.
* DOCS/client_api_examples: qml: add test for gamma controlwm42015-01-063-11/+29
| | | | Provides a dumb test for the functionality added in the previous commit.
* DOCS/client_api_examples: qtexample: demonstrate multiple mpv instanceswm42015-01-062-0/+10
| | | | Multiple client API contexts can exist in the same process.
* DOCS/client_api_examples: qml: add test for vo_cmdlinewm42015-01-053-13/+29
|
* build: try to make examples build both in-tree and out-of-treewm42015-01-022-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | The examples simple.c and cocoabasic.m can be compiled without installing libmpv. But also, they didn't use the correct include path libmpv programs normally use, so they couldn't be built with a properly installed system-libmpv. That's pretty bad for examples, which are supposed to show how to use libmpv correctly. So do some bullshit that symlinks libmpv to a "mpv" include directory under the build directory. This name-mismatch is a direct consequence of the bullshit done in 499a6758 (requested in #539 for dumb reasons). (We don't want to name the client API headers directory "mpv", because that would be too unspecific, and clashes with having the mpv binary in the same directory.) If you have spaces or other "unusual" characters in your paths, the build will break, because I couldn't find out where waf hides its function to escape shell parameters (or a way to invoke programs without involving the shell). Neither does such a thing to be documented, nor do they seem to have a clear way to do this in their code. This also doesn't compile the Qt examples, because everything becomes even more terrible from there on.
* DOCS/client_api_examples: move all examples into their own subdirswm42015-01-016-13/+20
| | | | | Also get rid of shared.h; it actually doesn't have much value. Just copy the tiny function it contained into the 2 files which used it.
* DOCS/client_api_examples: don't throw char* in C++ codewm42015-01-012-6/+9
| | | | | | | C++ is the worst language ever, and allows throwing any type, even if it doesn't make sense. In this case, we were throwing char*, which the runtime typically treats as opaque, instead of printing it as message if such an exception was not caught.
* vo_opengl_cb: simplify API uninitializationwm42014-12-311-9/+3
| | | | | | | | | | | Until now, calling mpv_opengl_cb_uninit_gl() at a "bad moment" could make the whole thing to explode. The API user was asked to avoid such situations by calling it only in "good moments". But this was probably a bit too subtle and could easily be overlooked. Integrate the approach the qml example uses directly into the implementation. If the OpenGL context is to be unitialized, forcefully disable video, and block until this is done.
* DOCS/client_api_examples: add an explicit licensewm42014-12-302-2/+14
| | | | IANAL, but we don't give a shit what you do with this code.
* DOCS/client_api_examples: qtexample: use queued signalswm42014-12-303-20/+19
| | | | | | | | Use queued signals instead of QEvent for the wakeup notification. This is slightly nicer, and reduces the chance that the event (QEvent::User) could clash with other code using the same event. Also switch to modern connect() syntax.
* DOCS/client_api_examples: qtquick: fix destructionwm42014-12-304-38/+35
| | | | | | | | | | | | | | | | Destruction (e.g. when closing the window) was a bit broken. This commit fixes some possible crashes, and should make lifetime management relatively sane. (Still a bit complex, though. Maybe this code should be moved into a tiny library.) QtQuick runs the renderer on a separate thread. This thread is rather loosely connected to the main thread. The loose separation is enforced by the API, which also makes coordination of initialization and destruction harder. Throw refcounting at the problem, which fixes it. The refcounting wrapper introduced in the previous commit is used for this. Also contains some general cleanups.
* DOCS/client_api_examples: remove nonsensewm42014-12-092-4/+3
| | | | | | | I thought setSamples() was some funky abstraction to set the number of components, but it's actually something else. Also fix the include paths.
* client API: expose OpenGL rendererwm42014-12-096-0/+232
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This adds API to libmpv that lets host applications use the mpv opengl renderer. This is a more flexible (and possibly more portable) option to foreign window embedding (via --wid). This assumes that methods like context sharing and multithreaded OpenGL rendering are infeasible, and that a way is needed to integrate it with an application that uses a single thread to render everything. Add an example that does this with QtQuick/qml. The example is relatively lazy, but still shows how relatively simple the integration is. The FBO indirection could probably be avoided, but would require more work (and would probably lead to worse QtQuick integration, because it would have to ignore transformations like rotation). Because this makes mpv directly use the host application's OpenGL context, there is no platform specific code involved in mpv, except for hw decoding interop. main.qml is derived from some Qt example. The following things are still missing: - a way to do better video timing - expose GL renderer options, allow changing them at runtime - support for color equalizer controls - support for screenshots
* libmpv: cocoa: add basic menuStefano Pigozzi2014-10-271-10/+7
|
* DOCS/client_api_examples: qtexample: don't require Qt 5.xwm42014-10-171-0/+7
| | | | Exclude the worthless Qt 5.0-only demo code on Qt 4.x.
* cocoa: allow mouse events to bubble up with no-input-cursorStefano Pigozzi2014-10-171-0/+1
| | | | | Previously we didn't report events to the core, but still prevented the events to travel on the responder chain.
* DOCS/client_api_examples: qtexample: set a magic Qt flagwm42014-10-161-0/+1
| | | | | | Otherwise, other magic Qt stuff can be magically broken. (No, I don't know the real reasons for this.)
* DOCS/client_api_examples: qtexample: embedding works on Cocoawm42014-10-161-2/+1
|
* DOCS/client_api_examples: qtexample: remove debugging codewm42014-10-141-2/+1
| | | | Forgotten.
* DOCS/client_api_examples: qtexample: stuffwm42014-10-133-7/+31
| | | | | | Dump chapters and track list to the log for demo purposes. Compile in debug mode.
* libmpv/cocoa: allow clients to use mpv event systemStefano Pigozzi2014-10-121-11/+26
| | | | | | | | | | This allows mpv's view to take key and send events to mpv's core. To set key status correctly, clients must call -[NSWindow selectNextKeyView:] during reconfig on the main thread. All is 'documented' in the cocoabasic example. If someone knows a better way to handle giving key to the embedded view, let me know!
* libmpv/cocoa: make global events work and get rid of is_cplayerStefano Pigozzi2014-10-091-0/+3
| | | | | | | After @frau's split of macosx_events from macosx_application, `is_cplayer' is not needed anymore. At the moment only global events such as Media Keys and Apple Remote work, because the VO-level ones were hardcoded to be disabled. (that will be fix in a later commit ).
* client API: rename --input-x11-keyboard to --input-vo-keyboardwm42014-10-091-2/+2
| | | | | Apparently we need this for Cocoa too. (The option was X11 specific in the hope that only X11 would need this hack.)
* cocoa: allow to embed into an arbitrary NSViewStefano Pigozzi2014-10-081-1/+1
| | | | | Basically add if guards on all the problematic features. I'm still thinking about a better way to handle this, but for the time being, this will do.
* DOCS/client_api_examples: qtexample: add a log windowwm42014-10-082-0/+29
| | | | | | | | For the purpose of demonstration. Also make the windows larger. I'm not exactly sure how Qt determines the default window sizes, but here they are a bit tiny, so force them larger.
* DOCS/client_api_examples: qtexample: set the localeJames Ross-Gowan2014-10-071-0/+6
| | | | | | | QApplication sets the locale, so change the LC_NUMERIC category back to "C" for libmpv. See: http://qt-project.org/doc/qt-5/qcoreapplication.html#locale-settings
* cocoa: fix some pointer casts to be 32bit safeStefano Pigozzi2014-10-051-1/+1
| | | | credits: wm4
* cocoa/libmpv: allow to embed mpv GL view in another windowStefano Pigozzi2014-10-051-2/+42
| | | | | | | | | | | | | | | | | | | This is just temporary code but is a good base for future work (and baby steps are required for these changes). The 'final destination' is embedding the video view into any NSView but that requires some more work (the mechanism will be the same: pass the view's pointer casted to int64_t through -wid). For instance we will need to remove as much usage of the window instance as possible, and use nil guards where not possible. For this reason I will remove stuff like the mission control fullscreen feature (it's a cute feature but annoying to support and quite limited, go make your GUIs), and a way to lookup the current screen directly from the NSView absolute coordinates (this is needed for ICC detection mostly, and reporting back the screen to mpv's core). Moreover the current view.m will need to be separated into 2 views: the actual video view that will be embedded, and a parent view that will not be embedded and will be responsibile for tracking events.
* examples/cocoa: never instance NSApplication with newStefano Pigozzi2014-10-051-1/+1
| | | | | Cocoa expects the you instance NSApplications only through the singleton method sharedApplication.
* examples/cocoa: set activation policy to mimic nib applicationsStefano Pigozzi2014-10-051-0/+8
|
* DOCS/client_api_examples: qtexample: remove broken resizingwm42014-09-281-8/+6
| | | | | | | | | The intention was to adjust the window size to video size. It never worked well; it prevented the user to make the window smaller. For unknown reason it stopped resizing properly as well. This is just a cheap example, and I don't intend to fight with Qt, so replace the "demonstration" behavior by something slightly lamer.
* client API, X11: change default keyboard input handling againwm42014-09-282-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | Commit 64b7811c tried to do the "right thing" with respect to whether keyboard input should be enabled or not. It turns out that X11 does something stupid by design. All modern toolkits work around this native X11 behavior, but embedding breaks these workarounds. The only way to handle this correctly is the XEmbed protocol. It needs to be supported by the toolkit, and probably also some mpv support. But Qt has inconsistent support for it. In Qt 4, a X11 specific embedding widget was needed. Qt 5.0 doesn't support it at all. Qt 5.1 apparently supports it via QWindow, but if it really does, I couldn't get it to work. So add a hack instead. The new --input-x11-keyboard option controls whether mpv should enable keyboard input on the X11 window or not. In the command line player, it's enabled by default, but in libmpv it's disabled. This hack has the same problem as all previous embedding had: move the mouse outside of the window, and you don't get keyboard input anymore. Likewise, mpv will steal all keyboard input from the parent application as long as the mouse is inside of the mpv window. Also see issue #1090.
* DOCS/client_api_examples: qtexample: resize to video sizewm42014-09-151-0/+21
| | | | | | | | | | | | | This is pretty imperfect, but it's just a demo. The main purpose is clarifying how and when to get the video size. In theory, retrieving the properties this way has a race condition: after reading dwidth, the video could resize again. But the worst that can happen are mismatching dwidth/dheight values, and the MPV_EVENT_VIDEO_RECONFIG event would be immediately received again, which would fix the mismatch. You could read the full video-out-params property to absolutely avoid it, but it's not worth the trouble.
* docs: cocoa example uses wakeup callback APIFRAU KOUJIRO2014-08-121-22/+54
| | | | Also, imitate the qt example somewhat.
* docs: simple cocoa API usage exampleFRAU KOUJIRO2014-08-121-0/+85
|
* client API: qtexample: don't pass deallocated strings to mpvwm42014-08-071-1/+2
| | | | | The temporary QByteArray is deallocated already at the end of the statement in C++, instead of the end of the scope (like in C).
* DOCS/client_api_examples: add a Qt examplewm42014-07-043-0/+177
| | | | | This is pretty dumb and extremely basic. The main purpose is demonstrating how to integrate mpv into the Qt GUI thread.
* client API: rename mpv_destroy() to mpv_detach_destroy()wm42014-06-071-1/+1
| | | | | | A bit verbose, but less misleading. In most cases, the API user probably actually wants mpv_terminate_destroy() instead, so the less-useful function shouldn't have a simnpler name anyway.
* client api examples: set an option with MPV_FORMAT_FLAGwm42014-02-241-1/+2
|
* Add a client API examplewm42014-02-102-0/+53