@@ -78,29 +78,35 @@ class EncodedAudioOutput : public ModifyingOutput {
78
78
79
79
AudioInfo defaultConfig () {
80
80
AudioInfo cfg;
81
- cfg.channels = 2 ;
82
- cfg.sample_rate = 44100 ;
83
- cfg.bits_per_sample = 16 ;
84
81
return cfg;
85
82
}
86
83
87
84
virtual void setAudioInfo (AudioInfo newInfo) override {
88
85
TRACED ();
89
- if (this ->cfg != newInfo && newInfo.channels != 0 &&
90
- newInfo.sample_rate != 0 ) {
86
+ if (this ->cfg != newInfo && newInfo) {
91
87
this ->cfg = newInfo;
92
88
decoder_ptr->setAudioInfo (cfg);
93
89
encoder_ptr->setAudioInfo (cfg);
94
90
}
95
91
}
96
92
93
+ // / Provide audio info from decoder if relevant
94
+ AudioInfo audioInfo () override {
95
+ // return info from decoder if avilable
96
+ if (decoder_ptr != undefined && *decoder_ptr){
97
+ AudioInfo info = decoder_ptr->audioInfo ();
98
+ if (info) return info;
99
+ }
100
+ return ModifyingOutput::audioInfo ();
101
+ }
102
+
97
103
// / Defines the output
98
104
void setOutput (Print *outputStream) {
99
105
ptr_out = outputStream;
100
- if (decoder_ptr != nullptr ) {
106
+ if (decoder_ptr != undefined ) {
101
107
decoder_ptr->setOutput (*ptr_out);
102
108
}
103
- if (encoder_ptr != nullptr ) {
109
+ if (encoder_ptr != undefined ) {
104
110
encoder_ptr->setOutput (*ptr_out);
105
111
}
106
112
}
@@ -121,7 +127,7 @@ class EncodedAudioOutput : public ModifyingOutput {
121
127
122
128
void setEncoder (AudioEncoder *encoder) {
123
129
if (encoder == nullptr ) {
124
- encoder = CodecNOP::instance () ;
130
+ encoder = undefined ;
125
131
}
126
132
encoder_ptr = encoder;
127
133
writer_ptr = encoder;
@@ -134,7 +140,7 @@ class EncodedAudioOutput : public ModifyingOutput {
134
140
135
141
void setDecoder (AudioDecoder *decoder) {
136
142
if (decoder == nullptr ) {
137
- decoder = CodecNOP::instance () ;
143
+ decoder = undefined ;
138
144
}
139
145
decoder_ptr = decoder;
140
146
writer_ptr = decoder;
@@ -152,9 +158,10 @@ class EncodedAudioOutput : public ModifyingOutput {
152
158
TRACED ();
153
159
// Setup notification
154
160
if (to_notify != nullptr ) {
155
- decoder_ptr->removeNotifyAudioChange (*to_notify);
156
161
decoder_ptr->addNotifyAudioChange (*to_notify);
157
162
}
163
+ // Get notifications from decoder
164
+ decoder_ptr->addNotifyAudioChange (*this );
158
165
if (decoder_ptr != undefined || encoder_ptr != undefined) {
159
166
active = true ;
160
167
if (!decoder_ptr->begin (cfg)) active = false ;
@@ -236,13 +243,6 @@ class EncodedAudioOutput : public ModifyingOutput {
236
243
return *this ;
237
244
}
238
245
239
- // / Provide audio info from decoder if relevant
240
- AudioInfo audioInfo () override {
241
- if (decoder_ptr != undefined){
242
- return decoder_ptr->audioInfo ();
243
- }
244
- return ModifyingOutput::audioInfo ();
245
- }
246
246
247
247
protected:
248
248
// AudioInfo info;
@@ -358,6 +358,7 @@ class EncodedAudioStream : public ReformatBaseStream {
358
358
// is_output_notify = false;
359
359
setupReader ();
360
360
ReformatBaseStream::begin ();
361
+ enc_out.addNotifyAudioChange (*this );
361
362
return enc_out.begin (audioInfo ());
362
363
}
363
364
@@ -397,7 +398,14 @@ class EncodedAudioStream : public ReformatBaseStream {
397
398
return *this ;
398
399
};
399
400
400
- AudioInfo audioInfo () override { return enc_out.audioInfo (); }
401
+ AudioInfo audioInfo () override {
402
+ return enc_out.audioInfo ();;
403
+ }
404
+
405
+ void setAudioInfo (AudioInfo newInfo) override {
406
+ ReformatBaseStream::setAudioInfo (newInfo);
407
+ enc_out.setAudioInfo (newInfo);
408
+ }
401
409
402
410
protected:
403
411
EncodedAudioOutput enc_out;
0 commit comments