@@ -72,15 +72,15 @@ MLDX12App::OnInit(void)
7272{
7373 mVideoCaptureDeviceList .Init ();
7474
75- OutputDebugString (L" OnInit started\n " );
75+ // OutputDebugString(L"OnInit started\n");
7676
7777 LoadPipeline ();
7878 LoadAssets ();
7979
8080 mDx12Imgui .Init (mDevice .Get ());
8181 CreateImguiTexture ();
8282
83- OutputDebugString (L" OnInit end\n " );
83+ // OutputDebugString(L"OnInit end\n");
8484}
8585
8686void
@@ -644,14 +644,27 @@ MLDX12App::OnRender(void)
644644 mCmdQ ->ExecuteCommandLists (_countof (ppCommandLists), ppCommandLists);
645645
646646 UpdateCapturedVideoTexture ();
647+ UpdatePlayVideoTexture ();
647648
648649 ThrowIfFailed (mSwapChain ->Present (1 , 0 ));
649650 MoveToNextFrame ();
650651}
651652
652653void
653- MLDX12App::DrawFullscreenTexture (TextureEnum texId)
654+ MLDX12App::DrawFullscreenTexture (TextureEnum texId, MLImage::ImageMode drawMode )
654655{
656+ switch (drawMode) {
657+ case MLImage::IM_RGB:
658+ mCmdList ->SetPipelineState (mPipelineStateRGB .Get ());
659+ break ;
660+ case MLImage::IM_YUV:
661+ mCmdList ->SetPipelineState (mPipelineStateYUV .Get ());
662+ break ;
663+ default :
664+ assert (0 );
665+ break ;
666+ }
667+
655668 mCmdList ->SetGraphicsRootSignature (mRootSignature .Get ());
656669
657670 ID3D12DescriptorHeap* ppHeaps[] = { mSrvHeap .Get () };
@@ -664,10 +677,6 @@ MLDX12App::DrawFullscreenTexture(TextureEnum texId)
664677 mCmdList ->RSSetViewports (1 , &mViewport );
665678 mCmdList ->RSSetScissorRects (1 , &mScissorRect );
666679
667- mCmdList ->ResourceBarrier (1 , &CD3DX12_RESOURCE_BARRIER::Transition (
668- mRenderTargets [mFrameIdx ].Get (), D3D12_RESOURCE_STATE_PRESENT,
669- D3D12_RESOURCE_STATE_RENDER_TARGET));
670-
671680 CD3DX12_CPU_DESCRIPTOR_HANDLE rtvHandle (mRtvHeap ->GetCPUDescriptorHandleForHeapStart (),
672681 mFrameIdx , mRtvDescSize );
673682 mCmdList ->OMSetRenderTargets (1 , &rtvHandle, FALSE , nullptr );
@@ -681,31 +690,29 @@ void
681690MLDX12App::PopulateCommandList (void )
682691{
683692 ThrowIfFailed (mCmdAllocators [mFrameIdx ]->Reset ());
693+ ThrowIfFailed (mCmdList ->Reset (mCmdAllocators [mFrameIdx ].Get (), mPipelineStateRGB .Get ()));
684694
685- switch (mCaptureDrawMode ) {
686- case MLImage::IM_RGB:
687- ThrowIfFailed (mCmdList ->Reset (mCmdAllocators [mFrameIdx ].Get (), mPipelineStateRGB .Get ()));
688- break ;
689- case MLImage::IM_YUV:
690- ThrowIfFailed (mCmdList ->Reset (mCmdAllocators [mFrameIdx ].Get (), mPipelineStateYUV .Get ()));
691- break ;
692- default :
693- break ;
694- }
695+ mCmdList ->ResourceBarrier (1 , &CD3DX12_RESOURCE_BARRIER::Transition (
696+ mRenderTargets [mFrameIdx ].Get (), D3D12_RESOURCE_STATE_PRESENT,
697+ D3D12_RESOURCE_STATE_RENDER_TARGET));
695698
696699 { // clear screen
697- const float clearColor [] = {0 .0f , 0 .2f , 0 .4f , 1 .0f };
700+ const float clearColorRGBA [] = {0 .4f , 0 .4f , 0 .4f , 1 .0f };
698701 CD3DX12_CPU_DESCRIPTOR_HANDLE rtvHandle (mRtvHeap ->GetCPUDescriptorHandleForHeapStart (),
699702 mFrameIdx , mRtvDescSize );
700703 mCmdList ->OMSetRenderTargets (1 , &rtvHandle, FALSE , nullptr );
701- mCmdList ->ClearRenderTargetView (rtvHandle, clearColor , 0 , nullptr );
704+ mCmdList ->ClearRenderTargetView (rtvHandle, clearColorRGBA , 0 , nullptr );
702705 }
703706
704707 // 全クライアント領域を覆う矩形にテクスチャを貼って描画。
705- DrawFullscreenTexture ((TextureEnum)(TE_CAPVIDEO0 + mIdToShowCapVideoTex ));
708+ DrawFullscreenTexture (
709+ (TextureEnum)(TE_CAPVIDEO0 + mIdToShowCapVideoTex ),
710+ mCaptureDrawMode );
706711
707712 if (0 .0f < mPlayAlpha ) {
708- DrawFullscreenTexture ((TextureEnum)(TE_PLAYVIDEO0 + mIdToShowPlayVideoTex ));
713+ DrawFullscreenTexture (
714+ (TextureEnum)(TE_PLAYVIDEO0 + mIdToShowPlayVideoTex ),
715+ mPlayDrawMode );
709716 }
710717
711718 // Start the Dear ImGui frame
@@ -966,7 +973,7 @@ MLDX12App::ShowPlaybackWindow(void)
966973 if (mAviReader .Open (path)) {
967974 const MLBitmapInfoHeader &bi = mAviReader .ImageFormat ();
968975
969- if (bi.biWidth != 3840 || bi. biHeight != 2160 || bi. biCompression != MLFOURCC_v210) {
976+ if (bi.biCompression != MLFOURCC_v210) {
970977 sprintf_s (mPlayMsg , " Error: Not supported AVI format : %s" , mReadPath );
971978 ImGui::OpenPopup (" ErrorPlayPopup" );
972979 mAviReader .Close ();
@@ -986,8 +993,18 @@ MLDX12App::ShowPlaybackWindow(void)
986993 mAviReader .Close ();
987994 mPlayAlpha = 0 .0f ;
988995 }
989- ImGui::Text (" Total %d frames, %d fps, %.1f sec" ,
990- mAviReader .NumFrames (), mAviReader .FramesPerSec (), mAviReader .DurationSec ());
996+ ImGui::Text (" %d x %d, %d fps, %.1f sec" ,
997+ mAviReader .ImageFormat ().biWidth , mAviReader .ImageFormat ().biHeight ,
998+ mAviReader .FramesPerSec (), mAviReader .DurationSec ());
999+
1000+ {
1001+ // hour:min:sec:frameを算出。
1002+ auto vt = mAviReader .FrameNrToTime (mPlayFrameNr );
1003+
1004+ ImGui::Text (" %02d:%02d:%02d:%02d" ,
1005+ vt.hour , vt.min , vt.sec , vt.frame );
1006+ }
1007+
9911008 // シークバー。
9921009 ImGui::DragInt (" Frame number" , &mPlayFrameNr , 1 .0f , 0 , mAviReader .NumFrames () - 1 );
9931010
@@ -1007,8 +1024,6 @@ MLDX12App::ShowPlaybackWindow(void)
10071024 mConverter .CreateGammaTable (mDrawGamma , mDrawGainR , mDrawGainG , mDrawGainB );
10081025 }
10091026 }
1010-
1011- UpdatePlayVideoTexture ();
10121027 }
10131028
10141029 ImGui::End ();
@@ -1175,6 +1190,9 @@ MLDX12App::UpdateVideoTexture(MLImage &ci, ComPtr<ID3D12Resource> &tex, TextureE
11751190 srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
11761191 srvDesc.Texture2D .MipLevels = 1 ;
11771192 mDevice ->CreateShaderResourceView (tex.Get (), &srvDesc, srvHandle);
1193+ } else {
1194+ mCmdListTexUpload ->ResourceBarrier (1 , &CD3DX12_RESOURCE_BARRIER::Transition (tex.Get (),
1195+ D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, D3D12_RESOURCE_STATE_COPY_DEST));
11781196 }
11791197
11801198 // texUploadHeapがスコープから外れる前にcommandListを実行しなければならない。
@@ -1191,9 +1209,6 @@ MLDX12App::UpdateVideoTexture(MLImage &ci, ComPtr<ID3D12Resource> &tex, TextureE
11911209 nullptr ,
11921210 IID_PPV_ARGS (&texUploadHeap)));
11931211
1194- mCmdListTexUpload ->ResourceBarrier (1 , &CD3DX12_RESOURCE_BARRIER::Transition (tex.Get (),
1195- D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, D3D12_RESOURCE_STATE_COPY_DEST));
1196-
11971212 D3D12_SUBRESOURCE_DATA textureData = {};
11981213 textureData.pData = &ci.data [0 ];
11991214 textureData.RowPitch = ci.width * pixelBytes;
@@ -1279,7 +1294,7 @@ MLDX12App::UpdatePlayVideoTexture(void)
12791294 }
12801295
12811296 UpdateVideoTexture (ci, mTexPlayVideo [!mIdToShowPlayVideoTex ],
1282- (TextureEnum)(TE_CAPVIDEO0 + !mIdToShowPlayVideoTex ));
1297+ (TextureEnum)(TE_PLAYVIDEO0 + !mIdToShowPlayVideoTex ));
12831298
12841299 mPlayDrawMode = ci.imgMode ;
12851300
0 commit comments