Android Camera HAL3 分析

Android Camera HAL3 分析
Android Camera HAL3 分析

1

Android Camera HAL3 分析

本文均属自己阅读源码的点滴总结,转账请注明出处谢谢。

欢迎和大家交流。qq:1037701636 email:gzzaigcn2009@https://www.360docs.net/doc/5f2216933.html,

Software :系统源码Android 5.1

Camera3研读前沿:

当初在研读Camera1.0相关的内容时,主要围绕着CameraClient 、

CameraHardwareInterface 等方面进行工作的开展,无论是数据流还是控制流看起来都很简单、明了,一系列的流程化操作使得整个框架学起来特别的容易。因为没有Camera2.0相关的基础,所以这次直接看3.0相关的源码时,显得十分的吃紧,再加上底层高通HAL3.0实现的过程也是相当的复杂,都给整个研读过程带来了很多的困难。可以说,自身目前对Camera3.0框架的熟悉度也大概只有70%左右,希望通过总结来进一步梳理他的工作原理与整个框架,并进一步熟悉与加深理解。

1.Camera3下的整体架构图。

整个CameraService 建立起一个可用操作底层Camera device 大致需要经过

Camera2Client 、Camera3Device 以及HAL 层的camera3_device_t 三个部分。

2

从上图中可以发现Camera3架构看上去明显比camera1来的复杂,但他更加的

模块化。对比起Android4.2.2 Camer 系统架构图(HAL 和回调处理)一文中描述的

单顺序执行流程,Camera3将更多的工作集中在了Framework 去完成,将更多的控

制权掌握在自己的手里,从而与HAL 的交互的数据信息更少,也进一步减轻了一

些在旧版本中HAL 层所需要做的事情。

2. Camera2Client 的建立与初始化过程

在建立好Camera2Client 后会进行initialize 操作,完成各个处理模块的创建:

?

1

2

3 .... mStreamingProcessor = new StreamingProcessor(this);//preview 和recorder threadName = String8::format(C2-%d-StreamProc,

mCameraId);

4 5 6 7 8 9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25 mStreamingProcessor->run(threadName.string());//预览与录像

mFrameProcessor = new FrameProcessor(mDevice, this);// 3A

threadName = String8::format(C2-%d-FrameProc,

mCameraId);

mFrameProcessor->run(threadName.string()); //3A

mCaptureSequencer = new CaptureSequencer(this);

threadName = String8::format(C2-%d-CaptureSeq,

mCameraId);

mCaptureSequencer->run(threadName.string());//录像,拍照

mJpegProcessor = new JpegProcessor(this, mCaptureSequencer); threadName = String8::format(C2-%d-JpegProc,

mCameraId);

mJpegProcessor->run(threadName.string());

....

mCallbackProcessor = new CallbackProcessor(this);//回调处理

threadName = String8::format(C2-%d-CallbkProc,

mCameraId);

mCallbackProcessor->run(threadName.string());

依次分别创建了:

StreamingProcessor并启动一个他所属的thread,该模块主要负责处理previews 与record两种视频流的处理,用于从hal层获取原始的视频数据

FrameProcessor并启动一个thread,该模块专门用于处理回调回来的每一帧的3A等信息,即每一帧视频除去原始视频数据外,还应该有其他附加的数据信息,如3A值。

CaptureSequencer并启动一个thread,该模块需要和其他模块配合使用,主要用于向APP层告知capture到的picture。

JpegProcessor并启动一个thread,该模块和streamprocessor类似,他启动一个拍照流,一般用于从HAL层获取jpeg编码后的图像照片数据。

此外ZslProcessor模块称之为0秒快拍,其本质是直接从原始的Preview流中获取预存着的最近的几帧,直接编码后返回给APP,而不需要再经过take picture 去请求获取jpeg数据。0秒快拍技术得意于当下处理器CSI2 MIPI性能的提升以及Sensor支持全像素高帧率的实时输出。一般手机拍照在按下快门后都会有一定的延时,是因为需要切换底层Camera以及ISP等的工作模式,并重新设置参数以及重新对焦等等,都需要花一定时间后才抓取一帧用于编码为jpeg图像。

以上5个模块整合在一起基本上实现了Camera应用开发所需的基本业务功能。

3

3. 预览Preview下的控制流

研读Camera具体的业务处理功能,一般从视频实时预览Preview入手。一般熟悉Camera架构的人,可以从一个app端的一个api一直连续打通到底层hal的一个控制命令。大致可以如下图所示:

对于preview部分到CameraService的控制流可以参考博文Android4.2.2的preview的数据流和控制流以及最终的预览显示,本文将直接从

Camera2Client::startPreview() 作为入口来分析整个Framework层中Preview相关的数据流。

?

1 2 3 4 5 6 7 8 9 status_t Camera2Client::startPreview() {

ATRACE_CALL();

ALOGV(%s: E, __FUNCTION__);

Mutex::Autolock icl(mBinderSerializationLock);

status_t res;

if( (res = checkPid(__FUNCTION__) ) != OK) return res; SharedParameters::Lock l(mParameters);

return startPreviewL(l.mParameters, false);

}

startPreview通过startPreviewL提取参数后真正的开始执行Preview相关的控制流。该函数看上去内容虽然较多,但基本采用了同一种处理方式:

?

4

1

2 3 4 5 6 7 8 9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48 status_t Camera2Client::startPreviewL(Parameters ?ms, bool restart) {//restart == false

ATRACE_CALL();

status_t res;

......

int lastPreviewStreamId = mStreamingProcessor->getPreviewStreamId();//获取上一层Preview stream id

res = mStreamingProcessor->updatePreviewStream(params);//创建camera3device stream, Camera3OutputStream .....

int lastJpegStreamId = mJpegProcessor->getStreamId();

res = updateProcessorStream(mJpegProcessor, params);//预览启动时就建立一个jpeg的outstream

.....

res = mCallbackProcessor->updateStream(params);//回调处理建立一个Camera3outputstream

if(res != OK) {

ALOGE(%s: Camera %d: Unable to update callback stream: %s (%d),

__FUNCTION__, mCameraId, strerror(-res), res);

return res;

}

outputStreams.push(getCallbackStreamId());

......

outputStreams.push(getPreviewStreamId());//预览stream

......

if(!params.recordingHint) {

if(!restart) {

res = mStreamingProcessor->updatePreviewRequest(params);//request处理,更新了mPreviewrequest

if(res != OK) {

ALOGE(%s: Camera %d: Can't set up preview request:

%s (%d), __FUNCTION__, mCameraId,

strerror(-res), res);

return res;

}

}

res = mStreamingProcessor->startStream(StreamingProcessor::PREVIEW,

outputStreams);//启动stream,传入outputStreams即stream 的id

} else{

if(!restart) {

res = mStreamingProcessor->updateRecordingRequest(params);

if(res != OK) {

ALOGE(%s: Camera %d: Can't set up preview request with

record hint: %s (%d), __FUNCTION__, mCameraId,

strerror(-res), res);

return res;

}

}

res = mStreamingProcessor->startStream(StreamingProcessor::RECORD,

outputStreams);

}

......

}

(1). mStreamingProcessor->updatePreviewStream()

由预览与录像处理模块更新一个预览流,其实现过程如下:?

1 2 3 4 5 6 7 8 9

10

11 status_t StreamingProcessor::updatePreviewStream(const Parameters ?ms) { ATRACE_CALL();

Mutex::Autolock m(mMutex);

status_t res;

sp device = mDevice.promote();//Camera3Device

if(device == 0) {

ALOGE(%s: Camera %d: Device does not exist, __FUNCTION__, mId); return INVALID_OPERATION;

}

if(mPreviewStreamId != NO_STREAM) {

// Check if stream parameters have to change

5

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56 uint32_t currentWidth, currentHeight;

res = device->getStreamInfo(mPreviewStreamId,

¤tWidth, ¤tHeight, 0);

if(res != OK) {

ALOGE(%s: Camera %d: Error querying preview stream info:

%s (%d), __FUNCTION__, mId, strerror(-res), res);

return res;

}

if(currentWidth != (uint32_t)params.previewWidth ||

currentHeight != (uint32_t)params.previewHeight) {

ALOGV(%s: Camera %d: Preview size switch: %d x %d -> %d x %d,

__FUNCTION__, mId, currentWidth, currentHeight,

params.previewWidth, params.previewHeight);

res = device->waitUntilDrained();

if(res != OK) {

ALOGE(%s: Camera %d: Error waiting for preview to drain:

%s (%d), __FUNCTION__, mId, strerror(-res), res);

return res;

}

res = device->deleteStream(mPreviewStreamId);

if(res != OK) {

ALOGE(%s: Camera %d: Unable to delete old output stream

for preview: %s (%d), __FUNCTION__, mId,

strerror(-res), res);

return res;

}

mPreviewStreamId = NO_STREAM;

}

}

if(mPreviewStreamId == NO_STREAM) {//首次create stream

res = device->createStream(mPreviewWindow,

params.previewWidth, params.previewHeight,

CAMERA2_HAL_PIXEL_FORMAT_OPAQUE, &mPreviewStreamId);//创建一个Camera if(res != OK) {

ALOGE(%s: Camera %d: Unable to create preview stream: %s (%d),

__FUNCTION__, mId, strerror(-res), res);

return res;

}

}

res = device->setStreamTransform(mPreviewStreamId,

params.previewTransform);

if(res != OK) {

ALOGE(%s: Camera %d: Unable to set preview stream transform:

%s (%d), __FUNCTION__, mId, strerror(-res), res);

return res;

}

return OK;

}

6

57

58

59

60

61

62

63

64

65

该函数首先是查看当前StreamingProcessor模块下是否存在Stream,没有的话,则交由Camera3Device创建一个stream。显然,一个StreamingProcessor只能拥有一个PreviewStream,而一个Camera3Device显然控制着所有的Stream。

