Commit 31150350 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Add LibVLC API for vmem

parent b401af05
...@@ -200,6 +200,53 @@ VLC_PUBLIC_API void libvlc_media_player_pause ( libvlc_media_player_t *p_mi ); ...@@ -200,6 +200,53 @@ VLC_PUBLIC_API void libvlc_media_player_pause ( libvlc_media_player_t *p_mi );
*/ */
VLC_PUBLIC_API void libvlc_media_player_stop ( libvlc_media_player_t *p_mi ); VLC_PUBLIC_API void libvlc_media_player_stop ( libvlc_media_player_t *p_mi );
/**
* Set callbacks and private data to render decoded video to a custom area
* in memory. Use libvlc_video_set_format() to configure the decoded format.
*
* Whenever a new video frame needs to be decoded, the lock callback is
* invoked. Depending on the video chroma, one or three pixel planes of
* adequate dimensions must be returned via the second parameter. Those
* planes must be aligned on 32-bytes boundaries.
*
* When the video frame is decoded, the unlock callback is invoked. The
* second parameter to the callback corresponds is the return value of the
* lock callback. The third parameter conveys the pixel planes for convenience.
*
* When the video frame needs to be shown, as determined by the media playback
* clock, the display callback is invoked. The second parameter also conveys
* the return value from the lock callback.
*
* \param mp the media player
* \param lock callback to allocate video memory
* \param unlock callback to release video memory
* \param opaque private pointer for the three callbacks (as first parameter)
* \version LibVLC 1.1.1 or later
*/
VLC_PUBLIC_API
void libvlc_video_set_callbacks( libvlc_media_player_t *mp,
void *(*lock) (void *opaque, void **plane),
void (*unlock) (void *opaque, void *picture, void *const *plane),
void (*display) (void *opaque, void *picture),
void *opaque );
/**
* Set decoded video chroma and dimensions. This only works in combination with
* libvlc_video_set_callbacks().
*
* \param mp the media player
* \param chroma a four-characters string identifying the chroma
* (e.g. "RV32" or "I420")
* \param width pixel width
* \param height pixel height
* \param pitch line pitch (in bytes)
* \version LibVLC 1.1.1 or later
*/
VLC_PUBLIC_API
void libvlc_video_set_format( libvlc_media_player_t *mp, const char *chroma,
unsigned width, unsigned height,
unsigned pitch );
/** /**
* Set the NSView handler where the media player should render its video output. * Set the NSView handler where the media player should render its video output.
* *
......
...@@ -369,6 +369,14 @@ libvlc_media_player_new( libvlc_instance_t *instance ) ...@@ -369,6 +369,14 @@ libvlc_media_player_new( libvlc_instance_t *instance )
/* Video */ /* Video */
var_Create (mp, "vout", VLC_VAR_STRING|VLC_VAR_DOINHERIT); var_Create (mp, "vout", VLC_VAR_STRING|VLC_VAR_DOINHERIT);
var_Create (mp, "window", VLC_VAR_STRING); var_Create (mp, "window", VLC_VAR_STRING);
var_Create (mp, "vmem-lock", VLC_VAR_ADDRESS);
var_Create (mp, "vmem-unlock", VLC_VAR_ADDRESS);
var_Create (mp, "vmem-display", VLC_VAR_ADDRESS);
var_Create (mp, "vmem-data", VLC_VAR_ADDRESS);
var_Create (mp, "vmem-chroma", VLC_VAR_STRING | VLC_VAR_DOINHERIT);
var_Create (mp, "vmem-width", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
var_Create (mp, "vmem-height", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
var_Create (mp, "vmem-width", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
var_Create (mp, "drawable-xid", VLC_VAR_INTEGER); var_Create (mp, "drawable-xid", VLC_VAR_INTEGER);
#ifdef WIN32 #ifdef WIN32
var_Create (mp, "drawable-hwnd", VLC_VAR_ADDRESS); var_Create (mp, "drawable-hwnd", VLC_VAR_ADDRESS);
...@@ -767,6 +775,29 @@ void libvlc_media_player_stop( libvlc_media_player_t *p_mi ) ...@@ -767,6 +775,29 @@ void libvlc_media_player_stop( libvlc_media_player_t *p_mi )
unlock_input(p_mi); unlock_input(p_mi);
} }
void libvlc_video_set_callbacks( libvlc_media_player_t *mp,
void *(*lock_cb) (void *, void **),
void (*unlock_cb) (void *, void *, void *const *),
void (*display_cb) (void *, void *),
void *opaque )
{
var_SetAddress( mp, "vmem-lock", lock_cb );
var_SetAddress( mp, "vmem-unlock", unlock_cb );
var_SetAddress( mp, "vmem-display", display_cb );
var_SetAddress( mp, "vmem-data", opaque );
var_SetString( mp, "vout", "vmem" );
}
void libvlc_video_set_format( libvlc_media_player_t *mp, const char *chroma,
unsigned width, unsigned height, unsigned pitch )
{
var_SetString( mp, "vmem-chroma", chroma );
var_SetInteger( mp, "vmem-width", width );
var_SetInteger( mp, "vmem-height", height );
var_SetInteger( mp, "vmem-pitch", pitch );
}
/************************************************************************** /**************************************************************************
* set_nsobject * set_nsobject
**************************************************************************/ **************************************************************************/
......
...@@ -202,6 +202,8 @@ libvlc_video_set_subtitle_file ...@@ -202,6 +202,8 @@ libvlc_video_set_subtitle_file
libvlc_video_set_teletext libvlc_video_set_teletext
libvlc_video_set_track libvlc_video_set_track
libvlc_video_take_snapshot libvlc_video_take_snapshot
libvlc_video_set_callbacks
libvlc_video_set_format
libvlc_vlm_add_broadcast libvlc_vlm_add_broadcast
libvlc_vlm_add_vod libvlc_vlm_add_vod
libvlc_vlm_add_input libvlc_vlm_add_input
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment