示例#1
0
void CCore::ApplyConsoleSettings ( void )
{
    CVector2D vec;
    CConsole * pConsole = m_pLocalGUI->GetConsole ();

    CVARS_GET ( "console_pos", vec );
    pConsole->SetPosition ( vec );
    CVARS_GET ( "console_size", vec );
    pConsole->SetSize ( vec );
}
示例#2
0
void Play(const char* path, ColorType colorType)
{
    CConsole::SetTitle("准备播放:%s", path);
    CFFMpeg cff(path);
    cff.InitVideo();
    cff.InitAudio();
    int inWidth = 0, inHeight = 0;
    cff.GetInSize(inWidth, inHeight);
    if (!inWidth || !inHeight)return;
    COORD cr;
    CConsole c;
    if (!c.GetSize().X || !c.GetSize().Y)return;
    if (inWidth + CConsole::m_DEFAULT_FONT_COORD.X - 1 <= c.GetSize().X*CConsole::m_DEFAULT_FONT_COORD.X&&
        inHeight + CConsole::m_DEFAULT_FONT_COORD.Y - 1 <= c.GetSize().Y*CConsole::m_DEFAULT_FONT_COORD.Y)
    {
        cr.X = (inWidth + CConsole::m_DEFAULT_FONT_COORD.X - 1) / CConsole::m_DEFAULT_FONT_COORD.X;
        cr.Y = (inHeight + CConsole::m_DEFAULT_FONT_COORD.Y - 1) / CConsole::m_DEFAULT_FONT_COORD.Y;
    }
    else
    {
        double bd = double(inWidth) / inHeight,
            cd = double(c.GetSize().X*CConsole::m_DEFAULT_FONT_COORD.X) / c.GetSize().Y / CConsole::m_DEFAULT_FONT_COORD.Y;
        if (bd <= cd)
        {
            cr.Y = c.GetSize().Y;
            cr.X = SHORT(c.GetSize().Y*CConsole::m_DEFAULT_FONT_COORD.Y*bd / CConsole::m_DEFAULT_FONT_COORD.X);
        }
        else
        {
            cr.X = c.GetSize().X;
            cr.Y = SHORT(c.GetSize().X*CConsole::m_DEFAULT_FONT_COORD.X / bd / CConsole::m_DEFAULT_FONT_COORD.Y);
        }
    }
    c.SetSize(cr);
    cff.SetOutSize(cr.X, cr.Y);
    if (ColorType::MONO == colorType)
        for (int i = 0, j = 0; i < 0x1000000; i += 0x111111, ++j)
            colorTable[j] = i;
    c.SetColorTable(colorTable);
    bool bWaveStart = false, bVideoStart = false;
    auto closeHandle = [](HANDLE p) {CloseHandle(p); };
    unique_ptr<void, decltype(closeHandle)> hStartEvent(CreateEvent(nullptr, FALSE, FALSE, nullptr), closeHandle);
    HANDLE hStartEvent_ = hStartEvent.get();
    CAudio audio((WORD)cff.GetChannels(), (DWORD)cff.GetSampleRate(), (WORD)cff.GetBitsPerSample(), bWaveStart, bVideoStart, hStartEvent_);
    CVideo video(c, (DWORD)cff.GetDuration(), colorType, bWaveStart, bVideoStart, hStartEvent.get(), path, colorTable);
    bool bForce = cff.ReadFrames([](CFFMpeg::StreamType type, uint8_t * data, int len, int64_t ts, CAudio& audio, CVideo& video)
    {
        if (_kbhit() && 0x1b == _getch())return true;
        switch (type)
        {
        case CFFMpeg::StreamType::AUDIO:
            audio.Push(data, len);
            break;
        case CFFMpeg::StreamType::VIDEO:
            video.Push(data, len, ts);
            break;
        }
        return false;
    }, audio, video);
    audio.Stop(bForce);
    video.Stop(bForce);
}