注意:在Camera2Client中,Stream大行其道,5大模块的数据交互均以stream作为基础。

下面我们来重点关注Camera3Device的接口createStream,他是5个模块创建stream的基础:

?

1 2 3 4 5 6 7 8 9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24 status_t Camera3Device::createStream(sp consumer,

uint32_t width, uint32_t height, int format, int*id) {

ATRACE_CALL();

Mutex::Autolock il(mInterfaceLock);

Mutex::Autolock l(mLock);

ALOGV(Camera %d: Creating new stream %d: %d x %d, format %d,

mId, mNextStreamId, width, height, format);

status_t res;

bool wasActive = false;

switch(mStatus) {

case STATUS_ERROR:

CLOGE(Device has encountered a serious error);

return INVALID_OPERATION;

case STATUS_UNINITIALIZED:

CLOGE(Device not initialized);

return INVALID_OPERATION;

case STATUS_UNCONFIGURED:

case STATUS_CONFIGURED:

// OK

break;

case STATUS_ACTIVE:

ALOGV(%s: Stopping activity to reconfigure streams, __FUNCTION__); res = internalPauseAndWaitLocked();

if(res != OK) {

SET_ERR_L(Can't pause captures to reconfigure streams!);

return res;

}

7

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69 wasActive = true;

break;

default:

SET_ERR_L(Unexpected status: %d, mStatus);

return INVALID_OPERATION;

}

assert(mStatus != STATUS_ACTIVE);

sp newStream;

if(format == HAL_PIXEL_FORMAT_BLOB) {//图片

ssize_t jpegBufferSize = getJpegBufferSize(width, height);

if(jpegBufferSize <= 0) {

SET_ERR_L(Invalid jpeg buffer size %zd, jpegBufferSize);

return BAD_VALUE;

}

newStream = new Camera3OutputStream(mNextStreamId, consumer,

width, height, jpegBufferSize, format);//jpeg 缓存的大小

} else{

newStream = new Camera3OutputStream(mNextStreamId, consumer,

width, height, format);//Camera3OutputStream

}

newStream->setStatusTracker(mStatusTracker);

res = mOutputStreams.add(mNextStreamId, newStream);//

一个streamid与Camera3OutputStream绑定

if(res < 0) {

SET_ERR_L(Can't add new stream to set: %s (%d), strerror(-res), res); return res;

}

*id = mNextStreamId++;//至少一个previewstream 一般还有CallbackStream

mNeedConfig = true;

// Continue captures if active at start

if(wasActive) {

ALOGV(%s: Restarting activity to reconfigure streams, __FUNCTION__); res = configureStreamsLocked();

if(res != OK) {

CLOGE(Can't reconfigure device for new stream %d: %s (%d),

mNextStreamId, strerror(-res), res);

return res;

}

internalResumeLocked();

}

ALOGV(Camera %d: Created new stream, mId);

return OK;

}

8

70

71

72

73

74

75

76

该函数重点是关注一个new Camera3OutputStream,在Camera3Device主要存在Camera3OutputStream和Camera3InputStream

两种stream,前者主要作为HAL的输出,是请求HAL填充数据的OutPutStream,后者是由Framework将Stream进行填充。无论是Preview、record还是capture均是从HAL层获取数据,故都会以OutPutStream的形式存在,是我们关注的重点,后面在描述Preview的数据流时还会进一步的阐述。

每当创建一个OutPutStream后,相关的stream信息被push维护在一个mOutputStreams的KeyedVector >表中,分别是该stream在Camera3Device中创建时的ID以及Camera3OutputStream的sp值。同时对mNextStreamId记录下一个Stream的ID号。

上述过程完成StreamingProcessor模块中一个PreviewStream的创建,其中Camera3OutputStream创建时的ID值被返回记录作为mPreviewStreamId的值,此外每个Stream都会有一个对应的ANativeWindow,这里称之为Consumer。

(2)mCallbackProcessor->updateStream(params)

对比StreamingProcessor模块创建previewstream的过程,很容易定位到Callback模块是需要建立一个callback流,同样需要创建一个

Camera3OutputStream来接收HAL返回的每一帧帧数据,是否需要callback可以通过callbackenable来控制。一般但预览阶段可能不需要回调每一帧的数据到APP,但涉及到相应的其他业务如视频处理时,就需要进行callback的enable。

?

1 2 3 4 5 6 7 8 9 status_t CallbackProcessor::updateStream(const Parameters ?ms) {

ATRACE_CALL();

status_t res;

Mutex::Autolock l(mInputMutex);

sp device = mDevice.promote();

if(device == 0) {

ALOGE(%s: Camera %d: Device does not exist, __FUNCTION__, mId); return INVALID_OPERATION;

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54 }

// If possible, use the flexible YUV format

int32_t callbackFormat = params.previewFormat;

if(mCallbackToApp) {

// TODO: etalvala: This should use the flexible YUV format as well, but

// need to reconcile HAL2/HAL3 requirements.

callbackFormat = HAL_PIXEL_FORMAT_YV12;

} else if(https://www.360docs.net/doc/5f2216933.html,eFlexibleYuv &&

(params.previewFormat == HAL_PIXEL_FORMAT_YCrCb_420_SP ||

params.previewFormat == HAL_PIXEL_FORMAT_YV12) ) {

callbackFormat = HAL_PIXEL_FORMAT_YCbCr_420_888;

}

if(!mCallbackToApp && mCallbackConsumer == 0) {

// Create CPU buffer queue endpoint, since app hasn't given us one

// Make it async to avoid disconnect deadlocks

sp producer;

sp consumer;

BufferQueue::createBufferQueue(&producer, &consumer);//BufferQueueProducer mCallbackConsumer = new CpuConsumer(consumer, kCallbackHeapCount);

mCallbackConsumer->setFrameAvailableListener(this);//当前CallbackProcessor CpuConsumer::FrameAvailableListener

mCallbackConsumer->setName(String8(Camera2Client::CallbackConsumer));

mCallbackWindow = new Surface(producer);//用于queue操作,这里直接进行本地的buf }

if(mCallbackStreamId != NO_STREAM) {

// Check if stream parameters have to change

uint32_t currentWidth, currentHeight, currentFormat;

res = device->getStreamInfo(mCallbackStreamId,

¤tWidth, ¤tHeight, ¤tFormat);

if(res != OK) {

ALOGE(%s: Camera %d: Error querying callback output stream info:

%s (%d), __FUNCTION__, mId,

strerror(-res), res);

return res;

}

if(currentWidth != (uint32_t)params.previewWidth ||

currentHeight != (uint32_t)params.previewHeight ||

currentFormat != (uint32_t)callbackFormat) {

// Since size should only change while preview is not running,

// assuming that all existing use of old callback stream is

// completed.

ALOGV(%s: Camera %d: Deleting stream %d since the buffer

parameters changed, __FUNCTION__, mId, mCallbackStreamId);

res = device->deleteStream(mCallbackStreamId);

if(res != OK) {

ALOGE(%s: Camera %d: Unable to delete old output stream

for callbacks: %s (%d), __FUNCTION__,

mId, strerror(-res), res);

return res;

}

mCallbackStreamId = NO_STREAM;

10

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83 }

}

if(mCallbackStreamId == NO_STREAM) {

ALOGV(Creating callback stream: %d x %d, format 0x%x, API format 0x%x, params.previewWidth, params.previewHeight,

callbackFormat, params.previewFormat);

res = device->createStream(mCallbackWindow,

params.previewWidth, params.previewHeight,

callbackFormat, &mCallbackStreamId);//Creating callback stream if(res != OK) {

ALOGE(%s: Camera %d: Can't create output stream for callbacks:

%s (%d), __FUNCTION__, mId,

strerror(-res), res);

return res;

}

}

return OK;

}

对比updatePreviewStream可以发现,该函数自助创建了一套

surface/BufferQueue/CpuConsumer的机制,这套类似SurfaceFlinger的buffer管理机制可参看一文Android5.1中surface生产者和消费者间的处理框架简述。此外通过createStream请求Camera3Device建立一个Stream,其中Stream的ID值保存在mCallBackStreamId当中,并将一个CallbackWindow和当前的Stream绑定。

通过这个对比,也需要重点关注到,对于每个Camera3OutPutStream来说,每一个stream都被一个Consumer,而在此处都是Surface(ANativeWindow)所拥有,这个Consumer和HAL相匹配来说是消费者,但对于真正的处理Buffer的Consumer来说如CPUConsumer,Surface却又是以一个Product的角色存在的。

(3)updateProcessorStream(mJpegProcessor, params)

11

? 1

2 3 4 5 6 7 8 9

10

11

12

13

14

15

16 status_t Camera2Client::updateProcessorStream(sp processor,

camera2::Parameters params) { // No default template arguments until C++11, so we need this overload return updateProcessorStream( processor, params);

}

template

status_t Camera2Client::updateProcessorStream(sp processor,

Parameters params) {

status_t res;

// Get raw pointer since sp doesn't have operator->*

ProcessorT *processorPtr = processor.get();

res = (processorPtr->*updateStreamF)(params);

.......

}

该模板函数处理过程最终通过非显示实例到显示实例调用

JpegProcessor::updateStream,该函数处理的逻辑基本和Callback模块处理一致,创建的一个OutPutStream和CaptureWindow相互绑定,同时Stream的ID保存在mCaptureStreamId中。

此外需要说明一点:

在preview模式下,就去创建一个jpeg处理的stream,目的在于启动takepicture时,可以更快的进行capture操作。是通过牺牲内存空间来提升效率。

(4)整合startPreviewL中所有的stream 到Vector outputStreams

outputStreams.push(getPreviewStreamId());//预览stream

outputStreams.push(getCallbackStreamId())//Callback stream

目前一次Preview构建的stream数目至少为两个。

(5)mStreamingProcessor->updatePreviewRequest()

在创建好多路stream后,由StreamingProcessor模块来将所有的stream信息交由Camera3Device去打包成Request请求。

注意:

12

Camera HAL2/3的特点是:将所有stream的请求都转化为几个典型的Request 请求,而这些Request需要由HAL去解析,进而处理所需的业务。这也是Camera3数据处理复杂化的原因所在。

?

1 2 3 4 5 6 7 8 9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39 status_t StreamingProcessor::updatePreviewRequest(const Parameters ?ms) {

ATRACE_CALL();

status_t res;

sp device = mDevice.promote();

if(device == 0) {

ALOGE(%s: Camera %d: Device does not exist, __FUNCTION__, mId);

return INVALID_OPERATION;

}

Mutex::Autolock m(mMutex);

if(mPreviewRequest.entryCount() == 0) {

sp client = mClient.promote();

if(client == 0) {

ALOGE(%s: Camera %d: Client does not exist, __FUNCTION__, mId);

return INVALID_OPERATION;

}

// Use CAMERA3_TEMPLATE_ZERO_SHUTTER_LAG for ZSL streaming case.

if(client->getCameraDeviceVersion() >= CAMERA_DEVICE_API_VERSION_3_0) {

if(params.zslMode && !params.recordingHint) {

res = device->createDefaultRequest(CAMERA3_TEMPLATE_ZERO_SHUTTER_LA &mPreviewRequest);

} else{

res = device->createDefaultRequest(CAMERA3_TEMPLATE_PREVIEW,

&mPreviewRequest);

}

} else{

res = device->createDefaultRequest(CAMERA2_TEMPLATE_PREVIEW,

&mPreviewRequest);

//创建一个Preview相关的request,由底层的hal来完成default创建

}

if(res != OK) {

ALOGE(%s: Camera %d: Unable to create default preview request:

%s (%d), __FUNCTION__, mId, strerror(-res), res);

return res;

}

}

res = params.updateRequest(&mPreviewRequest);//根据参数来更新CameraMetadata requ if(res != OK) {

ALOGE(%s: Camera %d: Unable to update common entries of preview

request: %s (%d), __FUNCTION__, mId,

strerror(-res), res);

return res;

}

13

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57 res = mPreviewRequest.update(ANDROID_REQUEST_ID,

&mPreviewRequestId, 1);//mPreviewRequest的ANDROID_REQUEST_ID

if(res != OK) {

ALOGE(%s: Camera %d: Unable to update request id for preview: %s (%d), __FUNCTION__, mId, strerror(-res), res);

return res;

}

return OK;

}

该函数的处理过程是一个构建并初始化mPreviewRequest的过程,分以下几个流程来分析:

a mPreviewRequest是一个CameraMetadata类型数据,用于封装当前previewRequest。

b device->createDefaultRequest(CAMERA3_TEMPLATE_PREVIEW,

&mPreviewRequest)

?

1

2 3 4 5 6 7 8 9

10

11

12 const camera_metadata_t *rawRequest;

ATRACE_BEGIN(camera3->construct_default_request_settings);

rawRequest = mHal3Device->ops->construct_default_request_settings(

mHal3Device, templateId);

ATRACE_END();

if(rawRequest == NULL) {

SET_ERR_L(HAL is unable to construct default settings for template %d, templateId);

return DEAD_OBJECT;

}

*request = rawRequest;

mRequestTemplateCache[templateId] = rawRequest;

14

最终是由hal来实现构建一个rawrequest,即对于Preview,而言是构建了一个CAMERA3_TEMPLATE_PREVIEW类型的Request。其实对HAL而言,rawrequest本质是用于操作一个camera_metadata_t类型的数据:

?

1

2 3 4 5 6 7 8 9

10

11

12 struct camera_metadata {

metadata_size_t size;

uint32_t version;

uint32_t flags;

metadata_size_t entry_count;

metadata_size_t entry_capacity;

metadata_uptrdiff_t entries_start; // Offset from camera_metadata metadata_size_t data_count;

metadata_size_t data_capacity;

metadata_uptrdiff_t data_start; // Offset from camera_metadata

uint8_t reserved[];

};

该数据结构可以存储多种数据,且可以根据entry tag的不同类型来存储数据,同时数据量的大小也可以自动调整。

c mPreviewRequest.update(ANDROID_REQUEST_ID,&mPreviewRequestId, 1)

将当前的PreviewRequest相应的ID保存到camera metadata。

(6)mStreamingProcessor->startStream启动整个预览的stream流该函数的处理过程较为复杂,可以说是整个Preview正常工作的核心控制

?

1 2 3 4 5 6 7 8 9

10

11 status_t StreamingProcessor::startStream(StreamType type,

const Vector &outputStreams) {

.....

CameraMetadata &request = (type == PREVIEW) ?

mPreviewRequest : mRecordingRequest;//取preview的CameraMetadata request

....res = request.update(

ANDROID_REQUEST_OUTPUT_STREAMS,

outputStreams);//CameraMetadata中添加outputStreams

res = device->setStreamingRequest(request);//向hal发送request

.....

}

15

该函数首先是根据当前工作模式来确定StreamingProcessor需要处理的Request,该模块负责Preview和Record两个Request。

以PreviewRequest就是之前createDefaultRequest构建的,这里先是将这个Request所需要操作的Outputstream打包到一个tag叫

ANDROID_REQUEST_OUTPUT_STREAMS的entry当中。

a:setStreamingRequest

真正的请求Camera3Device去处理这个带有多路stream的PreviewRequest。

?

1 2 3 4 5 6 7 8 status_t Camera3Device::setStreamingRequest(const CameraMetadata &request, int64_t* /*lastFrameNumber*/) { ATRACE_CALL();

List requests;

requests.push_back(request);

return setStreamingRequestList(requests, /*lastFrameNumber*/NULL);

}

该函数将mPreviewRequest push到一个list,调用setStreamingRequestList ?

1 2 3 4 5 6 status_t Camera3Device::setStreamingRequestList(const List & int64_t *lastFrameNumber) {

ATRACE_CALL();

return submitRequestsHelper(requests, /*repeating*/true, lastFrameNumber);

}

?

1 2 3 4 5 6 7 8 9 10 status_t Camera3Device::submitRequestsHelper(

const List &requests, bool repeating,

/*out*/

int64_t *lastFrameNumber) {//repeating = 1;lastFrameNumber = NULL ATRACE_CALL();

Mutex::Autolock il(mInterfaceLock);

Mutex::Autolock l(mLock);

status_t res = checkStatusOkToCaptureLocked();

if(res != OK) {

// error logged by previous call

return res;

16

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44 }

RequestList requestList;

res = convertMetadataListToRequestListLocked(requests, /*out*/&requestList);//返RequestList

if(res != OK) {

// error logged by previous call

return res;

}

if(repeating) {

res = mRequestThread->setRepeatingRequests(requestList, lastFrameNumber);// } else{

res = mRequestThread->queueRequestList(requestList, lastFrameNumber);//capt }

if(res == OK) {

waitUntilStateThenRelock(/*active*/true, kActiveTimeout);

if(res != OK) {

SET_ERR_L(Can't transition to active in %f seconds!,

kActiveTimeout/1e9);

}

ALOGV(Camera %d: Capture request % PRId32 enqueued, mId,

(*(requestList.begin()))->mResultExtras.requestId);

} else{

CLOGE(Cannot queue request. Impossible.);

return BAD_VALUE;

}

return res;

}

b convertMetadataListToRequestListLocked

这个函数是需要将Requestlist中保存的CameraMetadata数据转换为List

?

1 2 3 status_t Camera3Device::convertMetadataListToRequestListLocked(

const List &metadataList, RequestList *requestList) if(requestList == NULL) {

17

18

4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

35 36

CLOGE(requestList cannot be NULL.); return BAD_VALUE; } int32_t burstId = 0; for (List::const_iterator it = metadataList.begin();//C it != metadataList.end(); ++it) {

sp newRequest = setUpRequestLocked(*it);//

新建CaptureReques if (newRequest == 0) {

CLOGE(Can't create capture request);

return BAD_VALUE;

} // Setup burst Id and request Id newRequest->mResultExtras.burstId = burstId++;

if (it->exists(ANDROID_REQUEST_ID)) {

if (it->find(ANDROID_REQUEST_ID).count == 0) {

CLOGE(RequestID entry exists; but must not be empty in metadata);

return BAD_VALUE; } newRequest->mResultExtras.requestId = it->find(ANDROID_REQUEST_ID).data id } else {

CLOGE(RequestID does not exist in metadata);

return BAD_VALUE;

} requestList->push_back(newRequest); ALOGV(%s: requestId = % PRId32, __FUNCTION__, newRequest->mResultExtras.req }

return OK;

}

这里是对List 进行迭代解析处理,如当前模式下仅存在PreviewRequest 这一个

CameraMetadata ,通过setUpRequestLocked 将其转换为一个CaptureRequest 。

c 重点来关注setUpRequestLocke

d 复杂的处理过程

1 2

3

4

sp Camera3Device::setUpRequestLocked(

const CameraMetadata &request) {//mPreviewRequest

status_t res; if (mStatus == STATUS_UNCONFIGURED || mNeedConfig) {

5 6 7 8 9 10 res = configureStreamsLocked();

......

sp newRequest = createCaptureRequest(request);//Camera mOutputStreams

return newRequest;

}

configureStreamsLocked函数主要是将Camera3Device侧建立的所有Stream包括Output与InPut格式的交由HAL3层的Device去实现处理的核心接口是configure_streams与register_stream_buffer。该部分内容会涉及到更多的数据流,详细的处理过程会放在下一博文中进行分析。

createCaptureRequest函数是将一个CameraMetadata格式的数据如PreviewRequest转换为

1 2 3 4 5 6 7 8 9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27 sp Camera3Device::createCaptureRequest(

const CameraMetadata &request) {//mPreviewRequest

ATRACE_CALL();

status_t res;

sp newRequest = new CaptureRequest;

newRequest->mSettings = request;//CameraMetadata

camera_metadata_entry_t inputStreams =

newRequest->mSettings.find(ANDROID_REQUEST_INPUT_STREAMS);

if(inputStreams.count > 0) {

if(mInputStream == NULL ||

mInputStream->getId() != inputStreams.data.i32[0]) {

CLOGE(Request references unknown input stream %d,

inputStreams.data.u8[0]);

return NULL;

}

// Lazy completion of stream configuration (allocation/registration) // on first use

if(mInputStream->isConfiguring()) {

res = mInputStream->finishConfiguration(mHal3Device);

if(res != OK) {

SET_ERR_L(Unable to finish configuring input stream %d:

%s (%d),

mInputStream->getId(), strerror(-res), res);

return NULL;

}

}

newRequest->mInputStream = mInputStream;

newRequest->mSettings.erase(ANDROID_REQUEST_INPUT_STREAMS);

}

19

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67 camera_metadata_entry_t streams =

newRequest->mSettings.find(ANDROID_REQUEST_OUTPUT_STREAMS);//读取存储在C 息

if(streams.count == 0) {

CLOGE(Zero output streams specified!);

return NULL;

}

for(size_t i = 0; i < streams.count; i++) {

int idx = mOutputStreams.indexOfKey(streams.data.i32[i]);//Camera3OutputStr if(idx == NAME_NOT_FOUND) {

CLOGE(Request references unknown stream %d,

streams.data.u8[i]);

return NULL;

}

sp stream =

mOutputStreams.editValueAt(idx);//返回的是Camera3OutputStream,previ // Lazy completion of stream configuration (allocation/registration)

// on first use

if(stream->isConfiguring()) {//STATE_IN_CONFIG或者STATE_IN_RECONFIG

res = stream->finishConfiguration(mHal3Device);//register_stream_buffer if(res != OK) {

SET_ERR_L(Unable to finish configuring stream %d: %s (%d),

stream->getId(), strerror(-res), res);

return NULL;

}

}

newRequest->mOutputStreams.push(stream);//Camera3OutputStream添加到CaptureR }

newRequest->mSettings.erase(ANDROID_REQUEST_OUTPUT_STREAMS);

return newRequest;

}

该函数主要处理指定的这个CameraMetadata mPreviewRequest下对应所拥有的Output与Input Stream,对于Preview而言,至少存在OutPutStream包括一路StreamProcessor与一路可选的CallbackProcessor。

20

组织构架图实例分析(新)

组织构架图实例分析 一,公司简介 1.简史: 联想集团成立于1984年,由中科院计算所投资20万元人民币、11名科技人员创办,是一家在信息产业内多元化发展的大型企业集团,富有创新性的国际化的科技公司。由联想及原IBM个人电脑事业部所组成。从1996年开始,联想电脑销量一直位居中国国内市场首位,2013年;联想电脑销售量升居世界第1,成为全球最大的PC生产厂商。作为全球个人电脑市场的领导企业,联想从事开发、制造并销售可靠的、安全易用的技术产品及优质专业的服务,帮助全球客户和合作伙伴取得成功。联想公司主要生产台式电脑、服务器、笔记本电脑、打印机、掌上电脑、主板、手机等商品。 2.管理团队: 联想集团除了调整高层管理团队成员、组建了中西合璧的领导班子之外,更大的变化在于“新班子”和“老班子”运作方式的差异。在“老班子”中,CEO 很强势,重大决策只和少数人商量,然后就开会公布,交给下面执行,导致执行力很差、各部门之间难以有效配合与协同。而在最高领导的搭配与组合方面,也存在错位,配合不畅。例如,表面上看,杨元庆作为董事长负责战略制定,阿梅里奥负责日常运营,但实际的运作使得两人更像“联席CEO”——这种通常会影响决策效率的权力分配,让联想看起来更像是一只齐头并进的“双头怪兽”:一个年富力强、注重执行力、喜欢亲力亲为的中方董事长;一个个性鲜明、国际化经验丰富、精于日常运营的西方成本杀手。 3.重要事件: ①奥委会合作: ②放弃收购: ③迈凯轮合作 ④与NEC合资 ⑤收购Medion ⑥收购摩托罗拉移动 4.企业文化 ①企业定位:联想从事开发、制造及销售最可靠的、安全易用的技术产品。我们的 成功源自于不懈地帮助客户提高生产力,提升生活品质。 ②使命:为客户利益而努力创新;创造世界最优秀、最具创新性的产品;像对待技术 创新一样致力于成本创新;让更多的人获得更新、更好的技术;最低的总体拥有成 本(TCO),更高的工作效率。 ③核心价值观:成就客户—致力于客户的满意与成功;创业创新—追求速度和效率, 专注于对客户和公司有影响的创新;精准求实—基于事实的决策与业务管理;诚信 正直—建立信任与负责任的人际关系。 二,组织结构前后变化分析 1.组织结构发展史

【经典案例】企业组织结构设计案例及分析

【经典案例】企业组织结构设计案例及分析 引言: 在企业迅猛发展的当今时代,企业规模迅速扩大,员工岗位冗杂,公司组织结构的问题复杂也就显现出来了,并阻碍了公司的进一步发展。企业如何设计科学合理的组织结构成为了企业管理人员心头的一块大石头。基于此,设计符合企业发展,能够改善企业内部的管理现状,为公司发展提供良好的内部组织结构的方案就显得很紧迫了。本文是人力资源专家——华恒智信为某企业设计组织架构方案的项目纪实。 客户评价 对专家委员会的管理模式进行改革,是我们目前非常关注的问 题。华恒智信专家团队为我们提出的“投资委员会+项目专家办 公室”的管理模式,可以有效地配置专家资源,并通过及时的、 专业的专家投资评估与审查,为我们做出投资决策提供帮助。 ——Q开发投资有限公司汪总经理 【客户行业】:投资公司 【问题类型】:组织结构 【客户背景及现状问题】 Q开发投资有限公司是经市人民政府批准,于2001年4月设立的市直属综

合性投资公司。主要承担政府重大建设项目的投融资;接受政府授权持有并运作国有股权;自主开展资本运营,促进资产跨地区、跨行业、跨部门、跨所有制的流动和重组。 Q开发投资有限公司采用集团公司的组织形式,公司目前有6各部门——分别是研究发展部、资本运营部、投资开发部、财务融资部、人力资源部和总经理工作部;公司有3个子公司,现有人员27人。 目前,Q开发投资公司的一把手是新上任的汪总经理,他进入企业后的第一件事就是了解企业内部管理的现状,发现企业当前的优势与劣势,并借助外部第三方专业咨询公司的力量,对组织构架及管控模式进行初步调研与分析后,提出了组织构架新的改进方案。 华恒智信专家团队在对Q公司的临时组织——项目专家组和专家咨询委员会的组织职能与管控模式进行分析时,发现这两个临时组织的内部管理存在着以下的问题。 1.项目专家组和专家咨询委员会职责模糊,界线不清 Q开发投资公司的专家委员会由两个临时的部门构成——项目专家组和专家咨询委员会,两个临时组织的职责范围模糊、界限不清,经常会造成两个部门工作相互重叠的现象。 2.临时性委员会无固定人员维持工作 该开发投资公司总是在出现运营投资项目时,才临时召集专家 组成员组成专家组或咨询专家组参与项目的决策,这些专家组成员并非公司的固定人员,都是公司从外部聘用的兼职专家。因而,当出现投资项目时,临时召集外部专家的工作一直由总经理工作部临时代理。但是随着项目量的逐渐增多,负

组织结构管理案例分析

晾衣理论:先抓住衣领 某企业组织架构与人事调整案例 《赢周刊》柏明顿人力资源管理咨询公司郭晓亮 企业组织架构调整是一项理论与实践高度统一的工作,对于企业组织架构调整的一般原理和原则,大家都比较熟悉。但是对于某一具体企业来说,如何运用这些原理和原则?理论如何与实践相结合,以设计出适合自己企业的组织架构?在组织架构调整过程中,应注意哪些事项,以保证组织架构的顺利运作?以下我们(柏明顿公司咨询顾问师)帮助某制造企业客户进行组织架构调整的案例: 背景: 位于内地的某机械公司是一家传统国有企业,公司的规模和技术处于国内领先地位,但由于经营不善,2000年公司被迫进行了破产重组,任命了王总担任新的公司董事长兼总经理。王总上任后一方面加强了公司的市场营销工作,另一方面也进行了一些适应市场的内部管理改革,经营状况逐渐好转。2002年,公司顺利实现赢利,并取得了较快发展速度,到2004年底,公司员工1800多人,年销售额5亿多元,利润3600万元。 随着公司的发展,王总意识到一方面市场竞争越来越激烈,特别是外资企业越来越重视中国市场,使得公司的技术优势荡然无存,反而变成了劣势;另一方面随着国家整个制造业的快速发展,对机械的需求也必将大量增加,公司同时又面临着一个快速发展的机遇期。 在内部管理方面,公司虽然经过了资产重组和减员整顿,但由于公司的组织架构没有进行大的调整,也没有进行科学的定岗定编,因此仍然存在着机构林立、人浮于事、效率低下的情况,加上员工绝大部分还是原来留下来的,员工观念普遍跟不上企业发展要求。 根据对公司情况的分析,王总决定从内部管理抓起,首先对公司的组织架构进行重新设计和调整。考虑到公司内部缺乏专业的人力资源管理人才,而组织架构的调整又涉及到复杂的人事变动和利益调整,公司决定聘请专业顾问来指导进行。2005年初,公司聘请柏明顿公司咨询顾问进行该项目的咨询,对公司的组织架构体系进行了重新设计和调整。

2020健身行业现状及前景趋势

2020年健身行业现状及 前景趋势 2020年

目录 1.健身行业现状 (4) 1.1健身行业定义及产业链分析 (4) 1.2健身市场规模分析 (5) 1.3健身市场运营情况分析 (6) 2.健身行业存在的问题 (9) 2.1缺乏市场和行业标准、运作规范和职业资质准入 (9) 2.2专业化程度低 (9) 2.3市场短期和投机行为普遍 (9) 2.4管理水平较低 (9) 2.5供应链整合度低 (10) 3.健身行业前景趋势 (10) 3.1中国运动健身行业迎来新突破 (10) 3.2需求释放,健身群体规模整体保持增长,健身文化逐渐成为主流11 3.3互联网入局,突破时间、空间限制,带来全新健身体验 (11) 3.4健身行业经历洗牌阶段,建立新格局 (11) 3.5行业协同整合成为趋势 (11) 3.6生态化建设进一步开放 (12) 3.7细分化产品将会最具优势 (12) 3.8需求开拓 (13) 4.健身行业政策环境分析 (13)

4.1健身行业政策环境分析 (13) 4.2健身行业经济环境分析 (14) 4.3健身行业社会环境分析 (14) 4.4健身行业技术环境分析 (14) 5.健身行业竞争分析 (16) 5.1健身行业竞争分析 (16) 5.1.1对上游议价能力分析 (16) 5.1.2对下游议价能力分析 (16) 5.1.3潜在进入者分析 (17) 5.1.4替代品或替代服务分析 (17) 5.2中国健身行业品牌竞争格局分析 (17) 5.3中国健身行业竞争强度分析 (18) 6.健身产业投资分析 (18) 6.1中国健身技术投资趋势分析 (19) 6.2中国健身行业投资风险 (19) 6.3中国健身行业投资收益 (20)

(完整版)心理学研究方法

福建省高等教育自学考试应用心理学专业(独立本科段) 《心理学研究方法》课程考试大纲 第一部分课程性质与目标《心理学研究方法》是福建省高等教育自学考试应用心理学专业(独立本科段)的一门专业基础必修课程,目的在于帮助考生了解和掌握心理学研究的理论基础和主要方法,检验考生对心理学研究理论基础与主要方法,检验考生对心理学研究方法的基本知识和主要内容的掌握水平与应用能力。 心理学研究的对象是心理现象。它的研究主题十分广泛:即涉及人的心理也涉及动物的心理;即涉及个体的心理也涉及群体的心理;即涉及有意识的心理也涉及潜意识的心理;即涉及与生理过程密切相关的心理也涉及与社会文化密切相关的心理。心理学研究是一种以经验的方式对心理现象进行科学探究的活动。由于心理学的研究方法是以经验的或实证的资料为依据的,因而使心理学与哲学相区别,也与人文学科相区别。 设置本课程的具体目的要求是,学习和掌握心理学研究方法的基本理论和基本技能,将有助于学生们理解心理学的基本概念、基本原理和基本理论。理解心理学家在探索心理与行动时所做的一切,有助于考生将来为心理学的发展做出有益的贡献。 第二部分考核内容与考核目标 第一编心理学研究基础 第一章心理学与科学 一、学习目的与要求 通过本章学习,要求考生了解心理学的性质,了解心理学科学研究的方法、特征及基本步骤,理解心理学研究的伦理问题和伦理规范。 二、考核知识点与考核目标 1、识记: (1)心理学的含义; (2)心理学科学研究的特征:系统性、重复性、可证伪性和开放性; (3)知情同意。 2、领会: (1)一般人探索世界的常用方法; (2)心理学研究主要包含哪几个步骤; (3)科学研究的开放性主要表现在哪几方面; 3、应用: (1)根据科学研究的特征来分析某些心理学的研究; (2)心理学研究的伦理问题及以人为被试的研究的伦理规范来分析是否可以在心理学研究中使用欺骗的方法。

集团组织架构案例分析

《中国人民大学集团管控》课程认为企业的组织架构有直线型、职能型、直线—职能型、分权事业部型、复合事业部型、矩阵型、动态联盟型、立体多维型和网络组织型等多种形态。本文则主要是针对适合于企业集团的U型、H型和M型等三种形态进行比较。 ⒈U型结构:过分集权的组织架构 U型结构也称为“一元结构”,是由泰勒首先提出的,是将管理工作按职能划分为若干个部门,各部门只有很小的独立性,权力集中在企业最高决策者手中,其基本框架可概括为下图 这种组织结构的优点是: ①集中领导,统一指挥,便于调配人、财、物; ②职责清楚,办事效率高; ③工作井然有序,整个企业有较高的稳定性。 这种组织结构的缺点是: ①等级分明,层次过多,决策过程缓慢; ②各职能部门以自我为中心,协调困难; ③下级部门的主动性、积极性不能有效发挥; ④机构臃肿,官僚主义严重。 尽管U型结构存在许多缺点,但不失为一种行之有效的组织形式。目前,我国企业中多采用了这一形式。

企业集团各成员企业在纵向合并的初期,一般都采用这种结构。但由于管理幅度过大而造成行政管理费用大于市场交易费、事无巨细的过分集中使企业无力顾及长期发展战略决策与控制、各职能部门为追求各自的目标而偏离总目标等问题出现后,企业集团将寻求新的组织架构。 ⒉H型结构:过分分权的组织架构 H型结构也称为“控股公司结构”,是一种或分分权的组织架构。历史上的H型结构企业是由众多的中小型U型结构企业横向合并而成的。 母公司持有子公司部分或全部股份,下属各子公司具有独立的法人资格,所从事的产业一般关联度不大,从而形成相对独立的利益中心和投资中心,是与U型集权结构形成鲜明对照的分权结构形式,其基本框架可概括为下图 这种组织结构的优点是: ①包含U型结构,构成控股公司的子公司往往是U型结构; ②子公司保持了相当大的独立性和自由度,有利于提高子公司经营的积极性; ③对分散企业的经营风险积极意义。 这种结构的缺点是: ①母公司的战略、方针等难以向子公司渗透、贯彻; ②母公司的职能部门并不直接为子公司服务,子公司难以充分利用母公司的参谋人员; ③各子公司也要成立股东大会、董事会等机构,增加了管理成本;

中国健身行业的现状以及新发展

中国健身行业的现状以及新发展 健身俱乐部落户海内不外短短几年,却发展得异常红火。 作为该行业核心支柱的健身教练在公家心目中究竟印象如何呢?近日,中国青年报社调查中央、智联招聘和新浪招聘联合进行的一项职业吸引力调查发现,30%的公家觉得“现在做健身教练这行的鱼龙混杂,高素质健身教练却未几”。调查中,28%的公家以为“随着健身热兴起,教练市场肯定需求火爆”。 据08年8月,劳动和社会保障部宣布的“北京市二季度职业排行榜”显示,健身、娱乐场所服务职员作为“新生气力”首次入榜,跻身北京市二季度最轻易就业的20个职业。 现在的健身教练培训机构如雨后春笋般的涌入健身事业大潮,培训项目也五花八门。由此可见健身行业的发展正以惊人的速度从我们身边崛起。而现如今我们需要的是具备健身教练专业培训体系和专业培训技能的培训机构。目的清楚,落到实处——“信誉是教育的本质,质量是教育的核心。”集团操课类着名的培训机构主要集中在北京、武汉、上海等几个城市。而从健身教练的收入水平上来看,排在前面的是深圳、广东、北京、上海等大中型的城市,在这几个城市从业的教练月薪过万是很正常的事情。所以,根据自己的需求,找对地方,才是成为专业操课教练的条件。 健身教练行业目前存在的问题: 1.公家以为健身教练是吃青春饭的 a)很多人以为教练职业是个青春饭,这种认识是不准确 的。能把动作做得好看、有力度好像是教练能立足于领操台

的基本条件,但跟着会员对健身熟悉的不断深化,教练的专业知识是否过硬会成为更重要的评判尺度。此外,经验和服务意识也是赢得顾客的枢纽。国外也有岁数很大的人仍旧在做健身教练。现在从事教练这个职业的人大多是年青人,但是跟着健身行业的发展,以后很可能会泛起四五十岁的资深教练,他们不仅具有很高的理论知识,同时还能够在一线对会员健身做出很全面正确的指导。 b)健身教练的基本素质:1丰硕的理论知识;2亲身的健 身体会;3为人师表的立场。三者缺一不可,而理论知识和健身体会若非长时间参与是很难获得的,为人师表的立场则是一个成功运动员转型做教练的意识形态,很多优秀运动员退役后做不了教练就是因为他平时不留意观察和总结的结果,很多优秀运动员也从来没想过转型做教练。所以可以看出:长时间的积累是一个真正优秀教练的铺路石。 2.健身教练三大来源 a)记者在采访中了解到,目前健身教练的来源主要有三部分组成,或者是健身俱乐部会员,由于成绩凸起,被升格为教练;或者是相关体育专业毕业生毕业后直接进入健身俱乐部;再有就是通过参加培训班,考到有关健身教练资格。 b)据了解,教练中的相当一部门是兼职。科班出身的有扎实的理论功底,但往往会显得缺少个性,而培训班出身的健身教练可能由于培训班的良莠不齐以及缺少同一的尺度而导致水准得不到保障。 c)某健身会所的工作职员说:“我们聘用的教练是需要证书的,什么证书无所谓,口试合格的就可以录用任教。”

