1 /* 2 * Copyright (c) 2023-2024 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_AVCAST_CONTROLLER_STUB_H 17 #define OHOS_AVCAST_CONTROLLER_STUB_H 18 19 #include <map> 20 #include "iavcast_controller.h" 21 #include "iremote_stub.h" 22 23 namespace OHOS::AVSession { 24 class AVCastControllerStub : public IRemoteStub<IAVCastController> { 25 public: 26 int32_t OnRemoteRequest(uint32_t code, MessageParcel& data, MessageParcel& reply, MessageOption& option) override; 27 RegisterCallback(const std::shared_ptr<AVCastControllerCallback> & callback)28 int32_t RegisterCallback(const std::shared_ptr<AVCastControllerCallback>& callback) override 29 { 30 return 0; 31 } 32 33 private: 34 int32_t HandleSendControlCommand(MessageParcel& data, MessageParcel& reply); 35 36 int32_t HandleStart(MessageParcel& data, MessageParcel& reply); 37 38 int32_t HandlePrepare(MessageParcel& data, MessageParcel& reply); 39 40 int32_t HandleGetDuration(MessageParcel& data, MessageParcel& reply); 41 42 int32_t HandleGetCastAVPlayBackState(MessageParcel& data, MessageParcel& reply); 43 44 int32_t HandleGetSupportedDecoders(MessageParcel& data, MessageParcel& reply); 45 46 int32_t HandleGetRecommendedResolutionLevel(MessageParcel& data, MessageParcel& reply); 47 48 int32_t HandleGetSupportedHdrCapabilities(MessageParcel& data, MessageParcel& reply); 49 50 int32_t HandleGetSupportedPlaySpeeds(MessageParcel& data, MessageParcel& reply); 51 52 int32_t HandleGetCurrentItem(MessageParcel& data, MessageParcel& reply); 53 54 int32_t HandleGetValidCommands(MessageParcel& data, MessageParcel& reply); 55 56 int32_t HandleSetDisplaySurface(MessageParcel& data, MessageParcel& reply); 57 58 int32_t HandleSetCastPlaybackFilter(MessageParcel& data, MessageParcel& reply); 59 60 int32_t HandleProcessMediaKeyResponse(MessageParcel& data, MessageParcel& reply); 61 62 int32_t HandleRegisterCallbackInner(MessageParcel& data, MessageParcel& reply); 63 64 int32_t HandleAddAvailableCommand(MessageParcel& data, MessageParcel& reply); 65 66 int32_t HandleRemoveAvailableCommand(MessageParcel& data, MessageParcel& reply); 67 68 int32_t HandleDestroy(MessageParcel& data, MessageParcel& reply); 69 70 static bool CheckInterfaceToken(MessageParcel& data); 71 72 using HandlerFunc = std::function<int32_t(MessageParcel&, MessageParcel&)>; 73 std::map<uint32_t, HandlerFunc> handlers = { 74 {CAST_CONTROLLER_CMD_SEND_CONTROL_COMMAND, 75 [this](MessageParcel& data, MessageParcel& reply) { return HandleSendControlCommand(data, reply); }}, 76 {CAST_CONTROLLER_CMD_START, 77 [this](MessageParcel& data, MessageParcel& reply) { return HandleStart(data, reply); }}, 78 {CAST_CONTROLLER_CMD_PREPARE, 79 [this](MessageParcel& data, MessageParcel& reply) { return HandlePrepare(data, reply); }}, 80 {CAST_CONTROLLER_CMD_GET_DURATION, 81 [this](MessageParcel& data, MessageParcel& reply) { return HandleGetDuration(data, reply); }}, 82 {CAST_CONTROLLER_CMD_GET_CAST_AV_PLAYBACK_STATE, 83 [this](MessageParcel& data, MessageParcel& reply) { return HandleGetCastAVPlayBackState(data, reply); }}, 84 {CAST_CONTROLLER_CMD_GET_SUPPORT_DECODER, 85 [this](MessageParcel& data, MessageParcel& reply) { return HandleGetSupportedDecoders(data, reply); }}, 86 {CAST_CONTROLLER_CMD_GET_RECOMMEND_RESOLUTION_LEVEL, 87 [this](MessageParcel& data, MessageParcel& reply) 88 { return HandleGetRecommendedResolutionLevel(data, reply); }}, 89 {CAST_CONTROLLER_CMD_GET_SUPPORT_HDR_CAPABILITIES, 90 [this](MessageParcel& data, MessageParcel& reply) 91 { return HandleGetSupportedHdrCapabilities(data, reply); }}, 92 {CAST_CONTROLLER_CMD_GET_SUPPORT_PLAY_SPEED, 93 [this](MessageParcel& data, MessageParcel& reply) { return HandleGetSupportedPlaySpeeds(data, reply); }}, 94 {CAST_CONTROLLER_CMD_GET_CURRENT_ITEM, 95 [this](MessageParcel& data, MessageParcel& reply) { return HandleGetCurrentItem(data, reply); }}, 96 {CAST_CONTROLLER_CMD_GET_VALID_COMMANDS, 97 [this](MessageParcel& data, MessageParcel& reply) { return HandleGetValidCommands(data, reply); }}, 98 {CAST_CONTROLLER_CMD_SET_DISPLAY_SURFACE, 99 [this](MessageParcel& data, MessageParcel& reply) { return HandleSetDisplaySurface(data, reply); }}, 100 {CAST_CONTROLLER_CMD_SET_CAST_PLAYBACK_FILTER, 101 [this](MessageParcel& data, MessageParcel& reply) { return HandleSetCastPlaybackFilter(data, reply); }}, 102 {CAST_CONTROLLER_CMD_PROVIDE_KEY_RESPONSE, 103 [this](MessageParcel& data, MessageParcel& reply) { return HandleProcessMediaKeyResponse(data, reply); }}, 104 {CAST_CONTROLLER_CMD_REGISTER_CALLBACK, 105 [this](MessageParcel& data, MessageParcel& reply) { return HandleRegisterCallbackInner(data, reply); }}, 106 {CAST_CONTROLLER_CMD_DESTROY, 107 [this](MessageParcel& data, MessageParcel& reply) { return HandleDestroy(data, reply); }}, 108 {CAST_CONTROLLER_CMD_ADD_AVAILABLE_COMMAND, 109 [this](MessageParcel& data, MessageParcel& reply) { return HandleAddAvailableCommand(data, reply); }}, 110 {CAST_CONTROLLER_CMD_REMOVE_AVAILABLE_COMMAND, 111 [this](MessageParcel& data, MessageParcel& reply) { return HandleRemoveAvailableCommand(data, reply); }} 112 }; 113 std::map<uint32_t, std::string> mapCodeToFuncNameXCollie = { 114 {CAST_CONTROLLER_CMD_SEND_CONTROL_COMMAND, "HandleSendControlCommand"}, 115 {CAST_CONTROLLER_CMD_START, "HandleStart"}, 116 {CAST_CONTROLLER_CMD_PREPARE, "HandlePrepare"}, 117 {CAST_CONTROLLER_CMD_GET_DURATION, "HandleGetDuration"}, 118 {CAST_CONTROLLER_CMD_GET_CAST_AV_PLAYBACK_STATE, "HandleGetCastAVPlayBackState"}, 119 {CAST_CONTROLLER_CMD_GET_SUPPORT_DECODER, "HandleGetSupportedDecoders"}, 120 {CAST_CONTROLLER_CMD_GET_RECOMMEND_RESOLUTION_LEVEL, "HandleGetRecommendedResolutionLevel"}, 121 {CAST_CONTROLLER_CMD_GET_SUPPORT_HDR_CAPABILITIES, "HandleGetSupportedHdrCapabilities"}, 122 {CAST_CONTROLLER_CMD_GET_SUPPORT_PLAY_SPEED, "HandleGetSupportedPlaySpeeds"}, 123 {CAST_CONTROLLER_CMD_GET_CURRENT_ITEM, "HandleGetCurrentItem"}, 124 {CAST_CONTROLLER_CMD_GET_VALID_COMMANDS, "HandleGetValidCommands"}, 125 {CAST_CONTROLLER_CMD_SET_DISPLAY_SURFACE, "HandleSetDisplaySurface"}, 126 {CAST_CONTROLLER_CMD_SET_CAST_PLAYBACK_FILTER, "HandleSetCastPlaybackFilter"}, 127 {CAST_CONTROLLER_CMD_PROVIDE_KEY_RESPONSE, "HandleProcessMediaKeyResponse"}, 128 {CAST_CONTROLLER_CMD_REGISTER_CALLBACK, "HandleRegisterCallbackInner"}, 129 {CAST_CONTROLLER_CMD_DESTROY, "HandleDestroy"}, 130 {CAST_CONTROLLER_CMD_ADD_AVAILABLE_COMMAND, "HandleAddAvailableCommand"}, 131 {CAST_CONTROLLER_CMD_REMOVE_AVAILABLE_COMMAND, "HandleRemoveAvailableCommand"} 132 }; 133 const size_t defaultIpcCapacity = 1048576; // Increase the IPC default capacity(200K) to 1M 134 }; 135 } // namespace OHOS::AVSession 136 #endif // OHOS_AVCAST_CONTROLLER_STUB_H 137