搜档网
当前位置:搜档网 › VLC架构和流程的详细解释文档

VLC架构和流程的详细解释文档

VLC架构和流程的详细解释文档
VLC架构和流程的详细解释文档

VLC架构剖析

1. Vid eoLan简介

1.1 videolan组成

Videolan有以下两部分组成:

VLC:一个最主要的部分,它可以播放各种类型的媒体文件和流媒体文件,并且可以创造媒体流并保存成各种格式的媒体文件,这些文件的质量要比没保存前的件好。videolan作为客户端可以播放本地文件,httP://,rtsp://。

VLS:是一种流服务器,专门用来解决流的各种问题,它也具有一些VLC的特征。videolan作为服务器可以输出httP,rtP,rtsp的流。

1.2 VLC优点

VLC是一种跨平台的媒体播放器和流媒体服务器,最初为videolan的客户端,它是一种非常简便的多媒体播放器,它可以用来播放各种各样的音视频的格式文件(MPEG-1、MPEG- 2、MPEG- 4、DivX、WMV、mp3、OGG、Vorbis、AC3、AAC等等)流媒体协议,最具特色的功能是可以边下载边观看Divx媒体文件,并可以播放不完全的AVI文件。并且支持界面的更改。VLC支持多种的操作系统,linux(rh9,Debian,Mandrake,Gentoo),BSD,windows,Mac OS X,Be OS,Solaris等等。支持带菜单的VCD,SVCD,和DVD,数字卫星频道、数字地球电视频道(digital terrestrial television channels),在这些操作系统下通过宽带IPv4、IPv6网络播放线上影片。此软件开发项目是由法国学生所发起的,参与者来自于世界各地,设计了多平台的支持,可以用于播放网络流媒体及本机多媒体文件,特别是它能直接播放未下载完整的多媒体文件。

下图表示出了VideoLan的解决方案:

VideoLan Client是VideoLan项目(一个完整的MPEG-2客户/服务器解决方案)的一个组成部分。不过VideoLan Client也可以作为一个独立的程序来播放来自硬盘或者DVDROM的MPEG数据流。它目前支持GTK+、GNOME、KDE和QT,并且可以使用X11、Xvideo、SDL 或者DirectX作为视频输出。对于声音,VideoLan Client支持OSS、ALSA和ESD。要访问DVD,VideoLan Client使用的是Libdvdcss库。它是一个简单的专为DVD访问设计的库。它可以像访问块设备一样访问DVD,而不用考虑解密问题。

2. VLC整体架构分析

2.1 LibVLC

LibVLC是VLC的核心部分。它是一个提供接口的库,比如给VLC提供些功能接口:流的接入,音频和视频输出,插件管理,线程系统。所有的LibVLC源码位于src\及其子目录: Interface/:包含与用户交互的代码如按键和设备弹出。

Playlist/:管理播放列表的交互,如停止,播放,下一个,或者随机播放。

Input/:打开一个输入组件,读包,解析它们并且将被还原的基本流传递给解器。

Video_output/:初始化video显示器,从解码器得到所有的图片和子图片(如subtitles)。随意将它们转换为其它格式(如:YUV到RGB)并且播放。

Audio_output/:初始化音频mixer(混合器)。如:发现正确的播放频率,然后重新制作从解码器接收过来的音频帧。

Stream_output/:类似Audio_output。

Misc/:被libvlc其它部分使用的杂项,如线程系统,消息队列,CPU探测,对象查询系统,或者特定平台代码。

2.2 VLC

VLC是一个纯粹围绕着LibVLC写成的程序。它是非常小的,但是功能很齐全的媒体播放器,归功于LibVLC的动态组件支持。

2.3 组件

组件位于modules\子目录,在运行时被加载。每一个组件提供不同的特征适应特定的文件的环境。另外,大量的不断编写的可移植功能位于audio_output\,vidco_output\和interface\组件,以支持新的平台(如:BeoS Mae OS X)。

组件中的插件被位于src\misc\modules.c和include\modules*.h中的函数动态加载和卸载。写组件的API描述如下,共3种:

(l)组件描述宏:声明组件具有哪种优先级的能力(接口,demux2等等),还有GUI组件的实现参数,特定组件的配置变量,快捷方式,子组件等等;

(2)Open(vlc_objeet_t*p_object):被VLC调用初始化这个组件,它被组件描述宏赋值给了结构体module_t中的pf_activate函数指针,被Module_Need调用;

(3)Close(vlc_objeet_t*p_object):被VLC调用负初始化这个组件,保证消耗Open分配的所有资源。它被组件描述宏赋值给了结构体module_t中的pf_deactivate函数指针,被Module_Unneed调用。

用LibVLC写的组件能够直接被编译进VLC,因为有的OS不支持动态加载代码。被静态编译进VLC的组件叫做内置组件。

2.4 线程分析

(l)线程管理:

VLC是一个密集的多线程应用。由于解码器必须预先清空和播放工序必须预先做好流程(比如说解码器和输出必须被分开使用,否则无法保证在要求的时间里播放文件),因此VLC 不采用单线程方法。目前不支持单线程的客户端,多线程的解码器通常就意味着更多的开销(各线程共享内存的问题等),进程间的通信也会比较复杂。

VLC的线程结构基于pthreads线程模型。为了可移植的目的,没有直接使用pthreads 函数,而是做了一系列类似的包裹函数:vlc_thread_create,vlc_thread_exit,vlc_thread_join,vlc_mutex_init,vlc_mutex_lock,vlc_mutex_unlock,vlc_mutex_destroy,vlc_cond_init,vlc_cond_signal,vlc_cond_broadcast,vlc_cond_wait,vlc_cond_destroy和类似结构:vlc_thread_t,vlc_mutex_t,and vlc_cond_t。

(2)线程同步:

VLC的另一个关键特征就是解码和播放是异步的:解码由一个解码器线程工作,播放由音频输出线程或者视频输出线程工作。这个设计的主要目的是不会阻塞任何解码器线程,能够及时播放正确的音频帧或者视频帧。这样实现也导致产生了在接口,输入,解码器和输出之间的一个复杂的通讯结构。

虽然当前接口并不允许,但是让若干个输入和视频输出线程在同一时刻读取多个文件是可行的(这是VLC未来改进的主要方向)。现在的客户端就是用这种思想实现的,这就意味着如果没有用到全局锁的话那么一个不能重入的库是不能被使用的(尤其是liba52库)。

VLC输出的流里包含时间戳,被传递给解码器,所有有时间戳标记的流也均被记录,这

样输出层可以正确及时的播放这些流。时间mtime_t是一个有符号的64-bit整形变量,单位是百万分之一秒,是从1970年7月1日以来的绝对时间。

当前时间能够被mdate()函数恢复。一个线程可以被阻塞到mwait(mtime_t date)等到一个确定的时间才被执行。也可以用msleep(mtime_t delay)休眠一段时间。如果有重要的事情要处理的话,那么应该在正常时间到来之前被唤醒(如色度变换)。例如在modules\codec\mpeg_vldeo\synchro.c中,通常的解码时间被记录,保证图像被即时解码。

3. VLC接口技术分析

3.1 VLC运行过程

通过对相关资料和自己的分析,VLC的运行过程如下:

ELF(Linux下可执行文件的格式)先被动态加载,然后主线程就变成了接口线程并且在src/interface/interface.c中开始。它执行下列步骤:

1.cpu探测:什么型号?所有能力(MMX,MMXEXT,3DNow,AltiVec等等)

2.消息接口初始化;

3.命令行选项解析组件

4.创建播放列表

5.仓库初始化

6.加载所有内置和动态组件

7.打开接口

8.安装信号处理器:SIGHUP,SIGINT和SIGQUIT(捕获一个,忽略后来的并退出)。

9.派生音频输出线程;

10.派生视频输出线程;

11.主循环:事件管理;

下图表示了这些步骤的执行过程:

VLC的运行过程图

3.2 消息接口

由于printf()函数不是线程安全的,因此在调用printf()函数时一个线程的执行将会受到干扰,当这个线程被另一个函数所调用时就会其状态被破坏而退出程序。所以VLC构造了自己的线程安全的消息接口。

VLC的线程安全的消息接口有两种实现方式:如果在config.h里定义了INTF_MSG_QUEUE 的话,每一个类似printf()的函数将会把排队的消息放到链表里,这个链表将会在事件循环中被线程接口用红色标记的方式打印出来。如果INTF_MSG_QUEUE没被定义的话,调用线程将会获得一个print lock(用来防止在同一时刻有两个printf操作被执行)同时直接打印出消息(默认操作)。

以下为VLC线程安全消息的API:

QueueMsg:添加一条消息到消息队列,如果消息队列满了,先打印所有的消息;

FlushMsg:打印所有在消息队列里的消息,特别的,消息队列必须被提前加锁,因为该函数不检查锁。

PrintMsg:打印一条消息到stderr,可以打印彩色消息。

3.3 命令行选项

VLC用GNU的getopt解析命令行选项。Getopt结构定义在src\extras\getopt.h里。所有的配置也可以用环境变量改变:调用函数main_Put*Variable和main_Get*Variable。所以,.\vlc--height=240和.\vic_height=240./vlc(这种方式用于所有地方,包括插件)是一样的。但是为了线程安全的考虑,当第二个线程派生了,main_Put*Variable便不能被使用了。

3.4 播放列表管理

当VLC得到输入媒体文件的时候播放列表被创建。一个合适的接口插件能够从这个播放列表添加和删除文件。在src/Playlist目录下的这些被使用的函数被描述。

播放列表既不是动态组件也不是内置组件,只是可以被外部调用的API:

Playlist_Create:初始化播放列表,派生两个线程。一个是播放列表主线程RunThread调用Input_CreateThread为每个被读的文件派生输入线程。一个是播放列表里的项目排队预解析线程RunPreparse。

Intf_playlistadd和intf_playlistdelete是两个典型的最常用的添加和删除播放列表的命令函数。此时接口主循环函数inif_manage将被启动同时在必要的时候终止输入的线程。

3.5 组建仓库

在启动的时候,VLC创建一个包含所有插件接口(.so和内置插件)的仓库,每一个插件都会被检查其实现的功能,这些功能如下:

MODULE_CAPABILITY_INTF:一个接口插件。

MODULE_CAPABILITY_ACCESS:A Sam- ism,目前还没有用到。

MODULE_CAPABILITY_PUT:一个输入插件比如说PS和DVD的播放要用到。

MODULE_CAPABILITY_DECAPS: A Sam-ism,unused at present。

MODULE_CAPABILITY_ADEC:音频解码器。

MODULE_CAPABILITY_VDEC:视频解码器。

MODULE_CAPABILITY_MOTION:视频解码器的补充动态组件。

MODULE_CAPABILITY_IDCT:视频解码器的IDCT组件。

MODULE_CAPABILITY_AOUT:一个音频输出组件。

MODULE_CAPABILITY_VOUT:一个视频输出组件。

MODULE_CAPABILITY_YUV:视频输出的YUV组件。

MODULE_CAPABILITY_AFX:音频输出的音频效果插件,目前还没实现。

MODULE_CAPABILITY_VFX:视频输出的音频效果插件,目前还没实现。

管理这些插件的API如下:

Module_InitBank:创建组件仓库,然后调用module_LoadMain将主程序信息导入组件银行。

Module_LoadMain:将主程序信息导入组件仓库。

Module_LoadBulltins:加载所有内置组件。

Module_Loadplugins:加载所有动态组件。

Module_EndBank:清空组件仓库。

Module_ReSetBank:通过卸载所有无用的动态(插件)组件,重置组件仓库。

Module_EndBank:卸载所有动态(插件)组件,清空模仓库。

Module_Need:得到能力最符合要求的组件。

