Commit b900e1f5 authored by sagnowski's avatar sagnowski
Browse files

Fix problems with command line interface

Fixes include:
  - fix for broken `-l` flag
  - sampling rate flag no longer required when using wav files
  - improved handling of required CLI arguments
  - fix for issues with input metadata flag
parent 43c38ed7
Loading
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -262,12 +262,18 @@ int main(
    /*------------------------------------------------------------------------------------------*
     * Open input audio file
     *------------------------------------------------------------------------------------------*/

    if ( AudioFileReader_open( &audioReader, arg.inputWavFilename, arg.inputFs ) != IVAS_ERR_OK )
    int32_t inFileSampleRate = 0;
    if ( AudioFileReader_open( &audioReader, arg.inputWavFilename, &inFileSampleRate ) != IVAS_ERR_OK )
    {
        fprintf( stderr, "\nCan't open %s\n\n", arg.inputWavFilename );
        goto cleanup;
    }
    if ( inFileSampleRate != 0 && /* inFileSampleRate will remain zero if input file is raw PCM */
         inFileSampleRate != arg.inputFs )
    {
        fprintf( stderr, "Sampling rate mismatch: %d Hz requested, but %d Hz found in file %s\n", arg.inputFs, inFileSampleRate, arg.inputWavFilename );
        goto cleanup;
    }

    /*------------------------------------------------------------------------------------------*
     * Open output bitstream file
+422 −331

File changed.

Preview size limit exceeded, changes collapsed.

+9 −13
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@

#include "audio_file_reader.h"
#include "tinywavein_c.h"
#include <stdint.h>
#include <stdio.h>
#include "wmops.h"

@@ -54,12 +55,13 @@ static int8_t AudioFileReader_open_raw(
static int8_t AudioFileReader_open_wav(
    AudioFileReader *self,
    const char *fileName,
    uint32_t expSampleRate )
    int32_t *sampleRate )
{
    uint32_t sampleRate, samplesInFile;
    uint32_t sampleRate_, samplesInFile;
    int16_t bps;

    self->wavFile = OpenWav( fileName, &sampleRate, &self->numChannels, &samplesInFile, &bps );
    self->wavFile = OpenWav( fileName, &sampleRate_, &self->numChannels, &samplesInFile, &bps );
    *sampleRate = sampleRate_;

    if ( !self->wavFile )
    {
@@ -67,12 +69,6 @@ static int8_t AudioFileReader_open_wav(
        return -1;
    }

    if ( sampleRate != expSampleRate )
    {
        fprintf( stderr, "Input wav file has unexpected samplerate (should be %d): %s\n", expSampleRate, fileName );
        return -1;
    }

    return 0;
}

@@ -81,7 +77,7 @@ static int8_t AudioFileReader_open_wav(
ivas_error AudioFileReader_open(
    AudioFileReader **audioReader, /* o  : AudioFileReader handle                   */
    const char *fileName,          /* i  : path to wav/raw pcm file                 */
    uint32_t expSampleRate         /* i  : expected sample rate                */
    int32_t *sampleRate            /* o  : sample rate of wav file, unused with pcm */
)
{
    AudioFileReader *self;
@@ -108,7 +104,7 @@ ivas_error AudioFileReader_open(

    if ( fileNameLen > wavSuffixLen && strncmp( fileName + fileNameLen - wavSuffixLen, wavSuffix, wavSuffixLen ) == 0 )
    {
        retCode = AudioFileReader_open_wav( self, fileName, expSampleRate );
        retCode = AudioFileReader_open_wav( self, fileName, sampleRate );
    }
    else
    {
+3 −3
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ typedef struct AudioFileReader AudioFileReader;
ivas_error AudioFileReader_open(
    AudioFileReader **audioReader,            /* o  : AudioFileReader handle                    */
    const char *fileName,                     /* i  : path to wav/raw pcm file                  */
    uint32_t expSampleRate                    /* i  : expected sample rate                */
    int32_t *sampleRate                       /* o  : sample rate of wav file, unused with pcm  */
);

/*! r: number of read samples */
+12 −22
Original line number Diff line number Diff line
@@ -208,9 +208,8 @@ static int16_t parseOpts( int32_t argc,
        }

        /* If current argument is a recognized option or no more arguments left, parse current option into output struct*/
        if ( nextOpt != NULL || argIdx + 1 == argc )
        if ( nextOpt != NULL )
        {
            /* currOpt will be NULL when first nextOpt matches */
            if ( currOpt != NULL )
            {
                parseOption( currOpt->props.id, &argv[currOptIdx + 1], numValues, pOutputStruct );
@@ -225,21 +224,11 @@ static int16_t parseOpts( int32_t argc,
        }
    }

    return 0;
}

static int16_t validateOpts( const Option *opts,
                             int32_t numOpts )
{
    for ( int32_t i = 0; i < numOpts; ++i )
    {
        const Option *currOpt = &opts[i];

        if ( currOpt->props.isRequired && !currOpt->hasBeenParsed )
    /* Parse last option */
    if ( currOpt != NULL )
    {
            fprintf( stderr, "Error: option --%s (-%s) is required, but was not provided\n", currOpt->props.match, currOpt->props.matchShort );
            return -1;
        }
        parseOption( currOpt->props.id, &argv[currOptIdx + 1], numValues, pOutputStruct );
        currOpt->hasBeenParsed = 1;
    }

    return 0;
@@ -361,15 +350,16 @@ int16_t CmdLnParser_parseArgs( int32_t argc,
        goto fail;
    }

    /* Validate parsed options */
    if ( validateOpts( opts, numOptions ) != 0 )
    {
        goto fail;
    }

    return 0;

fail:
    printUsage( argv[0], optionProps, numOptions );
    return -1;
}

void CmdLnParser_printUsage( char *executableName,
                             const CmdLnParser_Option *options,
                             int32_t numOptions )
{
    printUsage( executableName, options, numOptions );
}
Loading