组织结构设计案例分析报告

组织结构分析: 日产汽车起死回生和华为的危机感 (职业经理人十四期) 第七小组

组织结构设计案例分析: 如何设计组织结构 一、企业的大树模型 随着企业规模和管理幅度的不断扩大,企业有必要重新整合外部资源,系 统性地解决企业所面临的和将要面临的问题,由此构建了企业的大树模型。 其中,企业文化和发展战略是首要性的问题,它们犹如大树的根,决定了企 业能否持续健康地成长。由于企业文化可以为战略实施提供行为导向,企业理念 文化具有独特的激励功能,企业文化具有良好的约束功能,因此企业文化日益成 为战略实施的重要手段。企业文化必须与企业战略相互适应和协调。从战略实施 的角度来看,企业文化既要为实施企业战略服务,又可能成为制约企业战略实施 的因素。当企业新的战略要求企业文化与之相配合时,企业原有文化的变革速度 却往往较慢,很难马上对新战略做出反应,这时企业原有文化就可能成为实施企 业新战略的阻力,因此在战略管理过程中,企业部新旧文化更替和协调是战略 实施获得成功的保证。 在企业的具体问题中,组织结构是第一步要考虑的,它犹如大树的躯干,决 定了企业能否枝繁叶茂。营销、研发、生产、人力、总务、财务等共同构成了大树 的主枝,同时,将主枝间衔接起来的核心流程的流向又决定于组织结构。以做事 为主线,以各部门、科室、班组、员工为分枝,以岗位责任制(包含岗位工作指引)、标准作业书、操作规程、技术标准和管理办法等为叶。 从大树发展的角度来说,若根不够深、躯干不够粗,再好的树叶也会枯萎, 更不要说供应能量给大树了,那么,大树就不能正常生长。企业就好比一棵大树, 不断从土壤中汲取养分,经过严寒酷暑的考验,茁壮成长。 二、组织结构设计原则: 1、拔高原则 在为企业进行组织结构的重新设计时,必须遵循拔高原则,即整体设计应紧 扣企业的发展战略,充分考虑企业未来所要从事的行业、规模、技术以及人力资 源配置等,为企业提供一个几年相对稳定且实用的平台。

