[M120 Migration][MM] Framerate calculation
[platform/framework/web/chromium-efl.git] / media / mojo / mojom / encoded_audio_buffer_traits.cc
1 // Copyright 2021 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "media/mojo/mojom/encoded_audio_buffer_traits.h"
6
7 #include "base/time/time.h"
8 #include "mojo/public/cpp/base/time_mojom_traits.h"
9
10 namespace mojo {
11
12 // static
13 bool StructTraits<media::mojom::EncodedAudioBufferDataView,
14                   media::EncodedAudioBuffer>::
15     Read(media::mojom::EncodedAudioBufferDataView input,
16          media::EncodedAudioBuffer* output) {
17   media::AudioParameters params;
18   if (!input.ReadParams(&params))
19     return false;
20
21   base::TimeDelta ts;
22   if (!input.ReadTimestamp(&ts))
23     return false;
24   base::TimeTicks timestamp = ts + base::TimeTicks();
25
26   base::TimeDelta duration;
27   if (!input.ReadDuration(&duration))
28     return false;
29
30   mojo::ArrayDataView<uint8_t> data_view;
31   input.GetDataDataView(&data_view);
32   if (data_view.is_null())
33     return false;
34
35   size_t encoded_data_size = data_view.size();
36   std::unique_ptr<uint8_t[]> encoded_data(new uint8_t[encoded_data_size]);
37   memcpy(encoded_data.get(), data_view.data(), encoded_data_size);
38
39   *output = media::EncodedAudioBuffer(params, std::move(encoded_data),
40                                       encoded_data_size, timestamp, duration);
41   return true;
42 }
43
44 }  // namespace mojo