Module_Unneed:减少一个组件的引用计数,必须被Module_Need的同一个线程调用。

3.6 接口主循环

这个接口线程首先选取合适的接口动态插件,然后和这个插件的pf_run()函数一起进入主接口循环。pf_run()函数将实行其该实现的功能并且每隔100ms调用intf_Manage一次(典型的为用户图形界面的时间回调)。intf_Manage通过卸载不必要的组件来清空组件仓库,并且管理播放列表和当消息队列正在用时对排队的消息进行红色标记。如果在linux下编译有图形界面,那么这个动态插件是modules\gui\wxwindows\xwindows.cpp。

3.7 接口动态组件

这两种组件都位于modules\目录,接口动态组件除了具有普通动态组件的定义外,还需要定义以下标准API:Run或者Runlntf:这个函数就是pf_run,履行接口动态组件的一切功能(等待用户输入并且显示信息)。

4. 功能组件分解

4.1 复合的多层输入技术

输入组件的中心思想就是处理包,但又不必知道包里的具体内容。它只是读包的ID,在包头(在MPEG中是SCR和PCR字段)的指示的正确时刻将包投递到解码器。输入组件不需要具体细节。如,不需要知道怎样播放一帧或者几帧,也不需要知道什么是“帧”。像视频图像一样,基本流没有优先级。

经过分析发现输入组件对一个媒体文件做了以下这些事情:为每一个读取的文件派生输入线程。实际上,由于流是不一样的,因此输入文件的结构和解码器需要重新被初始化。这些工作由接口线程(播放列表组件)调用input_CreateThread来完成:首先寻找一个能读取这个文件的输入插件(首先我们要打开文件的socket,然后探测文件流的开始处以确定哪个插件可以读取这个文件),文件的socket是被input_FileOpen,input_NetworkOpen或者input_DvdOpen函数所打开的,这些函数需要设置两个非常重要的参数:b_pace_control和b_seekable。然后我们可以运行输入插件的pf_init函数和一个无限循环来实现pf_read和pf_demux函数的功能,这个插件是用来初始化流结构(p—input->stream),管理文件包缓存,读取文件包并且使这些文件包分路。

但是这些最重要的任务是在输入的API高级函数的协助下完成的。

4.2 文件流的管理

这个己经打开输入socket的功能模块必须先规范两个属性如下:

(1)p_input->stream.b_pace_control:

不管文件流是否以客户端所要求的速率被读取(这个由流本身的频率和客户电脑系统的时钟所确定),比如说如果客户端不能读取文件足够快得话,这时一个文件或者一个管道(包括TCP/IP连接)可以以客户端速率被读取,那么这个管道的另一端将会被write()阻塞掉;相反,如果客户端不能读取文件足够快得话,UDP流(比如说被VLS所使用的流)以服务器端的速率被读取,当内核缓冲器满的时候文件包就会丢失,因此服务器时钟的漂移策略将会用来弥补这种包的丢失。不管文件流是怎样的速率,这个属性是用来控制时钟的管理。

时钟管理的子菜单:当用到UDPsocket和远程服务器时,服务器时钟的漂流策略是必不可少的,这是由于如果在流文件传输过程中,两端的时钟有一个哪怕是一点的混乱,那么利用漂流策略则可以让流文件说明这个时钟的偏差。这也就意味着在每一个基本流给出的频率中,由输入线程显示的日期将会有某种程度的不同步,输出线程(通常说的是解码线程)将会处理这个问题。不同步的问题也可以出现在读取己连接上的设备文件上,比如说把这些文件读取到视频编码盘上。由于cat foo.mpg|vlc没任何显示时钟问题的功能,仅仅从简单的cat foo.mpg|vlc上客户端是不可能觉察出时间的不同步的,因此此时应该知道用户的b_pace_control值。总之,当客户端和服务器都能同步于同一个CPU时钟时,服务器时钟的漂流策略就可以被忽略掉。

(2)p_input->stream.b_seekable:

不管lseek()函数在文件中有没有被描述,我们都要调用它来管理流。基本上我们要么跳转到文件流的任何地方(在滚动栏上显示),要么就一字节一字节的读取文件流。这个属性没有第一个属性对流的管理来的重要,但是它也不是多余的,这是因为catfoo.mpg1vlc中b_pace_control和b_seekable有关联,比如当b_pace_control=1时b_seekable =0,相反就是当b_pace_control=0时b_seekable=1是不可能成立的。如果流是可以被搜寻的,p_input->stream.p_selectede_area->i_size必须被设置(比如说在任意的字节单位中,p_input->stream.p_selectede_area->i_size必须设置成和p_input->i_tell一样,这是因为p_input->i_tell表示当前从流读取的字节)。

时间转换的偏移:时钟管理函数位于src\input\input_clock.c目录下。客户端所能知道的就是文件开头和结尾的偏移量(p_input->stream.p_selectede_area->i_size),目前这个偏移量是用字节来表示的而且是依赖于插件的。例如如何在界面上以秒来显示hell这个文件的时间信息呢?那就是客户端要获得PS流中的可以表明每秒读取多少字节的mux_rate属性,这个属性可以随时更改但它在整个流传输过程中是不变的,这样可以用它来确定时间的偏移量。

4.3 输出到接口的结构分析

这里着重说明输入组件和界面之间的API通信。最重要的文件是include\input_ext-intf.h,它定义了input_thread_t structure,the stream_descriptor_t和ES描述符(可看成树的结构)。

注意到input_thread_t structure的特色是有两个void型的指针,这两个指针是p_method_data和p_plugin_data,创门分别用于缓冲管理数据和插件数据。并且文件流的描述放在了一个树形结构的程序描述符里,这个程序描述符里包含了几种基本流的描述符。

下图表示出了这个树形结构,这里一个流启动了两个线程。而在多数情况下只能有一个线程,目前只有TS流下可以有启动多个线程,比如说一个电影和一场足球比赛可以同时播放,这对于卫星和光纤广播是足够用的了。

VLC输入组件和界面之间的API通信的树形结构图

这里需要注意的是在对p_input->stream结构进行修改和存取时,必须先对其加锁。

Es被一个ID(这个ID适合于多路信号分离器来寻找),一个stream_id(the real MPEG stream ID),一个模式(在ISO/IEC 13818-1 table 2-29里被定义)和一些描述符来标示,它同样提供其他有用的信息给多路信号分离器。如果需要读取的流文件不是MPEG系统层的流(比如AVI或者RTP),那么需要写一个规范的多路信号分离器,在这种情况下,如果要携带额外的信息时,就可能要用到一个void型的p_demux_data的指针,这个指针在不传输流时会自动的被释放掉。

下面说明为什么要用ID而不是简单的用stream_id:当一个信息包(可以是TS包,PS包或者其他类型的包)被读取时,多路信号分离器将会从这个包里寻找这个ID来找到相关的基本流,并且如果用户选择了基本流的话就分离这个流。对于TS包,我们能知道的唯一信息就是ES PID,因此我们保存的参考ID就是PID,PID在PS流里并不存在,因此需要写这个PID。当然所有在PS包里能找到的信息都是基于stream_id的,但是既然每个私有流(AC3,SPU,LPCM的等等)都在使用同一个stream_id,因此仅仅基于stream_id是不够的,在这种情况下,PES有效负载的第一个字节就是流的私有ID,把这个私有ID和stream_id经过某种形式的合并来获得想要的唯一ID。

流程序和ES的结构都写在了插件里的pf_init()函数里,这个函数可以随时被更改(在vic-0.8.0版本前都放在了src\input\input_programs.c中)。DVD插件解析.ifo文件后知道是哪个ES在信息流里,TS插件读取流里的PAT和PMT结构,PS插件也可以解析PSM结构(目前很少见),或者通过预解析数据的第一个兆字节来编译树结构上不工作的部分。这里需要注意的是:因为几乎从来没有PSM(program stream map)结构,因此在大多说境况下我们需要预解析(也就是说读取数据的第一个兆字节,然后又回到数据的开始处)PS流,虽然并不适合这样做,但是这是唯一的选择。这样做会出现以下两个问题:首先不能解析不可被搜索到的流,因此ES树在不工作的时候被编译;再者,如果一个新的ES流在上一个数据包的第一个兆字节后出现的话(比如说在节目字幕中不会出现对其的说明字幕),在没遇到第一个数据包前是不会出现在菜单里的。由于要花费很长的时间(即使包没被解码),因此无法解析全部的流。

通常输入插件的任务是派生出必要的解码线程,它必须在其选择的ES流里调用input_seleetES(input_thread_t*p_input,es_descriptor_t*p_es),流的描述符也包含一些区域(比如说DVD里的章目和标题),这些区域在流里呈现出逻辑的不连续性。尽管当PSM(或者PAT/PMT)改变时要用到这些区域,但是在TS和PS流里只有一个这样的区域。这个区域的目标是当寻找另一个区域时,输入插件要导入一个新的流描述符的树结构(这时选择流的ID可能是不正确的)。

4.4 接口用到的方法

Input_ext-intf.c提供了一些函数来控制读取流:

(l)input_SetStatus(input_thread_t*p_input,int i_mode):改变读取流的速度。i_mode可以是INPUT_STATUS_END,INPUT_STATUS_PLAY,INPUT_STATUS_PAUSE,INPUT_STATUS_FASTER,INPUT_STATUS_SLOWER的一种。读取流速度的主要是由变量p_input->stream.control.i_rate 来决定。它的默认值为DEFAULT_RATE,这个值越小,读取得速度就会越快,速度的改变要考虑到工input_ClockManageRef。暂停是通过简单的停止输入线程来获得的(此时被一个pthread信号唤醒),在这种情况下,解码器也会停止。当统计解码时间(src/video_out/vout_synchro.c来统计)时需注意到这一点,如果p_input->b_pace_control==0时则不要调用这个函数。

(2)input_Seek(input_thread_t*p_input,off_t i_position):改变读取速度的偏移量。如果

p_input->stream.b_seekable=0时不能调用这个函数。它的位置在p_input->p_selected_area->i_start和p_input->p_selected_area->i_size之间。(当前值是在p_input->p_selected_area->i_tell)。由于多媒体文件可能会很大(尤其当我们读取像DVD这样的设备时),因此偏移量必须要有64bit这么大。在很多系统下(比如FreeBSD),off_t的默认值就是64bit,但是在GNU libc 2.x下并不是这样,这也是为什么需要用-D_FILE_OFFSETBITS=64-D_USE_UNIX98来编译VLC的原因。随机的改变读取流的位置会导致流的混乱,读取流的解码器也会出错,为了避免这种情况的发生,在改变读取流位置的之前,需要先发送一些空包(全零)。事实上,对于大多数的音视频格式,足够长的零流就是流的溢出并且解码器也可以不出错。

(3)input_OffsetToTime(input_thread_t*p_input,char *psz_buffer,off_t i_offset):把偏移值转换成和时间一致(用于界面播放),通常在播放MPEG-2文件时这个一致性会受到破坏。

(4) input_ChangeEs(input_thread_t*p_input,es_descriptor_t*p_es,u8 i_cat):选择部分基本流的i_cat类型和p_es,用于更改语言和字幕路径。

(5)input_ToggleEs(input_thread_t*p_input,es_descriptor_t*p-es,boolean_t b_select):用来清除界面上的被选择的基本流。

4.5 缓冲器的管理

输入插件必须要执行分配和删除分配包的功能,这个功能的实现要用到以下四个基本函数:

(1)pf_new_packet(void*p_private_data,size_t i_buffer_size):关联到缓冲器的i_buffer_size 的大小,分配一个新的data_packet_t。

(2) pf_new_es(void*p_private_data):分配一个新的pes_packet_t。

(3)pf_delete_packet(void*p_private_data,data_packet_t*pes_data):删除p_data。

