// Copyright 2017 The Chromium OS 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 #include #include #include extern "C" { #include "cras_iodev.h" #include "cras_rstream.h" #include "cras_shm.h" #include "cras_types.h" #include "dev_io.h" #include "dev_stream.h" #include "utlist.h" } #include "iodev_stub.h" #include "rstream_stub.h" #define RSTREAM_FAKE_POLL_FD 33 using DevStreamPtr = std::unique_ptr; using IodevPtr = std::unique_ptr; using IonodePtr = std::unique_ptr; using OpendevPtr = std::unique_ptr; using RstreamPtr = std::unique_ptr; void destroy_shm(struct cras_audio_shm* shm); using ShmPtr = std::unique_ptr; ShmPtr create_shm(size_t cb_threshold); // Holds the rstream and devstream pointers for an attached stream. struct Stream { Stream(ShmPtr shm, RstreamPtr rstream, DevStreamPtr dstream) : shm(std::move(shm)), rstream(std::move(rstream)), dstream(std::move(dstream)) {} ShmPtr shm; RstreamPtr rstream; DevStreamPtr dstream; }; using StreamPtr = std::unique_ptr; // Holds the iodev and ionode pointers for an attached device. struct Device { Device(IodevPtr dev, IonodePtr node, OpendevPtr odev) : dev(std::move(dev)), node(std::move(node)), odev(std::move(odev)) {} IodevPtr dev; IonodePtr node; OpendevPtr odev; }; using DevicePtr = std::unique_ptr; RstreamPtr create_rstream(cras_stream_id_t id, CRAS_STREAM_DIRECTION direction, size_t cb_threshold, const cras_audio_format* format, cras_audio_shm* shm); DevStreamPtr create_dev_stream(unsigned int dev_id, cras_rstream* rstream); StreamPtr create_stream(cras_stream_id_t id, unsigned int dev_id, CRAS_STREAM_DIRECTION direction, size_t cb_threshold, const cras_audio_format* format); void AddFakeDataToStream(Stream* stream, unsigned int frames); int delay_frames_stub(const struct cras_iodev* iodev); IonodePtr create_ionode(CRAS_NODE_TYPE type); IodevPtr create_open_iodev(CRAS_STREAM_DIRECTION direction, size_t cb_threshold, cras_audio_format* format, cras_ionode* active_node); DevicePtr create_device(CRAS_STREAM_DIRECTION direction, size_t cb_threshold, cras_audio_format* format, CRAS_NODE_TYPE active_node_type); void add_stream_to_dev(IodevPtr& dev, const StreamPtr& stream); void fill_audio_format(cras_audio_format* format, unsigned int rate);