1515namespace webrtc {
1616namespace {
1717
18+ using IfaceFrameType = TransformableAudioFrameInterface::FrameType;
19+
20+ IfaceFrameType InternalFrameTypeToInterfaceFrameType (
21+ const AudioFrameType frame_type) {
22+ switch (frame_type) {
23+ case AudioFrameType::kEmptyFrame :
24+ return IfaceFrameType::kEmptyFrame ;
25+ case AudioFrameType::kAudioFrameSpeech :
26+ return IfaceFrameType::kAudioFrameSpeech ;
27+ case AudioFrameType::kAudioFrameCN :
28+ return IfaceFrameType::kAudioFrameCN ;
29+ }
30+ RTC_DCHECK_NOTREACHED ();
31+ return IfaceFrameType::kEmptyFrame ;
32+ }
33+
34+ AudioFrameType InterfaceFrameTypeToInternalFrameType (
35+ const IfaceFrameType frame_type) {
36+ switch (frame_type) {
37+ case IfaceFrameType::kEmptyFrame :
38+ return AudioFrameType::kEmptyFrame ;
39+ case IfaceFrameType::kAudioFrameSpeech :
40+ return AudioFrameType::kAudioFrameSpeech ;
41+ case IfaceFrameType::kAudioFrameCN :
42+ return AudioFrameType::kAudioFrameCN ;
43+ }
44+ RTC_DCHECK_NOTREACHED ();
45+ return AudioFrameType::kEmptyFrame ;
46+ }
47+
1848class TransformableOutgoingAudioFrame
1949 : public TransformableAudioFrameInterface {
2050 public:
@@ -44,11 +74,11 @@ class TransformableOutgoingAudioFrame
4474 uint32_t GetStartTimestamp () const { return rtp_start_timestamp_; }
4575 uint32_t GetSsrc () const override { return ssrc_; }
4676
47- AudioFrameType GetFrameType () const { return frame_type_; }
48- uint8_t GetPayloadType () const override { return payload_type_; }
49- int64_t GetAbsoluteCaptureTimestampMs () const {
50- return absolute_capture_timestamp_ms_;
77+ IfaceFrameType Type () const override {
78+ return InternalFrameTypeToInterfaceFrameType (frame_type_);
5179 }
80+
81+ uint8_t GetPayloadType () const override { return payload_type_; }
5282 Direction GetDirection () const override { return Direction::kSender ; }
5383
5484 // TODO(crbug.com/1453226): Remove once GetHeader() is removed from
@@ -67,6 +97,10 @@ class TransformableOutgoingAudioFrame
6797 rtp_timestamp_ = timestamp - rtp_start_timestamp_;
6898 }
6999
100+ absl::optional<uint64_t > AbsoluteCaptureTimestamp () const override {
101+ return absolute_capture_timestamp_ms_;
102+ }
103+
70104 private:
71105 AudioFrameType frame_type_;
72106 uint8_t payload_type_;
@@ -140,24 +174,21 @@ void ChannelSendFrameTransformerDelegate::SendFrame(
140174 return ;
141175 auto * transformed_frame =
142176 static_cast <TransformableOutgoingAudioFrame*>(frame.get ());
143- send_frame_callback_ (transformed_frame->GetFrameType (),
144- transformed_frame->GetPayloadType (),
145- transformed_frame->GetTimestamp () -
146- transformed_frame->GetStartTimestamp (),
147- transformed_frame->GetData (),
148- transformed_frame->GetAbsoluteCaptureTimestampMs ());
177+ send_frame_callback_ (
178+ InterfaceFrameTypeToInternalFrameType (transformed_frame->Type ()),
179+ transformed_frame->GetPayloadType (),
180+ transformed_frame->GetTimestamp () -
181+ transformed_frame->GetStartTimestamp (),
182+ transformed_frame->GetData (),
183+ *transformed_frame->AbsoluteCaptureTimestamp ());
149184}
150185
151186std::unique_ptr<TransformableAudioFrameInterface> CloneSenderAudioFrame (
152187 TransformableAudioFrameInterface* original) {
153- AudioFrameType audio_frame_type =
154- original->GetHeader ().extension .voiceActivity
155- ? AudioFrameType::kAudioFrameSpeech
156- : AudioFrameType::kAudioFrameCN ;
157-
158188 // TODO(crbug.com/webrtc/14949): Ensure the correct timestamps are passed.
159189 return std::make_unique<TransformableOutgoingAudioFrame>(
160- audio_frame_type, original->GetPayloadType (), original->GetTimestamp (),
190+ InterfaceFrameTypeToInternalFrameType (original->Type ()),
191+ original->GetPayloadType (), original->GetTimestamp (),
161192 /* rtp_start_timestamp=*/ 0u , original->GetData ().data (),
162193 original->GetData ().size (), original->GetTimestamp (),
163194 original->GetSsrc ());
0 commit comments