static PmTimestamp pm_time_get(midiwinmm_type m) { MMTIME mmtime; MMRESULT wRtn; mmtime.wType = TIME_TICKS; mmtime.u.ticks = 0; wRtn = midiStreamPosition(m->handle.stream, &mmtime, sizeof(mmtime)); assert(wRtn == MMSYSERR_NOERROR); return mmtime.u.ticks; }
static DWORD midi_get_tick(void) { MMRESULT rv; MMTIME mmtime; mmtime.wType = TIME_TICKS; rv = midiStreamPosition(midiStream, &mmtime, sizeof(MMTIME)); if (rv != MMSYSERR_NOERROR) { midi_error(rv, "WinMM midi_get_tick midiStreamPosition"); return 0; } return mmtime.u.ticks; }
static void test_position(HMIDISTRM hm, UINT typein, UINT typeout) { MMRESULT rc; MMTIME mmtime; mmtime.wType = typein; rc = midiStreamPosition(hm, &mmtime, sizeof(MMTIME)); /* Ugly, but a single ok() herein enables using the todo_wine prefix */ ok(!rc && (mmtime.wType == typeout), "midiStreamPosition type %x converted to %x rc=%s\n", typein, mmtime.wType, mmsys_error(rc)); if (!rc) switch(mmtime.wType) { case TIME_MS: trace("Stream position %ums\n", mmtime.u.ms); break; case TIME_TICKS: trace("Stream position %u ticks\n", mmtime.u.ticks); break; case TIME_MIDI: trace("Stream position song pointer %u\n", mmtime.u.midi.songptrpos); break; } }