acmStreamPrepareHeader problem
-
hallo leute.
folgende sache:
hab noch immer das problem mit der record-play synchronisation.
nun wollt ich das n bisschen anders machen.wenn ich nun pam nach gsm convertieren will, bleibt er mir immer mit dem fehler: MMSYSERR_INVALFLAG bei acmStreamPrepareHeader haengen.
mal n bisschen code:
HACMSTREAM has; MMRESULT mmr; ACMSTREAMHEADER ash; HACMDRIVER had; mmr = acmDriverOpen(&had,testCodec.fdi.hadid,0); if(mmr) { ShowMessage("acmDriverOpen ErrorCode: " + IntToStr(mmr)); return; } mmr = acmStreamOpen(&has,had,wfxSource,wfxTarget,0,0,0,ACM_STREAMOPENF_NONREALTIME); if(mmr) // ACM_STREAMOPENF_NONREALTIME { if(mmr == ACMERR_NOTPOSSIBLE) { ShowMessage("acmStreamOpen ErrorCode: ACMERR_NOTPOSSIBLE"); return; } if(mmr == MMSYSERR_INVALFLAG) { ShowMessage("acmStreamOpen ErrorCode: MMSYSERR_INVALFLAG"); return; } if(mmr == MMSYSERR_INVALHANDLE) { ShowMessage("acmStreamOpen ErrorCode: MMSYSERR_INVALHANDLE"); return; } if(mmr == MMSYSERR_INVALPARAM) { ShowMessage("acmStreamOpen ErrorCode: MMSYSERR_INVALPARAM"); return; } if(mmr == MMSYSERR_NOMEM) { ShowMessage("acmStreamOpen ErrorCode: MMSYSERR_NOMEM"); return; } ShowMessage("acmStreamOpen ErrorCode: " + IntToStr(mmr)); } DWORD outSize = 768; DWORD test; // MMSYSERR_INVALFLAG mmr = acmStreamSize(has,outSize,&test,ACM_STREAMSIZEF_DESTINATION); if(mmr) // ACM_STREAMSIZEF_SOURCE { ShowMessage("acmStreamSize ErrorCode: " + IntToStr(mmr)); } ShowMessage("size: " + IntToStr(test)); memset(&ash,0,sizeof(ash)); char *BufferIn = new char[test]; char *BufferOut = new char[test]; ash.cbStruct = sizeof(ash); ash.fdwStatus = NULL; ash.pbSrc = BufferIn; ash.cbSrcLength = test; ash.pbDst = BufferOut; ash.cbDstLength = outSize; mmr = acmStreamPrepareHeader(has,&ash,sizeof(ACMSTREAMHEADER)); //(1) if(mmr) // MMSYSERR_INVALFLAG { ShowMessage("acmStreamPrepareHeader ErrorCode: " + IntToStr(mmr)); } mmr = acmStreamClose(has,0); if(mmr) { ShowMessage("acmStreamClose ErrorCode: " + IntToStr(mmr)); return; } mmr = acmDriverClose(had,0); if(mmr) { ShowMessage("acmDriverClose ErrorCode: " + IntToStr(mmr)); return; } delete[] BufferIn; delete[] BufferOut;
bei (1) gibts dann immer den fehler. die WAVEFORMATEX strukturen hole ich mir ueber acmFormatChoose. auch die dafuer benoetigten buffer sind groß genug.
sieht hier trotzdem jemand einen fehler warum der immer den fehler auswirft ?Meep Meep