# HG changeset patch # User John W. Eaton # Date 1420740532 18000 # Node ID c5b8a91baec69acb3fb3a17ac272097abd7df871 # Parent cbd5d36c54728b66919f92c534e647d56afca77b avoid unnecessary use of pointer in audio code * audiodevinfo.cc (audioplayer::get_left): Return RowVector instead of pointer to RowVector. Method is now const. Change all uses. (audioplayer::get_right): Likewise. Handle case of single channel audio here. (portaudio_play_callback): Not here. diff -r cbd5d36c5472 -r c5b8a91baec6 libinterp/dldfcn/audiodevinfo.cc --- a/libinterp/dldfcn/audiodevinfo.cc Thu Jan 08 12:51:35 2015 -0500 +++ b/libinterp/dldfcn/audiodevinfo.cc Thu Jan 08 13:08:52 2015 -0500 @@ -458,8 +458,8 @@ void set_y (octave_function *fn); void set_y (std::string fn); Matrix& get_y (void); - RowVector *get_left (void); - RowVector *get_right (void); + RowVector get_left (void) const; + RowVector get_right (void) const; void set_fs (int fs); int get_fs (void); void set_nbits (int nbits); @@ -603,13 +603,9 @@ audioplayer *player = static_cast (data); int big_endian = is_big_endian (); int channels = player->get_channels (); - RowVector *sound_l = player->get_left (); - RowVector *sound_r; - - if (channels > 1) - sound_r = player->get_right (); - else - sound_r = sound_l; + + const RowVector sound_l = player->get_left (); + const RowVector sound_r = player->get_right (); for (unsigned long j = 0, k = 0; j < frames; j++, k += 2) { @@ -622,20 +618,20 @@ if (player->get_nbits () == 8) { int8_t *buffer = static_cast (output); - buffer[k] = sound_l->elem (sample_number) * (pow (2.0, 7) - 1); - buffer[k + 1] = sound_r->elem (sample_number) * (pow (2.0, 7) - 1); + buffer[k] = sound_l.elem (sample_number) * (pow (2.0, 7) - 1); + buffer[k + 1] = sound_r.elem (sample_number) * (pow (2.0, 7) - 1); } else if (player->get_nbits () == 16) { int16_t *buffer = static_cast (output); - buffer[k] = sound_l->elem (sample_number) * (pow (2.0, 15) - 1); - buffer[k + 1] = sound_r->elem (sample_number) * (pow (2.0, 15) - 1); + buffer[k] = sound_l.elem (sample_number) * (pow (2.0, 15) - 1); + buffer[k + 1] = sound_r.elem (sample_number) * (pow (2.0, 15) - 1); } else if (player->get_nbits () == 24) { uint8_t *buffer = static_cast (output); - int32_t sample_l = sound_l->elem (sample_number) * (pow (2.0, 23) - 1); - int32_t sample_r = sound_r->elem (sample_number) * (pow (2.0, 23) - 1); + int32_t sample_l = sound_l.elem (sample_number) * (pow (2.0, 23) - 1); + int32_t sample_r = sound_r.elem (sample_number) * (pow (2.0, 23) - 1); sample_l &= 0x00ffffff; sample_r &= 0x00ffffff; // FIXME: Would a mask work better? @@ -652,20 +648,20 @@ else if (player->get_type () == INT8) { int8_t *buffer = static_cast (output); - buffer[k] = sound_l->elem (sample_number); - buffer[k + 1] = sound_r->elem (sample_number); + buffer[k] = sound_l.elem (sample_number); + buffer[k + 1] = sound_r.elem (sample_number); } else if (player->get_type () == UINT8) { uint8_t *buffer = static_cast (output); - buffer[k] = sound_l->elem (sample_number); - buffer[k + 1] = sound_r->elem (sample_number); + buffer[k] = sound_l.elem (sample_number); + buffer[k + 1] = sound_r.elem (sample_number); } else if (player->get_type () == INT16) { int16_t *buffer = static_cast (output); - buffer[k] = sound_l->elem (sample_number); - buffer[k + 1] = sound_r->elem (sample_number); + buffer[k] = sound_l.elem (sample_number); + buffer[k + 1] = sound_r.elem (sample_number); } player->set_sample_number (sample_number + 1); } @@ -801,16 +797,16 @@ return y; } -RowVector * -audioplayer::get_left (void) +RowVector +audioplayer::get_left (void) const { - return &(left); + return left; } -RowVector * -audioplayer::get_right (void) +RowVector +audioplayer::get_right (void) const { - return &(right); + return channels == 1 ? left : right; } void