健身行业的概况分析

健身行业的概况 一、健身行业发展: 中国健身行业起源于上世纪80年代,随着改革开放人们生活水平的提高及全民健身计划的倡导,人们的健身意识得到了很大的提高,此外,由于城市生活节奏加快,工作压力加大,更多年轻白领也加入到了健身的行列,现阶段在写字楼,居民区附近俱乐部星罗棋布,给人们提供更便捷的健身服务。 图表(1)中国健身俱乐部发展历程表---增长幅度(%) 图表(1)显示自2000年开始,中国健身俱乐部以每年37%--41%的速度在飞速发展。 二、健身行业发展现状: 中国的健身行业处于发展阶段,行业的发展现状与国际健身发达的国家相比,还有很长一段距离。1、中国人口基数大,现有俱乐部数量并不能满足需求。2、从业人员数量和素质,专业技术急需增加和提升。3、俱乐部的类型以连锁俱乐部和单店为主,发展还相对比较单一。 图表(2)全国部分城市健身俱乐部品牌数量 图表(2)显示了全国部分城市知名健身俱乐部品牌的数量,其中绝大多数为连锁俱乐部,这些连锁俱乐部在一个城市至少拥有2-50家店。 三、健身行业发展前景: 在国内健身行业是一个正在蓬勃发展中的新兴行业,是世界健身市场最光明的地区。健身企业的数量,质量及规模都将不断提升。就健身俱乐部来说,更多俱乐部实现规模式经营,局部地区发展演变成全国甚至全球连锁发展;俱乐部的类型也将更加多元化;从业人员素质不断提高,经营者从之前的教练转变为职业经理人;俱乐部的器械,设施和项目,服务水平也将大幅度提升。 图表(3)与2009年同期相比,2010年健身俱乐部整体盈利状况(当前问题参与总数量639个) 图表(3)显示了国内大部分俱乐部经营状况以盈利为主。 图表(4)2011年有扩大经营或者开新店的健身俱乐部比例(当前问题参与总数量633个) 图表(5)健身俱乐部新店主要开设地区(当前问题参与总数量633个) 图表(5)显示了国内俱乐部在未来将扩大在二线城市发展的比例,健身也更多渗入到国内各个地区城市。 四、健身行业的主体: 健身教练行业的主体是教练与会员,同时也配备了相关的管理者,销售人员,服务人员。

