新增视频流播放
This commit is contained in:
209
vlcdemo/vlc/vlc3/include/plugins/vlc_events.h
Normal file
209
vlcdemo/vlc/vlc3/include/plugins/vlc_events.h
Normal file
@@ -0,0 +1,209 @@
|
||||
/*****************************************************************************
|
||||
* vlc_events.h: events definitions
|
||||
* Interface used to send events.
|
||||
*****************************************************************************
|
||||
* Copyright (C) 2007 VLC authors and VideoLAN
|
||||
* $Id: 229f4f677029763a837558932dad3e47b283e61c $
|
||||
*
|
||||
* Authors: Pierre d'Herbemont
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation; either version 2.1 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef VLC_EVENTS_H
|
||||
# define VLC_EVENTS_H
|
||||
|
||||
#include <vlc_arrays.h>
|
||||
#include <vlc_meta.h>
|
||||
|
||||
/**
|
||||
* \file
|
||||
* This file is the interface definition for events
|
||||
* (implementation in src/misc/events.c)
|
||||
*/
|
||||
|
||||
/*****************************************************************************
|
||||
* Documentation
|
||||
*****************************************************************************/
|
||||
/*
|
||||
**** Background
|
||||
*
|
||||
* This implements a way to send and receive event for an object (which can be
|
||||
* a simple C struct or less).
|
||||
*
|
||||
* This is in direct concurrency with the Variable based Callback
|
||||
* (see src/misc/variables.c).
|
||||
*
|
||||
* It has the following advantages over Variable based Callback:
|
||||
* - No need to implement the whole VLC_COMMON_MEMBERS in the object,
|
||||
* thus it reduce it size. This is especially true for input_item_t which
|
||||
* doesn't have VLC_COMMON_MEMBERS. This is the first reason of existence of
|
||||
* this implementation.
|
||||
* - Libvlc can easily be based upon that.
|
||||
* - Existing event are clearly declared (in include/vlc_events.h)
|
||||
*
|
||||
*
|
||||
**** Example usage
|
||||
*
|
||||
* (vlc_cool_object_t doesn't need to have the VLC_COMMON_MEMBERS.)
|
||||
*
|
||||
* struct vlc_cool_object_t
|
||||
* {
|
||||
* ...
|
||||
* vlc_event_manager_t p_event_manager;
|
||||
* ...
|
||||
* }
|
||||
*
|
||||
* vlc_my_cool_object_new()
|
||||
* {
|
||||
* ...
|
||||
* vlc_event_manager_init( &p_self->p_event_manager, p_self, p_a_libvlc_object );
|
||||
* ...
|
||||
* }
|
||||
*
|
||||
* vlc_my_cool_object_release()
|
||||
* {
|
||||
* ...
|
||||
* vlc_event_manager_fini( &p_self->p_event_manager );
|
||||
* ...
|
||||
* }
|
||||
*
|
||||
* vlc_my_cool_object_do_something()
|
||||
* {
|
||||
* ...
|
||||
* vlc_event_t event;
|
||||
* event.type = vlc_MyCoolObjectDidSomething;
|
||||
* event.u.my_cool_object_did_something.what_it_did = kSomething;
|
||||
* vlc_event_send( &p_self->p_event_manager, &event );
|
||||
* }
|
||||
* */
|
||||
|
||||
/*****************************************************************************
|
||||
* Event Type
|
||||
*****************************************************************************/
|
||||
|
||||
/* List of event */
|
||||
typedef enum vlc_event_type_t {
|
||||
/* Input item events */
|
||||
vlc_InputItemMetaChanged,
|
||||
vlc_InputItemSubItemTreeAdded,
|
||||
vlc_InputItemDurationChanged,
|
||||
vlc_InputItemPreparsedChanged,
|
||||
vlc_InputItemNameChanged,
|
||||
vlc_InputItemInfoChanged,
|
||||
vlc_InputItemErrorWhenReadingChanged,
|
||||
vlc_InputItemPreparseEnded,
|
||||
} vlc_event_type_t;
|
||||
|
||||
typedef struct vlc_event_listeners_group_t
|
||||
{
|
||||
DECL_ARRAY(struct vlc_event_listener_t *) listeners;
|
||||
} vlc_event_listeners_group_t;
|
||||
|
||||
/* Event manager type */
|
||||
typedef struct vlc_event_manager_t
|
||||
{
|
||||
void * p_obj;
|
||||
vlc_mutex_t lock;
|
||||
vlc_event_listeners_group_t events[vlc_InputItemPreparseEnded + 1];
|
||||
} vlc_event_manager_t;
|
||||
|
||||
/* Event definition */
|
||||
typedef struct vlc_event_t
|
||||
{
|
||||
vlc_event_type_t type;
|
||||
void * p_obj; /* Sender object, automatically filled by vlc_event_send() */
|
||||
union vlc_event_type_specific
|
||||
{
|
||||
/* Input item events */
|
||||
struct vlc_input_item_meta_changed
|
||||
{
|
||||
vlc_meta_type_t meta_type;
|
||||
} input_item_meta_changed;
|
||||
struct vlc_input_item_subitem_added
|
||||
{
|
||||
input_item_t * p_new_child;
|
||||
} input_item_subitem_added;
|
||||
struct vlc_input_item_subitem_tree_added
|
||||
{
|
||||
input_item_node_t * p_root;
|
||||
} input_item_subitem_tree_added;
|
||||
struct vlc_input_item_duration_changed
|
||||
{
|
||||
mtime_t new_duration;
|
||||
} input_item_duration_changed;
|
||||
struct vlc_input_item_preparsed_changed
|
||||
{
|
||||
int new_status;
|
||||
} input_item_preparsed_changed;
|
||||
struct vlc_input_item_name_changed
|
||||
{
|
||||
const char * new_name;
|
||||
} input_item_name_changed;
|
||||
struct vlc_input_item_info_changed
|
||||
{
|
||||
void * unused;
|
||||
} input_item_info_changed;
|
||||
struct input_item_error_when_reading_changed
|
||||
{
|
||||
bool new_value;
|
||||
} input_item_error_when_reading_changed;
|
||||
struct input_item_preparse_ended
|
||||
{
|
||||
int new_status;
|
||||
} input_item_preparse_ended;
|
||||
} u;
|
||||
} vlc_event_t;
|
||||
|
||||
/* Event callback type */
|
||||
typedef void ( *vlc_event_callback_t )( const vlc_event_t *, void * );
|
||||
|
||||
/*****************************************************************************
|
||||
* Event manager
|
||||
*****************************************************************************/
|
||||
|
||||
/*
|
||||
* p_obj points to the object that owns the event manager, and from
|
||||
* which events are sent
|
||||
*/
|
||||
void vlc_event_manager_init( vlc_event_manager_t * p_em, void * p_obj );
|
||||
|
||||
/*
|
||||
* Destroy
|
||||
*/
|
||||
void vlc_event_manager_fini( vlc_event_manager_t * p_em );
|
||||
|
||||
/*
|
||||
* Send an event to the listener attached to this p_em.
|
||||
*/
|
||||
void vlc_event_send( vlc_event_manager_t * p_em, vlc_event_t * );
|
||||
|
||||
/*
|
||||
* Add a callback for an event.
|
||||
*/
|
||||
VLC_API int vlc_event_attach( vlc_event_manager_t * p_event_manager,
|
||||
vlc_event_type_t event_type,
|
||||
vlc_event_callback_t pf_callback,
|
||||
void *p_user_data );
|
||||
|
||||
/*
|
||||
* Remove a callback for an event.
|
||||
*/
|
||||
VLC_API void vlc_event_detach( vlc_event_manager_t *p_event_manager,
|
||||
vlc_event_type_t event_type,
|
||||
vlc_event_callback_t pf_callback,
|
||||
void *p_user_data );
|
||||
|
||||
#endif /* VLC_EVENTS_H */
|
||||
Reference in New Issue
Block a user