云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > vlc学习5线程分析

vlc学习5线程分析

  • 62 次阅读
  • 3 次下载
  • 2025/5/23 17:28:28

第一部分 变量及宏定义 1.消息映射宏

vlc_module_begin(); ………………….. vlc_module_end(); 2.结构中包含函数

struct input_thread_t {

VLC_COMMON_MEMBERS

/* Thread properties */

vlc_bool_t b_eof;

vlc_bool_t b_out_pace_control;

/* Access module */

module_t * p_access;

ssize_t (* pf_read ) ( input_thread_t *, byte_t *, size_t ); int (* pf_set_program )( input_thread_t *, pgrm_descriptor_t * );

int (* pf_set_area )( input_thread_t *, input_area_t * ); void (* pf_seek ) ( input_thread_t *, off_t ); }

3.宏与换行符妙用 #define

VLC_COMMON_MEMBERS / /** /name

VLC_COMMON_MEMBERS / * these members are common for all vlc objects /

*/ /

/**@{*/ /

int i_object_id; /

int i_object_type; / char

*psz_object_type; / char

*psz_object_name; / / /** Just a reminder so that people don't cast garbage */ /

int

be_sure_to_add_VLC_COMMON_MEMBERS_to_struct; / /**@}*/

#define VLC_OBJECT( x ) / ((vlc_object_t *)(x))+

0*(x)->be_sure_to_add_VLC_COMMON_MEMBERS_to_struct struct vlc_object_t {

VLC_COMMON_MEMBERS

};//定义一个结构来使用宏定义的公共成员

4.定义导出函数 #ifndef __PLUGIN__

# define VLC_EXPORT( type, name, args ) type name args #else

# define VLC_EXPORT( type, name, args ) struct _u_n_u_s_e_d_ extern module_symbols_t* p_symbols; #endif

5.定义回调函数

typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */

char const *, /* variable name */

vlc_value_t, /* old value */

vlc_value_t, /* new value */

void * ); /* callback data */ 6.函数作为参数的定义方式

Int Fun(int n,int (*pf)(int ,int),char *pstr) { int j =10; pf(n,j); }

7.回调函数的声明

必须声明为global,或者static Int vlc_callback_t (int ,int) {。。。。。。。。。。。}

8.回调函数的使用

Fun(0, vlc_callback_t,\

9.函数表达式

#define input_BuffersInit(a) __input_BuffersInit(VLC_OBJECT(a)) void * __input_BuffersInit( vlc_object_t * );

#define module_Need(a,b,c,d) __module_Need(VLC_OBJECT(a),b,c,d)

VLC_EXPORT( module_t *, __module_Need, ( vlc_object_t *, const char *, const char *, vlc_bool_t ) );

10.定义函数

/* Dynamic array handling: realloc array, move data, increment position */

#define INSERT_ELEM( p_ar, i_oldsize, i_pos, elem ) /

do /

{ /

if( i_oldsize ) /

{ /

(p_ar) = realloc( p_ar, ((i_oldsize) + 1) * sizeof( *(p_ar) ) ); /

} /

else /

{ /

(p_ar) = malloc( ((i_oldsize) + 1) * sizeof( *(p_ar) ) ); /

} /

if( (i_oldsize) -

(i_pos) ) /

{ /

memmove( (p_ar) + (i_pos) + 1, / (p_ar) +

(i_pos), /

((i_oldsize) - (i_pos)) * sizeof( *(p_ar) ) ); /

} /

(p_ar)[i_pos] =

elem; /

(i_oldsize)++; /

} /

while( 0 )

应用为:

INSERT_ELEM( p_new->p_libvlc->pp_objects, p_new->p_libvlc->i_objects, p_new->p_libvlc->i_objects, p_new );

11.改变地址的方式传递其值

stream_t *input_StreamNew( input_thread_t *p_input )

{ stream_t *s = vlc_object_create( p_input, sizeof( stream_t ) ); input_stream_sys_t *p_sys; if( s ) {

s->p_sys = malloc( sizeof( input_stream_sys_t ) ); p_sys = (input_stream_sys_t*)s->p_sys; p_sys->p_input = p_input; }

return s;//注解:s->p_sys改变了 }

第二部分 程序框架实现 1. 播放列表文件src/playlist/playlist.c的线程

playlist_t * __playlist_Create ( vlc_object_t *p_parent )函数中创建的线程,线程函数为

static void RunThread ( playlist_t *p_playlist ) 线程思路分析:

在RunThread里面执行循环,如果没有任务执行,则适当的延迟,如果接到p_playlist->i_status != PLAYLIST_STOPPED的条件,则调用

PlayItem( p_playlist )函数,在PlayItem( p_playlist )函数中从新创建输入线程。

搜索更多关于: vlc学习5线程分析 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

第一部分 变量及宏定义 1.消息映射宏 vlc_module_begin(); ………………….. vlc_module_end(); 2.结构中包含函数 struct input_thread_t { VLC_COMMON_MEMBERS /* Thread properties */ vlc_bool_t b_eof; vlc_bool_t b_out_pace_control; /* Access module */ module_t

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com