小米式组织架构案例分析

20150313】小米式组织架构案例分析 2015-04-09连昱天马帮 点击上方“天马帮”可以订阅哦!『天马一出谁与争锋』天马帮——互联网+第一商圈; 国内首家O2O教学模式,让您随心所欲学电商,游电商,玩电商; 并同千名传统企业老板一起开眼,壮胆,找同伴! 非常高兴再次跟天马帮的各位一起来探讨,互联网+的背景下面的手机变革。我的前一次课已经跟大家分析了互联网+的组织变革的一些具体的策略。我们先回顾一下上次课讲的主要的内容。上次课跟大家分享了互联网组织变革的三个主要的策略。首先,要以新的战略为导向,来打造扁平化的组织。第二,要根据现有的业务模式的更新,商业模式的创新来重现。在这个过程当中要重视人才的导向,探索多元化的激励手段。 今天我们更多来分享在“互联网+”的组织变革过程当中几个常见的案例。为什么传统企业需要改革。无论是传统行业,还是新兴行业,组织变革是不是需要的核心是对整个主营业务的成长空间和领先性的判断。组织究竟用什么样的形态,最重要的是看你的组织,在竞争当中所处的状态。过去我们的传统企业,在传统的经济形态下,拥有巨大的成长空间和领先性。但互联网带来的跨界融合和跨界竞争,打破了过去传统企业正常的市场空间和领先性。在原有的领先性无法表现而成长空间又不足的情况下,就面临到了当前大多数的传统企业所面临的转型困局。我们的企业是否需要变革,在一定层面上可以用一个简单的指标来衡量——平均增长率。如果企业每年的平均增长率低于当时的行业平均增长率,就需要考虑组织的变革。进行组织变革,不要过多考虑现在短期的盈亏情况,而是要把握当前这个行业的关键成功要素。“互联网+”的企业竞争其实就是用户选择权的竞争,而“互联网+”组织的目标,就是把企业和用户之间建立一个双向的交互平台。大家也可以看到,在小编发的图中,一个企业的组织是把企业的团队、研发、生产、供应链等等一些价值链的环节综合起来,呈现价值,传输给用户。在互联网的经济形态下,本质上是在探索如何和用户保持一个充分的双向交互的平台。

