mirror of
https://github.com/openharmony/ace_ace_engine.git
synced 2026-07-19 14:43:36 -04:00
add the media service
Signed-off-by: sharpshooter_t <taojun13@huawei.com> Change-Id: I2632711ea9ae63e3123989052b10afd0a32ae7ac
This commit is contained in:
@@ -26,7 +26,8 @@ config("standard_camera_config") {
|
||||
"//foundation/multimedia/camera_standard/frameworks/include",
|
||||
"//foundation/multimedia/camera_standard/frameworks/innerkitsimpl/camera/include",
|
||||
"//foundation/multimedia/camera_standard/interfaces/innerkits/native/include",
|
||||
"//foundation/multimedia/media_standard/interfaces/kits/native/include",
|
||||
|
||||
"//foundation/multimedia/media_standard/interfaces/innerkits/native/media/include",
|
||||
"//utils/native/base/include",
|
||||
]
|
||||
}
|
||||
@@ -50,7 +51,7 @@ build_component("camera") {
|
||||
|
||||
external_deps = [
|
||||
"ipc:ipc_core",
|
||||
"multimedia_media_standard:recorder",
|
||||
"multimedia_media_standard:media_client",
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -197,87 +197,75 @@ void CameraCallback::OnCreateFailed(const std::string cameraId, int32_t errorCod
|
||||
LOGE("CameraCallback: OnCreate Failed!");
|
||||
}
|
||||
|
||||
Media::Recorder *CameraCallback::CreateRecorder()
|
||||
std::shared_ptr<Media::Recorder> CameraCallback::CreateRecorder()
|
||||
{
|
||||
LOGI("Camera CreateRecorder start.");
|
||||
int ret = 0;
|
||||
int32_t channelCount = 1;
|
||||
AudioCodecFormat audioFormat = AAC_LC;
|
||||
AudioSourceType inputSource = AUDIO_MIC;
|
||||
Media::AudioCodecFormat audioFormat = Media::AAC_LC;
|
||||
Media::AudioSourceType inputSource = Media::AUDIO_MIC;
|
||||
int32_t audioEncodingBitRate = SAMPLE_RATE;
|
||||
Media::VideoSourceType source = Media::VIDEO_SOURCE_SURFACE_ES;
|
||||
int32_t sourceId = 0;
|
||||
int32_t audioSourceId = 0;
|
||||
int32_t width = DEFAULT_WIDTH;
|
||||
int32_t height = DEFAULT_HEIGHT;
|
||||
VideoCodecFormat encoder = HEVC;
|
||||
Media::VideoCodecFormat encoder = Media::HEVC;
|
||||
|
||||
Media::Recorder *recorder = new Media::Recorder();
|
||||
if ((ret = recorder->SetVideoSource(source, sourceId)) != Media::SUCCESS) {
|
||||
std::shared_ptr<Media::Recorder> recorder = Media::RecorderFactory::CreateRecorder();
|
||||
if ((ret = recorder->SetVideoSource(source, sourceId)) != ERR_OK) {
|
||||
LOGE("SetVideoSource failed. ret= %{private}d.", ret);
|
||||
delete recorder;
|
||||
return nullptr;
|
||||
}
|
||||
if ((ret = recorder->SetVideoEncoder(sourceId, encoder)) != Media::SUCCESS) {
|
||||
LOGE("SetVideoEncoder failed. ret= %{private}d.", ret);
|
||||
delete recorder;
|
||||
return nullptr;
|
||||
}
|
||||
if ((ret = recorder->SetOutputFormat(Media::FORMAT_MPEG_4)) != Media::SUCCESS) {
|
||||
LOGE("SetOutputFormat failed. ret= %{private}d.", ret);
|
||||
delete recorder;
|
||||
return nullptr;
|
||||
}
|
||||
if ((ret = recorder->SetVideoSize(sourceId, width, height)) != Media::SUCCESS) {
|
||||
LOGE("SetVideoSize failed. ret= %{private}d.", ret);
|
||||
delete recorder;
|
||||
return nullptr;
|
||||
}
|
||||
if ((ret = recorder->SetVideoFrameRate(sourceId, FRAME_RATE)) != Media::SUCCESS) {
|
||||
LOGE("SetVideoFrameRate failed. ret= %{private}d.", ret);
|
||||
delete recorder;
|
||||
return nullptr;
|
||||
}
|
||||
if ((ret = recorder->SetVideoEncodingBitRate(sourceId, RATE)) != Media::SUCCESS) {
|
||||
LOGE("SetVideoEncodingBitRate failed. ret= %{private}d.", ret);
|
||||
delete recorder;
|
||||
return nullptr;
|
||||
}
|
||||
if ((ret = recorder->SetCaptureRate(sourceId, FPS)) != Media::SUCCESS) {
|
||||
LOGE("SetCaptureRate failed. ret= %{private}d.", ret);
|
||||
delete recorder;
|
||||
return nullptr;
|
||||
}
|
||||
if ((ret = recorder->SetAudioSource(inputSource, audioSourceId)) != Media::SUCCESS) {
|
||||
if ((ret = recorder->SetAudioSource(inputSource, audioSourceId)) != ERR_OK) {
|
||||
LOGE("SetAudioSource failed. ret= %{private}d.", ret);
|
||||
delete recorder;
|
||||
return nullptr;
|
||||
}
|
||||
if ((ret = recorder->SetAudioEncoder(audioSourceId, audioFormat)) != Media::SUCCESS) {
|
||||
if ((ret = recorder->SetOutputFormat(Media::FORMAT_MPEG_4)) != ERR_OK) {
|
||||
LOGE("SetOutputFormat failed. ret= %{private}d.", ret);
|
||||
return nullptr;
|
||||
}
|
||||
if ((ret = recorder->SetVideoEncoder(sourceId, encoder)) != ERR_OK) {
|
||||
LOGE("SetVideoEncoder failed. ret= %{private}d.", ret);
|
||||
return nullptr;
|
||||
}
|
||||
if ((ret = recorder->SetVideoSize(sourceId, width, height)) != ERR_OK) {
|
||||
LOGE("SetVideoSize failed. ret= %{private}d.", ret);
|
||||
return nullptr;
|
||||
}
|
||||
if ((ret = recorder->SetVideoFrameRate(sourceId, FRAME_RATE)) != ERR_OK) {
|
||||
LOGE("SetVideoFrameRate failed. ret= %{private}d.", ret);
|
||||
return nullptr;
|
||||
}
|
||||
if ((ret = recorder->SetVideoEncodingBitRate(sourceId, RATE)) != ERR_OK) {
|
||||
LOGE("SetVideoEncodingBitRate failed. ret= %{private}d.", ret);
|
||||
return nullptr;
|
||||
}
|
||||
if ((ret = recorder->SetCaptureRate(sourceId, FPS)) != ERR_OK) {
|
||||
LOGE("SetCaptureRate failed. ret= %{private}d.", ret);
|
||||
return nullptr;
|
||||
}
|
||||
if ((ret = recorder->SetAudioEncoder(audioSourceId, audioFormat)) != ERR_OK) {
|
||||
LOGE("SetAudioEncoder failed. ret= %{private}d.", ret);
|
||||
delete recorder;
|
||||
return nullptr;
|
||||
}
|
||||
if ((ret = recorder->SetAudioSampleRate(audioSourceId, SAMPLE_RATE)) != Media::SUCCESS) {
|
||||
if ((ret = recorder->SetAudioSampleRate(audioSourceId, SAMPLE_RATE)) != ERR_OK) {
|
||||
LOGE("SetAudioSampleRate failed. ret= %{private}d.", ret);
|
||||
delete recorder;
|
||||
return nullptr;
|
||||
}
|
||||
if ((ret = recorder->SetAudioChannels(audioSourceId, channelCount)) != Media::SUCCESS) {
|
||||
if ((ret = recorder->SetAudioChannels(audioSourceId, channelCount)) != ERR_OK) {
|
||||
LOGE("SetAudioChannels failed. ret= %{private}d.", ret);
|
||||
delete recorder;
|
||||
return nullptr;
|
||||
}
|
||||
if ((ret = recorder->SetAudioEncodingBitRate(audioSourceId, audioEncodingBitRate)) != Media::SUCCESS) {
|
||||
if ((ret = recorder->SetAudioEncodingBitRate(audioSourceId, audioEncodingBitRate)) != ERR_OK) {
|
||||
LOGE("SetAudioEncodingBitRate failed. ret= %{private}d.", ret);
|
||||
delete recorder;
|
||||
return nullptr;
|
||||
}
|
||||
if ((ret = recorder->SetMaxDuration(MAX_DURATION)) != Media::SUCCESS) { // 36000s=10h
|
||||
if ((ret = recorder->SetMaxDuration(MAX_DURATION)) != ERR_OK) { // 36000s=10h
|
||||
LOGE("SetAudioEncodingBitRate failed. ret= %{private}d.", ret);
|
||||
delete recorder;
|
||||
return nullptr;
|
||||
}
|
||||
videoSourceId_ = sourceId;
|
||||
LOGI("Camera CreateRecorder success.");
|
||||
return recorder;
|
||||
}
|
||||
@@ -303,7 +291,7 @@ int CameraCallback::PrepareRecorder()
|
||||
LOGE("Camera: Create fd failed.");
|
||||
return -1;
|
||||
}
|
||||
return Media::SUCCESS;
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
void CameraCallback::CloseRecorder()
|
||||
@@ -311,7 +299,6 @@ void CameraCallback::CloseRecorder()
|
||||
if (recordState_ == State::STATE_RUNNING) {
|
||||
if (recorder_ != nullptr) {
|
||||
recorder_->Stop(true);
|
||||
delete recorder_;
|
||||
recorder_ = nullptr;
|
||||
}
|
||||
|
||||
@@ -396,34 +383,34 @@ void CameraCallback::StartRecord()
|
||||
return;
|
||||
}
|
||||
int ret = PrepareRecorder();
|
||||
if (ret != Media::SUCCESS) {
|
||||
if (ret != ERR_OK) {
|
||||
LOGE("Camera PrepareRecorder failed.");
|
||||
CloseRecorder();
|
||||
onRecord(false, NULL_STRING);
|
||||
return;
|
||||
}
|
||||
ret = recorder_->SetOutputFile(recordFileId_);
|
||||
if (ret != Media::SUCCESS) {
|
||||
if (ret != ERR_OK) {
|
||||
LOGE("Camera SetOutputPath failed. ret= %{private}d", ret);
|
||||
CloseRecorder();
|
||||
onRecord(false, NULL_STRING);
|
||||
return;
|
||||
}
|
||||
ret = recorder_->Prepare();
|
||||
if (ret != Media::SUCCESS) {
|
||||
if (ret != ERR_OK) {
|
||||
LOGE("Prepare failed. ret= %{private}d", ret);
|
||||
CloseRecorder();
|
||||
onRecord(false, NULL_STRING);
|
||||
return;
|
||||
}
|
||||
ret = recorder_->Start();
|
||||
if (ret != Media::SUCCESS) {
|
||||
if (ret != ERR_OK) {
|
||||
LOGE("recorder start failed. ret= %{private}d", ret);
|
||||
CloseRecorder();
|
||||
onRecord(false, NULL_STRING);
|
||||
return;
|
||||
}
|
||||
Surface *recorderSurface = (recorder_->GetSurface(0)).get();
|
||||
Surface *recorderSurface = (recorder_->GetSurface(videoSourceId_)).GetRefPtr();
|
||||
|
||||
int queueSize = 10;
|
||||
int oneKilobytes = 1024;
|
||||
|
||||
@@ -113,12 +113,13 @@ protected:
|
||||
|
||||
private:
|
||||
int PrepareRecorder();
|
||||
Media::Recorder *CreateRecorder();
|
||||
std::shared_ptr<Media::Recorder> CreateRecorder();
|
||||
void onError();
|
||||
void onRecord(bool isSucces, std::string info);
|
||||
|
||||
Media::Camera *camera_ = nullptr;
|
||||
Media::Recorder *recorder_ = nullptr;
|
||||
std::shared_ptr<Media::Recorder> recorder_ = nullptr;
|
||||
int32_t videoSourceId_ = -1;
|
||||
sptr<Surface> previewSurface_;
|
||||
Media::EventHandler& eventHandler_;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user