(4) pf_delete_es(void*p_private_data,pes_packet_t*p_pes):删除p_pes。

以上四个函数都把p_input->p_method_data(即*p_private_data)作为第一个参数,因此可以保存这个分配纪录和释放包。缓冲器的管理可以有以下三种方法:

(l)传统的libc分配:在PS插件中每次经常要用到malloc()和free()函数来分配和删除分配包,这并不像想象中的那么慢。

(2)Netlist:在包有问题的开头处用这种方法来分配一个非常大的缓冲空间,然后通过管理指针列表来释放包(这就是netlist)。这种方法只有当所有的包都是同样大小时效果才会很好,它长时间用在TS输入上。DVD的插件也会用到它,但是要把加入的标志符也考虑进去,这是因为缓冲器(2048bytes)通常被若干个包所共享。现在这个方法己经不被使用而且也没有文档记录。

(3)缓冲器的cache:这种方法是目前在发展中的最新方法,它己经用在了PS的插件中。它的思想是调用malloc()和free()来获得流的不规则规律,然后经过cache系统后重新使用所有已被分配好的缓冲空间。现在的工作就是要扩展它在性能没妨碍的前提下可以用到任何插件里,但是目前还没有这方面的参考文档。

4.6 流的分路

流文件被pf_read读取后,插件必须把一个函数指针给分路函数,这个分路函数用来解析包,收集PES并把包送到解码器里。这个分路函数是专门为标准的MPEG结构(PS和TS)来写的,必须对pf_demux表明input_DemuxPS和input_DemuxTS,当然也可以自己写这个

函数。

5. 解码器技术

解码器做播放流的数学处理部分。它从输入组件的多路分解器(modules/demux目录下,管理包以重新编译连续的基本流)和输出线程(包的样本被解码器重构并且播放它)分离出来。基本上解码器只是纯粹的算法,不和硬件打交道。

5.1 解码器结构分析

输入线程调用Input_DecoderNew(src\input\decoder.c)派生合适的解码器,通过CreateDecoder选择更恰当的解码器组件,每一个解码器组件都要检查decoder_config.i_type 然后返回一个记录,然后和decoder_config_t一起运行module.pf_run()。一般的decoder_config_t的结构给出了解码器的ES ID和其类型,一个指向stream_control_t结构(给出播放状态的信息)的指针,decoder_fifo_t和pf_init_bit_stream函数,然后运行DecoderThread(解码器主循环)来解码。CreateDecoder:将解码器结构中的输出回调函数指针(音频,视频,SPU)附值,这些函数建立或者销毁这些输出设备,解码后的数据由此被正确的传递出去;调用Module_Need将特定的解码器组件加载进解码器结构,组件的回调函数指针pf_activate(通常是open函数)完成对pf_decode_XXX函数指针的附值(其中的音频,视频函数指针用刚才解码器的相应输出回调函数的包裹函数附值)。DecoderThread:调用被赋予特定函数值的pf_decode_XXX函数指针进行解码工作。

5.2 数据流包结构分析

这个输入组件(包)为传递到解码器的流数据提供高级的API。首先先看这个包的结构,它被定义在include/input_ext-dec.h里。

data_packet_t包含一个指向数据物理地址的指针,解码器读取数据只能从p_payload_start开始到p_payload_end结束,然后如果p_next不空的话,解码器就跳转到下一个包。如果b_discard_payload的标志位显示时则说明包地内容是混乱的因此这个包就会被丢弃。data_packet_t被包含进pes_packet_t里,pes_packet_t表示出了可以表明一个完全的pes包的data_packet_t链表目录。对于PS流,一个pes_packet_t通常只包含一个data_packet_t。而对于TS流,一个PES被分解在许多的TS包里。PES包里含有PTS日期(在MPEG规范里有详细说明)和目前的读取速度,这个可以用于修改日期(i_rate)。

b_data_alignment(如果在系统层里可用的话)表明假如这个包是随机的接入点的话,那么b_discontinuity就会知道先前的包是不是被丢弃过。

PES Packet 对于节目流的PES包结构图

对于节目流,PES包只含有一个数据包,它的缓冲器包括PS头,PES头和数据的有效负载。

对于传输流的PES包结构图

对于传输流,PES包可以含有无限制的数据包(上图是三个),它的缓冲器包括TS头,PES 头和数据的有效负载。

这个结构由输入和decoder_fifo_t解码器共同组成,它的功能是PES包的循环FIFO被解码。输入为FIFO提供了一些宏指令:DECODER_FIFO_ISEMPTY,DECODER_FIFO_ISFULL,DECODER_FIFO_START,DECODER_FIFO_INCSTART,DECODER_FIFO_END,DECODER_FIFO_INCEND。在对FIFO进行任何操作前一定要用p_decoder_fifo->date_lock。下一个包被DECODER_FIFO_START(*p_decoder_fifo)所解码。当这些完成后,要先调用p_decoder_fifo->pf_delete_pes(p_decoder_fifo->p_packets_mgt,decoder_fifo_start(*p_decoder_fifo))然后调用ecoder_fifo_nestart(*p_decoder_fifo),使得把PES返回到缓冲器管理。如果FIFO是空的话(DECODER_FIFO_ISEMPTY),可以在携带着条件信号(Vlc_cond_wait(&p_fifo->data_wait,&p_fifo->data_lock))的新的信息包到达之前先中断它(加锁)。当文件被播放完或者用户退出时,p_fifo->b_die要设置成1,这意味着要释放所有的数据结构并且要尽快调用到vic_thread_exit()。

5.3 比特流分析

由于基本流可以任意地别分割,因此传统的读包方法并不方便。这个输入组件就提供了容易读取比特流的方法。这个可选可不选,如果选了话就不必再进入缓冲器了。

这个比特流允许调用GetBits(),当有必要时这个函数在不干扰用户的情况下读取包的缓存、修改数据包和pes包。因此对于读取连续的基本流会非常方便,用户不必去处理包的边

界和FIFO,这些由比特流来处理。

下面着重分析一个32位的缓冲器:bit_fifo_t。它包括字缓冲和一些重要的bit(高位),这个输入组件提供了以下五个内联函数来管理这个缓冲器:

(1)GetBits(bit_stream_t*p_bit_stream,unsigned_int i_bits):

从比特缓冲返回到下一个1bit。如果没有足够多的比特时,这个函数就从decoder_fifo_t 里抓取一个字的大小来补充。这个函数只能保证工作在24bits,有时也会工作在31bits,但这是副作用。要是使其可以读取32bit,就必须修改这个函数。

(2)RemoveBits(bit_stream_t*p_bit_stream,unsigned_int i_bits):

这个函数除了比特不返回外(为了节省CPU循环)和GetBits()一样,它同样有其的局限,因此在必要时也得修改这个函数。

(3)ShowBits(bit_stream_t*p_bit_stream,unsigned_int i_bits):

除了在读取完没获得多的比特外和GetBits()一样,因此接着需要调用RemoveBits()。要注意的是除非对字节进行排列的话那么这个函数不能工作在高于24bits的情况下

(4)RealignBits(bit_stream_t*p_bit_stream):

为了使缓冲的前几个比特排列成字节的边界这个函数丢弃掉比特流的高n(n<8)位,这有利于找到排列好的开始代码(MPEG)。

(5)GetChunk(bit_stream_t*p_bit_stream,byte_t*p_buffer,size_t i_buf_len):

它和函数memcpy())类似,只不过它把比特流作为第一个参数。P_buffer必须被分配并且至少要i_buf_len这么大,这有利于用户要保存路径时备份数据。所有以上的函数重新构造了连续的基本流范例。当比特缓冲器是空的话,这些函数就在当前包里取随后的字;当包是空的话,就转到下一个data_packet_t,如果转不到的话就转到下一个pes_packet_t(见

p_bit_stream->pf_next_data_packet),所有的这些都是明晰的。为了能用到比特流,必须要调用p_decoder_config->pf_init_bit_stream(bit_stream_t*p_bit_stream,decoder_fifo_t*p_fifo)来设置所有的变量。这可能需要从包里获得规范的信息(比如说对于PTS)。如果p_bit_stream->p_bit_stream_callback不空的话,那么包必须要改变(在较低版本中的video_parser.c有例子说明),调用的函数的第二个参数表明它是个新的data_packet还是新的pes_Packet_t,这个结构可以保存到p_bit_sream->p_callback_arg。

当要调用pf_init_bit_stream时,pf_bitstream_callback还没有被定义,因此只能先转到第一个包,这个可以在调用pf_init_bit_stream后通过指针再来回调比特流。

5.4 VLC内置解码器

VLC内置了MPEGI,2层的音频解码器,一个MPEG MP@ML的视频解码器,一个AC3(来自LiViD)解码器,一个DVD SPU解码器和一个LPCM解码器。可以仿照视频解析器用户可以自己写特定功能的解码器。

MPEG音频解码器虽然是本地化的,但是并不支持第三层解码(这个非常不方便),AC3解码器是来自于Aaron Holtzman’s libac3的端口,SPU解码器也是本地化的。这些可以在AC3解码器里的比特流的回调里有说明。这这种情况下,必须要跳过PES的前三个字节(不是基本流的部分)。

对于MPEG视频解码器,VLC媒体播放器在其解码器的主层上提供了MPEG-1,MPEG-2的主要框架,这对于VLC来说己经非常成熟。既然这个主要框架被视频解析器和视频解码器这两个逻辑实体所分开,因此它是面向比特的,它最初的目的是把比特流解析功能从高并行的数学算法中分离出来。在理论上,这里必须只有一个视频解析线程(否则在读取比特流时会产生混乱)和视频解码线程池,这些用来做即时IDCT和在一些块上做动态补偿。它不支持

也不会支持MPEG-4或者DivX解码。它不是一个编码器。尽管还有部分没被测试(比如说差分动态向量)但是它完全支持MPEG-2 MP@ML规范。对于这个解码器最有趣的文件是vpar_synchro.c,它解释了dropping算法的全部框架。在nutshell里,如果它足够强大的话就能对全部的IPB进行解码,或者在用户有足够的时间的话就能对全部的IP和B进行解码(这个基于on-the-fly时间统计)。另一个有趣的文件vpar_blocks.c,它描述了全部的块(包括系数和动态向量)解析算法,在这个文件的最后需要产生一个对普通图片类型的最优化函数和一个减缓类属函数。这里同样有不同程度的最优化函数(可以慢速编辑文件但快速解码)为VPAR_OPTIM_LEVEL,level 0表示没优化,level 1表示优化MPEG-l和MPEG-2图片框架,level 2表示优化MPEG-1和MPEG-2域和图片框架。

5.5 动态补偿技术分析

动态补偿技术是非常依赖于平台的(比如MMX或者AltiVec版本),因此必须把它放plugins\Motion目录下。这对于视频解码器来说是非常方便的,这样的插件可以用到其他的视频解码器中。一个动态的插件必须定义6个函数(直接来自于规范): vdec_MotionFieldField420,vdec_MotionField16x8420,vdec_MotionFieldDMV420,vdec_MotionFrameFrame420,vdec_MotionFrameField420,vdec_MotionFrameDMV420。而对于在MP@ML标准里被禁止的格式自然是不能用(因为需要的编译的时间长)。

5.6 IDCT技术分析

像动态补偿一样,IDCT技术也是一种平台规范。因此需要把它放到phigins\idct目录下。这个模块是用来做IDCT运算和把数据复制到最后的图片上,这里需要定义以下7种方法: (1)vdec_IDCT(decode_config_t*p_config,dctelem_t*p_clock,int):

做完全的2-D IDCT运算。64个系数在p_block里。

(2)vdec_SparseIDCT(vdec_thread_t*p_vdec,dctelem_t*p_clock,int i_sparse_pos):