2018年健身行业分析报告

2018年健身行业分析 报告 2018年1月

目录 一、2018健身热持续,新机遇带来增长重启 (3) 1、健身行业概况:2020年预期登上千亿元大关 (3) 2、健身产业链:综合布局健身培训较多,互联网企业还需努力 (4) 二、“传统”健身业:和国际相比仍旧略慢一步 (4) 1、以美国为例:市场竞争激烈,商业模式由“大”变“小” (4) 2、国内线下健身房:仍以大型为主,收入结构还未优化 (6) 三、互联网新机遇:提前实现高阶需求,“小”也可以很“美” (7) 1、“颠覆”健身产业,互联网都对健身做了什么 (9) (1)纯线上企业:领先公司已经崭露头角 (10) (2)线上线下结合:不再是互联网企业单方努力,传统健身业正在谋取合作 (11) 2、行业风向:互联网与新技术牵头,重点在于挖掘产业深度价值 (12) 四、互联网是一个好去处,但还称不上“颠覆” (16) 1、市场空间测算:群众的力量总是巨大,互联网覆盖广泛有其优点 (16) 2、风险犹存:前浪已死在沙滩,后浪扑打之方需要再三考虑 (17)

一、2018健身热持续,新机遇带来增长重启 1、健身行业概况:2020年预期登上千亿元大关 2015年健身热情升温、公共健身设施、新型健身俱乐部等的出现使得商业健身行业重启快速增长。而2017年,热词“A4腰”、“马甲线”持续“霸屏”社交网络,健身这一大众运动不仅是各路明星圈粉的手段,更是年轻人群争相参与的活动之一。根据智研咨询发布的《2017-2022年中国健身房行业市场需求预测及投资前景分析报告》预计,未来五年有望保持12%的年复合增长率,到2020年将达到1230亿元。 2014年以来体育产业以超出政府预期的状态呈跨越式发展和政 策的利好不无关系:2014年“46号文”《国务院关于加快发展体育产业促进体育消费的若干意见》发布。2016年,更是有《“健康中国2030”规划纲要》和《关于加快发展健身休闲产业的指导意见》两条政策相继发布,强调重点发展全民健身及业余体育,引导社会资本参与健身休闲产业,到2025年健身休闲产业规模达到3万亿元。

组织结构案例分析

利民公司组织结构案例分析 案例的分析提示: 1.组织结构的类型:直线职能制2.组织结构的特点:这种组织结构以直线制为基础,综合了直线制和职能制组织的优点,在保证了直线组织统一指挥的原则下,增加了参谋机构,但骨干是直线部门,保持了直线制统一集中指挥,决策迅速的优点。具体来说它包含了直线关系、参谋和委员会,管理层次分明。 ?3.组织结构的优点:具有集中领导,便于调配人力、财力和物力;职责清楚,有利于提高办事效率;秩序井然,使整个组织有较高稳定性的优点。组织结构稳定性高,在外部环境变化不大的情况下,易于发挥组织的集团效率。适应于这样小型简单的企业。 ?4.组织结构的缺点:由于部门之间缺乏横向交流,增加了上级主管的协调工作量,组织内信息传递线路较长,反馈缓慢,不易迅速适应新情况,实际上仍然是典型的“集权式”管理。 ?这种结构当公司生产销售规模扩大以后或强调创新的企业来说就显的比较不合适了。 ?5.组织结构的优劣:总体上来说优大于劣,据了解,利民公司以前属于家族产业,职务几乎由家庭成员所担当,总经理为了便于自己对公司进行集中领导,有利于总经理实施控制和管理,所以对以前的组织结构进行改革。改革后的组织结构是典型的直线职能结构。克服了以血缘关系为基础的传统世袭组织类型,避免了多头领导、责权不明、管理层次混乱、管理跨度不合理的缺点。但是如何处理好家庭成员与普通职员的一些奖惩尺度需要特别留意。

