2 * Copyright (C) 2017-2024 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
9 #include "RetroPlayerRendering.h"
11 #include "cores/RetroPlayer/process/RPProcessInfo.h"
12 #include "cores/RetroPlayer/rendering/RPRenderManager.h"
13 #include "cores/RetroPlayer/rendering/RenderTranslator.h"
14 #include "utils/log.h"
17 using namespace RETRO
;
19 CRetroPlayerRendering::CRetroPlayerRendering(CRPRenderManager
& renderManager
,
20 CRPProcessInfo
& processInfo
)
21 : m_renderManager(renderManager
), m_processInfo(processInfo
)
23 CLog::Log(LOGDEBUG
, "RetroPlayer[RENDERING]: Initializing rendering");
26 CRetroPlayerRendering::~CRetroPlayerRendering()
28 CLog::Log(LOGDEBUG
, "RetroPlayer[RENDERING]: Deinitializing rendering");
31 m_renderManager
.Deinitialize();
34 bool CRetroPlayerRendering::OpenStream(const StreamProperties
& properties
)
36 [[maybe_unused
]] const HwFramebufferProperties
& hwProperties
=
37 static_cast<const HwFramebufferProperties
&>(properties
);
40 const AVPixelFormat pixelFormat
= AV_PIX_FMT_NONE
;
41 const unsigned int width
= 640;
42 const unsigned int height
= 480;
43 const float pixelAspectRatio
= 1.0f
;
45 CLog::Log(LOGDEBUG
, "RetroPlayer[RENDERING]: Creating rendering stream - width {}, height {}",
48 m_processInfo
.SetVideoPixelFormat(pixelFormat
);
49 m_processInfo
.SetVideoDimensions(width
, height
);
51 if (!m_renderManager
.Configure(pixelFormat
, width
, height
, width
, height
, pixelAspectRatio
))
54 CLog::Log(LOGDEBUG
, "RetroPlayer[RENDERING]: Render manager configured");
56 //! @todo: This must be called from the rendering thread
57 //return m_renderManager.Create(width, height);
62 void CRetroPlayerRendering::CloseStream()
64 CLog::Log(LOGDEBUG
, "RetroPlayer[RENDERING]: Closing rendering stream");
69 bool CRetroPlayerRendering::GetStreamBuffer(unsigned int width
,
73 HwFramebufferBuffer
& hwBuffer
= static_cast<HwFramebufferBuffer
&>(buffer
);
75 hwBuffer
.framebuffer
= m_renderManager
.GetCurrentFramebuffer(width
, height
);
80 void CRetroPlayerRendering::AddStreamData(const StreamPacket
& packet
)
82 // This is left here in case anything gets added to the api in the future
83 [[maybe_unused
]] const HwFramebufferPacket
& hwPacket
=
84 static_cast<const HwFramebufferPacket
&>(packet
);
86 m_renderManager
.RenderFrame();