mirror of
https://github.com/openharmony/distributed_camera.git
synced 2026-07-19 16:43:57 -04:00
@@ -25,13 +25,17 @@
|
||||
namespace OHOS {
|
||||
namespace DistributedHardware {
|
||||
constexpr uint64_t DCAMERA_HITRACE_LABEL = HITRACE_TAG_DISTRIBUTED_CAMERA;
|
||||
const std::string DCAMERA_OPEN_CHANNEL_START = "DCAMERA_OPEN_CHANNEL_START";
|
||||
const std::string DCAMERA_INPUT_OPEN_START = "DCAMERA_INPUT_OPEN_START";
|
||||
const std::string DCAMERA_CAPTURE_FIRST_FRAME = "DCAMERA_CAPTURE_GET_FIRST_FRAME";
|
||||
const std::string DCAMERA_OPEN_CHANNEL_CONTROL = "DCAMERA_OPEN_CHANNEL_CONTROL";
|
||||
const std::string DCAMERA_OPEN_DATA_CONTINUE = "DCAMERA_OPEN_DATA_CONTINUE";
|
||||
const std::string DCAMERA_OPEN_DATA_SNAPSHOT = "DCAMERA_OPEN_DATA_SNAPSHOT";
|
||||
const std::string DCAMERA_CONTINUE_FIRST_FRAME = "DCAMERA_CONTINUE_FIRST_FRAME";
|
||||
const std::string DCAMERA_SNAPSHOT_FIRST_FRAME = "DCAMERA_SNAPSHOT_FIRST_FRAME";
|
||||
enum DcameraTaskId {
|
||||
DCAMERA_OPEN_CHANNEL_TASKID = 0,
|
||||
DCAMERA_INPUT_OPEN_TASKID = 1,
|
||||
DCAMERA_CAPTURE_FIRST_FRAM_TASKID = 2,
|
||||
DCAMERA_OPEN_DATA_CONTINUE_TASKID = 1,
|
||||
DCAMERA_OPEN_DATA_SNAPSHOT_TASKID = 2,
|
||||
DCAMERA_CONTINUE_FIRST_FRAME_TASKID = 3,
|
||||
DCAMERA_SNAPSHOT_FIRST_FRAME_TASKID = 4,
|
||||
};
|
||||
|
||||
void DcameraStartAsyncTrace(const std::string& str, int32_t taskId);
|
||||
|
||||
@@ -75,6 +75,7 @@ private:
|
||||
void NotifyRegisterResult(DCAMERA_EVENT eventType, DCameraSourceEvent& event, int32_t result);
|
||||
void NotifyUnregisterResult(DCAMERA_EVENT eventType, DCameraSourceEvent& event, int32_t result);
|
||||
void NotifyHalResult(DCAMERA_EVENT eventType, DCameraSourceEvent& event, int32_t result);
|
||||
void HitraceAndHisyseventImpl(std::vector<std::shared_ptr<DCCaptureInfo>>& captureInfos);
|
||||
|
||||
private:
|
||||
std::string devId_;
|
||||
|
||||
+22
-10
@@ -406,7 +406,7 @@ int32_t DCameraSourceDev::ExecuteReleaseAllStreams()
|
||||
|
||||
int32_t DCameraSourceDev::ExecuteStartCapture(std::vector<std::shared_ptr<DCCaptureInfo>>& captureInfos)
|
||||
{
|
||||
DcameraStartAsyncTrace(DCAMERA_CAPTURE_FIRST_FRAME, DCAMERA_CAPTURE_FIRST_FRAM_TASKID);
|
||||
HitraceAndHisyseventImpl(captureInfos);
|
||||
DHLOGI("DCameraSourceDev Execute StartCapture devId %s dhId %s", GetAnonyString(devId_).c_str(),
|
||||
GetAnonyString(dhId_).c_str());
|
||||
int32_t ret = input_->StartCapture(captureInfos);
|
||||
@@ -429,15 +429,6 @@ int32_t DCameraSourceDev::ExecuteStartCapture(std::vector<std::shared_ptr<DCCapt
|
||||
GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str(), (*iter)->captureSettings_.size(),
|
||||
capture->width_, capture->height_, capture->format_, capture->isCapture_ ? 1 : 0, capture->encodeType_,
|
||||
capture->streamType_);
|
||||
EventCaptureInfo eventCaptureInfo = {
|
||||
.width_ = capture->width_,
|
||||
.height_ = capture->height_,
|
||||
.format_ = capture->format_,
|
||||
.isCapture_ = capture->isCapture_,
|
||||
.encodeType_ = capture->encodeType_,
|
||||
.type_ = capture->streamType_,
|
||||
};
|
||||
ReportStartCaptureEvent(START_CAPTURE_EVENT, eventCaptureInfo, "execute start capture event.");
|
||||
for (auto settingIter = (*iter)->captureSettings_.begin(); settingIter != (*iter)->captureSettings_.end();
|
||||
settingIter++) {
|
||||
std::shared_ptr<DCameraSettings> setting = std::make_shared<DCameraSettings>();
|
||||
@@ -456,6 +447,27 @@ int32_t DCameraSourceDev::ExecuteStartCapture(std::vector<std::shared_ptr<DCCapt
|
||||
return ret;
|
||||
}
|
||||
|
||||
void DCameraSourceDev::HitraceAndHisyseventImpl(std::vector<std::shared_ptr<DCCaptureInfo>>& captureInfos)
|
||||
{
|
||||
for (auto iter = captureInfos.begin(); iter != captureInfos.end(); iter++) {
|
||||
std::shared_ptr<DCCaptureInfo> capture = *iter;
|
||||
EventCaptureInfo eventCaptureInfo = {
|
||||
.width_ = capture->width_,
|
||||
.height_ = capture->height_,
|
||||
.format_ = capture->format_,
|
||||
.isCapture_ = capture->isCapture_,
|
||||
.encodeType_ = capture->encodeType_,
|
||||
.type_ = capture->type_,
|
||||
};
|
||||
ReportStartCaptureEvent(START_CAPTURE_EVENT, eventCaptureInfo, "execute start capture event.");
|
||||
if (capture->type_ == CONTINUOUS_FRAME && capture->isCapture_ == true) {
|
||||
DcameraStartAsyncTrace(DCAMERA_CONTINUE_FIRST_FRAME, DCAMERA_CONTINUE_FIRST_FRAME_TASKID);
|
||||
} else if (capture->type_ == SNAPSHOT_FRAME && capture->isCapture_ == true) {
|
||||
DcameraStartAsyncTrace(DCAMERA_SNAPSHOT_FIRST_FRAME, DCAMERA_SNAPSHOT_FIRST_FRAME_TASKID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int32_t DCameraSourceDev::ExecuteStopCapture(std::vector<int>& streamIds, bool& isAllStop)
|
||||
{
|
||||
DHLOGI("DCameraSourceDev Execute StopCapture devId %s dhId %s", GetAnonyString(devId_).c_str(),
|
||||
|
||||
+2
-2
@@ -265,7 +265,7 @@ int32_t DCameraSourceController::GetCameraInfo(std::shared_ptr<DCameraInfo>& cam
|
||||
|
||||
int32_t DCameraSourceController::OpenChannel(std::shared_ptr<DCameraOpenInfo>& openInfo)
|
||||
{
|
||||
DcameraStartAsyncTrace(DCAMERA_OPEN_CHANNEL_START, DCAMERA_OPEN_CHANNEL_TASKID);
|
||||
DcameraStartAsyncTrace(DCAMERA_OPEN_CHANNEL_CONTROL, DCAMERA_OPEN_CHANNEL_TASKID);
|
||||
if (indexs_.size() > DCAMERA_MAX_NUM) {
|
||||
DHLOGE("DCameraSourceController OpenChannel not support operate %d camera", indexs_.size());
|
||||
return DCAMERA_BAD_OPERATE;
|
||||
@@ -383,7 +383,7 @@ void DCameraSourceController::OnSessionState(int32_t state)
|
||||
channelState_ = state;
|
||||
switch (state) {
|
||||
case DCAMERA_CHANNEL_STATE_CONNECTED: {
|
||||
DcameraFinishAsyncTrace(DCAMERA_OPEN_CHANNEL_START, DCAMERA_OPEN_CHANNEL_TASKID);
|
||||
DcameraFinishAsyncTrace(DCAMERA_OPEN_CHANNEL_CONTROL, DCAMERA_OPEN_CHANNEL_TASKID);
|
||||
stateMachine_->UpdateState(DCAMERA_STATE_OPENED);
|
||||
std::shared_ptr<DCameraEvent> camEvent = std::make_shared<DCameraEvent>();
|
||||
camEvent->eventType_ = DCAMERA_MESSAGE;
|
||||
|
||||
+9
@@ -16,12 +16,15 @@
|
||||
#include "dcamera_source_data_process.h"
|
||||
|
||||
#include "anonymous_string.h"
|
||||
#include "dcamera_hitrace_adapter.h"
|
||||
#include "distributed_camera_constants.h"
|
||||
#include "distributed_camera_errno.h"
|
||||
#include "distributed_hardware_log.h"
|
||||
|
||||
namespace OHOS {
|
||||
namespace DistributedHardware {
|
||||
constexpr int32_t REVEIVE_FIRST_STREAM = 1;
|
||||
int32_t g_countStream = 0;
|
||||
DCameraSourceDataProcess::DCameraSourceDataProcess(std::string devId, std::string dhId, DCStreamType streamType)
|
||||
: devId_(devId), dhId_(dhId), streamType_(streamType)
|
||||
{
|
||||
@@ -39,6 +42,12 @@ DCameraSourceDataProcess::~DCameraSourceDataProcess()
|
||||
|
||||
int32_t DCameraSourceDataProcess::FeedStream(std::vector<std::shared_ptr<DataBuffer>>& buffers)
|
||||
{
|
||||
g_countStream++;
|
||||
if (g_countStream == REVEIVE_FIRST_STREAM && streamType_ == CONTINUOUS_FRAME) {
|
||||
DcameraFinishAsyncTrace(DCAMERA_CONTINUE_FIRST_FRAME, DCAMERA_CONTINUE_FIRST_FRAME_TASKID);
|
||||
} else if (g_countStream == REVEIVE_FIRST_STREAM && streamType_ == SNAPSHOT_FRAME) {
|
||||
DcameraFinishAsyncTrace(DCAMERA_SNAPSHOT_FIRST_FRAME, DCAMERA_SNAPSHOT_FIRST_FRAME_TASKID);
|
||||
}
|
||||
if (buffers.size() > DCAMERA_MAX_NUM) {
|
||||
DHLOGI("DCameraSourceDataProcess FeedStream devId %s dhId %s size: %d over flow",
|
||||
GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str(), buffers.size());
|
||||
|
||||
+11
-2
@@ -180,12 +180,12 @@ int32_t DCameraSourceInput::StopCapture(std::vector<int>& streamIds, bool& isAll
|
||||
|
||||
int32_t DCameraSourceInput::OpenChannel(std::vector<DCameraIndex>& indexs)
|
||||
{
|
||||
DcameraStartAsyncTrace(DCAMERA_INPUT_OPEN_START, DCAMERA_INPUT_OPEN_TASKID);
|
||||
DHLOGI("DCameraSourceInput OpenChannel devId %s dhId %s continue state: %d, snapshot state: %d",
|
||||
GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str(), channelState_[CONTINUOUS_FRAME],
|
||||
channelState_[SNAPSHOT_FRAME]);
|
||||
int32_t ret = DCAMERA_OK;
|
||||
if (channelState_[CONTINUOUS_FRAME] == DCAMERA_CHANNEL_STATE_DISCONNECTED) {
|
||||
DcameraStartAsyncTrace(DCAMERA_OPEN_DATA_CONTINUE, DCAMERA_OPEN_DATA_CONTINUE_TASKID);
|
||||
ret = channels_[CONTINUOUS_FRAME]->CreateSession(indexs, CONTINUE_SESSION_FLAG, DCAMERA_SESSION_MODE_VIDEO,
|
||||
listeners_[CONTINUOUS_FRAME]);
|
||||
if (ret != DCAMERA_OK) {
|
||||
@@ -203,6 +203,7 @@ int32_t DCameraSourceInput::OpenChannel(std::vector<DCameraIndex>& indexs)
|
||||
}
|
||||
|
||||
if (channelState_[SNAPSHOT_FRAME] == DCAMERA_CHANNEL_STATE_DISCONNECTED) {
|
||||
DcameraStartAsyncTrace(DCAMERA_OPEN_DATA_SNAPSHOT, DCAMERA_OPEN_DATA_SNAPSHOT_TASKID);
|
||||
ret = channels_[SNAPSHOT_FRAME]->CreateSession(indexs, SNAP_SHOT_SESSION_FLAG, DCAMERA_SESSION_MODE_JPEG,
|
||||
listeners_[SNAPSHOT_FRAME]);
|
||||
if (ret != DCAMERA_OK) {
|
||||
@@ -325,8 +326,16 @@ void DCameraSourceInput::OnSessionState(DCStreamType streamType, int32_t state)
|
||||
eventBus_->PostEvent<DCameraSourceEvent>(srcEvent);
|
||||
break;
|
||||
}
|
||||
case DCAMERA_CHANNEL_STATE_CONNECTED: {
|
||||
if (streamType == CONTINUOUS_FRAME) {
|
||||
DcameraFinishAsyncTrace(DCAMERA_OPEN_DATA_CONTINUE, DCAMERA_OPEN_DATA_CONTINUE_TASKID);
|
||||
} else if (streamType == SNAPSHOT_FRAME) {
|
||||
DcameraFinishAsyncTrace(DCAMERA_OPEN_DATA_SNAPSHOT, DCAMERA_OPEN_DATA_SNAPSHOT_TASKID);
|
||||
}
|
||||
DHLOGI("DCameraSourceInput OnSessionState state %d", state);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
DcameraFinishAsyncTrace(DCAMERA_INPUT_OPEN_START, DCAMERA_INPUT_OPEN_TASKID);
|
||||
DHLOGI("DCameraSourceInput OnSessionState state %d", state);
|
||||
break;
|
||||
}
|
||||
|
||||
-1
@@ -176,7 +176,6 @@ void DCameraStreamDataProcessProducer::LooperSnapShot()
|
||||
GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str(), streamType_, streamId_, state_);
|
||||
continue;
|
||||
}
|
||||
DcameraFinishAsyncTrace(DCAMERA_CAPTURE_FIRST_FRAME, DCAMERA_CAPTURE_FIRST_FRAM_TASKID);
|
||||
int32_t ret = FeedStreamToDriver(dhBase, buffer);
|
||||
if (ret != DCAMERA_OK) {
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(DCAMERA_PRODUCER_RETRY_SLEEP_MS));
|
||||
|
||||
Reference in New Issue
Block a user