1 /* Copyright 2017 The Chromium OS Authors. All rights reserved.
2 * Use of this source code is governed by a BSD-style license that can be
3 * found in the LICENSE file.
4 */
5
6 #include <unordered_map>
7
8 extern "C" {
9 #include "cras_rstream.h"
10 }
11
12 namespace {
13
14 struct cb_data {
15 std::unordered_map<unsigned int, unsigned int> dev_offset;
16 int pending_reply;
17 };
18 std::unordered_map<const cras_rstream*, cb_data> data_map;
19
20 }; // namespace
21
rstream_stub_reset()22 void rstream_stub_reset() {
23 data_map.clear();
24 }
25
rstream_stub_dev_offset(const cras_rstream * rstream,unsigned int dev_id,unsigned int offset)26 void rstream_stub_dev_offset(const cras_rstream* rstream,
27 unsigned int dev_id,
28 unsigned int offset) {
29 auto data = data_map.find(rstream);
30 if (data == data_map.end()) {
31 cb_data new_data;
32 new_data.dev_offset[dev_id] = offset;
33 data_map.insert({rstream, new_data});
34 } else {
35 data->second.dev_offset[dev_id] = offset;
36 }
37 }
38
rstream_stub_pending_reply(const cras_rstream * rstream,int ret_value)39 void rstream_stub_pending_reply(const cras_rstream* rstream, int ret_value) {
40 auto data = data_map.find(rstream);
41 if (data == data_map.end()) {
42 cb_data new_data;
43 new_data.pending_reply = ret_value;
44 data_map.insert({rstream, new_data});
45 } else {
46 data->second.pending_reply = ret_value;
47 }
48 }
49
50 extern "C" {
51
cras_rstream_record_fetch_interval(struct cras_rstream * rstream,const struct timespec * now)52 void cras_rstream_record_fetch_interval(struct cras_rstream* rstream,
53 const struct timespec* now) {}
54
cras_rstream_dev_attach(struct cras_rstream * rstream,unsigned int dev_id,void * dev_ptr)55 void cras_rstream_dev_attach(struct cras_rstream* rstream,
56 unsigned int dev_id,
57 void* dev_ptr) {}
58
cras_rstream_dev_detach(struct cras_rstream * rstream,unsigned int dev_id)59 void cras_rstream_dev_detach(struct cras_rstream* rstream,
60 unsigned int dev_id) {}
61
cras_rstream_dev_offset(const struct cras_rstream * rstream,unsigned int dev_id)62 unsigned int cras_rstream_dev_offset(const struct cras_rstream* rstream,
63 unsigned int dev_id) {
64 auto elem = data_map.find(rstream);
65 if (elem != data_map.end())
66 return elem->second.dev_offset[dev_id];
67 return 0;
68 }
69
cras_rstream_dev_offset_update(struct cras_rstream * rstream,unsigned int frames,unsigned int dev_id)70 void cras_rstream_dev_offset_update(struct cras_rstream* rstream,
71 unsigned int frames,
72 unsigned int dev_id) {}
73
cras_rstream_playable_frames(struct cras_rstream * rstream,unsigned int dev_id)74 unsigned int cras_rstream_playable_frames(struct cras_rstream* rstream,
75 unsigned int dev_id) {
76 return 0;
77 }
78
cras_rstream_get_volume_scaler(struct cras_rstream * rstream)79 float cras_rstream_get_volume_scaler(struct cras_rstream* rstream) {
80 return 1.0;
81 }
82
cras_rstream_get_mute(const struct cras_rstream * rstream)83 int cras_rstream_get_mute(const struct cras_rstream* rstream) {
84 return 0;
85 }
86
cras_rstream_get_readable_frames(struct cras_rstream * rstream,unsigned int offset,size_t * frames)87 uint8_t* cras_rstream_get_readable_frames(struct cras_rstream* rstream,
88 unsigned int offset,
89 size_t* frames) {
90 return NULL;
91 }
92
cras_rstream_update_input_write_pointer(struct cras_rstream * rstream)93 void cras_rstream_update_input_write_pointer(struct cras_rstream* rstream) {}
94
cras_rstream_update_output_read_pointer(struct cras_rstream * rstream)95 void cras_rstream_update_output_read_pointer(struct cras_rstream* rstream) {}
96
cras_rstream_audio_ready(struct cras_rstream * stream,size_t count)97 int cras_rstream_audio_ready(struct cras_rstream* stream, size_t count) {
98 cras_shm_buffer_write_complete(stream->shm);
99 return 0;
100 }
101
cras_rstream_request_audio(struct cras_rstream * stream,const struct timespec * now)102 int cras_rstream_request_audio(struct cras_rstream* stream,
103 const struct timespec* now) {
104 return 0;
105 }
106
cras_rstream_update_queued_frames(struct cras_rstream * rstream)107 void cras_rstream_update_queued_frames(struct cras_rstream* rstream) {}
108
cras_rstream_is_pending_reply(const struct cras_rstream * rstream)109 int cras_rstream_is_pending_reply(const struct cras_rstream* rstream) {
110 auto elem = data_map.find(rstream);
111 if (elem != data_map.end())
112 return elem->second.pending_reply;
113 return 0;
114 }
115
cras_rstream_flush_old_audio_messages(struct cras_rstream * rstream)116 int cras_rstream_flush_old_audio_messages(struct cras_rstream* rstream) {
117 return 0;
118 }
119
120 } // extern "C"
121