blob: 85733fc528b2e3dd00a6df5d5a00a628de9960de [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <list>
#include "base/bind_helpers.h"
#include "base/logging.h"
#include "mojo/services/media/audio/interfaces/audio_server.mojom.h"
#include "mojo/services/media/audio/interfaces/audio_track.mojom.h"
#include "services/media/factory_service/audio_track_controller.h"
#include "services/media/framework_mojo/mojo_type_conversions.h"
namespace mojo {
namespace media {
AudioTrackController::AudioTrackController(const String& url,
ApplicationImpl* app) {
// TODO(dalesat): Handle connection errors.
DCHECK(app);
AudioServerPtr audio_server;
app->ConnectToService(url, &audio_server);
audio_server->CreateTrack(GetProxy(&audio_track_));
}
AudioTrackController::~AudioTrackController() {}
void AudioTrackController::GetSupportedMediaTypes(
const GetSupportedMediaTypesCallback& callback) {
// Query the track's format capabilities.
audio_track_->Describe([this, callback](AudioTrackDescriptorPtr descriptor) {
callback(Convert(descriptor->supported_media_types));
});
}
void AudioTrackController::Configure(
const std::unique_ptr<StreamType>& stream_type,
const ConfigureCallback& callback) {
AudioTrackConfigurationPtr config = AudioTrackConfiguration::New();
config->media_type = Convert(stream_type);
MediaConsumerPtr consumer;
audio_track_->Configure(config.Pass(), GetProxy(&consumer));
RateControlPtr rate_control;
audio_track_->GetRateControl(GetProxy(&rate_control));
callback(consumer.Pass(), rate_control.Pass());
}
} // namespace media
} // namespace mojo