audio.cpp

Some testing code for audio classes.

// Copyright (C) 2010 David Sugar, Tycho Softworks.
//
// This file is part of GNU uCommon C++.
//
// GNU uCommon C++ is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
//
// GNU uCommon C++ is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with GNU uCommon C++.  If not, see <http://www.gnu.org/licenses/>.

#include <config.h>
#include <ucommon/audio.h>

using namespace UCOMMON_NAMESPACE;

static const audiocodec *ac = NULL;
static unsigned relcount = 0;
static uint8_t buftest;

class debugbuffer : public audiobuffer
{
private:
    debugbuffer() {
        buffer = &buftest;
        state = ACTIVE;
        // we assume overlay data remains correct at construction...
        assert(channel == ac);
        assert(backpos == 0);
        assert(backstore != 0);
    }

    void release(void) {
        // we assume overlay data remains intact for life of object...
        assert(channel->basetype() == ac->basetype());
        assert(backpos == 0);
        assert(backstore != 0);
        ++relcount;
        audiobuffer::release();
    }

    unsigned offset(void) {
        return sizeof(debugbuffer);
    }

public:
    static void attach(audiobuffer *buffer) {
        caddr_t cp = (caddr_t)buffer;
        new(cp) debugbuffer();
    }

    static encoded_t bufof(audiobuffer *buffer) {
        return ((debugbuffer *)buffer)->getBuffer();
    }
};

int main(int argc, char **argv)
{
    ac = audiocodec::get("pcmu");
    assert(ac != NULL);

    audiobuffer *buffer = audiobuffer::create(ac, 0);
    assert(buffer != NULL);

    debugbuffer::attach(buffer);

    assert(debugbuffer::bufof(buffer) == &buftest);

    buffer->release();
    assert(relcount == 1);
    assert(debugbuffer::bufof(buffer) == NULL);

    audio::release(buffer);
    assert(relcount == 2);
}
    

Generated by  doxygen 1.6.2-20100208