只用一个非零系数(有i_sparse_pos来设计)在块上做IDCT运算。可以把这个函数定义在phigins\idct\idct_common.c(在初始化时间段里对这些64位的矩阵进行预计算)里。

(3)vdec_InitIDCT(vdec_thread_t*p_vdec):

对vdec_SparselDCT做初始化的填充。

(4)vdec_NormScan(ppi_scan):

通常情况下,这个函数不做任何运算。在做一些较小的优化时,用它来对MPEG导航矩阵(在ISO/IEC 13818-2里有详细介绍)做某些系数的求逆运算。

(5)vdec_InitDecode(struct vdec_thread_s*p_vdec):

初始化IDCT和选择配置列表。

(6)vdec_DecodeMacroblockC(struct vdec_thread_s*p_vdec,struct macroblock_s*p_mb):

对整个宏块解码并把这个数据复制到最终要的图片里(包括彩色信息)。

(7) vdec_DecodeMacroblockBW(struct vdec_thread_s*p_vdec, struct macroblock_s*p_mb):

对整个宏块解码并把这个数据复制到最终要的图片里(除了彩色信息),它用在gayscale 模式里。

5.7 对称多处理插件技术分析

在必要情况下,VLC的MPEG视频解码器将会利用到多处理器。这个思想来自于解码器的池,这个池可以在多个宏块上同时实现IDCT/动态补偿功能。这个管理池的模块在src\video ——decoder\vpar_pool.c里。但是这个模块的处理速度要慢一些。

6 视频输出层技术

6.1 数据结构和主循环

重要的数据结构被定义在inchide\vlc--vidco.h和indude\video-output.h里。事实上VLC 的SPU解码器只能解析SPU报头和把SPU图片数据转化成VLC的格式,这样做是为了为能处理的快一点。部分类似SPU解码器在src\video_output\video\spu.c里。

picture_t:是主要的数据结构,描述了视频解码器线程需要的一切。其中的p_data是一个YUV 平面图的指针;

subpicture_t:存储subtitle部分(一个视频文件包括audio,video,subtiiles);

vout_thread_t:一个很复杂的合成结构。

基本上video输出线程管理一堆图像和子图像(默认5个)。每一个图像有一个状态(显示,消耗,清空等等)和确定的播放时间。视频输出的主要工作是一个无限循环:

(1)在堆上找到下一个要显示的图像。

(2)找到当前要显示的子图像。

(3)翻译图像(如:视频输出插件不支持YIJV):调用最佳的YUV插件,做缩放比例,添加subtitles 和一个可选的图像字段。

(4)在特定的时间到来之前休眠。

(5)视频插件显示图像(通常在缓冲器转换时输出)。p_vout->p_buffer是两个缓冲器(用于YUV 的转换)的排列,p_vout->i_buffer_index表明当前显示的缓冲器。

(6)管理事件。

6.2视频解码器的方法

视频输出导出了一些函数,以便解码器能够发送它们已经解码过的数据。

(1)picture_t*vout_CreatePicture(vout_thread_t*p_vout,vlc_bool_t b_progressive,vlc_bool_t b_top_field_first,unsigned int i_nb_fields):

这个是最重要的函数,它分配视频解码器指示的缓冲器,然后用解码后的数据反馈到(void*)p_picture->p_data里,必要时调用vout_-DisplayPicture和vout_DatePicture。最后返回已分配好的视频缓冲器。比如i_type表示YUV_420_PICTURE,i_width和I_height表示像素。如果堆里没有图像的话,那么这个函数将返回为空。

(2)vout_Lillkpieture(vout_thread_t*p_vout,pieture_t*p_pic):

增加图像的引用计数,以便在解码器还需要它的时候不会意外将它释放。比如说一个I 图片或者P图片在已经被解码和交叉存取为B图片后可能还要用到。

(3)vout_UnlinkPicture(vout_thread_t*p_vout,picture_t*p_pic):

减少图像的引用计数,等于0时就可以将图像释放。

(4)vout_DatePicture(vout_thread_t*p_vout,picture*p_pic):

赋予图像的播放时间,可以在图像在开始播放时就知道它什么时候播放结束。比如说当赋予I或则P图片时间时,必须等到先前所有的B图片全部被解码完。

(5)vout_DisplayPieture(vout_thread_t*p_vout,picture_t*p_pic):

通知视频输出端一个图像已经被解码等候显示。可以在vout_DatePicture前后调用。

(6)vout_DestroyPicture(vout_thread_t*p_vout,picture_t*p_pic):

为图片做空标记,减小视频输出的内存堆的尺寸(在流解析错误时非常有用)。

(7)subpieture_t*vout_CreateSubPicture(vout_thread_t*p_vout,int i_channel,inti_type):

返回到一个已分配好的子图片缓冲器。i_channel表示子图片信道的ID,i_type表示是DVDSUBPICTURE还是TEXTSUBPICTURE,i_size表示包的字节长度。

(8)vout_DisplaySubPicture(vout_thread_t*p_vout,subpicture_t*p_subpic):

通知视频输出一个子图象已被完全解码,废除解码前的子图象。

(9)vout_DestroySubPicture(vout_thread_t*p_vout,subpicture_t*p_subpic):

为子图片做空标记。

7 音频输出层技术

7.1 音频输出概况

音频输出的主要目的是从一个或者几个解码器(也叫“输入流“)得到声音采样,然后混合它们并且写到输出设备(也叫“输出流”)。在这个过程中,转换可能需要,也可能被用户要求,由音频过滤器来完成这个过程。

以下为常用的音频术语:

采样:采样是音频信息的基本部分,包括所有信道的值。例如不管有多少信道被编码也不管系数的编码类型,流工作在44100HZ就是表明流每秒采样44100个音频元素。

帧:任意大小的一组采样。编解码通常有固定的帧大小(比如一个A/52帧含有1536个采样元素)。既然帧以任意大小的方式管理缓冲器,因此它对于音频输出不是很重要。但是对于还没被解码的文件格式,由于要依赖于流的压缩率,因此必须要指明一个有n个采样元素的帧所需要的字节数。

系数:一采样元素对于每个信道都含有一个系数。例如一个立体声流的每一个元素里有两个系数。许多音频项(例如float32位的音频混音器)直接处理系数。由于一采样元素不能单独的在流里被事例化,因此一个没被解码的元素格式当然就没有系数的概念。

重采样:改变音频流每秒的采样数。

上下混频:改变信道的配置。

7.2 音频采样格式

整个音频输出可以别看成以连续的步骤来把一种音频格式转换成另一种音频格式的管道,这对于理解音频采样格式非常重要。audio_sample_format_t结构被定义在incfude/audio_output.h里,它包括以下的成员:

(1)i_format:

定义了系数的格式。比如:’fl32’(float32),’fi32’(fixed32),’s16b’(有符号的16bit字节以big-endian方式存储),‘s161’(有符号的16bit字节以little-endian方式存储),

AOUT_FMT_S16_NE(‘sl6b’或者’s16l’的截短),’u16b’,’u16l’,’s8’,’u8’,’ac3’,’spdi’(S/PDIF)。没被解码的采样格式包括:’a52’,’dts’,’spdi’,’mpga’(MPEG音频I,II层),’mpg3’(MPEG音频III层)。音频过滤器(允许从一种格式到另一种格式)被定义为转换器,有些转换器扮演着解码器的角色(比如a52tonoat32.c),但是实际上它是音频过滤器。

(2)i_rate:

定义了音频输出每秒要处理的采样数。通常这个值为22050,24000,44100,48000,单位为HZ。

(3)i_physical_channels:

定义在缓冲器里被自然编码的信道。它掩盖了在audio_output.h定义的比特值(比如AOUT_CHAN_CENTER,AOUT_CHAN_LEFT等)。要注意的是:这个数字值并不代表每个采样含有多少个系数(aout_FormatNbChannels()里有说明),由于对于混音器处理交叉存取的系数是比较容易的,因此每个信道的系数也总是交叉存取的,从而一个来可以输出平面数据的解码器必须能实现交叉存取的功能。

(4)i_original_channels:

定义用于组成缓冲器的原始流的信道。比如说只有单一输出的插件但要输出的音频流是立体声时,那么可以同时使用流的信道(i_original_channels == AOUT_CHAN_LEFT| AOUT_CHAN_RIGHT)或者选择一个信道。

i_original_channels和i_physical_channels使用同一个比特掩码,并且表明了专用的比特流AOUT_CHAN_DOLBYSTEREO(表明输入流是否下行混音成杜比环绕声)和AOUT_CHAN_DUALMONO(表明立体声流实际上是由两个单一的流所组成的),这两个专用的比特流只能选择一个(就像在一个VCD上可以有两种语言)。

对于16位的整型格式的音频类型,可以区分开big-endian和little-endian的存储类型。但对于浮点型的音频类型(可以以big-endian存储或者用little-endian存储)却无法分别开来。这是因为采样的数据是在文件里被强制储存成32位的浮点类型并且从一个机器转移到另一个机器中,因此这32位的浮点类型数据以本地机器的endian来默认储存。然而采样的数据一般都是以16位的整型类型big-endian方式来储存的(比如DVD的LPCM格式),因此LPCM 解码器分配’s16b’,给输入流,在little-endian机器上也是这样,’s16b’->’s16l’的转换被输入管道自动的激活。(在大多数情况下,AOUT_FMT_S16_NE和AOUT_FMT_U16_NE要被用到)。音频输出内核提供了宏来比较两种音频采样格式。AOUT_FMT_IDENTICAL)用来验证是否i_format,i_rate,i_physical _channels和i_original_channels一样,AOUT_FMT_SIMILAR()用来验证i_rate和i_channels是否一样(有利于写一个纯粹的转换过滤器)。

audio_sample_format_t结构包含两个额外的参数(除非处理没被解码的音频格式就不需要有)。对于PCM格式这两个参数被自动添充到aout_FormatPrepare()(必要时被内核模块所调用)。下面说明这两个额外的参数:

i_frame_lenth:定义普通帧采样的数目。对于A\52,1536个采样是压缩后在没被解码的缓冲器里的数目,那么i_frame_length=1536;对于PCM格式,帧的大小为1(在缓冲器里的每一个采样值都能独立的获得)。

i_bytes_per_frame:定义帧的大小(字节)。对于A\52它取决于输入流(同步读取)的比特率,例如对于32位浮点类型的立体声采样,i_bytes_per_frame == 8(i_frame_length=1l)。

以上两个参数(对于调用aout_FormatPrepare()非常有意义)方便计算音频过滤器(i_nb_samples*i_bytes_per_frame/i_frame_length)的大小。

7.3 音频运行过程

输入派生了一个新的音频解码器(比如A\52解码器)。A\52解码器为格式信息解析同步信息并且用aout_InPutNew()来创造出输入流的新的音频输出,这个采样格式为: i_form at=’a52’

i_rate=48000

i_physical_channels=i_original_channels=AOUT_CHAN_LEFT|AOUT_CHAN_RIGHT|AOUT_C HAN_CENTER|AOUT_CHAN_REARLEFT|AOUT_CHAN_REARRIGHT|AOUT_CHAN_LFE i_frame_length=1536

i_bytes_per_frame=24000

这个输入格式不能被修改且存储在aout_input_t structure里和p_aout->pp_input[0]->input这个输入流一致。既然这个是输入的第一个流,音频输出将会用这个音频采样格式(p_aout->output.output),来配置输出设备以避免不必要的转换。

音频内核用通常的方式来探测输出模块,输出模块的行为取决于输出设备,如果输出设备有S/PDIF能力的话,那么就需要设置p_aout->output,把output .i_format转换成’spdi’格式,如果只是PCM设备的话就需要知道本地的采样格式(比如用于Darwin CoreAudio的’fl32’或者用于OSS的AOUT_FMT_S16_NE)。输出设备也可能因信道的数目和流的速率不同而受到限制(例如p_aout->output)。输出结构可以如下:

i_format =AOUT_FMT_S16_NE

i_rate =44100

i_channels=AOUT_CHAN_LEFT|AOUT_CHAN_RIGHT

i_frame_length=1

i_bytes_per_frame=4

一旦获得了输出的格式,那么需要根据它来推出混音器的格式。除了i_format以外,禁止在混音器和输出之间来改变音频采样格式(所有的转换在输入管道里发生),这是因为需要开发出三个混音器(内置设备的float32 and S/PDIF和plus fixed32),所有其它的类型必须转化成这三个中的一个。下面以p_aout->mixer为例,混音器的结构如下:

i_format =’fl32’

i_rate=4410

i_channels=AOUT_CHAN_EFT|AOUT_CHAN_RIGHT

i_frame_length=1

i_bytes_per_frame=8

音频输出内核因此要分配音频过滤器来把’fl32’转换成AOUT_FMT_S16_NE,这是在输出管道里唯一的音频过滤器,同时也要分配一个32位浮点类型的混音器。由于只是一个输入流,因此用一个很小的混音器就好了(只需从第一个输入流里复制采样数据即可),否则要用到更准确的32位浮点类型的混音器。

初始化的最后一步是编译输入管道。当需要更改几个属性时,音频输出内核将会优先搜索音频过滤器可以更改的属性:

(l)所有的参数

(2)i_format和i_physical_channels/i_original_channels

(3)i_format

如果整个的转换不能用一个音频过滤器来完成的话,音频内核就需要分配第二个甚至第三个过滤器来处理剩余的转换。接着上面的例子,分配两个过滤器:

a52到float32(用来处理这种转换和下行混音)和重采样器。出于对效率的考虑,通常对

于没被解码的格式转换器也要处理下行混音。

当初始化完成后,解码器插件模块就会运行自己的主循环。通常解码器需要i_nb_samples大小的缓冲器并且复制没被解码的采样值到这个缓冲器里(用到GetChunk()函数)。然后这个缓冲器和输入管道一起编码(为’fl32’格式),下行混音和重采样。如果输出层需要暂时的调节其快慢速率以获得和输入流完美的同步(由每一个缓冲器的基层来确定)时就需要重采样。在输入管道的底端,这个缓冲器将放置到FIFO上,同时解码器线程运行音频混音器。

这时音频混音器就会计算采样数是否足够多来编译一个新的输出缓冲器。如果足够的话,它就和输入流混合经过缓冲器到达输出层。为了输出设备缓冲器就顺着输出管道(在上面的例子里只含有转换过滤器)到达输出FIFO。这时输出设备就会从输出FIFO上取出下一个缓冲器,取出的方法为通过回调音频子系统(Mac OS X’CoreAudio,SDL)或者通过音频输出线程(OSS,ALSA…)来达到。这种机制用到了aout_OutputNextBuffer()函数,并且给出了缓冲器大致的播放时间。如果计算出的播放时间和估计的播放时间不一致时(小的差别),输出层就会在音频输出模块上修改所有的缓冲器时间,当下一个从解码器出来的缓冲到来的时候就会在输入管道的开始处触发再采样。用这种方法需要重同步音视频流,当缓冲播放时,就会最终释放它。

7.4 互斥排除机制

关于完善公司组织架构优化管理流程的建议

关于完善公司组织架构优化管理流程 的建议

关于完善公司组织架构优化管理流程的建议 喻总: 公司组织架构是流程运转、部门设置及职能规划等最基本的结构依据,适宜、高效的组织架构能够最大限度的释放企业的能量,使组织更好发挥协同效应,达到“1+1>2”的合理运营状态。根据我司“组织架构图”所述,公司在董事长领导下,分为五个职能部门:人资部、市场部、出品部、运营部、财务部。 一、公司当前组织架构在日常管理存在的问题: 企业组织架构的设置,应该强调管理职能的有效行使和管理流程的顺畅高效。本人经过对加入公司一年多的工作总结,发现公司现有的组织架构存在以下问题: 1、总部部门管理体系不完善、节点不清晰、权责不明确、执行监督无依据。当前在现阶段日常管理中弊端尚未完全显现,但在公司经营规模进一步扩大后,必将会导致公司整体运营管理不顺畅,不能实现公司期望的达成目标,对公司战略目标的实现将缺乏有效支撑。 2、从当前组织机构看,许多部门要么具体职责空缺要么职能重叠,导致公司相关人员在日常工作中多头管理,职责不明,形成了“要管都管,要不论都不论”的局面。无法有效的进行系统运营工作的推进,造成关键职能(运营管理)弱化甚至缺失,不能体现“精简高效、专业分工、责权对等、执行与监督分设、客户服务导向及流程管理导向”的基本原则。

3、当前公司层面缺少一个对公司整体资源配置、组织管理的职能部门或职位,导致了各部门之间工作配合协调难、协作难,间接发展至各部门之间的不和谐甚至是冷暴力现象。 4、公司层面各部门负责人个人综合素质及过往工作经验与现担任的部门职责所要求能力不匹配,导致各部门之间的工作目标观与价值观不统一,此也是各部门矛盾存在的原因之一,缺乏同一个目标,导致团队没有同一个声音。 5、运营部缺乏指挥、调度、监管的权责。公司运营部虽然设立一年有余,但因为缺乏具体的权责以及公司整体流程的不完善,运营部的日常工作深陷在各类杂务之间(纯粹扮演救火队员及文职后勤人员的角色),无法对分店的经营指标、经营定位、现场管理等份内工作进行有效的规划与实施。 6、出品部的实际工作成绩与公司设立初衷相违背,没有有效的发挥应有职能,在有些方面甚至是某些问题的根源所在。 7、人资部个人认为是公司发展过程中的薄弱环节,缺乏相应的人力资源规划能力,招聘与配置工作严重滞后,直接导致公司在运营管理过程中存在的人员因素(如人员优化、补充等)无法解决,进一步影响了公司整体管理水平的提升。 8、随着公司业务和规模的进一步扩大,个人认为公司有必要设置专门进行客户和企业形象的部门,做好对外宣传和各项企划工作,提升公司外在形象。 9、监管环节缺失,奖惩管理流于形式,当前公司管控系统过于

数据库期末考试名词解释

1. 概念模式 是数据库中全部数据的整体逻辑结构的描述。它由若干个概念记录类型组成。概念模式不仅要描述概念记录类型,还要描述记录间的联系、操作、数据的完整性、安全性等要求。? 2. X封锁 如果事务T对数据R实现X封锁,那么其他的事务要等T解除X封锁以后,才能对这个数据进行封锁。只有获准X封锁的事务,才能对被封锁的数据进行修改。? 3. 复制透明性 即用户不必关心数据库在网络中各个结点的数据库复制情况,更新操作引起的波及由系统去处理。 4. 主属性 包含在任何一个候选键中的属性。 5. 事务的原子性 一个事务对数据库的操作是一个不可分割的操作系列,事务要么完整地被全部执行,要么全部不执行。 1. DML 数据操纵语言(Data Manipulation Language),由DBMS提供,用于让用户或程序员使用,实现对数据库中数据的操作。DML分成交互型DML和嵌入型DML两类。依据语言的级别,DML 又可分成过程性DML 和非过程性DML两种。 2. S封锁 共享型封锁。如果事务T对某数据R加上S封锁,那么其它事务对数据R的X封锁便不能成功,而对数据R的S封锁请求可以成功。这就保证了其他事务可以读取R但不能修改R,直到事务T释放S封锁。? 3. 分布式DBS 是指数据存放在计算机网络的不同场地的计算机中,每一场地都有自治处理能力并完成局部应用; 而每一场地也参与(至少一种)全局应用程序的执行,全局应用程序可通过网络通信访问系统中的多个场地的数据。 4.事务 数据库系统的一个操作系列,这些操作或者都做,或者都不做,是一个不可分割的工作单位 5. 丢失更新 当两个或以上的事务同时修改同一数据集合时,由于并发处理,使得某些事务对此数据集合的修改被忽视了. 1. 实体完整性规则 这条规则要求关系中元组在组成主键的属性上不能有空值。如果出现空值,那么主键值就起不了唯一标识元组的作用。 1. 域和元组 在关系中,每一个属性都有一个取值范围,称为属性的值域,简称域;记录称为元组。元组对应表中的一行;表示一个实体。? 2. 无损联接 设R是一关系模式,分解成关系模式ρ={R1,R2...,Rk},F是R上的一个函数依赖集。如果对R中满足 F 的每一个关系r都有r=πR1(r)πR2(r)... πRk(r)则称这个分解相对于F 是"无损联接分解"。 3. 事务的原子性?

组织架构设计流程与调整流程

组织架构设计流程
1.组织架构设计流程与风险控制图 组织架构设计流程与风险控制 不相容责任部门/责任人的职责分工与审批权限划分 业务风险
董事会 总经理 战略委员会 开始 1 制定企业 有的经营活动就没 有明确的方向和目 确定企业 标 主导业务 分析主导 业务流程 2 确定管理层 次和管理幅 度,并与领导 界定不清晰,就容易 出现管理混乱、相互 推诿扯皮的现象 层沟通、确认 3 以主导流程为 基础,确定职 能部门及其相 互协作关系 4 确定具体 岗位及人员 编制 5 编制《组织架构 图》 、 《业务流程 审批 审核 图》 、 《岗位说明 书》 D3 D2 参与 审批 审核 战略发展规划 D1 人力资源部 相关部门
阶 段
如果没有明确的战 略发展规划,企业所
如果企业内部各层 级、各职能部门关系
如果《组织架构图》 、 《业务流程图》 、 《岗位 说明书》等文件编制混 乱,就会影响企业的运 作效率
结束

2.组织架构设计流程控制表 组织架构设计流程控制
控制事项 详细描述及说明 1.战略委员会在制定企业发展战略时,要考虑内、外部环境对企业发展战略的影响与制约;企业 D1 发展战略规划和目标应经过企业总经理和董事会的集体讨论、审核和审批 2.每一个部门、每一位管理者都要有合理的管理幅度。管理幅度太大,可能导致管理人员无暇 顾及一些重要事务;管理幅度太小,可能导致管理者不能完全发挥作用。所以,人力资源部 在设计组织结构的时候,要确定合理、恰当的管理幅度 3.人力资源部应当按照科学、精简、高效、透明、制衡的原则,综合考虑企业性质、发展战略、 阶段 控制 D2 形成各司其职、各负其责、相互制约、相互协调的工作关系;避免职能交叉、缺失或权责过 于集中 4.人力资源部应当对各机构、各部门的职能进行科学合理的分解,确定具体岗位的名称、职责 和工作要求等,明确各个岗位的权限和相互关系;在确保实现企业战略目标的前提下,力求 部门数量最少、人员编制最精,以达到节省沟通成本、缩短业务流程、提高运营效率的目的 文化理念和管理要求等因素,合理设置内部职能机构,明确各机构、各部门的职能和权限,
D3
5. 《组织架构图》 、 《业务流程图》和《岗位说明书》等文件资料应按照统一的规范编写
应建 相关 规范 规范 参照 规范
? 《组织架构设计规范》 ? 《岗位说明书编写规范》 ? 《企业内部控制应用指引》 ? 《中华人民共和国公司法》 ? 《组织架构图》
文件资料
? 《业务流程图》 ? 《岗位说明书》
责任部门 及责任人
? 战略委员会、人力资源部、相关部门 ? 总经理、副总经理、人力资源总监

HR组织架构调整流程

