15679752bf24c21135884e987c4077e2f7184897Vadim Bendebury/*
25679752bf24c21135884e987c4077e2f7184897Vadim Bendebury *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
35679752bf24c21135884e987c4077e2f7184897Vadim Bendebury *
45679752bf24c21135884e987c4077e2f7184897Vadim Bendebury *  Use of this source code is governed by a BSD-style license
55679752bf24c21135884e987c4077e2f7184897Vadim Bendebury *  that can be found in the LICENSE file in the root of the source
65679752bf24c21135884e987c4077e2f7184897Vadim Bendebury *  tree. An additional intellectual property rights grant can be found
75679752bf24c21135884e987c4077e2f7184897Vadim Bendebury *  in the file PATENTS.  All contributing project authors may
85679752bf24c21135884e987c4077e2f7184897Vadim Bendebury *  be found in the AUTHORS file in the root of the source tree.
95679752bf24c21135884e987c4077e2f7184897Vadim Bendebury */
105679752bf24c21135884e987c4077e2f7184897Vadim Bendebury
115679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include "webrtc/voice_engine/transmit_mixer.h"
125679752bf24c21135884e987c4077e2f7184897Vadim Bendebury
135679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include "testing/gtest/include/gtest/gtest.h"
145679752bf24c21135884e987c4077e2f7184897Vadim Bendebury#include "webrtc/voice_engine/include/voe_external_media.h"
155679752bf24c21135884e987c4077e2f7184897Vadim Bendebury
165679752bf24c21135884e987c4077e2f7184897Vadim Bendeburynamespace webrtc {
175679752bf24c21135884e987c4077e2f7184897Vadim Bendeburynamespace voe {
185679752bf24c21135884e987c4077e2f7184897Vadim Bendeburynamespace {
195679752bf24c21135884e987c4077e2f7184897Vadim Bendebury
205679752bf24c21135884e987c4077e2f7184897Vadim Bendeburyclass MediaCallback : public VoEMediaProcess {
215679752bf24c21135884e987c4077e2f7184897Vadim Bendebury public:
225679752bf24c21135884e987c4077e2f7184897Vadim Bendebury  virtual void Process(int channel, ProcessingTypes type,
235679752bf24c21135884e987c4077e2f7184897Vadim Bendebury                       int16_t audio[], size_t samples_per_channel,
245679752bf24c21135884e987c4077e2f7184897Vadim Bendebury                       int sample_rate_hz, bool is_stereo) {
255679752bf24c21135884e987c4077e2f7184897Vadim Bendebury  }
265679752bf24c21135884e987c4077e2f7184897Vadim Bendebury};
275679752bf24c21135884e987c4077e2f7184897Vadim Bendebury
285679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// TODO(andrew): Mock VoEMediaProcess, and verify the behavior when calling
295679752bf24c21135884e987c4077e2f7184897Vadim Bendebury// PrepareDemux().
305679752bf24c21135884e987c4077e2f7184897Vadim BendeburyTEST(TransmitMixerTest, RegisterExternalMediaCallback) {
315679752bf24c21135884e987c4077e2f7184897Vadim Bendebury  TransmitMixer* tm = NULL;
325679752bf24c21135884e987c4077e2f7184897Vadim Bendebury  ASSERT_EQ(0, TransmitMixer::Create(tm, 0));
335679752bf24c21135884e987c4077e2f7184897Vadim Bendebury  ASSERT_TRUE(tm != NULL);
345679752bf24c21135884e987c4077e2f7184897Vadim Bendebury  MediaCallback callback;
355679752bf24c21135884e987c4077e2f7184897Vadim Bendebury  EXPECT_EQ(-1, tm->RegisterExternalMediaProcessing(NULL,
365679752bf24c21135884e987c4077e2f7184897Vadim Bendebury                                                    kRecordingPreprocessing));
375679752bf24c21135884e987c4077e2f7184897Vadim Bendebury  EXPECT_EQ(-1, tm->RegisterExternalMediaProcessing(&callback,
385679752bf24c21135884e987c4077e2f7184897Vadim Bendebury                                                    kPlaybackPerChannel));
395679752bf24c21135884e987c4077e2f7184897Vadim Bendebury  EXPECT_EQ(-1, tm->RegisterExternalMediaProcessing(&callback,
405679752bf24c21135884e987c4077e2f7184897Vadim Bendebury                                                    kPlaybackAllChannelsMixed));
415679752bf24c21135884e987c4077e2f7184897Vadim Bendebury  EXPECT_EQ(-1, tm->RegisterExternalMediaProcessing(&callback,
425679752bf24c21135884e987c4077e2f7184897Vadim Bendebury                                                    kRecordingPerChannel));
435679752bf24c21135884e987c4077e2f7184897Vadim Bendebury  EXPECT_EQ(0, tm->RegisterExternalMediaProcessing(&callback,
445679752bf24c21135884e987c4077e2f7184897Vadim Bendebury                                                   kRecordingAllChannelsMixed));
455679752bf24c21135884e987c4077e2f7184897Vadim Bendebury  EXPECT_EQ(0, tm->RegisterExternalMediaProcessing(&callback,
465679752bf24c21135884e987c4077e2f7184897Vadim Bendebury                                                   kRecordingPreprocessing));
475679752bf24c21135884e987c4077e2f7184897Vadim Bendebury  EXPECT_EQ(-1, tm->DeRegisterExternalMediaProcessing(kPlaybackPerChannel));
485679752bf24c21135884e987c4077e2f7184897Vadim Bendebury  EXPECT_EQ(-1, tm->DeRegisterExternalMediaProcessing(
495679752bf24c21135884e987c4077e2f7184897Vadim Bendebury                    kPlaybackAllChannelsMixed));
505679752bf24c21135884e987c4077e2f7184897Vadim Bendebury  EXPECT_EQ(-1, tm->DeRegisterExternalMediaProcessing(kRecordingPerChannel));
515679752bf24c21135884e987c4077e2f7184897Vadim Bendebury  EXPECT_EQ(0, tm->DeRegisterExternalMediaProcessing(
525679752bf24c21135884e987c4077e2f7184897Vadim Bendebury                   kRecordingAllChannelsMixed));
535679752bf24c21135884e987c4077e2f7184897Vadim Bendebury  EXPECT_EQ(0, tm->DeRegisterExternalMediaProcessing(kRecordingPreprocessing));
545679752bf24c21135884e987c4077e2f7184897Vadim Bendebury  TransmitMixer::Destroy(tm);
555679752bf24c21135884e987c4077e2f7184897Vadim Bendebury}
565679752bf24c21135884e987c4077e2f7184897Vadim Bendebury
575679752bf24c21135884e987c4077e2f7184897Vadim Bendebury}  // namespace
585679752bf24c21135884e987c4077e2f7184897Vadim Bendebury}  // namespace voe
595679752bf24c21135884e987c4077e2f7184897Vadim Bendebury}  // namespace webrtc
605679752bf24c21135884e987c4077e2f7184897Vadim Bendebury