Exemplo n.º 1
0
/* static */
EventWrapper* EventWrapper::getNewOrExisting (cl_event aHandle) {
    D_METHOD_START;
    EventWrapper* res = 0;
    if (instanceRegistry.findById (aHandle, &res) && res) {
        res->retain ();
        return res;
    }
    return new(std::nothrow) EventWrapper (aHandle);
}
Exemplo n.º 2
0
void DataFileIndexer::getEvents(std::vector<EventWrapper> &return_vector,
                                const std::set<unsigned int> &event_codes_to_match,
                                MWTime lower_bound,
                                MWTime upper_bound) const
{
    EventsIterator ei = getEventsIterator(event_codes_to_match, lower_bound, upper_bound);
    while (true) {
        EventWrapper event = ei.getNextEvent();
        if (event.empty())
            break;
        return_vector.push_back(event);
    }
}
Exemplo n.º 3
0
BEGIN_NAMESPACE_MW_MATLAB


void getEvents(MEXInputs &inputs, MEXOutputs &outputs)
{
    boost::filesystem::path filename;
    std::set<unsigned int> event_codes;
    MWTime lower_bound, upper_bound;
    
    inputs >> filename >> event_codes >> lower_bound >> upper_bound;
    
    std::vector<int> codes;
    std::vector<MWTime> times;
    boost::container::vector<ArrayPtr> values;
    
    try {
        dfindex dfi(filename);
        DataFileIndexer::EventsIterator ei = dfi.getEventsIterator(event_codes, lower_bound,  upper_bound);
        while (true) {
            EventWrapper event = ei.getNextEvent();
            if (event.empty())
                break;
            codes.push_back(event.getEventCode());
            times.push_back(event.getTime());
            values.push_back(convertDatumToArray(scarabDatumToDatum(event.getPayload())));
        }
    } catch (const DataFileIndexerError &e) {
        throwMATLABError("MWorks:DataFileIndexerError", e.what());
    }
    
    if (outputs.count() == 3) {
        outputs << codes;
        outputs << times;
        outputs << values;
    } else {
        const char *fieldNames[] = {"event_code", "time_us", "data"};
        ArrayPtr result(throw_if_null, mxCreateStructMatrix(1, int(codes.size()), 3, fieldNames));
        
        for (std::size_t i = 0; i < codes.size(); i++) {
            mxSetFieldByNumber(result.get(), i, 0, Array::createScalar(codes[i]).release());
            mxSetFieldByNumber(result.get(), i, 1, Array::createScalar(times[i]).release());
            mxSetFieldByNumber(result.get(), i, 2, values[i].release());
        }
        
        outputs << std::move(result);
    }
    
}
Exemplo n.º 4
0
EventWrapper DataFileIndexer::EventsIterator::getNextEvent() {
    EventWrapper event;
    
    while (current_event_block < matching_event_blocks.size()) {
        if ((current_relative_event == dfi.events_per_block) || (current_datum == NULL)) {
            // Advance to the next block
            scarab_seek(dfi.session, matching_event_blocks[current_event_block]->blockOffset(), SEEK_SET);
            current_relative_event = 0;
        }
        
        // Read through the event block
		while (event.empty() && (current_relative_event < dfi.events_per_block) && (current_datum = scarab_read(dfi.session)))
        {
            if (!DataFileUtilities::isScarabEvent(current_datum)) {
                // Skip invalid events
                scarab_free_datum(current_datum);
                continue;
            }
            
			MWTime event_time = DataFileUtilities::getScarabEventTime(current_datum);
			
            // Check the time criterion
            if (event_time >= lower_bound && event_time <= upper_bound) {
				unsigned int event_code = DataFileUtilities::getScarabEventCode(current_datum);
				
                // Check if the event code matches
                if (event_codes_to_match.empty() ||
                    (event_codes_to_match.find(event_code) != event_codes_to_match.end()))
                {
                    event = EventWrapper(current_datum);
                }
			}
			
			scarab_free_datum(current_datum);
			current_relative_event++;
		}
        
        if ((current_relative_event == dfi.events_per_block) || (current_datum == NULL))
            current_event_block++;
        
        if (!event.empty())
            return event;
    }
    
    return event;
}
Exemplo n.º 5
0
Event* EventInstancer::InstanceEvent(Element* target, const Rocket::Core::String& name, const Rocket::Core::Dictionary& parameters, bool interruptable)
{
	EventWrapper* event = NULL;

	try
	{	
		// Convert parameters to a python representation
		python::object params(parameters);

		// Increase reference count on required args
		Py_INCREF(params.ptr());

		// Put the arguments into a tuple
		PyObject* args = PyTuple_New(3);
		PyTuple_SetItem(args, 0, PyString_FromString(name.CString()));
		PyTuple_SetItem(args, 1, params.ptr());
		PyTuple_SetItem(args, 2, PyBool_FromLong(interruptable));
	
		// Instance
		PyObject* instance = PyObject_CallObject(instancer, args);
		Py_DECREF(args);

		// Rebind the target element
		if (instance)
		{
			event = python::extract<EventWrapper*>(Rocket::Core::Python::Utilities::MakeObject(instance));
			if (event)
			{
				event->SetTargetElement(target);
			}
		}
	}
	catch (python::error_already_set&)
	{		
		event = NULL;
	}

	if (!event)
	{
		Rocket::Core::Python::Utilities::PrintError(true);
	}

	return event;
}
Exemplo n.º 6
0
void
ISACTest::EncodeDecode(
    int                testNr,
    ACMTestISACConfig& wbISACConfig,
    ACMTestISACConfig& swbISACConfig)
{
    if(_testMode == 0)
    {
        printf(".");
    }
    else
    {
        printf("\nTest %d:\n\n", testNr);
    }
    char fileNameOut[MAX_FILE_NAME_LENGTH_BYTE];

    // Files in Side A 
    _inFileA.Open(_fileNameSWB, 32000, "rb", true);
    if(_testMode == 0)
    {
        sprintf(fileNameOut,
                "./src/modules/audio_coding/main/test/out_iSACTest_%s_%02d.pcm",
                "A",
                testNr);
    }
    else
    {
        sprintf(fileNameOut,
                "./src/modules/audio_coding/main/test/out%s_%02d.pcm",
                "A",
                testNr);
    }
    _outFileA.Open(fileNameOut, 32000, "wb");

    // Files in Side B
    _inFileB.Open(_fileNameSWB, 32000, "rb", true);
    if(_testMode == 0)
    {
        sprintf(fileNameOut,
                "./src/modules/audio_coding/main/test/out_iSACTest_%s_%02d.pcm",
                "B",
                testNr);
    }
    else
    {
        sprintf(fileNameOut,
                "./src/modules/audio_coding/main/test/out%s_%02d.pcm",
                "B",
                testNr);
    }
    _outFileB.Open(fileNameOut, 32000, "wb");
    
    CHECK_ERROR(_acmA->RegisterSendCodec(_paramISAC16kHz));
    CHECK_ERROR(_acmA->RegisterSendCodec(_paramISAC32kHz));
    
    CHECK_ERROR(_acmB->RegisterSendCodec(_paramISAC32kHz));
    CHECK_ERROR(_acmB->RegisterSendCodec(_paramISAC16kHz));
    if(_testMode != 0)
    {
        printf("Side A Sending Super-Wideband \n");
        printf("Side B Sending Wideband\n\n");
    }

    SetISAConfig(swbISACConfig, _acmA, _testMode);
    SetISAConfig(wbISACConfig,  _acmB, _testMode);

    bool adaptiveMode = false;
    if((swbISACConfig.currentRateBitPerSec == -1) ||
        (wbISACConfig.currentRateBitPerSec == -1))
    {
        adaptiveMode = true;
    }
    _myTimer.Reset();
    _channel_A2B->ResetStats();
    _channel_B2A->ResetStats();

    char currentTime[500];
    if(_testMode == 2) printf("\n");
    CodecInst sendCodec;
    EventWrapper* myEvent = EventWrapper::Create();
    myEvent->StartTimer(true, 10);
    while(!(_inFileA.EndOfFile() || _inFileA.Rewinded()))
    {
        Run10ms();
        _myTimer.Tick10ms();
        _myTimer.CurrentTimeHMS(currentTime);
        if(_testMode == 2) printf("\r%s   ", currentTime);

        if((adaptiveMode) && (_testMode != 0))
        {
            myEvent->Wait(5000);

            _acmA->SendCodec(sendCodec);
            if(_testMode == 2) printf("[%d]  ", sendCodec.rate);
            _acmB->SendCodec(sendCodec);
            if(_testMode == 2) printf("[%d]  ", sendCodec.rate);
        }
    }

    if(_testMode != 0)
    {
        printf("\n\nSide A statistics\n\n");
        _channel_A2B->PrintStats(_paramISAC32kHz);

        printf("\n\nSide B statistics\n\n");
        _channel_B2A->PrintStats(_paramISAC16kHz);
    }
    
    _channel_A2B->ResetStats();
    _channel_B2A->ResetStats();

    if(_testMode != 0) printf("\n");
    _outFileA.Close();
    _outFileB.Close();
    _inFileA.Close();
    _inFileB.Close();
}