[M120 Migration][MM] Framerate calculation
[platform/framework/web/chromium-efl.git] / media / mojo / mojom / audio_encoder_config_mojom_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/audio_encoder_config_mojom_traits.h"
6
7 #include <algorithm>
8
9 #include "base/numerics/safe_conversions.h"
10 #include "media/base/limits.h"
11 #include "mojo/public/cpp/base/time_mojom_traits.h"
12
13 namespace mojo {
14
15 // static
16 media::mojom::AacOutputFormat EnumTraits<media::mojom::AacOutputFormat,
17                                          media::AudioEncoder::AacOutputFormat>::
18     ToMojom(media::AudioEncoder::AacOutputFormat input) {
19   switch (input) {
20     case media::AudioEncoder::AacOutputFormat::ADTS:
21       return media::mojom::AacOutputFormat::kADTS;
22     case media::AudioEncoder::AacOutputFormat::AAC:
23       return media::mojom::AacOutputFormat::kAAC;
24   }
25   NOTREACHED_NORETURN();
26 }
27
28 // static
29 bool EnumTraits<media::mojom::AacOutputFormat,
30                 media::AudioEncoder::AacOutputFormat>::
31     FromMojom(media::mojom::AacOutputFormat format,
32               media::AudioEncoder::AacOutputFormat* output) {
33   switch (format) {
34     case media::mojom::AacOutputFormat::kADTS:
35       *output = media::AudioEncoder::AacOutputFormat::ADTS;
36       return true;
37     case media::mojom::AacOutputFormat::kAAC:
38       *output = media::AudioEncoder::AacOutputFormat::AAC;
39       return true;
40   }
41   NOTREACHED_NORETURN();
42 }
43
44 // static
45 bool StructTraits<media::mojom::AacAudioEncoderConfigDataView,
46                   media::AudioEncoder::AacOptions>::
47     Read(media::mojom::AacAudioEncoderConfigDataView input,
48          media::AudioEncoder::AacOptions* output) {
49   media::AudioEncoder::AacOutputFormat format;
50   if (!input.ReadFormat(&format)) {
51     return false;
52   }
53
54   output->format = format;
55   return true;
56 }
57
58 // static
59 bool StructTraits<media::mojom::AudioEncoderConfigDataView,
60                   media::AudioEncoderConfig>::
61     Read(media::mojom::AudioEncoderConfigDataView input,
62          media::AudioEncoderConfig* output) {
63   media::AudioCodec codec;
64   if (!input.ReadCodec(&codec))
65     return false;
66   output->codec = codec;
67
68   if (input.sample_rate() < media::limits::kMinSampleRate ||
69       input.sample_rate() > media::limits::kMaxSampleRate)
70     return false;
71   output->sample_rate = input.sample_rate();
72
73   if (input.bitrate() > 0)
74     output->bitrate = base::saturated_cast<int>(input.bitrate());
75
76   if (input.channel_count() > media::limits::kMaxChannels)
77     return false;
78   output->channels = input.channel_count();
79
80   media::AudioEncoder::AacOptions aac;
81   if (!input.ReadAac(&aac)) {
82     return false;
83   }
84   output->aac = aac;
85
86   return true;
87 }
88
89 }  // namespace mojo