SoundDevice::Caps CWaveDevice::InternalGetDeviceCaps() //-------------------------------------------------- { MPT_TRACE(); SoundDevice::Caps caps; caps.Available = true; caps.CanUpdateInterval = true; caps.CanSampleFormat = true; caps.CanExclusiveMode = (GetDeviceIndex() > 0); // no direct mode for WAVE_MAPPER, makes no sense there caps.CanBoostThreadPriority = true; caps.CanKeepDeviceRunning = false; caps.CanUseHardwareTiming = false; caps.CanChannelMapping = false; caps.CanInput = false; caps.HasNamedInputSources = false; caps.CanDriverPanel = false; caps.HasInternalDither = false; caps.ExclusiveModeDescription = MPT_USTRING("Use direct mode"); if(GetSysInfo().IsWine) { caps.DefaultSettings.sampleFormat = SampleFormatInt16; } else if(GetSysInfo().WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista)) { caps.DefaultSettings.sampleFormat = SampleFormatFloat32; } else { caps.DefaultSettings.sampleFormat = SampleFormatInt16; } return caps; }
/** * @brief Initialize JPEG manager. * @retval 0 Success. * @retval -1 Fail. */ int JpgMngInit() { if((pSysinfo = GetSysInfo()) == NULL){ JPG_ERR("Can't get system info!!\n"); return -1; } if( pthread_mutex_init(&gJpgMutex, NULL) != 0 ){ pSysinfo = NULL; JPG_ERR("Mutex create faill!!\n"); return -1; } if( pthread_mutex_init(&gJpgConMutex, NULL) != 0 ){ pSysinfo = NULL; pthread_mutex_destroy(&gJpgMutex); JPG_ERR("Mutex create faill!!\n"); return -1; } if(pthread_create(&gJpgMngThr, NULL, JpgMngThr, NULL)){ pSysinfo = NULL; pthread_mutex_destroy(&gJpgMutex); pthread_mutex_destroy(&gJpgConMutex); JPG_ERR("JpgMngThr create faill!!\n"); return -1; } gJpgState = JPG_INT_STATE; return 0; }
/** * @brief Alarm server main loop * @param qid [I ] Message queue ID used to receive alarm message. * @param hAlarmSem [I ] Semaphore to control access to alarm server globals. * @return 0 on alarm server normal end. */ int alarm_main_loop(int qid, int audQid, SemHandl_t hAlarmSem) { ALARM_MSG_BUF msgbuf; int msg_size,ret = 0; AlarmParam_t* pEvironment; pthread_t thread; pAlarmSysInfo = GetSysInfo(); if((hGIOSem = MakeSem()) == NULL){ return -1; } while(1){ /* Get Message */ msg_size = msgrcv( qid, &msgbuf, sizeof(msgbuf) - sizeof(long), MSG_TYPE_MSG1, 0); if( msg_size < 0 ){ printf("Alarm Receive msg fail \n"); ret = -1; break; } else if(msgbuf.src == MSG_TYPE_MSG1 || msgbuf.src < 0){ printf("Got Error message\n"); ret = -1; break; } else if(msgbuf.event == ALARM_EVENT_QUIT){ printf("Recieved Quit event\n"); break; } else if(IsRestart()){ // If already restart flag is set then ignore the messages continue; } else { /* Process alarm event */ pEvironment = (AlarmParam_t*)malloc(sizeof(AlarmParam_t)); if(pEvironment == NULL){ printf("Error: More memory need for Alarm server\n"); break; } pEvironment -> msg_id = qid; pEvironment -> audMsg_id = audQid; pEvironment->hAlarmSem = hAlarmSem; memcpy(&pEvironment -> msg_buf, &msgbuf, sizeof(msgbuf)); if((ret = pthread_create(&thread, NULL, ProcAlarmThread, pEvironment)) != 0){ free(pEvironment); printf("Error: Alarm server creat thread fail\n"); break; } pthread_detach(thread); } } DestroySem(hGIOSem); return ret; }
int RTSP_AudioRecvON(void) { char opt[128]; SysInfo *pSysInfo = GetSysInfo(); if(pSysInfo == NULL) return -1; if(pSysInfo->audio_config.audiorecvenable) { sprintf(opt,"./audio-receiver rtsp://%s &\n", pSysInfo->audio_config.audioServerIp); fprintf(stderr,"%s",opt); system(opt); } return 0; }
int GetRTSPStreamOption(void) { int nExtFunc = 0; SysInfo *pSysInfo = GetSysInfo(); if(pSysInfo == NULL) return -1; if(pSysInfo->audio_config.audioenable == 0) nExtFunc |= RTSP_MUTE; if(pSysInfo->audio_config.codectype != 0) nExtFunc |= RTSP_AAC; if(pSysInfo->codec_advconfig[0].meConfig>>1) nExtFunc |= RTSP_SVC; if(pSysInfo->lan_config.net.multicast_enable) nExtFunc |= RTSP_MULTICAST; return nExtFunc; }
bool CWaveDevice::InternalOpen() //------------------------------ { MPT_TRACE(); if(m_Settings.InputChannels > 0) { return false; } WAVEFORMATEXTENSIBLE wfext; if(!FillWaveFormatExtensible(wfext, m_Settings)) { return false; } WAVEFORMATEX *pwfx = &wfext.Format; UINT nWaveDev = GetDeviceIndex(); nWaveDev = (nWaveDev > 0) ? nWaveDev - 1 : WAVE_MAPPER; m_ThreadWakeupEvent = CreateEvent(NULL, FALSE, FALSE, NULL); if(m_ThreadWakeupEvent == INVALID_HANDLE_VALUE) { InternalClose(); return false; } m_Failed = false; m_DriverBugs = 0; m_hWaveOut = NULL; if(waveOutOpen(&m_hWaveOut, nWaveDev, pwfx, (DWORD_PTR)WaveOutCallBack, (DWORD_PTR)this, CALLBACK_FUNCTION | (m_Settings.ExclusiveMode ? WAVE_FORMAT_DIRECT : 0)) != MMSYSERR_NOERROR) { InternalClose(); return false; } if(waveOutPause(m_hWaveOut) != MMSYSERR_NOERROR) { InternalClose(); return false; } m_nWaveBufferSize = Util::Round<int32>(m_Settings.UpdateInterval * pwfx->nAvgBytesPerSec); m_nWaveBufferSize = Util::AlignUp<uint32>(m_nWaveBufferSize, pwfx->nBlockAlign); m_nWaveBufferSize = mpt::clamp(m_nWaveBufferSize, static_cast<uint32>(WAVEOUT_MINBUFFERFRAMECOUNT * pwfx->nBlockAlign), static_cast<uint32>(Util::AlignDown<uint32>(WAVEOUT_MAXBUFFERSIZE, pwfx->nBlockAlign))); std::size_t numBuffers = Util::Round<int32>(m_Settings.Latency * pwfx->nAvgBytesPerSec / m_nWaveBufferSize); numBuffers = mpt::clamp(numBuffers, WAVEOUT_MINBUFFERS, WAVEOUT_MAXBUFFERS); m_nPreparedHeaders = 0; m_WaveBuffers.resize(numBuffers); m_WaveBuffersData.resize(numBuffers); for(std::size_t buf = 0; buf < numBuffers; ++buf) { MemsetZero(m_WaveBuffers[buf]); m_WaveBuffersData[buf].resize(m_nWaveBufferSize); m_WaveBuffers[buf].dwFlags = 0; m_WaveBuffers[buf].lpData = &m_WaveBuffersData[buf][0]; m_WaveBuffers[buf].dwBufferLength = m_nWaveBufferSize; if(waveOutPrepareHeader(m_hWaveOut, &m_WaveBuffers[buf], sizeof(WAVEHDR)) != MMSYSERR_NOERROR) { break; } m_WaveBuffers[buf].dwFlags |= WHDR_DONE; m_nPreparedHeaders++; } if(!m_nPreparedHeaders) { InternalClose(); return false; } m_nBuffersPending = 0; m_nWriteBuffer = 0; m_nDoneBuffer = 0; { MPT_LOCK_GUARD<mpt::mutex> guard(m_PositionWraparoundMutex); MemsetZero(m_PositionLast); m_PositionWrappedCount = 0; } SetWakeupEvent(m_ThreadWakeupEvent); SetWakeupInterval(m_nWaveBufferSize * 1.0 / m_Settings.GetBytesPerSecond()); m_Flags.NeedsClippedFloat = GetSysInfo().WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista); return true; }
bool Application::Birth() { CoInitializeEx(NULL,NULL); Globals.Exiting = false; srand(GetTickCount()); Input::I = new Input::Input_t; //===[ КОНФИГУРАЦИЯ ]=========================================================================== ReadConfig(); //===[ КОНФИГУРАЦИЯ ]=========================================================================== CCons.INIT(); #ifdef WIN32 WNDCLASSEX wc; DWORD dwExStyle; DWORD dwStyle; RECT WindowRect; WindowRect.left = 0L; WindowRect.top = 0L; WindowRect.right = Globals.VP.Width; WindowRect.bottom = Globals.VP.Height; Application::Vars.App.HInstance = GetModuleHandle(NULL); memset(&wc,0,sizeof(WNDCLASSEX)); wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW|CS_VREDRAW|CS_OWNDC; wc.lpfnWndProc = (WNDPROC) WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = Application::Vars.App.HInstance; wc.hIcon = LoadIcon(Application::Vars.App.HInstance,MAKEINTRESOURCE(IDI_ICON1)); wc.hIconSm = LoadIcon(Application::Vars.App.HInstance,MAKEINTRESOURCE(IDI_ICON1)); wc.hCursor = LoadCursor(0, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+2);//NULL; wc.lpszMenuName = NULL; wc.lpszClassName = MY_WINDOW_CLASS_NAME; FASSERT(RegisterClassEx(&wc)); if(IsFullScreen) { EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS,&Application::Vars.win.PrevDS); memset(&Application::Vars.win.CurrDS, 0, sizeof(Application::Vars.win.CurrDS)); Application::Vars.win.CurrDS.dmSize = sizeof(Application::Vars.win.CurrDS); Application::Vars.win.CurrDS.dmPelsWidth = Globals.VP.Width; Application::Vars.win.CurrDS.dmPelsHeight = Globals.VP.Height; Application::Vars.win.CurrDS.dmBitsPerPel = Globals.VP.Bits; Application::Vars.win.CurrDS.dmFields = DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT|DM_DISPLAYFREQUENCY; Application::Vars.win.CurrDS.dmDisplayFrequency=Globals.VP.Hzs; if(ChangeDisplaySettings(&Application::Vars.win.CurrDS,CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) { if(MessageBox(0, "Cannot run in fullscreen mode!\nRun in window?", "Hardware trouble!", MB_YESNO|MB_ICONEXCLAMATION) == IDYES) { IsFullScreen = false; } else { MessageBox(0, "OK!!! I'm quit...", "!!!", MB_OK | MB_ICONQUESTION); PostQuitMessage(1); return NO_ERROR; }; }; }; if(IsFullScreen) { dwExStyle = WS_EX_APPWINDOW/* | WS_EX_TOPMOST*/; // WS_EX_TOPMOST - Поверх всех окон dwStyle = WS_POPUP; } else { // ВНИМАНИЕ Здесь обнаружены глюки при использовании nView от nVidia! dwExStyle = WS_EX_APPWINDOW | WS_EX_WINDOWEDGE; dwStyle = WS_OVERLAPPEDWINDOW; }; ShowCursor(false); AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle); if (WindowRect.left < 0) WindowRect.right -= WindowRect.left,WindowRect.left = 0; if (WindowRect.top < 0) WindowRect.bottom -= WindowRect.top,WindowRect.top = 0; Application::Vars.win.MHWnd = CreateWindowEx( dwExStyle, MY_WINDOW_CLASS_NAME, MY_WINDOW_NAME, dwStyle | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, WindowRect.left, WindowRect.top, WindowRect.right - WindowRect.left, WindowRect.bottom - WindowRect.top, NULL, NULL, GetModuleHandle(0), NULL ); FASSERT(Application::Vars.win.MHWnd); ShowWindow(Application::Vars.win.MHWnd, SW_SHOW); SetForegroundWindow(Application::Vars.win.MHWnd); SetFocus(Application::Vars.win.MHWnd); // Получаем контекст устройства Application::Vars.win.DC = GetDC(Application::Vars.win.MHWnd); FASSERT(Application::Vars.win.DC); // Установка формата пикселей PIXELFORMATDESCRIPTOR mainPFD; memset(&mainPFD,0,sizeof(PIXELFORMATDESCRIPTOR)); mainPFD.nSize = sizeof(PIXELFORMATDESCRIPTOR); mainPFD.nVersion = 1; mainPFD.iPixelType = PFD_TYPE_RGBA; mainPFD.dwFlags = PFD_DRAW_TO_WINDOW |PFD_DOUBLEBUFFER |PFD_SUPPORT_OPENGL; mainPFD.iLayerType = PFD_MAIN_PLANE; mainPFD.cDepthBits = 16; int PF; PF = ChoosePixelFormat(Application::Vars.win.DC,&mainPFD); FASSERT(PF); // Выбрали! FASSERT(SetPixelFormat(Application::Vars.win.DC,PF,&mainPFD)); // Поставили! // Создание контекста рендера Application::Vars.win.RC = wglCreateContext (Application::Vars.win.DC); FASSERT(Application::Vars.win.RC); // Установка полученого контекста главным FASSERT(wglMakeCurrent (Application::Vars.win.DC, Application::Vars.win.RC)); #else dpy = XOpenDisplay(0); // Открываем дисплей по-умолчанию (может быть сетевой) vi = glXChooseVisual( dpy, // Получаем подходящий визуал DefaultScreen(dpy), attributeList); cx = glXCreateContext(dpy, vi, 0, GL_TRUE); // Создание контекста // create a color map cmap = XCreateColormap(dpy, RootWindow(dpy, vi->screen), vi->visual, AllocNone); // Создаём окно swa.colormap = cmap; swa.border_pixel = 0; swa.event_mask = StructureNotifyMask; win = XCreateWindow(dpy, RootWindow(dpy, vi->screen), 0, 0, 100, 100, 0, vi->depth, InputOutput, vi->visual, CWBorderPixel|CWColormap|CWEventMask, &swa); XMapWindow(dpy, win); XIfEvent(dpy, &event, WaitForNotify, (char*)win); glXMakeCurrent(dpy, win, cx); // Привязка контекста к окну #endif GetSysInfo(); #ifndef _DEBUG if (AVIp.Open("data/VIDEO/logo.avi") == FJC_NO_ERROR) { AVIp.Caching(); GT.Start(); ShowMovie(true); AVIp.CloseAVI(); } else { LF.Logf("Birth","Невозможно загрузить и проиграть заставку"); } #endif // Инициализация библиотек и глобальных объектов InitOpenGL(); // Графика - OpenGL LF.Log("BIRTH","Init OpenGL complete"); InitOpenIL(); // Поддержка изображений - OpenIL(DevIL) LF.Log("BIRTH","Init OpenIL complete"); // инициализация менеджера ресурсов rm.INIT("Consolas.LFont","default.png","cube.lwo"); CCons.SetFont(rm.SELECT_Font("Console")); SimpleLogo.init(&SwapBuffersEXT,IL_PNG,"data/textures/Logos/NewLOGO.PNG"); SimpleLogo.render_logo(FJC_STARTUP_LOGO_MODE_BEGIN); rm.SELECT_Font("Courier")->SetColor(1,0,0); SimpleLogo.render_logo( FJC_STARTUP_LOGO_MODE_PROCEED_WITH_TEXT,1, TextBlock(rm.SELECT_Font("Consolas"),"Now loading, please wait",250.0f,300.0f)); Sound.Init(); TestBuf.Init(); TestBuf.LoadWav("data/sounds/KDE_Startup_new2.wav"); TestSource.Init(); TestSource.LinkWithBufer(&TestBuf); LF.Log("BIRTH","Init OpenAL complete"); InitMATH(); // Математическая библиотека LF.Log("BIRTH","InitMATH"); LF.Msg("Init complete"); LoadResources(); PS.INIT(); return NO_ERROR; };