android camera recording[转]

转自:http://leave001.blog.163.com/blog/static/16269129320101016104644615/

配置文件:/etc/media_profiles.xml 参考: Android平台上从Camera的jpegquality菜单研究JNI接口(三)

Recording:
VideoCamera::startVideoRecording(), VideoCamera.java
  MediaRecorder::start(), MediaRecorder.java
    android_media_MediaRecorder_start(), android_media_MediaRecorder.cpp
      MediaRecorder::start(), mediarecorder.cpp

MediaRecorderClient::start(), MediaRecorderClient.cpp
  PVMediaRecorder::stop(), PVMediaRecorder.cpp /* 呼入OpenCore */
    PVMediaRecorder::doStart()
      AuthorDriver::handleStart()
        PVAuthorEngine::Start(), pvauthorengine.cpp
          PVAuthorEngine::DoStart()

AndroidCameraInput继承了PvmiMIOControl,因此PVAuthorEngine::DoStart()最终会呼入:
AndroidCameraInput::DoStart(), android_camera_input.cpp
  mCamera->setListener(mListener); /* 设置listener。mListener为AndroidCameraInput构造函数中创建的AndroidCameraInputListener对象 */
  mCamera->startRecording();
    Camera::startRecording(), Camera.cpp
      c->startRecording(); // sp <ICamera> c = mCamera, 为connect时创建的CameraService::Client对象

CameraService:
CameraService::Client::startRecording()
  mHardware->enableMsgType(CAMERA_MSG_VIDEO_FRAME); /* enable CAMERA_MSG_VIDEO_FRAME消息 */
  startCameraMode(CAMERA_RECORDING_MODE);
    startRecordingMode();
      mHardware->startRecording(recordingCallback, mCameraService.get()); /* 传入recordingCallback */
        mRecordingCallback = cb; /* 保存cb到mRecordingCallback */

数据流向:
CameraService:
CameraHardware::previewThread()
  mDataCb(CAMERA_MSG_VIDEO_FRAME, mBuffers[index], mCallbackCookie);
    c->dataCallbackTimestamp(timestamp, msgType, dataPtr), CameraService.cpp
      Camera::dataCallbackTimestamp()
        listener->postDataTimestamp(timestamp, msgType, dataPtr);

listener为AndroidCameraInputListener对象
  listener->postDataTimestamp(timestamp, msgType, dataPtr); /* listener在AndroidCameraInput::DoStart()中设置 */
    AndroidCameraInputListener::postDataTimestamp(), android_camera_input.cpp
      mCameraInput->postWriteAsync(timestamp, dataPtr);
        AndroidCameraInput::postWriteAsync()
          iFrameQueue.push_back(data);
            AndroidCameraInput::Run()

              iPeer->writeAsync(PVMI_MEDIAXFER_FMT_TYPE_DATA, 0, ptr,...), /* 将数据写入到iPeer中 *

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值