diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/odr-audioenc.cpp | 51 | 
1 files changed, 21 insertions, 30 deletions
diff --git a/src/odr-audioenc.cpp b/src/odr-audioenc.cpp index 89e8dd1..94e47cc 100644 --- a/src/odr-audioenc.cpp +++ b/src/odr-audioenc.cpp @@ -964,41 +964,30 @@ int main(int argc, char *argv[])      int calls = 0; // for checking      ssize_t read_bytes = 0;      do { -        AACENC_BufDesc in_buf = { 0 }, out_buf = { 0 }; -          // --------------- Read data from the PAD fifo -        int pad_ret; +        int calculated_padlen = 0; +          if (padlen != 0) { -            pad_ret = read(pad_fd, pad_buf, padlen + 1); -        } -        else { -            pad_ret = 0; -        } +            ssize_t pad_ret = read(pad_fd, pad_buf, padlen + 1); +            if((pad_ret < 0 && errno == EAGAIN) || pad_ret == 0) { +                // If this condition passes, there is no data to be read +            } +            else if(pad_ret == padlen + 1) { +                // Otherwise, you're good to go and buffer should contain "count" bytes. +                calculated_padlen = pad_buf[padlen]; +                if (calculated_padlen < 2) { +                    stringstream ss; +                    ss << "Invalid X-PAD length " << calculated_padlen; +                    throw runtime_error(ss.str()); +                } -        if(pad_ret < 0 && errno == EAGAIN) { -            // If this condition passes, there is no data to be read -            in_buf.numBufs = 1;    // Samples; -        } -        else if(pad_ret >= 0) { -            // Otherwise, you're good to go and buffer should contain "count" bytes. -            in_buf.numBufs = 2;    // Samples + Data; -            if (pad_ret > 0)                  status |= STATUS_PAD_INSERTED; -        } -        else { -            // Some other error occurred during read. -            fprintf(stderr, "Unable to read from PAD!\n"); -                        break; -        } - -        int calculated_padlen = 0; -        if (pad_ret == padlen + 1) { -            calculated_padlen = pad_buf[padlen]; -            if (calculated_padlen < 2) { -                stringstream ss; -                ss << "Invalid X-PAD length " << calculated_padlen; -                throw runtime_error(ss.str()); +            } +            else { +                // Some other error occurred during read. +                fprintf(stderr, "Unable to read from PAD!\n"); +                break;              }          } @@ -1163,6 +1152,7 @@ int main(int argc, char *argv[])          int numOutBytes = 0;          if (read_bytes and                  selected_encoder == encoder_selection_t::fdk_dabplus) { +            AACENC_BufDesc in_buf = { 0 }, out_buf = { 0 };              AACENC_InArgs in_args = { 0 };              AACENC_OutArgs out_args = { 0 };              // -------------- AAC Encoding @@ -1184,6 +1174,7 @@ int main(int argc, char *argv[])              in_args.numInSamples = input_buf.size()/BYTES_PER_SAMPLE;              in_args.numAncBytes = calculated_padlen; +            in_buf.numBufs = calculated_padlen ? 2 : 1;    // Samples + Data / Samples              in_buf.bufs = (void**)&in_ptr;              in_buf.bufferIdentifiers = in_identifier;              in_buf.bufSizes = in_size;  | 