第一章-HR01_组织架构调整流程 1.流程说明 该流程主要描述了依据企业目标策略的调整及业务环境需求的变化而重新确定组织架构时,人力资源依照经核准的《组织系统图》在系统中修改或定义组织架构。 1.该流程主要涉及到的部门是总部人力资源,其具有创建、修改及显示的权限,区公司及营业的人力资源 只具有显示权限 1.创建组织架构包括:创建组织单元、职位、分配成本中心;组织单元与组织单元之间的关系是:一对一 或一对多,组织单元与职位之间的关系是:一对一或一对多;即一个组织单元下可建一个或多个组织单元,也可建一个或多个职位。由于在业务中财务需要对各个组织单元、人员的成本费用进行成本核算,所以需要给组织单元分配成本中心,或给职位分配成本中心,便于同财务的集成。组织单元的编码是由系统外部给号,由8位数字构成,分成四层,编码范围是00000000~,例:01000000~01009999用于总经理,01010000~01019999用于策略,02000000~用于其它各级组织单元。(见附件三十四)1.组织架构创建完后,通过Graphic,打印出组织系统图(参见报表样例“26组织系统图”) 2.流程图

3.系统操作 3.1.操作范例 3.1.1.创建 3.1.1.1.创建组织单元对象、关系 例1:创建组织单元营业,组织代码为 例2:创建组织单元销售行政,组织代码为 3.1.1.1.1. 系统菜单及交易代码 人力资源?组织管理?专家模式?组织单位 交易代码:P010

3.1.1.1.2. 系统屏幕及栏位解释 例1:创建组织单元营业,组织代码为 栏位名称栏位说明资料范例计划版本创建组织时的一个版本号,目前所有的计划版本号都为01 01 组织单元填入组织单元的编码(8位)必须参照职位编码原则填写 对象对象是指组织单元、职位、或任务;必须在“活动的”状态下做信息类型名称下的所有操作此对象是指组织单元 选中信息类型名称中的对象,按键创建组织单元。

数据挖掘中的名词解释

第一章 1,数据挖掘(Data Mining),就是从存放在数据库,数据仓库或其他信息库中的大量的数据中获取有效的、新颖的、潜在有用的、最终可理解的模式的非平凡过程。 2,人工智能(Artificial Intelligence)它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。 3,机器学习(Machine Learning)是研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。 4,知识工程(Knowledge Engineering)是人工智能的原理和方法,对那些需要专家知识才能解决的应用难题提供求解的手段。 5,信息检索(Information Retrieval)是指信息按一定的方式组织起来,并根据信息用户的需要找出有关的信息的过程和技术。 6,数据可视化(Data Visualization)是关于数据之视觉表现形式的研究;其中,这种数据的视觉表现形式被定义为一种以某种概要形式抽提出来的信息,包括相应信息单位的各种属性和变量。 7,联机事务处理系统(OLTP)实时地采集处理与事务相连的数据以及共享数据库和其它文件的地位的变化。在联机事务处理中,事务是被立即执行的,这与批处理相反,一批事务被存储一段时间,然后再被执行。 8, 联机分析处理(OLAP)使分析人员,管理人员或执行人员能够从多角度对信息进行快速 一致,交互地存取,从而获得对数据的更深入了解的一类软件技术。8,决策支持系统(decision support)是辅助决策者通过数据、模型和知识,以人机交互方式进行半结构化或非结构化决策的计算机应用系统。它为决策者提供分析问题、建立模型、模拟决策过程和方案的环境,调用各种信息资源和分析工具,帮助决策者提高决策水平和质量。 10,知识发现(KDD:Knowledge Discovery in Databases)是从数据集中别出有效的、新颖的、潜在有用的,以及最终可理解的模式的非平凡过程。 11,事务数据库(Transaction Database)一个事务数据库由文件构成,每条记录代表一个事务。 典型的事务包含唯一的事务标记,多个项目组成一个事务 12,分布式数据库(Distributed Database)是用计算机网络将物理上分散的多个数据库单元连接起来组成一个逻辑统一的数据库。 第三章 13,并行关联规则挖掘(Parallel Association Rule Mining)是指利用并行处理机,使用挖掘算法或在并行计算的环境下完成数据的高效挖掘工作。 14,数量关联规则挖掘(Quantitive Association Rule Mining)对含有非离散的数值属性的数据进行挖掘的技术 14, 频繁项目集(Frequent Itemsets)对项目集I和事务数据库D,T中所有满足用户指定的最小支持度(Minsupport)的项目集,即大于或等于Minsupport的I的非空子集 15,最大频繁项目集(Maximum Frequent Itemsets)在频繁项目集中挑选出所有不被其他元素包含的频繁项目集 16,闭合项目集(Close Itemset)如果项目的直接超集都不具有和它相同的支持度技术则该项目是闭合的 17,多层次关联规则:具有概念分层的关联规则挖掘产生的规则称为多层关联规则。 18,多维关联规则:在关联规则中的项或属性每个涉及多个维,则它就是多维关联规则。

数据处理内容.

数据处理内容 1.标准曲线 作标准曲线时,对于可控性差的实验,可点数应多一些;对于可控性较的实验,取点数可少一些,但不应少于五个点。 r值应根据具体实验的要求,既要满足特定实验的要求,又不能过分人为的提高r值。 标准曲线完成后,检测样品时,测定值应落在标准曲线范围内。 2.有效数字 有效数字的保留应根据实验仪器的有效数字确定。 文字叙述中数字的表达应严谨,比如“精确称取2g样品”是一种典型错误,应表达为“精确称取2.0000g样品”,以表示所用天生秤为万分天秤。 再比如,1mL移液管的读数应为“0.683mL”,而不是“0.68mL”。 3.实验数据处理 实验数据的重复数应根据实验本身的要求决定。 对于可控性较差的实验,实验数据的重复数应增加;对于可控性较好的实验,实验数据的重复数可相应减少,但最少不应少于3个。 实验数据的表示方法应以“平均值(X)±标准差(SD)”表示,数据间应进行显著性分析,并标示出显著性水平和实验的重复数。比如: 表1 多酚对小鼠游泳竭耗实验的影响结果(X±SD) Table 1 Effects of polyphenol on swimming time of mice(X±SD) Group n Swimming time (s) Increase rate(%) 1 10 181.1±58.1 — 2 10 266.2±76.0ac47.0 3 10 354.7±103.9b95.9 4 10 261.7±62.1ac44.5

注:a:P<0.05,b :P<0.001,与1组相比较;c:P<0.05,与3组相比较 Note: a: P<0.05, b: P<0.001, compared with 1 group; c: P<0.05, compared with 3 group 对于表格中数字的描述也应标示其显著性水平。比如“第3组和第1组间有极著性差异”的说法是不完整的,应为“第3组和第1组间有极显著性差异(P<0.001)”。 对于正交实验,应根据极差分析和方差分析的结果综合考虑,以决定最终的结论,而不应只根据极差分析结果就得出结论。 对于论文中的图表应进行适当的说明,不应只把图表放在论文上,而不做任何说明。

关于公司组织架构调整及战略管理的提案

关于组织架构调整及制度流程配套方案 背景:四川XX置业有限公司成立于2003年,经过6年长足发展,公司已陆续开发多个项目,获得了较好的社会回报,资金实力也逐步得到提升。现公司已从单一项目开发向集约式、板块式项目运作进行转变。对此,过去以项目为导向的机构设置和重叠、模糊的职能部门设置不再符合企业发展需求,公司应尽快调整组织架构,建立高效、精细化的地产职能机构。 一、现有组织架构图 1、公司现有组织架构图存在弊端: 1)部门结构设置没有完全结合公司短、中、长期发展规划,仅围绕到项目开展设置部门,易造成部门稳定性差,人员无法定岗定编; 2)组织架构整体设计没有体现集中分权、有效幅度原则,缺乏部分必要部门,而又将一些业务流程节点部分分割,易出现工作交叉、推诿、效率低下以及人员编制重复等问题; 3)组织架构缺乏层叠性与纵伸性,仅从结构图上看,缺乏多样有效的信息传输通路;股东层、管理层、执行层权责没有体现;没有按照地产开发流程提取关

键点归纳后进行设置部门。 2、各职能部门分析 1)办公室:部门涵盖职能涉及企业战略管理、行政后勤管理、人力资源管理、秘书管理、电子信息管理以及审计职能。 意见:涉及工作面幅度大,部分工作没有必然联系性,且办公室主要职能未能完全突出,建议对部门进行拆分。 2)资金部:负责项目前期报建、个人购房按揭办理(逐步剥离);关联公司来往账务处理;企业(项目)融资工作;年度资金计划控制工作; 意见:工作涉及到财务部范畴,应考虑突出融资与资金协调(配额)及监督资金安全性方面的工作,可与其它业务关联性部门组合,并在架构中提升部门阶层; 3)财务部:公司日常账务建立处理;内部报销工作;税务申报工作。 意见:目前该部门未完全发挥应有职能,建议保留部门编制,扩大业务范围,全面负责账务、税务、资金稽核、资金流转、相关金融部门关系建立(维护)、统计、对其他部门财务支持工作。 4)企业发展部:新设部门,职权范围为负责公司级接待工作;对外联系联络,开拓维护政府脉络。 意见:据了解,该部门为非常设部门。因其职能可被包容,在新的组织机构框架设定中应出现常规常设部门。 5)营销部:承担公司项目策划、规划设计、营销职能。 意见:营销部应从土地信息获取、土地调研评估、参与招拍挂到项目规划设计、个案整体包装推广、销售控制等多个方面发挥作用,因此目前部门设置不合理,人员专业配比亟待改进。 6)建设开发部:兼顾工程项目管理、成本预算管理、园林现场管理以及报批报建职能。 意见:部门应该拆分,部门内结构应该严格按照开发量配置人员。 二、提议调整后组织架构图 1、调整思路 符合公司短期项目开发及管理目标,同时结合公司跨越式发展规划,设计精

数据处理名词解释

名词解释: 第一章 试验设计与数据处理:是以概率论、数理统计及线性代数为理论基础,研究如何有效的安排试验、科学的分析和处理试验结果的一门科学。 试验考察指标(experimental index):依据试验目的而选定的衡量或考察试验效果的特征值. 试验因素;对特征值产生影响的原因或要素. 因素水平:试验实际考虑采用的(某一)因素变化的状态或条件的种类数称为因素水平,简称水平。 局部控制(local control)原则:控制隐藏变量对反应的效应。 重复(replication)原则:重复试验于许多试验单位,以降低结果的机会变异 随机化(randomization)原则:随机化(Randomization)安排试验单位接受指定的处理。实验的目标特性(实验考察指标)目标特性:就是考察和评价实验结果的指标。 定量指标:可以通过实验直接获得,便于计算和进行数据处理。 定性指标:不易确定具体的数值,为便于用数学方法进行分析和处理,必须是将其数字化后进行计算和处理。 因素:凡是能影响实验结果的条件或原因,统称为实验因素(简称为因素)。 水平:因素变化的各种状态和条件称为因素的水平 总体、个体:我们所研究对象的某特性值的全体,叫做总体,又叫母体;其中的每个单元叫做个体。 子样(样本)、样本容量:自总体中随机抽出的一组测量值,称为样本,又叫子样。样本中所含个体(测量值)的数目,叫做样本容量,即样本的大小。 抽样:从总体中随机抽取若干个个体观测其某种数量指标的取值过程称为抽样。 样本空间:就样本而言,一次抽取、观测的结果是n个具体数据x1,x2,…,xn,称为样本(X1,X2,…X n)的一个观测值,而样本观测值所有可能取值的全体称为样本空间。 重复性:由一个分析者,在一个给定的实验室中,用一套给定的仪器,在短时间内,对某物理量进行反复定量测量所得的结果。也称为室内精密度。 再现性;由不同的实验室的不同分析者和仪器,共同对一个物理量进行定量测量的结果。也称室间精密度。 误差:测量值和真值的差数 偏差:测量值和平均值的差数。也叫离差。 偏差平方和:测量值对平均值的偏差的平方的加和,叫偏差平方和。 方差(variance):是测量值在其总体均值周围分布状况的一种量度,方差表征随机变量分布的离散程度。 总体方差的定义是:测量值对总体均值的误差的平方的统计平均 样本方差:只作过有限次测量的样本方差,通常用s2表示。s2是测量值对样本均值的偏差的平方的平均 标准偏差(标准差):方差的平方根的正值,叫标准偏差,或标准差 自由度:是指可以自由取值的数据的个数。 相对标准偏差(变异系数)(relative standard deviation, RSD):是样本标准偏差与平均值的比值,表示偏差值与平均值的相对大小。 第二章

