mirror of https://code.videolan.org/videolan/vlc
Merge branch 'umxprime/4.x/libvlc/mediaplayer/apple/allow-force-vout/01' into 'master'
libvlc: media player: add function to force display for Darwin systems See merge request videolan/vlc!4205
This commit is contained in:
commit
2dc41f3169
|
@ -170,6 +170,16 @@ typedef enum libvlc_teletext_key_t {
|
|||
libvlc_teletext_key_index = 'i' << 16,
|
||||
} libvlc_teletext_key_t;
|
||||
|
||||
/**
|
||||
* Enumeration of Apple video renderer keys than can be passed via
|
||||
* libvlc_media_player_set_nsobject_with_renderer ( p_mi, drawable, renderer )
|
||||
*/
|
||||
typedef enum libvlc_ns_video_renderer_t {
|
||||
libvlc_ns_video_renderer_auto = 0, // automatically handled by the system
|
||||
libvlc_ns_video_renderer_gl_layer, // OpenGL backed CALayer
|
||||
libvlc_ns_video_renderer_gl_view, // NSOpenGLView (macOS only)
|
||||
} libvlc_ns_video_renderer_t;
|
||||
|
||||
/**
|
||||
* Opaque equalizer handle.
|
||||
*
|
||||
|
@ -894,9 +904,7 @@ bool libvlc_video_set_output_callbacks( libvlc_media_player_t *mp,
|
|||
void* opaque );
|
||||
|
||||
/**
|
||||
* Set the NSView handler where the media player should render its video output.
|
||||
*
|
||||
* Use the vout called "macosx".
|
||||
* Set the view handler where the media player should render its video output.
|
||||
*
|
||||
* The drawable is an NSObject that follow the VLCVideoViewEmbedding
|
||||
* protocol:
|
||||
|
@ -908,15 +916,17 @@ bool libvlc_video_set_output_callbacks( libvlc_media_player_t *mp,
|
|||
* @end
|
||||
* @endcode
|
||||
*
|
||||
* Or it can be an NSView object.
|
||||
* Or it can be an UIView/NSView object.
|
||||
*
|
||||
* If you want to use it along with Qt see the QMacCocoaViewContainer. Then
|
||||
* the following code should work:
|
||||
* @code{.mm}
|
||||
* {
|
||||
* NSView *video = [[NSView alloc] init];
|
||||
* QMacCocoaViewContainer *container = new QMacCocoaViewContainer(video, parent);
|
||||
* libvlc_media_player_set_nsobject(mp, video);
|
||||
* QMacCocoaViewContainer *container =
|
||||
* new QMacCocoaViewContainer(video, parent);
|
||||
* libvlc_media_player_set_nsobject_with_renderer(
|
||||
* mp, video, libvlc_ns_video_renderer_auto);
|
||||
* [video release];
|
||||
* }
|
||||
* @endcode
|
||||
|
@ -924,16 +934,45 @@ bool libvlc_video_set_output_callbacks( libvlc_media_player_t *mp,
|
|||
* You can find a live example in VLCVideoView in VLCKit.framework.
|
||||
*
|
||||
* \param p_mi the Media Player
|
||||
* \param drawable the drawable that is either an NSView or an object following
|
||||
* the VLCVideoViewEmbedding protocol.
|
||||
* \param drawable the drawable that is either an UIView/NSView or an object
|
||||
* following the VLCVideoViewEmbedding protocol.
|
||||
* \param renderer select the renderer. Pass libvlc_ns_video_renderer_auto
|
||||
* to have the selection done by the system.
|
||||
* \return false if renderer can't be selected
|
||||
* \return true on success
|
||||
*/
|
||||
LIBVLC_API void libvlc_media_player_set_nsobject ( libvlc_media_player_t *p_mi, void * drawable );
|
||||
LIBVLC_API bool libvlc_media_player_set_nsobject_with_renderer (
|
||||
libvlc_media_player_t *p_mi,
|
||||
void * drawable,
|
||||
libvlc_ns_video_renderer_t renderer );
|
||||
|
||||
/**
|
||||
* Get the NSView handler previously set with libvlc_media_player_set_nsobject().
|
||||
* Set the NSView handler where the media player should render its video output
|
||||
* with the renderer selected automatically by the system.
|
||||
*
|
||||
* Same as doing
|
||||
* @code
|
||||
* libvlc_media_player_set_nsobject_with_renderer(
|
||||
* mp, video, libvlc_ns_video_renderer_auto);
|
||||
* @endcode
|
||||
*
|
||||
* @see libvlc_media_player_set_nsobject ( libvlc_media_player_t *p_mi,
|
||||
* void * drawable,
|
||||
* libvlc_ns_video_renderer_t renderer )
|
||||
*
|
||||
* \param p_mi the Media Player
|
||||
* \return the NSView handler or 0 if none where set
|
||||
* \param drawable the drawable that is either an UIView/NSView or an object
|
||||
* following the VLCVideoViewEmbedding protocol.
|
||||
*/
|
||||
LIBVLC_API void libvlc_media_player_set_nsobject ( libvlc_media_player_t *p_mi,
|
||||
void * drawable);
|
||||
|
||||
/**
|
||||
* Get the view handler previously set with libvlc_media_player_set_nsobject().
|
||||
*
|
||||
* \param p_mi the Media Player
|
||||
* \return the UIView/NSView/VLCVideoViewEmbedding handler
|
||||
* \return 0 if none where set
|
||||
*/
|
||||
LIBVLC_API void * libvlc_media_player_get_nsobject ( libvlc_media_player_t *p_mi );
|
||||
|
||||
|
|
|
@ -169,6 +169,7 @@ libvlc_media_player_set_equalizer
|
|||
libvlc_media_player_set_hwnd
|
||||
libvlc_media_player_set_media
|
||||
libvlc_media_player_set_nsobject
|
||||
libvlc_media_player_set_nsobject_with_renderer
|
||||
libvlc_media_player_set_position
|
||||
libvlc_media_player_set_rate
|
||||
libvlc_media_player_set_renderer
|
||||
|
|
|
@ -1161,15 +1161,49 @@ bool libvlc_video_set_output_callbacks(libvlc_media_player_t *mp,
|
|||
/**************************************************************************
|
||||
* set_nsobject
|
||||
**************************************************************************/
|
||||
void libvlc_media_player_set_nsobject( libvlc_media_player_t *p_mi,
|
||||
void * drawable )
|
||||
static const char *
|
||||
libvlc_vout_display_name_from_value( libvlc_ns_video_renderer_t renderer )
|
||||
{
|
||||
static const char * optlist[] =
|
||||
{
|
||||
[libvlc_ns_video_renderer_auto] = "any",
|
||||
#if TARGET_IPHONE_OS
|
||||
[libvlc_ns_video_renderer_gl_layer] = "caeagl",
|
||||
#else
|
||||
[libvlc_ns_video_renderer_gl_layer] = "caopengllayer",
|
||||
#endif
|
||||
[libvlc_ns_video_renderer_gl_view] = "vout_macosx",
|
||||
};
|
||||
enum { num_opts = sizeof(optlist) / sizeof(*optlist) };
|
||||
|
||||
const char *r = renderer < num_opts ? optlist[renderer] : NULL;
|
||||
if( !r ) {
|
||||
libvlc_printerr( "Unknown renderer value" );
|
||||
}
|
||||
|
||||
if( renderer != libvlc_ns_video_renderer_auto && !module_exists(r) ) {
|
||||
libvlc_printerr( "Display module doesn't exist" );
|
||||
r = NULL;
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
bool libvlc_media_player_set_nsobject_with_renderer(
|
||||
libvlc_media_player_t *p_mi,
|
||||
void *drawable,
|
||||
libvlc_ns_video_renderer_t renderer )
|
||||
{
|
||||
assert (p_mi != NULL);
|
||||
#ifdef __APPLE__
|
||||
const char *vout = libvlc_vout_display_name_from_value(renderer);
|
||||
if (!vout)
|
||||
return false;
|
||||
var_SetString (p_mi, "dec-dev", "any");
|
||||
var_SetString (p_mi, "vout", "any");
|
||||
var_SetString (p_mi, "vout", vout);
|
||||
var_SetString (p_mi, "window", "any");
|
||||
var_SetAddress (p_mi, "drawable-nsobject", drawable);
|
||||
return true;
|
||||
#else
|
||||
(void)drawable;
|
||||
libvlc_printerr ("can't set nsobject: APPLE build required");
|
||||
|
@ -1178,6 +1212,13 @@ void libvlc_media_player_set_nsobject( libvlc_media_player_t *p_mi,
|
|||
#endif
|
||||
}
|
||||
|
||||
void libvlc_media_player_set_nsobject ( libvlc_media_player_t *p_mi,
|
||||
void * drawable)
|
||||
{
|
||||
libvlc_media_player_set_nsobject_with_renderer(
|
||||
p_mi, drawable, libvlc_ns_video_renderer_auto );
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* get_nsobject
|
||||
**************************************************************************/
|
||||
|
|
Loading…
Reference in New Issue