LRESULT Frameserver::SessionAudioInfo(LPARAM lParam, WPARAM lStart) { FrameserverSession *fs = SessionLookup(lParam); if (!fs) return VDSRVERR_BADSESSION; LONG lCount = *(LONG *)fs->arena; LONG cbBuffer = *(LONG *)(fs->arena+4); if (lStart < 0) return VDSRVERR_FAILED; if (lStart + lCount > lAudioSamples) lCount = lAudioSamples - lStart; if (lCount < 0) lCount = 0; *(LONG *)(fs->arena + 0) = aSrc->getWaveFormat()->nBlockAlign * lCount; *(LONG *)(fs->arena + 4) = lCount; return VDSRVERR_OK; }
LRESULT Frameserver::WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CLOSE: DestroyWindow(hWnd); break; case WM_DESTROY: // message: window being destroyed mbExit = true; break; case VDSRVM_BIGGEST: { long size=sizeof(AVISTREAMINFO); if (vSrc) { if (size < sizeof(BITMAPINFOHEADER)) size = sizeof(BITMAPINFOHEADER); if (size < filters.OutputBitmap()->size) size = filters.OutputBitmap()->size; } if (aSrc) { if (size < aSrc->getWaveFormat()->nAvgBytesPerSec) size = aSrc->getWaveFormat()->nAvgBytesPerSec; if (aSrc->getFormatLen()>size) size=aSrc->getFormatLen(); } if (size < 65536) size=65536; VDDEBUG("VDSRVM_BIGGEST: allocate a frame of size %ld bytes\n", size); return size; } case VDSRVM_OPEN: ++lRequestCount; VDDEBUG("VDSRVM_OPEN(arena size %ld, mmap ID %08lx)\n", wParam, lParam); return SessionOpen(lParam, wParam); case VDSRVM_CLOSE: ++lRequestCount; VDDEBUG("[session %08lx] VDSRVM_CLOSE()\n", lParam); return SessionClose(lParam); case VDSRVM_REQ_STREAMINFO: ++lRequestCount; VDDEBUG("[session %08lx] VDSRVM_REQ_STREAMINFO(stream %d)\n", lParam, wParam); return SessionStreamInfo(lParam, wParam); case VDSRVM_REQ_FORMAT: ++lRequestCount; VDDEBUG("[session %08lx] VDSRVM_REQ_FORMAT(stream %d)\n", lParam, wParam); return SessionFormat(lParam, wParam); case VDSRVM_REQ_FRAME: ++lFrameCount; VDDEBUG("[session %08lx] VDSRVM_REQ_FRAME(sample %ld)\n", lParam, wParam); return SessionFrame(lParam, wParam); case VDSRVM_REQ_AUDIO: ++lAudioSegCount; return SessionAudio(lParam, wParam); case VDSRVM_REQ_AUDIOINFO: ++lAudioSegCount; VDDEBUG("[session %08lx] VDSRVM_REQ_AUDIOINFO(sample %ld)\n", lParam, wParam); return SessionAudioInfo(lParam, wParam); default: return mpUIFrame->DefProc(hWnd, message, wParam, lParam); } return (0); }