• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2021 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 #include "avbuffer_utils.h"
17 #include "avbuffer_queue_producer_impl.h"
18 #include "common/log.h"
19 
20 
21 namespace OHOS {
22 namespace Media {
23 
AVBufferQueueProducerStub()24 AVBufferQueueProducerStub::AVBufferQueueProducerStub()
25 {
26     stubFuncMap_[PRODUCER_GET_QUEUE_SIZE] = &AVBufferQueueProducerStub::OnGetQueueSize;
27     stubFuncMap_[PRODUCER_SET_QUEUE_SIZE] = &AVBufferQueueProducerStub::OnSetQueueSize;
28     stubFuncMap_[PRODUCER_REQUEST_BUFFER] = &AVBufferQueueProducerStub::OnRequestBuffer;
29     stubFuncMap_[PRODUCER_PUSH_BUFFER] = &AVBufferQueueProducerStub::OnPushBuffer;
30     stubFuncMap_[PRODUCER_RETURN_BUFFER] = &AVBufferQueueProducerStub::OnReturnBuffer;
31     stubFuncMap_[PRODUCER_ATTACH_BUFFER] = &AVBufferQueueProducerStub::OnAttachBuffer;
32     stubFuncMap_[PRODUCER_DETACH_BUFFER] = &AVBufferQueueProducerStub::OnDetachBuffer;
33     stubFuncMap_[PRODUCER_SET_FILLED_LISTENER] = &AVBufferQueueProducerStub::OnSetBufferFilledListener;
34     stubFuncMap_[PRODUCER_SET_AVAILABLE_LISTENER] = &AVBufferQueueProducerStub::OnSetBufferAvailableListener;
35 }
36 
OnRemoteRequest(uint32_t code,MessageParcel & arguments,MessageParcel & reply,MessageOption & option)37 int AVBufferQueueProducerStub::OnRemoteRequest(
38     uint32_t code, MessageParcel& arguments, MessageParcel& reply, MessageOption& option)
39 {
40     auto it = stubFuncMap_.find(code);
41     FALSE_RETURN_V(it != stubFuncMap_.end(), IPC_STUB_INVALID_DATA_ERR);
42     FALSE_RETURN_V(it->second != nullptr, IPC_STUB_ERR);
43     FALSE_RETURN_V(GetDescriptor() == arguments.ReadInterfaceToken(), ERR_INVALID_STATE);
44 
45     return (this->*(it->second))(arguments, reply, option);
46 }
47 
OnGetQueueSize(MessageParcel & arguments,MessageParcel & reply,MessageOption & option)48 int32_t AVBufferQueueProducerStub::OnGetQueueSize(
49     MessageParcel& arguments, MessageParcel& reply, MessageOption& option)
50 {
51     auto size = GetQueueSize();
52 
53     reply.WriteInt32(0);
54     reply.WriteUint32(size);
55 
56     return 0;
57 }
58 
OnSetQueueSize(MessageParcel & arguments,MessageParcel & reply,MessageOption & option)59 int32_t AVBufferQueueProducerStub::OnSetQueueSize(
60     MessageParcel& arguments, MessageParcel& reply, MessageOption& option)
61 {
62     auto size = arguments.ReadUint32();
63     auto ret = SetQueueSize(size);
64 
65     reply.WriteInt32(static_cast<int32_t>(ret));
66 
67     return 0;
68 }
69 
OnRequestBuffer(MessageParcel & arguments,MessageParcel & reply,MessageOption & option)70 int32_t AVBufferQueueProducerStub::OnRequestBuffer(
71     MessageParcel& arguments, MessageParcel& reply, MessageOption& option)
72 {
73     std::shared_ptr<AVBuffer> buffer = nullptr;
74     AVBufferConfig config;
75     UnmarshallingConfig(arguments, config);
76     auto timeoutMs = arguments.ReadInt32();
77 
78     auto ret = RequestBuffer(buffer, config, timeoutMs);
79 
80     reply.WriteInt32(static_cast<int32_t>(ret));
81     if (ret == Status::OK) {
82         buffer->WriteToMessageParcel(reply);
83     }
84 
85     return 0;
86 }
87 
OnPushBuffer(MessageParcel & arguments,MessageParcel & reply,MessageOption & option)88 int32_t AVBufferQueueProducerStub::OnPushBuffer(
89     MessageParcel& arguments, MessageParcel& reply, MessageOption& option)
90 {
91     auto uniqueId = arguments.ReadUint64();
92     auto available = arguments.ReadBool();
93 
94     auto ret = PushBuffer(uniqueId, available);
95     reply.WriteInt32(static_cast<int32_t>(ret));
96 
97     return 0;
98 }
99 
OnReturnBuffer(MessageParcel & arguments,MessageParcel & reply,MessageOption & option)100 int32_t AVBufferQueueProducerStub::OnReturnBuffer(
101     MessageParcel& arguments, MessageParcel& reply, MessageOption& option)
102 {
103     auto uniqueId = arguments.ReadUint64();
104     auto available = arguments.ReadBool();
105 
106     auto ret = ReturnBuffer(uniqueId, available);
107     reply.WriteInt32(static_cast<int32_t>(ret));
108 
109     return 0;
110 }
111 
OnAttachBuffer(MessageParcel & arguments,MessageParcel & reply,MessageOption & option)112 int32_t AVBufferQueueProducerStub::OnAttachBuffer(
113     MessageParcel& arguments, MessageParcel& reply, MessageOption& option)
114 {
115     auto buffer = AVBuffer::CreateAVBuffer();
116     buffer->ReadFromMessageParcel(arguments);
117     auto isFilled = arguments.ReadBool();
118 
119     auto ret = AttachBuffer(buffer, isFilled);
120     reply.WriteInt32(static_cast<int32_t>(ret));
121 
122     return 0;
123 }
124 
OnDetachBuffer(MessageParcel & arguments,MessageParcel & reply,MessageOption & option)125 int32_t AVBufferQueueProducerStub::OnDetachBuffer(
126     MessageParcel& arguments, MessageParcel& reply, MessageOption& option)
127 {
128     auto uniqueId = arguments.ReadUint64();
129 
130     auto ret = DetachBuffer(uniqueId);
131     reply.WriteInt32(static_cast<int32_t>(ret));
132 
133     return 0;
134 }
135 
OnSetBufferFilledListener(MessageParcel & arguments,MessageParcel & reply,MessageOption & option)136 int32_t AVBufferQueueProducerStub::OnSetBufferFilledListener(
137     MessageParcel& arguments, MessageParcel& reply, MessageOption& option)
138 {
139     auto listenerObject = arguments.ReadRemoteObject();
140     sptr<IBrokerListener> listener = iface_cast<IBrokerListener>(listenerObject);
141 
142     auto ret = SetBufferFilledListener(listener);
143     reply.WriteInt32(static_cast<int32_t>(ret));
144 
145     return 0;
146 }
147 
OnSetBufferAvailableListener(MessageParcel & arguments,MessageParcel & reply,MessageOption & option)148 int32_t AVBufferQueueProducerStub::OnSetBufferAvailableListener(
149     MessageParcel& arguments, MessageParcel& reply, MessageOption& option)
150 {
151     auto listenerObject = arguments.ReadRemoteObject();
152     sptr<IProducerListener> listener = iface_cast<IProducerListener>(listenerObject);
153     auto ret = SetBufferAvailableListener(listener);
154     reply.WriteInt32(static_cast<int32_t>(ret));
155 
156     return 0;
157 }
158 
159 } // namespace Media
160 } // namespace OHOS
161