Nifty!
Where are you getting the clone?
Matt
Waldemar Haszlakiewicz wrote:
A few weeks ago I posted a bug report on DX MIDI in thread. Now Stephan found a beautiful solution with clone deleting technique, where here is another upgrade to that idea. The code below doesn't lend in the bug zone no matter what size the data is (well from 1 to 44 bytes of data can be send in single streamPointer).
So thanks Stephan.
Peace Waldemar
pStreamPointer = KsPinGetLeadingEdgeStreamPointer( pin, KSSTREAM_POINTER_STATE_LOCKED ); //Set and send data to DX driver. if ( SUCCESS( Status ) ) { //DX driver uses DMUS_EVENTHEADER. // //typedef struct _DMUS_EVENTHEADER //{ // DWORD cbEvent; Unrounded bytes in event // DWORD dwChannelGroup; Channel group of event // REFERENCE_TIME rtDelta; Delta from start time of entire buffer // DWORD dwFlags; Flags DMUS_EVENT_xxx //} DMUS_EVENTHEADER; // //Initialize. pData = (DMUS_EVENTHEADER*)pStreamPointer_clone->OffsetOut.Data; pData_midi = (BYTE*)( pData + 1 ); byteCount = pMidiCommand->offsetInData;
//Set dataUsed and DMUS_EVENTHEADER. pStreamPointer_clone->StreamHeader->DataUsed = DMUS_EVENT_SIZE( byteCount ); pData->cbEvent = byteCount; pData->dwChannelGroup = 0; pData->rtDelta = 0; if ( byteCount > 3 ) { pData->dwFlags = 0; //no order (DMUS_EVENT_STRUCTURED) } else { pData->dwFlags = DMUS_EVENT_STRUCTURED; }
//Set data. RtlCopyBytes( pData_midi, &pMidiCommand->data, byteCount );
//Set the streamPointer. pStreamPointer_clone->StreamHeader->PresentationTime.Time = pMidiCommand->timeStamp; pStreamPointer_clone->StreamHeader->PresentationTime.Denominator = 1; pStreamPointer_clone->StreamHeader->PresentationTime.Numerator = 1; pStreamPointer_clone->StreamHeader->OptionsFlags |= KSSTREAM_HEADER_OPTIONSF_TIMEVALID;
//Advance streamPointer and unlock it (the brute force way). KsStreamPointerAdvanceOffsetsAndUnlock( pStreamPointer, 0, 0, TRUE ); } return; }
******************
WDMAUDIODEV addresses: Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx Subscribe: mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe Unsubscribe: mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe Moderator: mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx
URL to WDMAUDIODEV page: http://www.wdmaudiodev.de/
******************
WDMAUDIODEV addresses: Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx Subscribe: mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe Unsubscribe: mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe Moderator: mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx
URL to WDMAUDIODEV page: http://www.wdmaudiodev.de/