Skip to content

Commit 38dbb7f

Browse files
committed
Driver: Stop encoder when stream stops
1 parent 9d669f3 commit 38dbb7f

File tree

5 files changed

+18
-11
lines changed

5 files changed

+18
-11
lines changed

alvr/server/cpp/alvr_server/OvrHMD.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,6 @@ OvrHmd::~OvrHmd() {
114114

115115
if (m_encoder) {
116116
Debug("OvrHmd::~OvrHmd(): Stopping encoder...\n");
117-
m_encoder->Stop();
118117
m_encoder.reset();
119118
}
120119

@@ -382,6 +381,15 @@ void OvrHmd::StartStreaming() {
382381

383382
void OvrHmd::StopStreaming() {
384383
vr::VRDriverInput()->UpdateBooleanComponent(m_proximity, false, 0.0);
384+
#ifdef _WIN32
385+
if (m_directModeComponent) {
386+
m_directModeComponent->ResetEncoder();
387+
}
388+
#endif
389+
if (m_encoder) {
390+
m_encoder.reset();
391+
}
392+
m_streamComponentsInitialized = false;
385393
}
386394

387395
void OvrHmd::SetViewsConfig(FfiViewsConfig config) {

alvr/server/cpp/platform/win32/CEncoder.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
CEncoder::~CEncoder()
1313
{
14+
Stop();
1415
if (m_videoEncoder)
1516
{
1617
m_videoEncoder->Shutdown();
@@ -80,9 +81,7 @@
8081
{
8182
m_presentationTime = presentationTime;
8283
m_targetTimestampNs = targetTimestampNs;
83-
m_FrameRender->Startup();
84-
85-
m_FrameRender->RenderFrame(pTexture, bounds, layerCount, recentering, message, debugText);
84+
m_FrameRender->RenderFrame(pTexture, bounds, layerCount, recentering);
8685
return true;
8786
}
8887

alvr/server/cpp/platform/win32/OvrDirectModeComponent.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ void OvrDirectModeComponent::SetEncoder(std::shared_ptr<CEncoder> pEncoder) {
1111
m_pEncoder = pEncoder;
1212
}
1313

14+
void OvrDirectModeComponent::ResetEncoder() {
15+
m_pEncoder.reset();
16+
}
17+
1418
/** Specific to Oculus compositor support, textures supplied must be created using this method. */
1519
void OvrDirectModeComponent::CreateSwapTextureSet(uint32_t unPid, const SwapTextureSetDesc_t *pSwapTextureSetDesc, SwapTextureSet_t *pOutSwapTextureSet)
1620
{

alvr/server/cpp/platform/win32/OvrDirectModeComponent.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ class OvrDirectModeComponent : public vr::IVRDriverDirectModeComponent
1313
OvrDirectModeComponent(std::shared_ptr<CD3DRender> pD3DRender, std::shared_ptr<PoseHistory> poseHistory);
1414

1515
void SetEncoder(std::shared_ptr<CEncoder> pEncoder);
16+
void ResetEncoder();
1617

1718
/** Specific to Oculus compositor support, textures supplied must be created using this method. */
1819
virtual void CreateSwapTextureSet( uint32_t unPid, const SwapTextureSetDesc_t *pSwapTextureSetDesc, SwapTextureSet_t *pOutSwapTextureSet );

alvr/server/cpp/platform/win32/VideoEncoderVCE.cpp

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,7 @@ AMFPipe::AMFPipe(amf::AMFComponentPtr src, AMFDataReceiver receiver)
1414
, m_receiver(receiver)
1515
{}
1616

17-
AMFPipe::~AMFPipe()
18-
{
19-
Debug("AMFPipe::~AMFPipe() m_amfComponentSrc->Drain\n");
20-
m_amfComponentSrc->Drain();
21-
}
17+
AMFPipe::~AMFPipe() {}
2218

2319
void AMFPipe::doPassthrough(bool hasQueryTimeout, uint32_t timerResolution)
2420
{
@@ -366,8 +362,7 @@ void VideoEncoderVCE::Shutdown()
366362
delete m_pipeline;
367363

368364
for (auto &component : m_amfComponents) {
369-
component->Release();
370-
delete component;
365+
component->Terminate();
371366
}
372367

373368
m_amfContext->Terminate();

0 commit comments

Comments
 (0)