案例分析:海尔的组织结构演变 海尔集团创立于1984年,17年来以年均增长78%的增长速度持续稳定发展,已发展成为在海内外享有较高美誉的大型国际化企业集团。产品从1984年的单一冰箱发展到如今的拥有白色家电、黑色家电、米色家电在内的86大门类13000多个规格的产品群,并出口到世界160多个国家和地区。2001年,实现全球营业额602亿元,实现出口创汇4.2亿美元,同比增长50%,是中国家电行业的第一名牌。其首席执行官张瑞敏曾先后登上美国的哈佛大学、沃顿商学院和哥伦比亚大学讲台,纵论“海尔圣经”。 在海尔的发展进程中,其组织结构也在不断调整,大的调整一年会有一两次,小的就更不必说了。张瑞敏认为,一个企业应建立一个有序的非平衡结构,一个企业如果是有序的平衡结构,这个企业就是稳定的结构,是没有活力的,但如果一个企业是无序的非平衡结构,肯定就是混乱的。我们在建立一个新的平衡时就要打破原来的平衡,在非平衡时再建立一个平衡。 海尔最早的组织结构是直线职能式结构,后来是矩阵结构,第三阶段就是市场链结构,其组织结构变迁如图1所示。 直线职能制结构就像一个金字塔。下面是最普通的员工,最上面是厂长、总经理,它的好处就是容易控制到终端。直线职能制结构如前所述,在企业小的时候,“一竿子抓到底”,反应非常快。但企业大了以后,这样就不行了,最大的弱点就是对市场反应太慢。这种结构在海尔发展的初期起了很大的作用,当时海尔内部局面混乱,纪律涣散,员工素质低,如果不采用这种组织结构,张瑞敏的领导魅力无法展现,海尔无法发展。到1996年,这种结构在海尔发展到了顶峰,于1996年海尔开始实行事业部制。其组织结构如图1所示。 这是一种分权结构的运作形式。在企业运作方式上,海尔集团采取“联合舰队”的运作机制。集团总部作为“旗舰”,以“计划经济”的方式协调下属企业。下属企业在集团内部

健身行业市场研究报告

健身行业市场研究报告 (内部资料稿) 泰实医疗 2019年12月

目录 第一部分健身产业概况 (4) 1.1 健身产业定义及产业链 (4) 1.2 健身产业主要政策汇总 (4) 第二部分全球健身市场现状 (5) 2.1 全球健身产业市场规模 (5) 2.2 全球主要国家健身产业情况 (5) 2.3 主要国家健身俱乐部数量 (6) 第三部分国内健身市场现状 (8) 3.1 中国健身产业发展特点 (8) 3.2 健身俱乐部数量 (8) 3.3 健身俱乐部会员数 (9) 3.4 健身器材收入规模 (9) 3.5 中国健身产业规模 (10) 第四部分国内企业竞争格局 (11) 4.1 信隆健康 (11) 4.2 舒华体育 (12) 4.3 威尔仕 (12) 4.4 一兆韦德 (12) 4.5 浩沙健身 (12) 第五部分未来发展趋势 (14) 5.1 健身产业规模预测 (14)

5.2 龙头企业市场份额提高 (14) 5.3 智能化健身趋势兴起 (14)

一、健身产业概况 随着我国人民健身意识的进一步提升和健身房商业模式的进一步成熟,我国健身产业发展迅速。2016年体育总局与国务院分别颁布《体育发展十三五规划》、《全民健身计划(2016-2020)》,提出到2020年,每周参加1次及以上体育锻炼的人数达7亿,经常参加体育锻炼的人数达4.35亿,体育消费总规模达1.5万亿元等,目标是把全民健身打造成国家名片。 (一)健身产业定义及产业链 健身除了体育含括的项目之外,还有很多内容,例如,写字、唱歌、做家务、瑜伽等。健身大致分为器械锻炼和非器械锻炼。狭义的健身是指以健身俱乐部/工作室为主要场所,并且通常借助体育器械进行锻炼的活动。 健身产业上游涉及健身器械、教练培训等,中游主要是各类健身服务,下游则是各类健身服装/装备等。 (二)健身产业主要政策汇总 随着我国经济社会的快速发展,越来越多的人注重运动健身。同时我国政府高度重视体育活动在增强体质、提高健康水平中的重要作用。 1995年,国务院颁布实施《全民健身计划纲要》; 2007年,国务院下发《关于加强青少年体育增强青少年体质的意见》; 2014年,国务院下发《关于加快发展体育产业促进体育消费的若干意见》; 2016年6月,为促进健身产业发展、增强全民身体素质,国务院印发《全民健身计划(2016—2020年)》。对发展群众体育活动、倡导全民健身新时尚、推进健康中国建设做出了明确部署; 2017年8月11日,针对中国居民参加体育健身活动状况实际,国家体育总局发布了《全民健身指南》。

(完整版)06059心理学研究方法复习题

心理学研究方法复习题 一、重要概念 1、研究的效度:即有效性,它是指测量工具或手段能够准确测出所需测量的心理特质的程度。 2、内部一致性信度:主要反映的是测验内部题目之间的信度关系,考察测验的各个题目是否测量了 相同的内容或特质。内部一致性信度又分为分半信度和同质性信度。 3、外推效度:实验研究的结果能被概括到实验情景条件以外的程度。 4、半结构访谈:半结构化访谈指按照一个粗线条式的访谈提纲而进行的非正式的访谈。该方法对访谈 对象的条件、所要询问的问题等只有一个粗略的基本要求,访谈者可以根据访谈时的实际情况灵活地做出必要的调整,至于提问的方式和顺序、访谈对象回答的方式、访谈记录的方式和访谈的时间、地点等没有具体的要求,由访谈者根据根据情况灵活处理。 5、混淆变量:如果应该控制的变量没有控制好,那么,它就会造成因变量的变化,这时,研究者选定 的自变量与一些没有控制好的因素共同造成了因变量的变化,这种情况就称为自变量混 淆。 6、被试内设计:每个被试接受接受自变量的所有情况的处理。 7、客观性原则:是指研究者对待客观事实要采取实事求是的态度,既不能歪曲事实,也不能主观臆断。 8、统计回归效应:在第一次测试较差的学生可能在第二次测试时表现好些,而第一次表现好的学生则 可能相反,这种情形称为统计回归效应.。统计回归效应的真正原因就是偶然因素变化导致的随机误差,以及仅仅根据一次测试结果划分高分组和低分组。 9、主体引发变量:研究对象本身的特征在研究过程中所引起的变量。 11、研究的信度:测量结果的稳定性程度。换句话说,若能用同一测量工具反复测量某人的同一种心理特质,则其多次测量的结果间的一致性程度叫信度,有时也叫测量的可靠性。 12、分层随机抽样:它是先将总体各单位按一定标准分成各种类型(或层);然后根据各类型单位数与总体单位数的比例,确定从各类型中抽取样本单位的数量;最后,按照随机原则从各类型中抽取样本。13、研究的生态效度:生态效度就是实验的外部效度,指实验结果能够推论到样本的总体和其他同类现象中去的程度,即试验结果的普遍代表性和适用性。 14、结构访谈:又称为标准化访谈,指按照统一的设计要求,按照有一定结构的问卷而进行的比较正式的访谈,结构访谈对选择访谈对象的标准和方法、访谈中提出的问题、提问的方式和顺序、访谈者回答的方式等都有统一的要求。 15、被试间设计:要求每个被试者(组)只接受一个自变量处理,对另一被试者(组)进行另一种处理。

我国健身器材行业发展概况

我国健身器材行业发展概况 (一)行业概述 1、市场容量与增长趋势 (1)体育产业迎来市场化发展的历史机遇 伴随我国经济发展进入新常态以及产业结构转型,体育产业作为新的经济增长动力之一对于国民经济的拉动作用得以凸显。国家也密集出台一系列的产业支持政策,推动体育产业的快速健康发展。 国家统计局数据显示,2012 -2015 年,我国体育产业总规模分别为9,500 亿元、11000 亿元、13575 亿元和17,107 亿元,各年实现增加值3,136 亿元、3,563 亿元、4,041 亿元和5,494 亿元,占当年GDP 比例分别为0.60%、0.63%、0.64% 和0.8%,体育产业规模年均增长率达到了22%。 从全球体育产业占GDP 的比重看,以美国、法国等为代表的体育强国,其体育产业占GDP 的比重均达到2.5%以上,全球平均水平亦达到了 2.1%,而我国该比例仅为0.8%左右,仍然具有较大的发展空间。 根据《体育发展“十三五”规划》、《体育产业发展“十三五”规划》以及国务院发布的《国务院关于加快发展体育产业促进体育消费的若干意见》,预计到2020 年,我国体育产业总规模将超过3 万亿元,产业增加值占GDP 的比重将达到 1.0%。2025 年,体育产业总规模将超过 5 万亿元,成为推动经济社会持续发展的重要力量。在国家产业政策的引导和支持下,我国体育产业迎来市场化发展的历史机遇。 (2)体育用品行业规模占体育产业整体规模一半以上 根据46 号文以及《国家体育产业统计分类》(2015 年)的界定,我国的体育产业主要包括产品制造和服务提供两大类,前者包括健身器材、运动服装、运动鞋等体育用品的制造,后者包括竞赛表演、健身休闲活动、场馆服务、中介培训、体育培训等。其中,体育用品行业是我国体育产业中发展较早,也是目前发展较为成熟的细分行业之一。