投资公司组织架构和运作流程

投资公司组织架构图 运作流程

各部门职责 一般由公司总经理、研究部经理、投资部经理及其他相关人员组成。 负责决定公司所管理基金的投资计划、投资策略、投资原则、投资目标、资产分配及投资组合的总体计划等。 一般是由副总经理、部门经理及其他相关人员组成。 主要负责制定和监督执行风险控制政策,根据市场变化对基金的投资组合进行风险评估,并提出风险控制建议。 对部门提交的关于产品、财务等风险评估报告、建议进行讨论,做出决策建议,并提交董事会做出最终决策。 根据公司的经营目标,完成公司下达的基金产品销售目标。 根据接触客户的第一手资料,为投资管理部提供产品研发数据及建议。 营销策略、计划的拟定、实施和改进。 负责市场调研、市场分析工作,制定业务推进计划。 负责如实向客户介绍产品、与顾客洽谈、签订合同,确保所签合同规范、有效和可行,负责合同、评审记录的及时传递和保存。 了解客户的基本情况及与本企业有关的数据资料,建立和运用客户资料库。 协助客户服务部对顾客满意程度的调查。 负责公司形象设计以及公共关系的建立、往来与联系等,对公司品牌进行策划、推广等。 对行业进行深入研究,适时向公司提出调整投资策略(如地域选择、城市选择等)的建议。 通过广泛的渠道寻找优质项目,进行前期谈判和商务条款的谈判。 对项目进行分析、调查和论证,提交投资可行性报告。 对已投资项目的管理,及时发现问题并提交应对方案,及时采取应对措施。 根据投资管理部的项目研究成果,设计、推出新的基金产品类型,设计产品结构与思路,与其他部门紧密联系,设计产品宣传资料、设计相关法律文本。 负责基金的日常管理实务,办理相关的登记、注册、备案、银行对接事宜。实时跟踪基金项目的运作,监督项目的实施,按公司的要求提交基金运作报告,并就基金运作过程中所发生的情况及时向公司报告。 负责客户的咨询服务、接待,保管客户资料,处理客户投诉。 与营销人员紧密配合,保管客户档案,接受客户的投诉并处理,制定不同

人力资源部组织架构调整方案

人力资源部组织架构及职责

相关职位岗位职责: (一)培训发展组: 培训发展经理(1名): 1、负责协助人力资源部总监构建公司培训体系并逐步完善; 2、负责培训制度、工作流程的拟定、执行、维护及完善等工作; 3、负责根据公司经营战略及年度培训需求,制定年/季/月度培训计划及费用预算方案,主导组织实施、考核跟踪、检讨并完善; 4、根据公司战略规划,不断为公司培养各类基、中、高层管理人才及技术性人才,搭建公司人才梯队,主导组织职业生涯规划管理工作; 5、负责各项目培训档案的分类管理,以及门店培训室、培训设施的管理; 6、负责教材库/试题库的建立与完善等管理工作; 7、负责实施和监管培训过程中的奖罚与纪律; 8、负责公司讲师师资的建设及管理提升工作; 9、完成上级领导交办的临时性工作。 培训讲师(5名): 1、跟进公司的培训计划在门店的执行情况就执行效果及时向上汇报; 2、组织进行员工入职/转正/晋升考核并将及时反馈结果情况; 3、初拟部门各岗位转正/晋升试卷及初步审核各部门提交的试卷资料并跟进审批过程,汇总、分类相关试题形成试题库并进行日常管理; 4、负责初级培训教材的初步审核,对已审批的教材分类,形成教材库并进行日常管理;

5、负责对各单位的培训情况按周期进行检查,并形成书面检查报告; 6、负责完成培训组各类报表的初步分析并向上提供有价值的数据信息内容; 7、对负责区域分店的培训进行业务指导、授课、稽查、督促改进并提升等; 8、负责相关文字资料、报表资料、培训信息的收集、整理及归档等工作; 9、负责对培训档案(包括系统记录)进行管理与维护,包括录入、统计、整理、更新、销毁与存档等工作; 10、负责项目性培训课程现场的助教与服务工作; 11、完成上级领导交办的其它工作。 (二)薪酬激励组: 薪酬激励主管(1名): 1、负责协助人力资源总监对公司人力资源管理薪酬体系的构建及完善; 2、负责人员异动手续的审核与办理,含人事动态与结构分析及离职管理等工作,人事类报表的提报与审核; 3、负责员工试用期管理、员工转正/晋升等相关管理体系的建立、执行及完善; 4、负责员工考勤、值/排班、加班/调班、请/休假等日常人事工作管理; 5、负责人事系统的维护,相关数据统计、分析功能的增加方案提报; 6、负责公司奖惩体系的建立、执行及完善工作; 7、负责公司人事制度/流程/规范的制定、推行、检讨、修订等工作; 8、负责组织架构及工作设计,检讨设计编制及人力成本控制管理定编等工作及工作分析,编写工作职务说明书; 9、负责制定、检讨、修订门店人事行政部日常工作规范,并督促执行,提高人事工作人员日常业务技能; 10、完成上级领导临时交办工作。 专员(1名): 1、协助薪酬经理对公司人力资源管理薪酬体系的构建及完善; 2、负责定期收集行业薪酬信息和数据,为薪酬主任完成公司薪酬福利方案的过程提供相关参考数据资料等事务性工作; 3、负责收集、汇总公司人事制度/流程/规范在执行过程中的问题点,为薪酬主任检讨、修订相关制度/流程/规范提供相关参考依据等; 4、根据公司发展情况和行业水平,起草制定合理薪酬调整实施办法;

关于完善公司组织架构优化管理流程的建议

关于完善公司组织架构优化管理流程的建议 整体思路: 组织架构设计,应该是在公司经营目标的基础上,考虑经营环境等的影响,充分利用公司资源,确定公司的职能模块,选择适用的组织模式,实现岗位的合理设置,确定组织架构,运用业务流程检验完善组织架构。 原则:精简高效、专业分工、责权对等、执行与监督分设、客户服务导向及流程管理导向适应公司未来的健康高速发展 目标:建立完善的组织架构,明确三级管理的岗位职责 推行标准化、规范化管理制度,(后期有必要贯彻ISO9001标准) 重视业务培训,提高管理人员素质 加大教训总结力度 加强职业道德、职业精神教育 一、企业现有组织经营管理问题: 企业组织架构的设置,应该强调管理职能的有效行使和管理流程的顺畅高效。通过近段时间的调研,发现公司现有的组织架构存在以下问题: 1、基础管理体系不完善、节点不清晰、职责不明确。在现阶段弊端尚未完全显现,但在公司生产基地投产运行后,将会导致公司整体运营不顺畅,不能实现公司期望的达成目标,对公司战略目标的实现缺少有效支撑。 2、从目前组织机构看,许多部门空缺(办公室、人力部、市场部、研发部),导致公司相关人员多头管理,职责不明,无法有效的进行系统工作的推进,造成关键职能弱化甚至缺失,不能体现“精简高效、专业分工、责权对等、执行与监督分设、客户服务导向及流程管理导向”的基本原则。 3、缺少公司整体资源配置、组织的管理职能,尤其是综合计划管理、人力资源管理基本缺失。 4、无技术研发部门,没有符合企业发展要求的设计研发师。目前仅仅停留在模仿阶段,模仿出来的东西缺乏市场竞争力。企业新品设计规划缺。 5、营销系统的指挥、调度、监管、策划人员严重缺失。营销系统的销售部虽然存在,但市场部缺失,因为缺乏管理人员,职能工作全部由营销副总来负责。营销副总深陷日常职能工作之中,无法对产品的产品定位、市场定位、渠道选择等营销战略工作进行有效的规划与实施。

公司组织架构调整流程

公司组织架构调整流程
1.组织架构调整流程与风险控制图 组织架构调整流程与风险控制 不相容责任部门/责任人的职责分工与审批权限划分 业务风险
董事会 总经理 总经办 人力资源部 相关部门
阶 段
如果现有组织架构存 在缺陷,就会影响组 织的运行效率 参与评估
开始 1 组织架构运行 效果评估 2 参与 D1
如果组织架构调整方 案不符合企业自身特 点及实际情况,就会 影响企业运作效率 审批 审核
提出建议
征求相关人员 的建议 3 编制《组织架构 调整方案》
提出建议 D2
如果新的《组织架构 图》 《业务流程图》 、 、 《岗位说明书》等文 件编制混乱,就会影 审批 响企业经营活动的顺 利开展;如果新的组 织架构运行得不到企 业内部员工的积极支 持,也会影响企业经 营目标的实现 审核
发布 《组织架构 调整方案》 4 编制《组织架构 图》《业务流程 、 图》《岗位职责 、 说明书》
组织架构调整 及人员任命 5 新的组织架构 运行效果分析
D3
结束

2.组织架构调整流程控制表 组织架构调整流程控制
控制事项 详细描述及说明 1.人力资源部应当定期对组织架构设计与运行的效率及效果进行全面评估。组织架构运 D1 行效果评估的内容主要包括现有组织架构是否有利于企业战略目标的实现、是否与企 业内部主导业务流程相符、是否满足企业内部高效管理的要求
阶 段 控 制 D2
2.组织架构在调整之前应广泛征求董事、监事、高级管理人员和其他员工的意见 3.企业应根据组织架构设计规范对现有治理结构和内部机构设置进行全面梳理,确保其 符合现代企业制度要求;企业设置内部机构,应当重点关注内部机构设置的合理性和 运行的高效性等,一旦发现内部机构设置和运行中存在职能交叉或运行低效现象时, 应及时解决;企业《组织架构调整方案》应按规定权限和程序进行决策审批
4. 《组织架构图》《业务流程图》和《岗位说明书》等文件资料应按照统一的规范编写 、 D3 5.新的组织架构运行时,应及时查找运行中存在的问题和缺陷,以便进一步改进和优化
相 关 规 范
应建 规范
? 《组织架构设计规范》 ? 《岗位说明书编写规范》 ? 《企业内部控制应用指引》 ? 《中华人民共和国公司法》 ? 《组织架构图》
参照 规范
文件资料
? 《业务流程图》 ? 《岗位说明书》
责任部门 及责任人
? 人力资源部、相关部门 ? 总经理、人力资源部经理、相关部门负责人

数据处理总结

第一章 本课程的主要内容 一、资料的整理及统计分析 平均数 标准差 标准误 二、显著性检验 1. 平均数间差异显著性检验 2. F 检验法 三、相关与回归 四、试验设计 五、Excel 、DPS 统计软件系统 常用术语 1. 总体与样本 总体( polulation )是指根据研究目的确定的、符合指定条件的研究对象的全体。它是由相同性质的(个体)成员所构成的集团。样本( sample )是指从总体中抽取一定数量的个体所组成的集合。 2. 参数与统计量 参数( parameter )是指由总体计算的用来描述总体的特征性数值。它是一个真值,通常用希腊字母表示。如总体 平均数以□表示,总体标准差以b表示。 统计量( statistics )是指由样本计算的用来描述样本的特征性数值。 3. 误差与错误

