1 /* 2 * Copyright (c) 2023-2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef OHOS_CAMERA_DEFERRED_VIDEO_PROCESSOR_H 17 #define OHOS_CAMERA_DEFERRED_VIDEO_PROCESSOR_H 18 19 #include <refbase.h> 20 #include <iostream> 21 #include <mutex> 22 23 #include "camera_death_recipient.h" 24 #include "ideferred_video_processing_session.h" 25 #include "ideferred_video_processing_session_callback.h" 26 #include "deferred_video_processing_session_callback_stub.h" 27 #include "hcamera_service_proxy.h" 28 #include "ipc_file_descriptor.h" 29 #include "deferred_type.h" 30 31 namespace OHOS { 32 namespace CameraStandard { 33 class IDeferredVideoProcSessionCallback : public RefBase { 34 public: 35 IDeferredVideoProcSessionCallback() = default; 36 virtual ~IDeferredVideoProcSessionCallback() = default; 37 virtual void OnProcessVideoDone(const std::string& videoId, const sptr<IPCFileDescriptor> ipcFd) = 0; 38 virtual void OnError(const std::string& videoId, const DpsErrorCode errorCode) = 0; 39 virtual void OnStateChanged(const DpsStatusCode status) = 0; 40 }; 41 42 class DeferredVideoProcSession : public RefBase { 43 public: 44 DeferredVideoProcSession(int userId, std::shared_ptr<IDeferredVideoProcSessionCallback> callback); 45 virtual ~DeferredVideoProcSession(); 46 void BeginSynchronize(); 47 void EndSynchronize(); 48 void AddVideo(const std::string& videoId, const sptr<IPCFileDescriptor> srcFd, 49 const sptr<IPCFileDescriptor> dstFd); 50 void RemoveVideo(const std::string& videoId, const bool restorable = false); 51 void RestoreVideo(const std::string& videoId); 52 std::shared_ptr<IDeferredVideoProcSessionCallback> GetCallback(); 53 private: 54 friend class CameraManager; 55 int32_t SetDeferredVideoSession(sptr<DeferredProcessing::IDeferredVideoProcessingSession>& session); 56 void CameraServerDied(pid_t pid); 57 void ReconnectDeferredProcessingSession(); 58 void ConnectDeferredProcessingSession(); 59 int userId_; 60 std::shared_ptr<IDeferredVideoProcSessionCallback> callback_; 61 sptr<DeferredProcessing::IDeferredVideoProcessingSession> remoteSession_; 62 sptr<CameraDeathRecipient> deathRecipient_ = nullptr; 63 sptr<ICameraService> serviceProxy_; 64 }; 65 66 class DeferredVideoProcessingSessionCallback : public DeferredProcessing::DeferredVideoProcessingSessionCallbackStub { 67 public: DeferredVideoProcessingSessionCallback()68 DeferredVideoProcessingSessionCallback() : deferredVideoProcSession_(nullptr) { 69 } 70 DeferredVideoProcessingSessionCallback(sptr<DeferredVideoProcSession> deferredVideoProcSession)71 explicit DeferredVideoProcessingSessionCallback(sptr<DeferredVideoProcSession> deferredVideoProcSession) 72 : deferredVideoProcSession_(deferredVideoProcSession) 73 { 74 } 75 ~DeferredVideoProcessingSessionCallback()76 ~DeferredVideoProcessingSessionCallback() 77 { 78 deferredVideoProcSession_ = nullptr; 79 } 80 81 ErrCode OnProcessVideoDone(const std::string& videoId, const sptr<IPCFileDescriptor>& ipcFileDescriptor) override; 82 ErrCode OnError(const std::string& videoId, int32_t errorCode) override; 83 ErrCode OnStateChanged(int32_t status) override; 84 85 private: 86 sptr<DeferredVideoProcSession> deferredVideoProcSession_; 87 }; 88 89 } // namespace CameraStandard 90 } // namespace OHOS 91 #endif // OHOS_CAMERA_DEFERRED_VIDEO_PROCESSOR_H