心理学研究方法复习资料

心理学研究方法复习资料 考试题型概念解释(5*4=20)、简答(3*8=24)、案例分析(4*10=40)、研究设计(1*16=16)。本资料包括老师提到的概念解释和简答,案例分析和研究设计来自于课本挑战性问题。本资料仅供参考。 名词解释: 1、研究假设(Hypothesis):是由理论所推衍出来的更为具体的预测,是针对研究问题提出的有待验证的、暂时性的、推测性的解答。 2、实验混淆(confounding):如果我们所设定的自变量其发生量的改变时,另一个已知或潜在的变量亦随之有量的改变,则这两个变量的作用就发生了相互混淆。 3、观察者间信度(interobserver reliability):指不同的独立的观察者针对同一观察所做记录的一致性程度。 4、便利抽样(convenience sampling):主要根据获得调查对象的容易程度和调查对象参加调查的意愿所进行的。便利抽样是所有取样技术中花费最小的,抽样单元是可以接近的、容易测量的,并且是可以合作的。便利取样是非随机抽样,所选取的样本缺乏代表性。 5、假相关(spurious relationship):如果两个变量间的关系可以通过第三个变量进行解释,那么这种关系就被称之为“假相关”。 6、操作定义(operational definition):指仅根据可观察的程度来解释概念,这个观察程度是来产生和测量概念的。即从具体的行为、特征、指标上对变量的操作进行描述,将抽象的概念转换成可观测、可检验的项目。 7、外部效度(external validity):是指研究结果能够一般化和普遍化到样本来自的总体和其他条件、时间、和背景中去的程度。 8、内部效度(internal validity):指实验中的自标量与因变量之间因果关系的明确程度。如果在试验中:当自变量发生变化时因变量随之发生改变,而自变量恒定时因变量则不发生变化,那么这个实验就具有较高的内部效度。内部效度与无关变量的控制有关。 9、交互作用(interaction effect):是指一个因子的效应依赖于另一个因子的不同水平,当一个自变量的效应在另一自变量的不同水平上存在差异时,就表示出现了交互作用。10、知情同意(informed consent):是被试在充分理解研究性质、不参加的后果、影响参加意愿的所有因素后,明确表达参加研究的意愿。 11、统计效力(power):指研究者在进行统计检验时,正确拒绝虚无假设的可能性,换言之,就是当存在真正效应时检验发现效应的概率。统计效力受到统计显著性水平、处理效应大小

运动健身器材行业分析报告

一、运动健身器材行业的概况 运动健身器材是竞技体育比赛和健身锻炼所使用的各种器械、装备及用品的总称。 运动健身器材主要有3种分类方法:依据体育运动的项目分类这是将所有与同一运动项目有关的器材和装备等归为一类的方法,如田径器材、举重器材、冰雪器材等。依据体育器材的性质分类一般可分为指定器材、自备器材、场地器材和其他器材等4类。依据体育器材的用途分类分为竞技体育器材、国防军事体育器材、中国民间体育器材、健身健美体疗康复器材、儿童体育游艺器材、伤残人竞技器材、辅助性器材等。 随着生活水平的提高,人们越来越注意身体健康和体型的美丽,为此在健美方面的投资也日益增加。未来欧洲、亚洲和拉丁美洲将是市场的主要增长点,逐渐富裕的人群将会提高自己对健康生活方式的追求,并将成为健身器材的主要消费者。 城市居民对体育用品的消费已经从低档为主向中高档方向发展,农村居民尤其是已经进入小康生活标准的农村地区,对中低档体育用品的消费也将逐步形成新的需求。随着农村地区收入的增加将使健身市场的潜力变成现实,中国健身器材市场的年销售额逐年增长,中国人对健康的关注正在形成个黄金市场。 二、运动健身器材所处生命周期位置 根据生命周期理论的销售增长率划分法:销售增长率大于

10%为成长期,0.1%-10%为投入期或成熟期,小于0则为衰退期,根据该理论我们对运动健身器材产业行业的发展做出如下推断: 行业处于成长期时,顾客成群增加,消费者开始注重产品质量和可靠性,企业开始竞争前扩张,准备积极应对竞争。已进入行业的企业拥有较高获利能力,但由于行业竞争者的进入,产品价格开始下降。运动健身行业正处于行业生命周期的成长阶段,是已进入企业扩张市场、抢占市场份额的最好时机。 三、运动健身器材行业的SWOT分析 S(竞争优势):中国有广大的市场,便宜的人力资源和原材料市场,及政府的各种优惠政策,中国处于高速发展的

案例分析组织结构

案例分析(组织结构) 案例1:上海家家保健品有限公司的组织结构是否需要调整 上海家家保健品有限公司是一家成立于1994年、以生产与销售保健品为主业的企业。 1994年公司刚成立时,生产和销售的产品只有一个,即家家1号。产品推出刚两年,家家1号就已经在上海及周边市场站稳了脚跟。1996年6月,家家公司决定乘胜追击,开拓以北京为中心的华北市场和以广州为中心的华南市场。具体的做法包括,先后成立了华东、华北和华南三个销售分公司,分别负责上海、北京、广州及其周边市场的市场拓展业务,为了配合分公司的成立,上海家家保健品有限公司投入巨资,在三个地区开展各种促销活动,并辅以大量的广告投入。 1997年初,公司又推出了家家2号产品。家家2号与家家1号一样,是一个深受消费者喜爱的、老少咸宜的保健产品。 1999年之后,公司新的保健系列产品不断地推向市场。其中,既有面向青少年的保健系列产品家家青春1号、家家青春2号,又有面向妇女的家家娇丽1号、家家娇丽2号、家家娇丽3号,也有面向中老年顾客的家家青松1号、家家青松2号产品,还有一些面向特殊消费群体的保健产品,如面向糖尿病人的家家唐人1号,等等,1999年至2001年底,公司先后共推出了12个新产品。 面对新品的不断推出,各个销售分公司一开始的态度还是比较积极的,出于对新品的期望,分公司下属的销售网点总是将新上市的产品放在销售柜台比较醒目的位置。随着新品的不断上市,出现了有一些新产品市场表现平平的情况,并且市场销售的数据似乎也显示出顾客还是比较喜欢家家1号、家家2号等早期推出的产品,如公司保健品业务中,仅家家1号、家家2号两个产品就占到了公司全部保健品销售收人的70%左右。 随着时间的推移,分公司对越来越多的新品表现得越来越不感兴趣。很多的新品上市之后,往往被放在并不显眼的位置上销售,有些品种甚至没放一些日子,就被悄悄地撤下了柜。 2002年初,上海总部己明显地感到这一问题的严重性和急迫性。在春节后的第一次由中高层管理者参加的会议上,公司专门就这一问题进行讨论。

心理学分析研究方法纯手打整理重点

变量:属性地逻辑组合,通常用定义来解释或限定.自变量—实验条件(操控); 调节变量:所要解释地是自变量在何种条件下会影响因变量,也就是说,当自变量与因变量间地相关大小或正负方向受到其它因素地影响时,这个其它因素就是该自变量与因变量之间地调节变量.中介变量:不可观察地,而在理论上又是影响所观察现象地因素 因变量—所需测定地特征或方面(可测量)额外变量—对因变量有一定影响,但与该次实验研究目地无关地变量(控制:屏蔽、中和))随机误差:可见误差.偶然地、随机地无关变量引起,较难控制,无规律可循;影响信效度.系统误差:常定误差.常定地、有规律地无关变量引起,其方向和大小地变化是恒定而有规律地.影响效度. 无关变量地控制:、消除法排除或隔离无关变量对实验效果地影响.标准化指导语、双盲程序、内隐测量、恒定法实验期间,尽量使得所有地实验条件、实验处理、实验者及被试都保持恒定.研究在同一时间、地点举行,程序、拉丁方设计、平衡法设置使得无关变量对所有地实验组和对照组地影响都均等、统计控制:一种事后补救,统计隔离无关变量地影响,协方差分析,偏相关.操作定义:描述所界定地变量或事项如何测量,包括:工具,方法,程序.将变量或指标地抽象称述转化为具体地操作称述地过程. 、简单随机取样(不作任何预处理,适用范围:对总体中各类比例不了解或来不及了解地情况)) 抽彩法(充分搅匀))随机表法(随

机进入))随机函数法(种子问题) 、分层随机取样:对总体进行预处理,分成若干层次后然后独立地从每一层次中选取样本. ()比例分层取样:按每一层次个体数量占总体中地比例决定该层次样本地数量. ()非比例分层取样:每层次中样本量不按该层次在总体中地比例抽取,而是根据研究者对不同层次个体地研究兴趣和侧重程度确定比例地大小. 、内部效度(逻辑度与额外因素影响度):研究中自变量与因变量因果关系地明确程度. 影响因素:成熟因素、历史因素、被试选择上地差异、 研究被试缺失产生地效应、前测地影响、实验程序不一致或处理扩散产生地效应、统计回归效应、研究条件与因素间地交互作用.、外部效度:可细分为总体效度和生态效度.研究结果能一般化或普遍化到样本来自地总体(总体效度)和其它变量条件、时间和背景(生态效度)中去地程度,即研究结果地普遍代表性和适用性.影响因素:.取样代表性;.变量地操作方式不准,致使研究地可重复性差;.研究对被试地反作用;.事前测量与实验处理地相互影响;.多种处理地干扰;.实验者效应.研究地人为性;.被试选择与实验处理地交互作用.提高方法:严格控制;做好取样工作,包括被试取样、实验情境、研究工具、

相关文档
最新文档