误差( error )是指试验中由无法控制的非试验因素所引起的差异。它是不可避免的,试验中只能设法减少,而不能 消除。 错误( mistake )是指试验过程中人为的作用所引起的差错,在试验中完全可以避免。 4. 精确性与准确性 精确性( precision )是指试验或调查中同一试验指标或性状的重复观察值彼此的接近程度。 准确性( accuracy )是指试验或调查中某一试验指标或性状的观察值(统计量)与真值(或总体参数)之间的接近程度。 5. 试验指标 在某项试验设计中,用来衡量试验效果的特征量称为试验指标,也称试验结果。试验指标可分为定量指标和定性指标两类。 6. 试验因素试验中对试验指标可能产生影响的原因或要素称为试验因素,也称为因子。 7. 因素水平试验中试验因素所处的各种状态或取值称为因素水平,简称水平。 8. 试验处理试验中各试验因素的水平所形成的一种具体组合方式称为试验处理,简称处理,是在试验单位上的一种具体实现。 9. 试验单位 在试验中能接受不同试验处理的试验载体叫做试验单位。 10. 重复 在一项试验中,将1 个处理在两个或两个以上的试验单位上实施的称为重复。1 个处理所实施的试验单位数称为处理的重复数,或者说某个水平组合重复n 次试验,这个处理的重复数就是n。 试验设计应遵循的基本原则重复随机化局部控制第二章 第一节样品的采集与前处理 一、资料的来源 经常性记录 试验研究记录 调查记录

地理信息系统名词解释大全(整理版本)

地理信息系统名词解释大全 地理信息系统Geographic Information System GIS作为信息技术的一种,是在计算机硬、软件的支持下,以地理空间数据库(Geospatial Database)为基础,以具有空间内涵的地理数据为处理对象,运用系统工程和信息科学的理论,采集、存储、显示、处理、分析、输出地理信息的计算机系统,为规划、管理和决策提供信息来源和技术支持。简单地说,GIS就是研究如何利用计算机技术来管理和应用地球表面的空间信息,它是由计算机硬件、软件、地理数据和人员组成的有机体,采用地理模型分析方法,适时提供多种空间的和动态的地理信息,为地理研究和地理决策服务的计算机技术系统。地理信息系统属于空间型信息系统。 地理信息是指表征地理圈或地理环境固有要素或物质的数量、质量、分布特征、联系和规律等的数字、文字、图像和图形等的总称;它属于空间信息,具有空间定位特征、多维结构特征和动态变化特征。 地理信息科学与地理信息系统相比,它更加侧重于将地理信息视作为一门科学,而不仅仅是一个技术实现,主要研究在应用计算机技术对地理信息进行处理、存储、提取以及管理和分析过程中提出的一系列基本问题。地理信息科学在对于地理信息技术研究的同时,还指出了支撑地理信息技术发展的基础理论研究的重要性。 地理数据是以地球表面空间位置为参照,描述自然、社会和人文景观的数据,主要包括数字、文字、图形、图像和表格等。 地理信息流即地理信息从现实世界到概念世界,再到数字世界(GIS),最后到应用领域。 数据是通过数字化或记录下来可以被鉴别的符号,是客观对象的表示,是信息的表达,只有当数据对实体行为产生影响时才成为信息。 信息系统是具有数据采集、管理、分析和表达数据能力的系统,它能够为单一的或有组织的决策过程提供有用的信息。包括计算机硬件、软件、数据和用户四大要素。 四叉树数据结构是将空间区域按照四个象限进行递归分割(2n×2n,且n ≥1),直到子象限的数值单调为止。凡数值(特征码或类型值)呈单调的单元,不论单元大小,均作为最后的存储单元。这样,对同一种空间要素,其区域网格的大小,随该要素分布特征而不同。 不规则三角网模型简称TIN,它根据区域有限个点集将区域划分为相连的三角面网络,区域中任意点落在三角面的顶点、边上或三角形内。如果点不在顶点上,该点的高程值通常通过线性插值的方法得到(在边上用边的两个顶点的高程,在三角形内则用三个顶点的高程)。 拓扑关系拓扑关系是指网结构元素结点、弧段、面域之间的空间关系,主要表现为拓扑邻接、拓扑关联、拓扑包含。根据拓扑关系,不需要利用坐标或距离,可以确定一种地理实体相对于另一种地理实体的位置关系,拓扑数据也有利于空间要素的查询。 拓扑结构为在点、线和多边形之间建立关联,以及彻底解决邻域和岛状信息处理问题而必须建立的数据结构。这种结构应包括以下内容:唯一标识,多边形标识,外包多边形指针,邻接多边形指针,边界链接,范围(最大和最小x、y坐标值)。 游程编码是逐行将相邻同值的网格合并,并记录合并后网格的值及合并网

组织架构调整管理制度(新)

XXXXX有限公司 组织架构调整管理制度 第一章总则 第一条为了加强公司的组织及部门架构设置的规范性,确保组织架构满足公司战略的发展要求,保障公司的正常运营,特 制定本办法。 第二条组织架构调整原则 1.反映公司战略:反映公司的五年发展战略定位及经营目 标; 2.体现业务流程:按流程进行专业分工; 3.明确各自职责:部门、个人职责界定清晰; 4.提高运作效率:扁平化,有效授权,减少责任重叠。 第三条组织架构包括两个层面:公司架构和部门架构。 1.公司架构:为保证公司战略目标的达成而设置的部门; 2.部门架构:为保证部门职能目标的达成而设置的岗位及 其相互关系。 第二章组织架构调整 第四条公司架构调整依据 正常情况下,每年对组织架构进行一次回顾,当遇到以下情况时,可以进行调整: 1.公司战略目标发生变化、业务发生重大转型、经营环境

发生剧烈变化及发生并购、重组等情况; 2.公司因生产经营需要进行的业务流程再造、管理创新、 新技术引进及裁减人员等情况; 3.其他需要调整组织架构的因素出现。 第五条公司架构调整的责任部门与流程 ?总经理:公司架构调整的审核者,主要监督公司架构运行情况。 ?办公室:公司架构调整的实施机构,主要职责包括: 收集、整理、分析公司架构运营情况中存在的问题,并 提交专项报告,为上级提供决策依据;并根据总经理提 出的公司架构调整建议,撰写公司架构调整的文本文件; 组织开展公司架构调整工作。 第六条各部门架构调整依据 正常情况下,部门架构根据公司架构调整进行同步调整,但 是当遇到以下情况时,可临时进行调整: 1.部门职能发生变化; 2.国家政策、市场环境等因素发生重大变化导致岗位职责 发生变化; 3.其他需要调整的情况。 第七条各部门架构调整的责任部门与流程 ?总经理:部门架构调整的决策者,主要对部门架构调整做出最终决策。 ?办公室:部门架构调整的审核机构及组织机构,主要

数据基础知识及数据处理

数据处理 (从小数据到大数据) 一、小数据 1、信息的度量 在计算机中: 最小数据单位:位(bit) Bit: 0 或1 (由电的状态产生:有电1,无电0)基本数据单位:字节(Byte, B) 1B=8bit 1KB=1024B 1MB=1024KB 1GB=1024MB 1TB=1024GB。 …… 2、不同数制的表示方法 十进制(Decimal notation),如120, (120) 10,120D 二进制(Binary notation) ,如(1010)2 , 1010B 八进制(Octal notation) ,如(175)8 , 175O 十六进制数(Hexdecimal notation) ,如(2BF)16 , 2BF03H

3、不同数制之间的转换方法 (1)任意其他进制(二、八、十六)转换成十进制,可“利用按权展开式展开”。 例如: 10110.101B =1×24+0×23+1×22+1×21+0×20+1×2-1+0×2-2+1×2-3 =22.625D 347.6O =3×82+4×81+7×80+6×8-1 =231.75D

D5.6H =D×161+5×160+6×16-1 =213.375D (2)十进制转换成任意其他进制(二、八、十六),整数部分的转换可按“除基取余,倒序排列”的方法,小数部分的转换可按“乘基取整,顺序排列”的方法。(除倒取,乘正取) 例,十进制数59转换为二进制数111011B

例:十进制数0.8125转换为二进制数0.1101B 同理:317 D= 100111101B = 475O = 13DH 0.4375D = 0.0111B = 0.34O = 0.7H (3)八进制数转换成二进制数,可按“逐位转换,一位拆三位”的方法。(8421法) 例如:3107.46O = 3 1 0 7 . 4 6 O =011 001 000 111 . 100 110 B =11001000111.10011B (4)十六进制数转换成二进制数,可按“逐位转换,一位拆四位”的方法。(8421法)

专业课名词解释

第一章导论 1.地理信息系统:是由计算机硬件、软件和不同的方法组成的系统,该系统设计来支持空间数据的采集、管理、处理、分析、建模和现实,以便解决复杂的规划和管理问题。2.GIS与MIS管理信息系统)以及与CAD的异同点? GIS和MIS 相同点:都是以计算机为核心的信息处理系统,都具有数据量大和数据之间关系复杂的特点。区别:GIS主要处理空间数据,如:土地资源、森林资源、交通运输网络、人口分布等数据;MIS主要处理物资、设备、资金、产量、库存、劳动力以及人事档案、生产合同、计划任务等非空间数据。 GIS和CAD 相同点:二者都具有坐标参考系统,都能描述和处理图形数据,也能处理属性数据。 区别:(1)GIS强调空间数据的处理和分析,而CAD更偏向于制图和表达,图形编辑功能较强,具有较强的排版和编辑和制图能力(2)处理的数据量上:GIS处理的是海量的数据,而CAD处理的数据量相对较小(3)数据的地理语义:GIS强,CADD弱(4)属性信息:GIS丰富,CAD较少(5)空间拓扑关系:GIS较强,CAD较弱 3.GIS的基本构成: 系统硬件: (一)数据处理设备:(1)图形工作站(2)个人计算机(3)客户机/服务器系统(Client/Server,简称C/S) (二)数据输入设备(1)图形手扶跟踪数字化仪(2)大幅面图形扫描仪(3)数字测量设备 (三)数据输出设备(1)绘图仪(2)计算机显示器 系统软件: (一)GIS功能软件(1)GIS基础软件平台(2)GIS应用软件 (二)基础支撑软件(1)数据库软件 (三)操作系统软件 空间数据:地理信息系统的操作对象是地理数据,它具体描述地理现象的空间特征、属性特征和时间特征。 (一)空间特征:是指地理现象的空间位置以及相互关系,其数据称为空间数据; (二)属性特征:表示地理现象的名称、类型和数量等,其数据称为属性数据; (三)时间特征:指地理现象随时间而发生的变化,其数据称为时态数据; 应用人员:系统开发人员和GIS技术的最终用户。 应用模型:对于某一应用目的问题的解决,必须通过构建专门的应用模型。 4.GIS的功能: 一、基本功能:(1)数据采集与编辑(2)数据存储与管理(3)数据处理和变换(4)空间分析和统计(5)产品制作与演示(6)二次开发和编程 二、应用功能:(1)资源管理(2)区域规划(3)国土检测(4)辅助决策 5.GIS的发展概况以及发展趋势? 6.GIS中空间数据误差的来源? (1)数据采集:实地测量误差、航测遥感数据分析误差、地图的误差 (2)数据输入:数字化过程中由操作员和设备造成的误差、地理属性没有明显边界引起的误差 (3)数据存储:数字存储有效位不能满足、空间精度不能满足 (4)数据输入:比例尺误差、输出设备误差、介质的变形误差

相关主题