17c804472Sopenharmony_ci/*
27c804472Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
37c804472Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
47c804472Sopenharmony_ci * you may not use this file except in compliance with the License.
57c804472Sopenharmony_ci * You may obtain a copy of the License at
67c804472Sopenharmony_ci *
77c804472Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
87c804472Sopenharmony_ci *
97c804472Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
107c804472Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
117c804472Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
127c804472Sopenharmony_ci * See the License for the specific language governing permissions and
137c804472Sopenharmony_ci * limitations under the License.
147c804472Sopenharmony_ci */
157c804472Sopenharmony_ci
167c804472Sopenharmony_ci#include "VirtualScreen.h"
177c804472Sopenharmony_ci#include "CommandParser.h"
187c804472Sopenharmony_ci#include "CppTimerManager.h"
197c804472Sopenharmony_ci#include "PreviewerEngineLog.h"
207c804472Sopenharmony_ci#include "VirtualScreen.h"
217c804472Sopenharmony_ci
227c804472Sopenharmony_ci#define boolean jpegboolean
237c804472Sopenharmony_ci#include "jpeglib.h"
247c804472Sopenharmony_ci#undef boolean
257c804472Sopenharmony_ci
267c804472Sopenharmony_ciuint32_t VirtualScreen::validFrameCountPerMinute = 0;
277c804472Sopenharmony_ciuint32_t VirtualScreen::invalidFrameCountPerMinute = 0;
287c804472Sopenharmony_ciuint32_t VirtualScreen::sendFrameCountPerMinute = 0;
297c804472Sopenharmony_ciuint32_t VirtualScreen::inputKeyCountPerMinute = 0;
307c804472Sopenharmony_ciuint32_t VirtualScreen::inputMethodCountPerMinute = 0;
317c804472Sopenharmony_cibool VirtualScreen::isWebSocketListening = false;
327c804472Sopenharmony_cistd::string VirtualScreen::webSocketPort = "";
337c804472Sopenharmony_ci
347c804472Sopenharmony_cistd::chrono::system_clock::time_point VirtualScreen::startTime = std::chrono::system_clock::now();
357c804472Sopenharmony_cistd::chrono::system_clock::time_point VirtualScreen::staticCardStartTime = std::chrono::system_clock::now();
367c804472Sopenharmony_cibool VirtualScreen::isStartCount = true;
377c804472Sopenharmony_cibool VirtualScreen::isOutOfSeconds = false;
387c804472Sopenharmony_ci
397c804472Sopenharmony_ciVirtualScreen::VirtualScreen()
407c804472Sopenharmony_ci    : isFrameUpdated(false),
417c804472Sopenharmony_ci      orignalResolutionWidth(0),
427c804472Sopenharmony_ci      orignalResolutionHeight(0),
437c804472Sopenharmony_ci      compressionResolutionWidth(0),
447c804472Sopenharmony_ci      compressionResolutionHeight(0),
457c804472Sopenharmony_ci      screenSocket(nullptr),
467c804472Sopenharmony_ci      frameCountTimer(nullptr),
477c804472Sopenharmony_ci      isWebSocketConfiged(false),
487c804472Sopenharmony_ci      currentRouter(""),
497c804472Sopenharmony_ci      jpgScreenBuffer(nullptr),
507c804472Sopenharmony_ci      jpgBufferSize(0)
517c804472Sopenharmony_ci{
527c804472Sopenharmony_ci}
537c804472Sopenharmony_ci
547c804472Sopenharmony_ciVirtualScreen::~VirtualScreen()
557c804472Sopenharmony_ci{
567c804472Sopenharmony_ci    if (screenSocket != nullptr) {
577c804472Sopenharmony_ci        screenSocket->DisconnectFromServer();
587c804472Sopenharmony_ci        delete screenSocket;
597c804472Sopenharmony_ci        screenSocket = nullptr;
607c804472Sopenharmony_ci    }
617c804472Sopenharmony_ci}
627c804472Sopenharmony_ci
637c804472Sopenharmony_cistd::string VirtualScreen::GetCurrentRouter() const
647c804472Sopenharmony_ci{
657c804472Sopenharmony_ci    return currentRouter;
667c804472Sopenharmony_ci}
677c804472Sopenharmony_ci
687c804472Sopenharmony_civoid VirtualScreen::SetCurrentRouter(const std::string currentRouterValue)
697c804472Sopenharmony_ci{
707c804472Sopenharmony_ci    currentRouter = currentRouterValue;
717c804472Sopenharmony_ci}
727c804472Sopenharmony_ci
737c804472Sopenharmony_cistd::string VirtualScreen::GetAbilityCurrentRouter() const
747c804472Sopenharmony_ci{
757c804472Sopenharmony_ci    return abilityCurrentRouter;
767c804472Sopenharmony_ci}
777c804472Sopenharmony_ci
787c804472Sopenharmony_civoid VirtualScreen::SetAbilityCurrentRouter(const std::string currentRouterValue)
797c804472Sopenharmony_ci{
807c804472Sopenharmony_ci    abilityCurrentRouter = currentRouterValue;
817c804472Sopenharmony_ci}
827c804472Sopenharmony_ci
837c804472Sopenharmony_ciint32_t VirtualScreen::GetOrignalWidth() const
847c804472Sopenharmony_ci{
857c804472Sopenharmony_ci    return orignalResolutionWidth;
867c804472Sopenharmony_ci}
877c804472Sopenharmony_ci
887c804472Sopenharmony_civoid VirtualScreen::SetOrignalWidth(const int32_t& value)
897c804472Sopenharmony_ci{
907c804472Sopenharmony_ci    orignalResolutionWidth = value;
917c804472Sopenharmony_ci}
927c804472Sopenharmony_ci
937c804472Sopenharmony_ciint32_t VirtualScreen::GetOrignalHeight() const
947c804472Sopenharmony_ci{
957c804472Sopenharmony_ci    return orignalResolutionHeight;
967c804472Sopenharmony_ci}
977c804472Sopenharmony_ci
987c804472Sopenharmony_civoid VirtualScreen::SetOrignalHeight(const int32_t& value)
997c804472Sopenharmony_ci{
1007c804472Sopenharmony_ci    orignalResolutionHeight = value;
1017c804472Sopenharmony_ci}
1027c804472Sopenharmony_ci
1037c804472Sopenharmony_ciint32_t VirtualScreen::GetCompressionWidth() const
1047c804472Sopenharmony_ci{
1057c804472Sopenharmony_ci    return compressionResolutionWidth;
1067c804472Sopenharmony_ci}
1077c804472Sopenharmony_ci
1087c804472Sopenharmony_civoid VirtualScreen::SetCompressionWidth(const int32_t& value)
1097c804472Sopenharmony_ci{
1107c804472Sopenharmony_ci    compressionResolutionWidth = value;
1117c804472Sopenharmony_ci}
1127c804472Sopenharmony_ci
1137c804472Sopenharmony_ciint32_t VirtualScreen::GetCompressionHeight() const
1147c804472Sopenharmony_ci{
1157c804472Sopenharmony_ci    return compressionResolutionHeight;
1167c804472Sopenharmony_ci}
1177c804472Sopenharmony_ci
1187c804472Sopenharmony_civoid VirtualScreen::SetCompressionHeight(const int32_t& value)
1197c804472Sopenharmony_ci{
1207c804472Sopenharmony_ci    compressionResolutionHeight = value;
1217c804472Sopenharmony_ci}
1227c804472Sopenharmony_ci
1237c804472Sopenharmony_civoid VirtualScreen::InitPipe(std::string pipeName, std::string pipePort)
1247c804472Sopenharmony_ci{
1257c804472Sopenharmony_ci    webSocketPort = pipePort;
1267c804472Sopenharmony_ci    isWebSocketConfiged = true;
1277c804472Sopenharmony_ci    WebSocketServer::GetInstance().SetServerPort(atoi(pipePort.c_str()));
1287c804472Sopenharmony_ci    WebSocketServer::GetInstance().Run();
1297c804472Sopenharmony_ci    isWebSocketListening = true;
1307c804472Sopenharmony_ci}
1317c804472Sopenharmony_ci
1327c804472Sopenharmony_civoid VirtualScreen::InitVirtualScreen()
1337c804472Sopenharmony_ci{
1347c804472Sopenharmony_ci    int32_t orignalWidth = CommandParser::GetInstance().GetOrignalResolutionWidth();
1357c804472Sopenharmony_ci    int32_t orignalHeight = CommandParser::GetInstance().GetOrignalResolutionHeight();
1367c804472Sopenharmony_ci    int32_t compressionWidth = CommandParser::GetInstance().GetCompressionResolutionWidth();
1377c804472Sopenharmony_ci    int32_t compressionHeight = CommandParser::GetInstance().GetCompressionResolutionHeight();
1387c804472Sopenharmony_ci    SetVirtualScreenWidthAndHeight(orignalWidth, orignalHeight, compressionWidth, compressionHeight);
1397c804472Sopenharmony_ci}
1407c804472Sopenharmony_ci
1417c804472Sopenharmony_civoid VirtualScreen::SetVirtualScreenWidthAndHeight(const int32_t& orignalWidth,
1427c804472Sopenharmony_ci                                                   const int32_t& orignalHeight,
1437c804472Sopenharmony_ci                                                   const int32_t& compressionWidth,
1447c804472Sopenharmony_ci                                                   const int32_t& compressionHeight)
1457c804472Sopenharmony_ci{
1467c804472Sopenharmony_ci    VirtualScreen::SetOrignalWidth(orignalWidth);
1477c804472Sopenharmony_ci    VirtualScreen::SetOrignalHeight(orignalHeight);
1487c804472Sopenharmony_ci    VirtualScreen::SetCompressionWidth(compressionWidth);
1497c804472Sopenharmony_ci    VirtualScreen::SetCompressionHeight(compressionHeight);
1507c804472Sopenharmony_ci}
1517c804472Sopenharmony_ci
1527c804472Sopenharmony_civoid VirtualScreen::WidthAndHeightReverse()
1537c804472Sopenharmony_ci{
1547c804472Sopenharmony_ci    int32_t temp = 0;
1557c804472Sopenharmony_ci    temp = orignalResolutionHeight;
1567c804472Sopenharmony_ci    orignalResolutionHeight = orignalResolutionWidth;
1577c804472Sopenharmony_ci    orignalResolutionWidth = temp;
1587c804472Sopenharmony_ci    temp = compressionResolutionHeight;
1597c804472Sopenharmony_ci    compressionResolutionHeight = compressionResolutionWidth;
1607c804472Sopenharmony_ci    compressionResolutionWidth = temp;
1617c804472Sopenharmony_ci}
1627c804472Sopenharmony_ci
1637c804472Sopenharmony_civoid VirtualScreen::InitFrameCountTimer()
1647c804472Sopenharmony_ci{
1657c804472Sopenharmony_ci    if (frameCountTimer.get() != nullptr) {
1667c804472Sopenharmony_ci        ILOG("VirtualScreen::InitFrameCountTimer timer is already started.");
1677c804472Sopenharmony_ci        return;
1687c804472Sopenharmony_ci    }
1697c804472Sopenharmony_ci
1707c804472Sopenharmony_ci    frameCountTimer = std::make_unique<CppTimer>(VirtualScreen::PrintFrameCount);
1717c804472Sopenharmony_ci    if (frameCountTimer == nullptr) {
1727c804472Sopenharmony_ci        ELOG("JsApp::InitTimer taskHandleTimer memory allocation failed.");
1737c804472Sopenharmony_ci        return;
1747c804472Sopenharmony_ci    }
1757c804472Sopenharmony_ci    CppTimerManager::GetTimerManager().AddCppTimer(*frameCountTimer);
1767c804472Sopenharmony_ci    frameCountTimer->Start(frameCountPeriod);
1777c804472Sopenharmony_ci}
1787c804472Sopenharmony_ci
1797c804472Sopenharmony_civoid VirtualScreen::PrintFrameCount()
1807c804472Sopenharmony_ci{
1817c804472Sopenharmony_ci    if ((validFrameCountPerMinute | invalidFrameCountPerMinute | sendFrameCountPerMinute |
1827c804472Sopenharmony_ci        inputKeyCountPerMinute | inputMethodCountPerMinute) == 0) {
1837c804472Sopenharmony_ci        return;
1847c804472Sopenharmony_ci    }
1857c804472Sopenharmony_ci
1867c804472Sopenharmony_ci    ELOG("ValidFrameCount: %d InvalidFrameCount: %d SendFrameCount: %d inputKeyCount: %d\
1877c804472Sopenharmony_ci         inputMethodCount: %d", validFrameCountPerMinute, invalidFrameCountPerMinute,
1887c804472Sopenharmony_ci         sendFrameCountPerMinute, inputKeyCountPerMinute, inputMethodCountPerMinute);
1897c804472Sopenharmony_ci    validFrameCountPerMinute = 0;
1907c804472Sopenharmony_ci    invalidFrameCountPerMinute = 0;
1917c804472Sopenharmony_ci    sendFrameCountPerMinute = 0;
1927c804472Sopenharmony_ci    inputKeyCountPerMinute = 0;
1937c804472Sopenharmony_ci    inputMethodCountPerMinute = 0;
1947c804472Sopenharmony_ci}
1957c804472Sopenharmony_ci
1967c804472Sopenharmony_ci
1977c804472Sopenharmony_civoid VirtualScreen::SetLoadDocFlag(VirtualScreen::LoadDocType flag)
1987c804472Sopenharmony_ci{
1997c804472Sopenharmony_ci    startLoadDoc = flag;
2007c804472Sopenharmony_ci}
2017c804472Sopenharmony_ci
2027c804472Sopenharmony_ciVirtualScreen::LoadDocType VirtualScreen::GetLoadDocFlag() const
2037c804472Sopenharmony_ci{
2047c804472Sopenharmony_ci    return startLoadDoc;
2057c804472Sopenharmony_ci}
2067c804472Sopenharmony_ci
2077c804472Sopenharmony_ciint VirtualScreen::GetJpgQualityValue(int32_t width, int32_t height) const
2087c804472Sopenharmony_ci{
2097c804472Sopenharmony_ci    long long pixCount = static_cast<long long>(width) * static_cast<long long>(height);
2107c804472Sopenharmony_ci    if (pixCount <= static_cast<int>(JpgPixCountLevel::LOWCOUNT)) {
2117c804472Sopenharmony_ci        return static_cast<int>(JpgQualityLevel::HIGHLEVEL);
2127c804472Sopenharmony_ci    } else if (pixCount > static_cast<int>(JpgPixCountLevel::LOWCOUNT) &&
2137c804472Sopenharmony_ci        pixCount <= static_cast<int>(JpgPixCountLevel::MIDDLECOUNT)) {
2147c804472Sopenharmony_ci        return static_cast<int>(JpgQualityLevel::MIDDLELEVEL);
2157c804472Sopenharmony_ci    } else if (pixCount > static_cast<int>(JpgPixCountLevel::MIDDLECOUNT) &&
2167c804472Sopenharmony_ci        pixCount <= static_cast<int>(JpgPixCountLevel::HIGHCOUNT)) {
2177c804472Sopenharmony_ci        return static_cast<int>(JpgQualityLevel::LOWLEVEL);
2187c804472Sopenharmony_ci    } else {
2197c804472Sopenharmony_ci        return static_cast<int>(JpgQualityLevel::DEFAULTLEVEL);
2207c804472Sopenharmony_ci    }
2217c804472Sopenharmony_ci}
2227c804472Sopenharmony_ci
2237c804472Sopenharmony_cistd::string VirtualScreen::GetFastPreviewMsg() const
2247c804472Sopenharmony_ci{
2257c804472Sopenharmony_ci    return fastPreviewMsg;
2267c804472Sopenharmony_ci}
2277c804472Sopenharmony_ci
2287c804472Sopenharmony_civoid VirtualScreen::SetFastPreviewMsg(const std::string msg)
2297c804472Sopenharmony_ci{
2307c804472Sopenharmony_ci    fastPreviewMsg = msg;
2317c804472Sopenharmony_ci}
2327c804472Sopenharmony_ci
2337c804472Sopenharmony_civoid VirtualScreen::SetDropFrameFrequency(const int32_t& value)
2347c804472Sopenharmony_ci{
2357c804472Sopenharmony_ci    dropFrameFrequency = value;
2367c804472Sopenharmony_ci    startDropFrameTime = std::chrono::system_clock::now();
2377c804472Sopenharmony_ci}
2387c804472Sopenharmony_ci
2397c804472Sopenharmony_cibool VirtualScreen::JudgeAndDropFrame()
2407c804472Sopenharmony_ci{
2417c804472Sopenharmony_ci    if (dropFrameFrequency <= 0) {
2427c804472Sopenharmony_ci        return false;
2437c804472Sopenharmony_ci    }
2447c804472Sopenharmony_ci    auto endTime = std::chrono::system_clock::now();
2457c804472Sopenharmony_ci    int64_t timePassed = std::chrono::duration_cast<std::chrono::milliseconds>(endTime -
2467c804472Sopenharmony_ci                        startDropFrameTime).count();
2477c804472Sopenharmony_ci    if (timePassed >= dropFrameFrequency) {
2487c804472Sopenharmony_ci        startDropFrameTime = std::chrono::system_clock::now();
2497c804472Sopenharmony_ci    }
2507c804472Sopenharmony_ci    return timePassed < dropFrameFrequency;
2517c804472Sopenharmony_ci}
2527c804472Sopenharmony_ci
2537c804472Sopenharmony_cibool VirtualScreen::JudgeStaticImage(const int duration)
2547c804472Sopenharmony_ci{
2557c804472Sopenharmony_ci    if (CommandParser::GetInstance().GetScreenMode() == CommandParser::ScreenMode::STATIC) {
2567c804472Sopenharmony_ci        if (VirtualScreen::isOutOfSeconds) {
2577c804472Sopenharmony_ci            return false;
2587c804472Sopenharmony_ci        }
2597c804472Sopenharmony_ci        if (VirtualScreen::isStartCount) {
2607c804472Sopenharmony_ci            VirtualScreen::isStartCount = false;
2617c804472Sopenharmony_ci            VirtualScreen::startTime = std::chrono::system_clock::now();
2627c804472Sopenharmony_ci        }
2637c804472Sopenharmony_ci        auto endTime = std::chrono::system_clock::now();
2647c804472Sopenharmony_ci        int64_t timePassed = std::chrono::duration_cast<std::chrono::milliseconds>(endTime -
2657c804472Sopenharmony_ci                             VirtualScreen::startTime).count();
2667c804472Sopenharmony_ci        if (timePassed > duration) {
2677c804472Sopenharmony_ci            VirtualScreen::isOutOfSeconds = true;
2687c804472Sopenharmony_ci            return false;
2697c804472Sopenharmony_ci        }
2707c804472Sopenharmony_ci    }
2717c804472Sopenharmony_ci    return true;
2727c804472Sopenharmony_ci}
2737c804472Sopenharmony_ci
2747c804472Sopenharmony_cibool VirtualScreen::StopSendStaticCardImage(const int duration)
2757c804472Sopenharmony_ci{
2767c804472Sopenharmony_ci    if (CommandParser::GetInstance().IsStaticCard()) {
2777c804472Sopenharmony_ci        static bool first = true;
2787c804472Sopenharmony_ci        if (first) {
2797c804472Sopenharmony_ci            first = false;
2807c804472Sopenharmony_ci            VirtualScreen::staticCardStartTime = std::chrono::system_clock::now();
2817c804472Sopenharmony_ci        }
2827c804472Sopenharmony_ci        auto endTime = std::chrono::system_clock::now();
2837c804472Sopenharmony_ci        int64_t timePassed = std::chrono::duration_cast<std::chrono::milliseconds>(endTime -
2847c804472Sopenharmony_ci            VirtualScreen::staticCardStartTime).count();
2857c804472Sopenharmony_ci        if (timePassed > duration) {
2867c804472Sopenharmony_ci            return true;
2877c804472Sopenharmony_ci        }
2887c804472Sopenharmony_ci    }
2897c804472Sopenharmony_ci    return false;
2907c804472Sopenharmony_ci}
2917c804472Sopenharmony_ci
2927c804472Sopenharmony_civoid VirtualScreen::RgbToJpg(unsigned char* data, const int32_t width, const int32_t height)
2937c804472Sopenharmony_ci{
2947c804472Sopenharmony_ci    if (width < 1 || height < 1) {
2957c804472Sopenharmony_ci        FLOG("VirtualScreenImpl::RgbToJpg the width or height is invalid value");
2967c804472Sopenharmony_ci    }
2977c804472Sopenharmony_ci    jpeg_compress_struct jpeg = {0};
2987c804472Sopenharmony_ci    jpeg_error_mgr jerr;
2997c804472Sopenharmony_ci    jpeg.err = jpeg_std_error(&jerr);
3007c804472Sopenharmony_ci    jpeg_create_compress(&jpeg);
3017c804472Sopenharmony_ci    jpeg_mem_dest(&jpeg, &jpgScreenBuffer, &jpgBufferSize);
3027c804472Sopenharmony_ci    jpeg.image_width = width;
3037c804472Sopenharmony_ci    jpeg.image_height = height;
3047c804472Sopenharmony_ci    jpeg.input_components = jpgPix;
3057c804472Sopenharmony_ci    jpeg.in_color_space = JCS_RGB;
3067c804472Sopenharmony_ci    jpeg_set_defaults(&jpeg);
3077c804472Sopenharmony_ci    jpeg_set_quality(&jpeg, GetJpgQualityValue(width, height), TRUE);
3087c804472Sopenharmony_ci    jpeg_start_compress(&jpeg, TRUE);
3097c804472Sopenharmony_ci    JSAMPROW rowPointer[1];
3107c804472Sopenharmony_ci    int rowStride = width * jpgPix;
3117c804472Sopenharmony_ci    while (jpeg.next_scanline < jpeg.image_height) {
3127c804472Sopenharmony_ci        rowPointer[0] = &data[jpeg.next_scanline * rowStride];
3137c804472Sopenharmony_ci        jpeg_write_scanlines(&jpeg, rowPointer, 1);
3147c804472Sopenharmony_ci    }
3157c804472Sopenharmony_ci    jpeg_finish_compress(&jpeg);
3167c804472Sopenharmony_ci    jpeg_destroy_compress(&jpeg);
3177c804472Sopenharmony_ci}
3187c804472Sopenharmony_ci
3197c804472Sopenharmony_civoid VirtualScreen::SetFoldable(const bool value)
3207c804472Sopenharmony_ci{
3217c804472Sopenharmony_ci    foldable = value;
3227c804472Sopenharmony_ci}
3237c804472Sopenharmony_ci
3247c804472Sopenharmony_cibool VirtualScreen::GetFoldable() const
3257c804472Sopenharmony_ci{
3267c804472Sopenharmony_ci    return foldable;
3277c804472Sopenharmony_ci}
3287c804472Sopenharmony_ci
3297c804472Sopenharmony_civoid VirtualScreen::SetFoldStatus(const std::string& value)
3307c804472Sopenharmony_ci{
3317c804472Sopenharmony_ci    foldStatus = value;
3327c804472Sopenharmony_ci}
3337c804472Sopenharmony_ci
3347c804472Sopenharmony_cistd::string VirtualScreen::GetFoldStatus() const
3357c804472Sopenharmony_ci{
3367c804472Sopenharmony_ci    return foldStatus;
3377c804472Sopenharmony_ci}
3387c804472Sopenharmony_ci
3397c804472Sopenharmony_civoid VirtualScreen::SetFoldResolution(int32_t changedFoldWidth, int32_t changedFoldHeight)
3407c804472Sopenharmony_ci{
3417c804472Sopenharmony_ci    foldWidth = changedFoldWidth;
3427c804472Sopenharmony_ci    foldHeight = changedFoldHeight;
3437c804472Sopenharmony_ci}
3447c804472Sopenharmony_ci
3457c804472Sopenharmony_ciint32_t VirtualScreen::GetFoldWidth() const
3467c804472Sopenharmony_ci{
3477c804472Sopenharmony_ci    return foldWidth;
3487c804472Sopenharmony_ci}
3497c804472Sopenharmony_ci
3507c804472Sopenharmony_ciint32_t VirtualScreen::GetFoldHeight() const
3517c804472Sopenharmony_ci{
3527c804472Sopenharmony_ci    return foldHeight;
3537c804472Sopenharmony_ci}
3547c804472Sopenharmony_ci
3557c804472Sopenharmony_civoid VirtualScreen::SetCurrentResolution(int32_t width, int32_t height)
3567c804472Sopenharmony_ci{
3577c804472Sopenharmony_ci    currentWidth = width;
3587c804472Sopenharmony_ci    currentHeight = height;
3597c804472Sopenharmony_ci}
3607c804472Sopenharmony_ci
3617c804472Sopenharmony_ciint32_t VirtualScreen::GetCurrentWidth() const
3627c804472Sopenharmony_ci{
3637c804472Sopenharmony_ci    return currentWidth;
3647c804472Sopenharmony_ci}
3657c804472Sopenharmony_ci
3667c804472Sopenharmony_ciint32_t VirtualScreen::GetCurrentHeight() const
3677c804472Sopenharmony_ci{
3687c804472Sopenharmony_ci    return currentHeight;
3697c804472Sopenharmony_ci}
3707c804472Sopenharmony_ci
3717c804472Sopenharmony_civoid VirtualScreen::InitFlushEmptyTime() {}
3727c804472Sopenharmony_ci
3737c804472Sopenharmony_civoid VirtualScreen::InitResolution()
3747c804472Sopenharmony_ci{
3757c804472Sopenharmony_ci    CommandInfo commandInfo;
3767c804472Sopenharmony_ci    CommandParser::GetInstance().GetCommandInfo(commandInfo);
3777c804472Sopenharmony_ci    SetOrignalWidth(commandInfo.orignalResolutionWidth);
3787c804472Sopenharmony_ci    SetOrignalHeight(commandInfo.orignalResolutionHeight);
3797c804472Sopenharmony_ci    SetCompressionWidth(commandInfo.compressionResolutionWidth);
3807c804472Sopenharmony_ci    SetCompressionHeight(commandInfo.compressionResolutionHeight);
3817c804472Sopenharmony_ci    SetCurrentResolution(commandInfo.orignalResolutionWidth, commandInfo.orignalResolutionHeight);
3827c804472Sopenharmony_ci}