diff --git a/vav2/Vav2Player/Vav2Player.sln b/vav2/Vav2Player/Vav2Player.sln
index bfcc706..bb54f5d 100644
--- a/vav2/Vav2Player/Vav2Player.sln
+++ b/vav2/Vav2Player/Vav2Player.sln
@@ -5,9 +5,9 @@ VisualStudioVersion = 17.14.36511.14
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Vav2Player", "Vav2Player\Vav2Player.vcxproj", "{C52EFC56-E19C-4568-9D83-A5A5E5282E1E}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Vav2PlayerHeadless", "Vav2Player\Vav2PlayerHeadless.vcxproj", "{E8B13F42-1234-5678-9ABC-123456789ABC}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Vav2PlayerHeadless", "Vav2PlayerHeadless\Vav2PlayerHeadless.vcxproj", "{E8B13F42-1234-5678-9ABC-123456789ABC}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Vav2UnitTest", "Vav2Player\Vav2UnitTest.vcxproj", "{2F8B5F4C-7E8D-4A9B-8C6D-1E3F5A7B9C2D}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Vav2UnitTest", "Vav2UnitTest\Vav2UnitTest.vcxproj", "{2F8B5F4C-7E8D-4A9B-8C6D-1E3F5A7B9C2D}"
ProjectSection(ProjectDependencies) = postProject
{B8F7E8E0-F8F7-4A8A-9A8A-8A8A8A8A8A8A} = {B8F7E8E0-F8F7-4A8A-9A8A-8A8A8A8A8A8A}
EndProjectSection
diff --git a/vav2/Vav2Player/Vav2Player/LayeredVideoWindow.idl b/vav2/Vav2Player/Vav2Player/LayeredVideoWindow.idl
deleted file mode 100644
index 199383b..0000000
--- a/vav2/Vav2Player/Vav2Player/LayeredVideoWindow.idl
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Vav2Player
-{
- [default_interface]
- runtimeclass LayeredVideoWindow : Microsoft.UI.Xaml.Window
- {
- LayeredVideoWindow();
- }
-}
\ No newline at end of file
diff --git a/vav2/Vav2Player/Vav2Player/LayeredVideoWindow.xaml b/vav2/Vav2Player/Vav2Player/LayeredVideoWindow.xaml
deleted file mode 100644
index 236d61d..0000000
--- a/vav2/Vav2Player/Vav2Player/LayeredVideoWindow.xaml
+++ /dev/null
@@ -1,135 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/vav2/Vav2Player/Vav2Player/LayeredVideoWindow.xaml.cpp b/vav2/Vav2Player/Vav2Player/LayeredVideoWindow.xaml.cpp
deleted file mode 100644
index 68c4240..0000000
--- a/vav2/Vav2Player/Vav2Player/LayeredVideoWindow.xaml.cpp
+++ /dev/null
@@ -1,164 +0,0 @@
-#include "pch.h"
-#include "LayeredVideoWindow.xaml.h"
-#if __has_include("LayeredVideoWindow.g.cpp")
-#include "LayeredVideoWindow.g.cpp"
-#endif
-
-using namespace winrt;
-using namespace winrt::Microsoft::UI::Xaml;
-
-namespace winrt::Vav2Player::implementation
-{
- LayeredVideoWindow::LayeredVideoWindow()
- {
- InitializeComponent();
- UpdateActiveLayerCount();
- }
-
- // Menu navigation handlers
- void LayeredVideoWindow::SwitchToMainWindow_Click(IInspectable const&, RoutedEventArgs const&)
- {
- // TODO: Switch to main window
- LayeredVideoStatusText().Text(L"Switching to Main Window...");
- }
-
- void LayeredVideoWindow::SwitchToMultiVideoTest_Click(IInspectable const&, RoutedEventArgs const&)
- {
- // TODO: Switch to multi video test window
- LayeredVideoStatusText().Text(L"Switching to Multi Video Test...");
- }
-
- void LayeredVideoWindow::SwitchToLayeredVideo_Click(IInspectable const&, RoutedEventArgs const&)
- {
- // Already in layered video window
- LayeredVideoStatusText().Text(L"Already in Layered Video window");
- }
-
- void LayeredVideoWindow::Exit_Click(IInspectable const&, RoutedEventArgs const&)
- {
- this->Close();
- }
-
- // Layer management handlers
- void LayeredVideoWindow::AddLayer_Click(IInspectable const&, RoutedEventArgs const&)
- {
- LayeredVideoStatusText().Text(L"Add Layer functionality - Coming soon");
- }
-
- void LayeredVideoWindow::RemoveLayer_Click(IInspectable const&, RoutedEventArgs const&)
- {
- LayeredVideoStatusText().Text(L"Remove Layer functionality - Coming soon");
- }
-
- void LayeredVideoWindow::BringToFront_Click(IInspectable const&, RoutedEventArgs const&)
- {
- LayeredVideoStatusText().Text(L"Bring to Front functionality - Coming soon");
- }
-
- void LayeredVideoWindow::SendToBack_Click(IInspectable const&, RoutedEventArgs const&)
- {
- LayeredVideoStatusText().Text(L"Send to Back functionality - Coming soon");
- }
-
- // Effects handlers
- void LayeredVideoWindow::FadeTransition_Click(IInspectable const&, RoutedEventArgs const&)
- {
- LayeredVideoStatusText().Text(L"Fade Transition functionality - Coming soon");
- }
-
- void LayeredVideoWindow::SlideTransition_Click(IInspectable const&, RoutedEventArgs const&)
- {
- LayeredVideoStatusText().Text(L"Slide Transition functionality - Coming soon");
- }
-
- void LayeredVideoWindow::BlendMode_Click(IInspectable const&, RoutedEventArgs const&)
- {
- LayeredVideoStatusText().Text(L"Blend Mode functionality - Coming soon");
- }
-
- // File load handlers
- void LayeredVideoWindow::LoadBackground_Click(IInspectable const&, RoutedEventArgs const&)
- {
- LoadVideoFileForLayer(1);
- }
-
- void LayeredVideoWindow::LoadOverlay_Click(IInspectable const&, RoutedEventArgs const&)
- {
- LoadVideoFileForLayer(2);
- }
-
- void LayeredVideoWindow::LoadPiP_Click(IInspectable const&, RoutedEventArgs const&)
- {
- LoadVideoFileForLayer(3);
- }
-
- // Opacity control handlers
- void LayeredVideoWindow::Layer1Opacity_Changed(IInspectable const&, Microsoft::UI::Xaml::Controls::Primitives::RangeBaseValueChangedEventArgs const& e)
- {
- Layer1().Opacity(e.NewValue());
- }
-
- void LayeredVideoWindow::Layer2Opacity_Changed(IInspectable const&, Microsoft::UI::Xaml::Controls::Primitives::RangeBaseValueChangedEventArgs const& e)
- {
- Layer2().Opacity(e.NewValue());
- }
-
- void LayeredVideoWindow::Layer3Opacity_Changed(IInspectable const&, Microsoft::UI::Xaml::Controls::Primitives::RangeBaseValueChangedEventArgs const& e)
- {
- Layer3().Opacity(e.NewValue());
- }
-
- // Playback control handlers
- void LayeredVideoWindow::PlayAllLayers_Click(IInspectable const&, RoutedEventArgs const&)
- {
- VideoLayer1().Play();
- VideoLayer2().Play();
- VideoLayer3().Play();
- LayeredVideoStatusText().Text(L"Playing all layers");
- }
-
- void LayeredVideoWindow::PauseAllLayers_Click(IInspectable const&, RoutedEventArgs const&)
- {
- VideoLayer1().Pause();
- VideoLayer2().Pause();
- VideoLayer3().Pause();
- LayeredVideoStatusText().Text(L"Paused all layers");
- }
-
- void LayeredVideoWindow::StopAllLayers_Click(IInspectable const&, RoutedEventArgs const&)
- {
- VideoLayer1().Stop();
- VideoLayer2().Stop();
- VideoLayer3().Stop();
- LayeredVideoStatusText().Text(L"Stopped all layers");
- }
-
- // Helper methods
- void LayeredVideoWindow::UpdateActiveLayerCount()
- {
- // TODO: Implement proper layer counting
- ActiveLayerCount().Text(L"0/3");
- }
-
- Windows::Foundation::IAsyncAction LayeredVideoWindow::LoadVideoFileForLayer(int layerIndex)
- {
- // TODO: Implement file loading for specific layer
- co_await resume_background();
-
- // Update status based on layer
- switch (layerIndex) {
- case 1:
- LayeredVideoStatusText().Text(L"Loading background video - Coming soon");
- break;
- case 2:
- LayeredVideoStatusText().Text(L"Loading overlay video - Coming soon");
- break;
- case 3:
- LayeredVideoStatusText().Text(L"Loading PiP video - Coming soon");
- break;
- default:
- LayeredVideoStatusText().Text(L"Invalid layer index");
- break;
- }
- }
-}
\ No newline at end of file
diff --git a/vav2/Vav2Player/Vav2Player/LayeredVideoWindow.xaml.h b/vav2/Vav2Player/Vav2Player/LayeredVideoWindow.xaml.h
deleted file mode 100644
index e95331b..0000000
--- a/vav2/Vav2Player/Vav2Player/LayeredVideoWindow.xaml.h
+++ /dev/null
@@ -1,55 +0,0 @@
-#pragma once
-
-#include "LayeredVideoWindow.g.h"
-
-namespace winrt::Vav2Player::implementation
-{
- struct LayeredVideoWindow : LayeredVideoWindowT
- {
- LayeredVideoWindow();
-
- // Menu event handlers
- void SwitchToMainWindow_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void SwitchToMultiVideoTest_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void SwitchToLayeredVideo_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void Exit_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
-
- // Layer menu handlers
- void AddLayer_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void RemoveLayer_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void BringToFront_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void SendToBack_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
-
- // Effects menu handlers
- void FadeTransition_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void SlideTransition_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void BlendMode_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
-
- // File load handlers
- void LoadBackground_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void LoadOverlay_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void LoadPiP_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
-
- // Opacity control handlers
- void Layer1Opacity_Changed(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::Controls::Primitives::RangeBaseValueChangedEventArgs const& e);
- void Layer2Opacity_Changed(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::Controls::Primitives::RangeBaseValueChangedEventArgs const& e);
- void Layer3Opacity_Changed(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::Controls::Primitives::RangeBaseValueChangedEventArgs const& e);
-
- // Playback control handlers
- void PlayAllLayers_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void PauseAllLayers_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void StopAllLayers_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
-
- private:
- // Helper methods
- void UpdateActiveLayerCount();
- winrt::Windows::Foundation::IAsyncAction LoadVideoFileForLayer(int layerIndex);
- };
-}
-
-namespace winrt::Vav2Player::factory_implementation
-{
- struct LayeredVideoWindow : LayeredVideoWindowT
- {
- };
-}
\ No newline at end of file
diff --git a/vav2/Vav2Player/Vav2Player/MainWindow.xaml.cpp b/vav2/Vav2Player/Vav2Player/MainWindow.xaml.cpp
index a296c74..8fe21a2 100644
--- a/vav2/Vav2Player/Vav2Player/MainWindow.xaml.cpp
+++ b/vav2/Vav2Player/Vav2Player/MainWindow.xaml.cpp
@@ -1,7 +1,7 @@
#include "pch.h"
#include "MainWindow.xaml.h"
#include "MainVideoPage.xaml.h"
-#include "MultiVideoTestPage.xaml.h"
+#include "MultiVideoPage.xaml.h"
#include "LayeredVideoPage.xaml.h"
#if __has_include("MainWindow.g.cpp")
#include "MainWindow.g.cpp"
@@ -17,9 +17,9 @@ namespace winrt::Vav2Player::implementation
{
InitializeComponent();
- // Load Multi Video Test as default page (시작화면)
+ // Load Multi Video as default page (시작화면)
TypeName pageTypeName;
- pageTypeName.Name = winrt::name_of();
+ pageTypeName.Name = winrt::name_of();
pageTypeName.Kind = TypeKind::Metadata;
ContentFrame().Navigate(pageTypeName);
}
@@ -36,7 +36,7 @@ namespace winrt::Vav2Player::implementation
void MainWindow::SwitchToMultiVideoView_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
{
TypeName pageTypeName;
- pageTypeName.Name = winrt::name_of();
+ pageTypeName.Name = winrt::name_of();
pageTypeName.Kind = TypeKind::Metadata;
ContentFrame().Navigate(pageTypeName);
}
diff --git a/vav2/Vav2Player/Vav2Player/MainWindow_old.xaml.cpp b/vav2/Vav2Player/Vav2Player/MainWindow_old.xaml.cpp
deleted file mode 100644
index 093e4de..0000000
--- a/vav2/Vav2Player/Vav2Player/MainWindow_old.xaml.cpp
+++ /dev/null
@@ -1,290 +0,0 @@
-#include "pch.h"
-#include "MainWindow.xaml.h"
-#include "MainVideoPage.xaml.h"
-#include "MultiVideoTestPage.xaml.h"
-#include "LayeredVideoPage.xaml.h"
-#if __has_include("MainWindow.g.cpp")
-#include "MainWindow.g.cpp"
-#endif
-
-using namespace winrt;
-using namespace winrt::Microsoft::UI::Xaml;
-
-// To learn more about WinUI, the WinUI project structure,
-// and more about our project templates, see: http://aka.ms/winui-project-info.
-
-namespace winrt::Vav2Player::implementation
-{
- MainWindow::MainWindow()
- {
- InitializeComponent();
-
- // Load Multi Video Test as default page (시작화면)
- ContentFrame().Navigate(winrt::xaml_typename());
- }
-
-
- // 성능 최적화된 YUV to BGRA 변환 함수
- void MainWindow::ConvertYUVToBGRA(const VavCoreVideoFrame& yuv_frame, uint8_t* bgra_buffer, uint32_t width, uint32_t height)
- {
- const uint8_t* y_plane = yuv_frame.y_plane;
- const uint8_t* u_plane = yuv_frame.u_plane;
- const uint8_t* v_plane = yuv_frame.v_plane;
-
- const int32_t y_stride = yuv_frame.y_stride;
- const int32_t u_stride = yuv_frame.u_stride;
- const int32_t v_stride = yuv_frame.v_stride;
-
- // 룩업 테이블을 사용한 최적화
- static bool lookup_initialized = false;
- static int16_t r_v_table[256];
- static int16_t g_u_table[256];
- static int16_t g_v_table[256];
- static int16_t b_u_table[256];
-
- if (!lookup_initialized) {
- for (int i = 0; i < 256; i++) {
- int uv_val = i - 128;
- r_v_table[i] = (409 * uv_val + 128) >> 8;
- g_u_table[i] = (100 * uv_val + 128) >> 8;
- g_v_table[i] = (208 * uv_val + 128) >> 8;
- b_u_table[i] = (516 * uv_val + 128) >> 8;
- }
- lookup_initialized = true;
- }
-
- // 4픽셀씩 처리하여 캐시 효율성 향상
- for (uint32_t row = 0; row < height; row += 2) {
- for (uint32_t col = 0; col < width; col += 2) {
- // UV값은 2x2 블록당 하나
- uint32_t uv_row = row / 2;
- uint32_t uv_col = col / 2;
-
- if (uv_row >= height / 2 || uv_col >= width / 2) continue;
-
- int u = u_plane[uv_row * u_stride + uv_col];
- int v = v_plane[uv_row * v_stride + uv_col];
-
- // 룩업 테이블에서 변환 계수 가져오기
- int r_offset = r_v_table[v];
- int g_u_offset = g_u_table[u];
- int g_v_offset = g_v_table[v];
- int b_offset = b_u_table[u];
-
- // 2x2 블록의 4개 픽셀 처리
- for (int dy = 0; dy < 2 && (row + dy) < height; dy++) {
- for (int dx = 0; dx < 2 && (col + dx) < width; dx++) {
- uint32_t pixel_row = row + dy;
- uint32_t pixel_col = col + dx;
-
- int y = y_plane[pixel_row * y_stride + pixel_col];
- int y_scaled = (298 * (y - 16) + 128) >> 8;
-
- // RGB 계산
- int r = std::clamp(y_scaled + r_offset, 0, 255);
- int g = std::clamp(y_scaled - g_u_offset - g_v_offset, 0, 255);
- int b = std::clamp(y_scaled + b_offset, 0, 255);
-
- // BGRA 형식으로 저장
- uint32_t pixel_offset = (pixel_row * width + pixel_col) * 4;
- bgra_buffer[pixel_offset + 0] = static_cast(b);
- bgra_buffer[pixel_offset + 1] = static_cast(g);
- bgra_buffer[pixel_offset + 2] = static_cast(r);
- bgra_buffer[pixel_offset + 3] = 255;
- }
- }
- }
- }
- }
-
- // 성능 최적화된 프레임 렌더링 함수
- void MainWindow::RenderFrameToScreen(const VavCoreVideoFrame& frame, Media::Imaging::WriteableBitmap& bitmap, std::vector& bgra_buffer)
- {
- // VavCoreVideoFrame doesn't have is_valid, check for null pointers instead
- if (!frame.y_plane || !bitmap) {
- return;
- }
-
- try {
- // YUV를 BGRA로 변환
- ConvertYUVToBGRA(frame, bgra_buffer.data(), frame.width, frame.height);
-
- // WriteableBitmap의 픽셀 버퍼에 직접 액세스
- auto buffer = bitmap.PixelBuffer();
- auto byteAccess = buffer.as<::IBufferByteAccess>();
- uint8_t* dest_pixels = nullptr;
- byteAccess->Buffer(&dest_pixels);
-
- if (dest_pixels) {
- // 메모리 복사를 최소화하기 위해 직접 복사
- memcpy(dest_pixels, bgra_buffer.data(), bgra_buffer.size());
-
- // 비트맵 무효화하여 UI 업데이트 트리거
- bitmap.Invalidate();
- }
- }
- catch (...) {
- // 렌더링 오류 무시
- }
- }
-
- winrt::Windows::Foundation::IAsyncAction MainWindow::OpenFileButton_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- try
- {
- // Create file picker
- winrt::Windows::Storage::Pickers::FileOpenPicker picker;
- picker.ViewMode(winrt::Windows::Storage::Pickers::PickerViewMode::Thumbnail);
- picker.SuggestedStartLocation(winrt::Windows::Storage::Pickers::PickerLocationId::VideosLibrary);
-
- // Add supported video file types
- picker.FileTypeFilter().Append(L".webm");
- picker.FileTypeFilter().Append(L".mkv");
- picker.FileTypeFilter().Append(L".mp4");
- picker.FileTypeFilter().Append(L".avi");
-
- // Initialize picker with window handle
- auto initializeWithWindow = picker.as();
- auto windowNative = this->try_as();
- HWND hWnd = nullptr;
- if (windowNative)
- {
- windowNative->get_WindowHandle(&hWnd);
- }
- initializeWithWindow->Initialize(hWnd);
-
- // Show picker and get selected file
- auto file = co_await picker.PickSingleFileAsync();
- if (file != nullptr)
- {
- auto filePath = file.Path();
-
- // Load video using VideoPlayerControl
- VideoPlayer().LoadVideo(filePath);
-
- // Update UI
- StatusText().Text(L"Loading video: " + filePath);
- PlayButton().IsEnabled(true);
- PauseButton().IsEnabled(true);
- StopButton().IsEnabled(true);
- }
- else
- {
- StatusText().Text(L"No file selected");
- }
- }
- catch (...)
- {
- StatusText().Text(L"Failed to open file picker or load video");
- }
- }
-
- void MainWindow::TestDecodeButton_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- // Not implemented
- }
-
- void MainWindow::PlayButton_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- try
- {
- VideoPlayer().Play();
- StatusText().Text(L"Playing video...");
- }
- catch (...)
- {
- StatusText().Text(L"Failed to play video");
- }
- }
-
- void MainWindow::PauseButton_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- try
- {
- VideoPlayer().Pause();
- StatusText().Text(L"Video paused");
- }
- catch (...)
- {
- StatusText().Text(L"Failed to pause video");
- }
- }
-
- void MainWindow::StopButton_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- try
- {
- VideoPlayer().Stop();
- StatusText().Text(L"Video stopped");
- }
- catch (...)
- {
- StatusText().Text(L"Failed to stop video");
- }
- }
-
- void MainWindow::DecoderSelectionComboBox_SelectionChanged(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::Controls::SelectionChangedEventArgs const&)
- {
- // Not implemented
- }
-
- void MainWindow::EnableFileOutputCheckBox_Checked(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- // Not implemented
- }
-
- void MainWindow::EnableFileOutputCheckBox_Unchecked(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- // Not implemented
- }
-
- void MainWindow::OutputFormatComboBox_SelectionChanged(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::Controls::SelectionChangedEventArgs const&)
- {
- // Not implemented
- }
-
- // Navigation event handlers
- void MainWindow::SwitchToMainView_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- ContentFrame().Navigate(winrt::xaml_typename());
- }
-
- void MainWindow::SwitchToMultiVideoView_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- ContentFrame().Navigate(winrt::xaml_typename());
- }
-
- void MainWindow::SwitchToLayeredVideoView_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- ContentFrame().Navigate(winrt::xaml_typename());
- }
-
- void MainWindow::Exit_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- this->Close();
- }
-
- void MainWindow::VavCoreTest_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- // Could implement VavCore Test functionality
- // For now, just show a message (no status bar in frame layout)
- }
-
- void MainWindow::PerformanceBenchmark_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- // Could implement Performance Benchmark functionality
- // For now, just show a message (no status bar in frame layout)
- }
-
- void MainWindow::Settings_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- // Could implement Settings functionality
- // For now, just show a message (no status bar in frame layout)
- }
-
- void MainWindow::About_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- // Could implement About dialog
- // For now, just show a message (no status bar in frame layout)
- }
-}
\ No newline at end of file
diff --git a/vav2/Vav2Player/Vav2Player/MultiVideoPage.idl b/vav2/Vav2Player/Vav2Player/MultiVideoPage.idl
new file mode 100644
index 0000000..350f2ca
--- /dev/null
+++ b/vav2/Vav2Player/Vav2Player/MultiVideoPage.idl
@@ -0,0 +1,8 @@
+namespace Vav2Player
+{
+ [default_interface]
+ runtimeclass MultiVideoPage : Microsoft.UI.Xaml.Controls.Page
+ {
+ MultiVideoPage();
+ }
+}
\ No newline at end of file
diff --git a/vav2/Vav2Player/Vav2Player/MultiVideoTestPage.xaml b/vav2/Vav2Player/Vav2Player/MultiVideoPage.xaml
similarity index 96%
rename from vav2/Vav2Player/Vav2Player/MultiVideoTestPage.xaml
rename to vav2/Vav2Player/Vav2Player/MultiVideoPage.xaml
index 1983544..4d8f31b 100644
--- a/vav2/Vav2Player/Vav2Player/MultiVideoTestPage.xaml
+++ b/vav2/Vav2Player/Vav2Player/MultiVideoPage.xaml
@@ -1,6 +1,6 @@
();
+
+ // Set grid position
+ videoPlayer.SetValue(Grid::RowProperty(), winrt::box_value(r));
+ videoPlayer.SetValue(Grid::ColumnProperty(), winrt::box_value(c));
+
+ // Add margin for visual separation
+ videoPlayer.Margin({2, 2, 2, 2});
+
+ // Add to grid
+ VideoGrid().Children().Append(videoPlayer);
+
+ // Store reference
+ m_videoPlayers.push_back(videoPlayer);
+ }
+ }
+
+ // Load current video to all players if available
+ if (!m_currentVideoPath.empty())
+ {
+ for (auto& player : m_videoPlayers)
+ {
+ player.LoadVideo(m_currentVideoPath);
+ }
+ }
+
+ UpdateStatus(winrt::hstring(L"Created " + std::to_wstring(rows) + L"x" + std::to_wstring(cols) + L" video grid (" + std::to_wstring(m_videoPlayers.size()) + L" players)"));
}
catch (...) {
- // Ignore errors during grid creation
UpdateStatus(L"Error creating video grid");
}
}
- void MultiVideoTestPage::ClearVideoGrid()
+ void MultiVideoPage::ClearVideoGrid()
{
try {
if (VideoGrid()) {
@@ -217,21 +251,21 @@ namespace winrt::Vav2Player::implementation
}
}
- winrt::Windows::Foundation::IAsyncAction MultiVideoTestPage::LoadVideoToAllPlayers(winrt::hstring const& videoPath)
+ winrt::Windows::Foundation::IAsyncAction MultiVideoPage::LoadVideoToAllPlayers(winrt::hstring const& videoPath)
{
co_await resume_background();
// Implementation would load video to all players
co_return;
}
- winrt::Windows::Foundation::IAsyncAction MultiVideoTestPage::PickVideoFile()
+ winrt::Windows::Foundation::IAsyncAction MultiVideoPage::PickVideoFile()
{
co_await resume_background();
// Implementation would show file picker
co_return;
}
- void MultiVideoTestPage::UpdateStatus(winrt::hstring const& message)
+ void MultiVideoPage::UpdateStatus(winrt::hstring const& message)
{
try {
if (StatusDisplay()) {
diff --git a/vav2/Vav2Player/Vav2Player/MultiVideoTestPage.xaml.h b/vav2/Vav2Player/Vav2Player/MultiVideoPage.xaml.h
similarity index 89%
rename from vav2/Vav2Player/Vav2Player/MultiVideoTestPage.xaml.h
rename to vav2/Vav2Player/Vav2Player/MultiVideoPage.xaml.h
index c379cbb..0ffddd8 100644
--- a/vav2/Vav2Player/Vav2Player/MultiVideoTestPage.xaml.h
+++ b/vav2/Vav2Player/Vav2Player/MultiVideoPage.xaml.h
@@ -1,15 +1,15 @@
#pragma once
-#include "MultiVideoTestPage.g.h"
+#include "MultiVideoPage.g.h"
#include "VideoPlayerControl.xaml.h"
#include
#include
namespace winrt::Vav2Player::implementation
{
- struct MultiVideoTestPage : MultiVideoTestPageT
+ struct MultiVideoPage : MultiVideoPageT
{
- MultiVideoTestPage();
+ MultiVideoPage();
// Event handlers
winrt::Windows::Foundation::IAsyncAction LoadVideoButton_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
@@ -45,7 +45,7 @@ namespace winrt::Vav2Player::implementation
namespace winrt::Vav2Player::factory_implementation
{
- struct MultiVideoTestPage : MultiVideoTestPageT
+ struct MultiVideoPage : MultiVideoPageT
{
};
}
\ No newline at end of file
diff --git a/vav2/Vav2Player/Vav2Player/MultiVideoTestPage.idl b/vav2/Vav2Player/Vav2Player/MultiVideoTestPage.idl
deleted file mode 100644
index 3db4463..0000000
--- a/vav2/Vav2Player/Vav2Player/MultiVideoTestPage.idl
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Vav2Player
-{
- [default_interface]
- runtimeclass MultiVideoTestPage : Microsoft.UI.Xaml.Controls.Page
- {
- MultiVideoTestPage();
- }
-}
\ No newline at end of file
diff --git a/vav2/Vav2Player/Vav2Player/MultiVideoTestWindow.idl b/vav2/Vav2Player/Vav2Player/MultiVideoTestWindow.idl
deleted file mode 100644
index d041aa7..0000000
--- a/vav2/Vav2Player/Vav2Player/MultiVideoTestWindow.idl
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Vav2Player
-{
- [default_interface]
- runtimeclass MultiVideoTestWindow : Microsoft.UI.Xaml.Window
- {
- MultiVideoTestWindow();
- }
-}
\ No newline at end of file
diff --git a/vav2/Vav2Player/Vav2Player/MultiVideoTestWindow.xaml b/vav2/Vav2Player/Vav2Player/MultiVideoTestWindow.xaml
deleted file mode 100644
index 9bf16bb..0000000
--- a/vav2/Vav2Player/Vav2Player/MultiVideoTestWindow.xaml
+++ /dev/null
@@ -1,85 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/vav2/Vav2Player/Vav2Player/MultiVideoTestWindow.xaml.cpp b/vav2/Vav2Player/Vav2Player/MultiVideoTestWindow.xaml.cpp
deleted file mode 100644
index c18b89f..0000000
--- a/vav2/Vav2Player/Vav2Player/MultiVideoTestWindow.xaml.cpp
+++ /dev/null
@@ -1,359 +0,0 @@
-#include "pch.h"
-#include "MultiVideoTestWindow.xaml.h"
-#include "MainWindow.xaml.h"
-#include "LayeredVideoWindow.xaml.h"
-#if __has_include("MultiVideoTestWindow.g.cpp")
-#include "MultiVideoTestWindow.g.cpp"
-#endif
-
-using namespace winrt;
-using namespace winrt::Microsoft::UI::Xaml;
-using namespace winrt::Microsoft::UI::Xaml::Controls;
-
-namespace winrt::Vav2Player::implementation
-{
- MultiVideoTestWindow::MultiVideoTestWindow()
- {
- InitializeComponent();
-
- // Defer CreateVideoGrid until UI is fully loaded using DispatcherQueue
- auto dispatcherQueue = winrt::Microsoft::UI::Dispatching::DispatcherQueue::GetForCurrentThread();
- dispatcherQueue.TryEnqueue([this]() {
- CreateVideoGrid(LayoutType::Single);
- });
- }
-
- winrt::Windows::Foundation::IAsyncAction MultiVideoTestWindow::LoadVideoButton_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- try
- {
- // Create file picker
- winrt::Windows::Storage::Pickers::FileOpenPicker picker;
- picker.ViewMode(winrt::Windows::Storage::Pickers::PickerViewMode::Thumbnail);
- picker.SuggestedStartLocation(winrt::Windows::Storage::Pickers::PickerLocationId::VideosLibrary);
-
- // Add supported video file types
- picker.FileTypeFilter().Append(L".webm");
- picker.FileTypeFilter().Append(L".mkv");
- picker.FileTypeFilter().Append(L".mp4");
- picker.FileTypeFilter().Append(L".avi");
-
- // Initialize picker with window handle
- auto initializeWithWindow = picker.as();
- auto windowNative = this->try_as();
- HWND hWnd = nullptr;
- if (windowNative)
- {
- windowNative->get_WindowHandle(&hWnd);
- }
- initializeWithWindow->Initialize(hWnd);
-
- // Show picker and get selected file
- auto file = co_await picker.PickSingleFileAsync();
- if (file != nullptr)
- {
- auto filePath = file.Path();
- m_currentVideoPath = filePath;
-
- // Load video to all players
- UpdateStatus(L"Loading video to all players...");
- for (auto& player : m_videoPlayers)
- {
- player.LoadVideo(filePath);
- }
- UpdateStatus(winrt::hstring(L"Video loaded to " + std::to_wstring(m_videoPlayers.size()) + L" players: " + filePath.c_str()));
- }
- else
- {
- UpdateStatus(L"No file selected");
- }
- }
- catch (...)
- {
- UpdateStatus(L"Error opening file picker");
- }
- }
-
- void MultiVideoTestWindow::PlayAllButton_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- for (auto& player : m_videoPlayers)
- {
- if (player.IsVideoLoaded())
- {
- player.Play();
- }
- }
- UpdateStatus(L"Playing all videos");
- }
-
- void MultiVideoTestWindow::PauseAllButton_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- for (auto& player : m_videoPlayers)
- {
- if (player.IsVideoPlaying())
- {
- player.Pause();
- }
- }
- UpdateStatus(L"Paused all videos");
- }
-
- void MultiVideoTestWindow::StopAllButton_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- for (auto& player : m_videoPlayers)
- {
- player.Stop();
- }
- UpdateStatus(L"Stopped all videos");
- }
-
- void MultiVideoTestWindow::LayoutComboBox_SelectionChanged(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::Controls::SelectionChangedEventArgs const&)
- {
- auto selectedIndex = LayoutComboBox().SelectedIndex();
- LayoutType newLayout = static_cast(selectedIndex);
-
- if (newLayout != m_currentLayout)
- {
- m_currentLayout = newLayout;
- CreateVideoGrid(newLayout);
-
- // Reload video to all players if we have one
- if (!m_currentVideoPath.empty())
- {
- LoadVideoToAllPlayers(m_currentVideoPath);
- }
- }
- }
-
- void MultiVideoTestWindow::CreateVideoGrid(LayoutType layout)
- {
- ClearVideoGrid();
-
- int rows = 1, cols = 1;
-
- switch (layout)
- {
- case LayoutType::Single:
- rows = 1; cols = 1;
- break;
- case LayoutType::Grid2x2:
- rows = 2; cols = 2;
- break;
- case LayoutType::Strip1x4:
- rows = 1; cols = 4;
- break;
- case LayoutType::Grid3x3:
- rows = 3; cols = 3;
- break;
- }
-
- // Clear existing grid definitions
- VideoGrid().RowDefinitions().Clear();
- VideoGrid().ColumnDefinitions().Clear();
-
- // Create row definitions
- for (int i = 0; i < rows; i++)
- {
- auto rowDef = winrt::Microsoft::UI::Xaml::Controls::RowDefinition();
- rowDef.Height(winrt::Microsoft::UI::Xaml::GridLengthHelper::FromValueAndType(1.0, winrt::Microsoft::UI::Xaml::GridUnitType::Star));
- VideoGrid().RowDefinitions().Append(rowDef);
- }
-
- // Create column definitions
- for (int i = 0; i < cols; i++)
- {
- auto colDef = winrt::Microsoft::UI::Xaml::Controls::ColumnDefinition();
- colDef.Width(winrt::Microsoft::UI::Xaml::GridLengthHelper::FromValueAndType(1.0, winrt::Microsoft::UI::Xaml::GridUnitType::Star));
- VideoGrid().ColumnDefinitions().Append(colDef);
- }
-
- // Create video player controls
- m_videoPlayers.clear();
- for (int row = 0; row < rows; row++)
- {
- for (int col = 0; col < cols; col++)
- {
- auto videoPlayer = winrt::make();
-
- // Configure player
- videoPlayer.UseHardwareRendering(true); // Enable hardware rendering
- videoPlayer.ShowControls(true);
- videoPlayer.AutoPlay(false);
-
- // Set default decoder to Auto (AdaptiveAV1Decoder priority)
- videoPlayer.DecoderType(Vav2Player::VideoDecoderType::Auto);
-
- // Add border for visual separation
- auto border = winrt::Microsoft::UI::Xaml::Controls::Border();
- border.BorderBrush(winrt::Microsoft::UI::Xaml::Media::SolidColorBrush(winrt::Microsoft::UI::Colors::Gray()));
- border.BorderThickness(winrt::Microsoft::UI::Xaml::ThicknessHelper::FromUniformLength(1));
- border.Margin(winrt::Microsoft::UI::Xaml::ThicknessHelper::FromUniformLength(2));
- border.Child(videoPlayer.as());
-
- // Set grid position
- winrt::Microsoft::UI::Xaml::Controls::Grid::SetRow(border, row);
- winrt::Microsoft::UI::Xaml::Controls::Grid::SetColumn(border, col);
-
- // Add to grid and track
- VideoGrid().Children().Append(border);
- m_videoPlayers.push_back(videoPlayer);
- }
- }
-
- UpdateStatus(winrt::hstring(L"Created " + std::to_wstring(m_videoPlayers.size()) + L" video players"));
- OutputDebugStringA(("Created " + std::to_string(rows) + "x" + std::to_string(cols) + " grid with " + std::to_string(m_videoPlayers.size()) + " players\n").c_str());
- }
-
- void MultiVideoTestWindow::ClearVideoGrid()
- {
- // Stop all players before clearing
- for (auto& player : m_videoPlayers)
- {
- player.Stop();
- }
-
- m_videoPlayers.clear();
- VideoGrid().Children().Clear();
- }
-
- winrt::Windows::Foundation::IAsyncAction MultiVideoTestWindow::LoadVideoToAllPlayers(winrt::hstring const& videoPath)
- {
- UpdateStatus(L"Loading video to all players...");
-
- // Load videos synchronously since LoadVideo is not async
- for (auto& player : m_videoPlayers)
- {
- player.LoadVideo(videoPath);
- }
-
- UpdateStatus(winrt::hstring(L"Video loaded to " + std::to_wstring(m_videoPlayers.size()) + L" players"));
- co_return;
- }
-
- winrt::Windows::Foundation::IAsyncAction MultiVideoTestWindow::PickVideoFile()
- {
- try
- {
- // Create file picker
- winrt::Windows::Storage::Pickers::FileOpenPicker picker;
-
- // Get window handle for WinUI3
- auto windowNative = this->try_as<::IWindowNative>();
- HWND hwnd = nullptr;
- if (windowNative)
- {
- windowNative->get_WindowHandle(&hwnd);
- }
-
- // Initialize picker
- auto initializeWithWindow = picker.as<::IInitializeWithWindow>();
- if (hwnd)
- {
- initializeWithWindow->Initialize(hwnd);
- }
-
- // Set file filters
- picker.ViewMode(winrt::Windows::Storage::Pickers::PickerViewMode::Thumbnail);
- picker.SuggestedStartLocation(winrt::Windows::Storage::Pickers::PickerLocationId::VideosLibrary);
- picker.FileTypeFilter().Append(L".webm");
- picker.FileTypeFilter().Append(L".mkv");
- picker.FileTypeFilter().Append(L".av1");
- picker.FileTypeFilter().Append(L".ivf");
-
- auto file = co_await picker.PickSingleFileAsync();
-
- if (file)
- {
- m_currentVideoPath = file.Path();
- co_await LoadVideoToAllPlayers(m_currentVideoPath);
- }
- else
- {
- UpdateStatus(L"File selection cancelled");
- }
- }
- catch (...)
- {
- UpdateStatus(L"Error loading video file");
- }
- }
-
- void MultiVideoTestWindow::UseHardwareRenderingCheckBox_Checked(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- // Apply hardware rendering to all video players
- for (auto& player : m_videoPlayers)
- {
- player.UseHardwareRendering(true);
- }
- UpdateStatus(L"Hardware Rendering enabled for all players");
- }
-
- void MultiVideoTestWindow::UseHardwareRenderingCheckBox_Unchecked(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- // Apply software rendering to all video players
- for (auto& player : m_videoPlayers)
- {
- player.UseHardwareRendering(false);
- }
- UpdateStatus(L"Software Rendering enabled for all players");
- }
-
- void MultiVideoTestWindow::UpdateStatus(winrt::hstring const& message)
- {
- // Safety check: only update if StatusDisplay is available
- try {
- if (StatusDisplay()) {
- StatusDisplay().Text(message);
- }
- } catch (...) {
- // Ignore if UI not ready yet
- }
- OutputDebugStringA((winrt::to_string(message) + "\n").c_str());
- }
-
- // Menu event handlers
- void MultiVideoTestWindow::SwitchToMainWindow_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- auto mainWindow = winrt::make();
- mainWindow.Activate();
- UpdateStatus(L"Switching to Main Window");
- }
-
- void MultiVideoTestWindow::SwitchToMultiVideoTest_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- // Already in multi video test window
- UpdateStatus(L"Already in Multi Video Test window");
- }
-
- void MultiVideoTestWindow::SwitchToLayeredVideo_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- auto layeredWindow = winrt::make();
- layeredWindow.Activate();
- UpdateStatus(L"Switching to Layered Video");
- }
-
- void MultiVideoTestWindow::Exit_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- this->Close();
- }
-
- void MultiVideoTestWindow::VavCoreTest_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- UpdateStatus(L"VavCore Test functionality - Coming soon");
- }
-
- void MultiVideoTestWindow::PerformanceBenchmark_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- UpdateStatus(L"Performance Benchmark functionality - Coming soon");
- }
-
- void MultiVideoTestWindow::Settings_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- UpdateStatus(L"Settings functionality - Coming soon");
- }
-
- void MultiVideoTestWindow::About_Click(winrt::Windows::Foundation::IInspectable const&, winrt::Microsoft::UI::Xaml::RoutedEventArgs const&)
- {
- UpdateStatus(L"About Vav2Player - AV1 Video Player");
- }
-}
\ No newline at end of file
diff --git a/vav2/Vav2Player/Vav2Player/MultiVideoTestWindow.xaml.h b/vav2/Vav2Player/Vav2Player/MultiVideoTestWindow.xaml.h
deleted file mode 100644
index 53dbdb6..0000000
--- a/vav2/Vav2Player/Vav2Player/MultiVideoTestWindow.xaml.h
+++ /dev/null
@@ -1,61 +0,0 @@
-#pragma once
-
-#include "MultiVideoTestWindow.g.h"
-#include "VideoPlayerControl.xaml.h"
-#include
-#include
-
-namespace winrt::Vav2Player::implementation
-{
- struct MultiVideoTestWindow : MultiVideoTestWindowT
- {
- MultiVideoTestWindow();
-
- // Event handlers
- winrt::Windows::Foundation::IAsyncAction LoadVideoButton_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void PlayAllButton_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void PauseAllButton_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void StopAllButton_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void LayoutComboBox_SelectionChanged(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::Controls::SelectionChangedEventArgs const& e);
- void UseHardwareRenderingCheckBox_Checked(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void UseHardwareRenderingCheckBox_Unchecked(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
-
- // Menu event handlers
- void SwitchToMainWindow_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void SwitchToMultiVideoTest_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void SwitchToLayeredVideo_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void Exit_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void VavCoreTest_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void PerformanceBenchmark_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void Settings_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
- void About_Click(winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e);
-
- private:
- std::vector m_videoPlayers;
- winrt::hstring m_currentVideoPath;
-
- enum class LayoutType
- {
- Single, // 1x1
- Grid2x2, // 2x2
- Strip1x4, // 1x4
- Grid3x3 // 3x3
- };
-
- LayoutType m_currentLayout = LayoutType::Single;
-
- // Helper methods
- void CreateVideoGrid(LayoutType layout);
- void ClearVideoGrid();
- winrt::Windows::Foundation::IAsyncAction LoadVideoToAllPlayers(winrt::hstring const& videoPath);
- winrt::Windows::Foundation::IAsyncAction PickVideoFile();
- void UpdateStatus(winrt::hstring const& message);
- };
-}
-
-namespace winrt::Vav2Player::factory_implementation
-{
- struct MultiVideoTestWindow : MultiVideoTestWindowT
- {
- };
-}
\ No newline at end of file
diff --git a/vav2/Vav2Player/Vav2Player/Vav2Player.vcxproj b/vav2/Vav2Player/Vav2Player/Vav2Player.vcxproj
index 4e17ead..3d17326 100644
--- a/vav2/Vav2Player/Vav2Player/Vav2Player.vcxproj
+++ b/vav2/Vav2Player/Vav2Player/Vav2Player.vcxproj
@@ -144,17 +144,11 @@
VideoPlayerControl.xaml
-
- MultiVideoTestWindow.xaml
-
-
- LayeredVideoWindow.xaml
-
MainVideoPage.xaml
-
- MultiVideoTestPage.xaml
+
+ MultiVideoPage.xaml
LayeredVideoPage.xaml
@@ -178,10 +172,8 @@
-
-
-
+
@@ -200,17 +192,11 @@
VideoPlayerControl.xaml
-
- MultiVideoTestWindow.xaml
-
-
- LayeredVideoWindow.xaml
-
MainVideoPage.xaml
-
- MultiVideoTestPage.xaml
+
+ MultiVideoPage.xaml
LayeredVideoPage.xaml
@@ -237,21 +223,13 @@
Code
VideoPlayerControl.xaml
-
- Code
- MultiVideoTestWindow.xaml
-
-
- Code
- LayeredVideoWindow.xaml
-
Code
MainVideoPage.xaml
-
+
Code
- MultiVideoTestPage.xaml
+ MultiVideoPage.xaml
Code
diff --git a/vav2/Vav2Player/Vav2Player/Vav2PlayerHeadless.vcxproj.user b/vav2/Vav2Player/Vav2Player/Vav2PlayerHeadless.vcxproj.user
deleted file mode 100644
index c8b7ae8..0000000
--- a/vav2/Vav2Player/Vav2Player/Vav2PlayerHeadless.vcxproj.user
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
- D:\Project\video-av1\oss\libwebm\testing\testdata\accurate_cluster_duration.webm
- WindowsLocalDebugger
-
-
- D:\Project\video-av1\oss\libwebm\testing\testdata\accurate_cluster_duration.webm
- WindowsLocalDebugger
-
-
\ No newline at end of file
diff --git a/vav2/Vav2Player/Vav2Player/Vav2UnitTest.vcxproj.user b/vav2/Vav2Player/Vav2Player/Vav2UnitTest.vcxproj.user
deleted file mode 100644
index 88a5509..0000000
--- a/vav2/Vav2Player/Vav2Player/Vav2UnitTest.vcxproj.user
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/vav2/Vav2Player/Vav2Player/VideoPlayerControl.xaml.cpp b/vav2/Vav2Player/Vav2Player/VideoPlayerControl.xaml.cpp
index 2236645..11c577a 100644
--- a/vav2/Vav2Player/Vav2Player/VideoPlayerControl.xaml.cpp
+++ b/vav2/Vav2Player/Vav2Player/VideoPlayerControl.xaml.cpp
@@ -457,10 +457,15 @@ namespace winrt::Vav2Player::implementation
m_currentFrame = 0;
m_currentTime = 0.0;
- // Note: Skip VavCore reset here to avoid deadlock during UI unload
- // Reset will happen automatically on next Play()
+ // Reset VavCore player to beginning for next playback
+ if (m_vavCorePlayer && m_isLoaded) {
+ VavCoreResult result = vavcore_reset(m_vavCorePlayer);
+ if (result != VAVCORE_SUCCESS) {
+ UpdateStatus(L"Stop - Reset failed");
+ }
+ }
- UpdateStatus(L"Stopped");
+ UpdateStatus(L"Stopped - Ready to play from beginning");
}
void VideoPlayerControl::ProcessSingleFrame()
diff --git a/vav2/Vav2Player/Vav2Player/test_vavcore_simple.cpp b/vav2/Vav2Player/Vav2Player/test_vavcore_simple.cpp
deleted file mode 100644
index 93cb098..0000000
--- a/vav2/Vav2Player/Vav2Player/test_vavcore_simple.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-#include
-#include "VavCore/VavCore.h"
-
-int main() {
- std::cout << "=== Simple VavCore Test ===" << std::endl;
-
- // Test 1: Get version
- std::cout << "VavCore Version: " << vavcore_get_version_string() << std::endl;
-
- // Test 2: Initialize library
- std::cout << "Initializing VavCore..." << std::endl;
- VavCoreResult init_result = vavcore_initialize();
-
- if (init_result == VAVCORE_SUCCESS) {
- std::cout << "[SUCCESS] VavCore initialized" << std::endl;
- } else {
- std::cout << "[ERROR] VavCore initialization failed: "
- << vavcore_get_error_string(init_result) << std::endl;
- return 1;
- }
-
- // Test 3: Create player
- std::cout << "Creating VavCore player..." << std::endl;
- VavCorePlayer* player = vavcore_create_player();
-
- if (player) {
- std::cout << "[SUCCESS] VavCore player created" << std::endl;
-
- // Test 4: Cleanup
- vavcore_destroy_player(player);
- std::cout << "[SUCCESS] VavCore player destroyed" << std::endl;
- } else {
- std::cout << "[ERROR] VavCore player creation failed" << std::endl;
- return 1;
- }
-
- // Test 5: Cleanup library
- vavcore_cleanup();
- std::cout << "[SUCCESS] VavCore cleanup completed" << std::endl;
-
- std::cout << "=== All tests passed ===" << std::endl;
- return 0;
-}
\ No newline at end of file
diff --git a/vav2/Vav2Player/Vav2Player/Vav2PlayerHeadless.vcxproj b/vav2/Vav2Player/Vav2PlayerHeadless/Vav2PlayerHeadless.vcxproj
similarity index 81%
rename from vav2/Vav2Player/Vav2Player/Vav2PlayerHeadless.vcxproj
rename to vav2/Vav2Player/Vav2PlayerHeadless/Vav2PlayerHeadless.vcxproj
index 3ac2919..64608d1 100644
--- a/vav2/Vav2Player/Vav2Player/Vav2PlayerHeadless.vcxproj
+++ b/vav2/Vav2Player/Vav2PlayerHeadless/Vav2PlayerHeadless.vcxproj
@@ -53,7 +53,7 @@
_DEBUG;_CONSOLE;HEADLESS_BUILD;%(PreprocessorDefinitions)
true
stdcpp20
- $(ProjectDir)headless;$(ProjectDir)..\VavCore\include;$(ProjectDir)..\..\..\include\libwebm;$(ProjectDir)..\..\..\include\dav1d;$(ProjectDir)..\..\..\oss\nvidia-video-codec\Interface;$(CUDA_PATH_V13_0)\include
+ $(ProjectDir)src;$(ProjectDir)..\VavCore\include;$(ProjectDir)..\..\..\include\libwebm;$(ProjectDir)..\..\..\include\dav1d;$(ProjectDir)..\..\..\oss\nvidia-video-codec\Interface;$(CUDA_PATH_V13_0)\include
Use
pch.h
@@ -73,7 +73,7 @@
NDEBUG;_CONSOLE;HEADLESS_BUILD;VAVCORE_STATIC_LIB;%(PreprocessorDefinitions)
true
stdcpp20
- $(ProjectDir)headless;$(ProjectDir)..\VavCore\include;$(ProjectDir)..\..\..\include\libwebm;$(ProjectDir)..\..\..\include\dav1d;$(ProjectDir)..\..\..\oss\nvidia-video-codec\Interface;$(CUDA_PATH_V13_0)\include
+ $(ProjectDir)src;$(ProjectDir)..\VavCore\include;$(ProjectDir)..\..\..\include\libwebm;$(ProjectDir)..\..\..\include\dav1d;$(ProjectDir)..\..\..\oss\nvidia-video-codec\Interface;$(CUDA_PATH_V13_0)\include
Use
pch.h
@@ -88,17 +88,17 @@
-
-
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -107,14 +107,14 @@
-
-
-
+
+
+
-
+
Create
Create
pch.h
diff --git a/vav2/Vav2Player/Vav2Player/headless/D3D12VideoRenderer_Stub.h b/vav2/Vav2Player/Vav2PlayerHeadless/src/D3D12VideoRenderer_Stub.h
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/headless/D3D12VideoRenderer_Stub.h
rename to vav2/Vav2Player/Vav2PlayerHeadless/src/D3D12VideoRenderer_Stub.h
diff --git a/vav2/Vav2Player/Vav2Player/headless/DebugVavCoreTest.cpp b/vav2/Vav2Player/Vav2PlayerHeadless/src/DebugVavCoreTest.cpp
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/headless/DebugVavCoreTest.cpp
rename to vav2/Vav2Player/Vav2PlayerHeadless/src/DebugVavCoreTest.cpp
diff --git a/vav2/Vav2Player/Vav2Player/headless/GPUVideoTest.cpp b/vav2/Vav2Player/Vav2PlayerHeadless/src/GPUVideoTest.cpp
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/headless/GPUVideoTest.cpp
rename to vav2/Vav2Player/Vav2PlayerHeadless/src/GPUVideoTest.cpp
diff --git a/vav2/Vav2Player/Vav2Player/headless/HeadlessDecoder.cpp b/vav2/Vav2Player/Vav2PlayerHeadless/src/HeadlessDecoder.cpp
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/headless/HeadlessDecoder.cpp
rename to vav2/Vav2Player/Vav2PlayerHeadless/src/HeadlessDecoder.cpp
diff --git a/vav2/Vav2Player/Vav2Player/headless/HeadlessDecoder.h b/vav2/Vav2Player/Vav2PlayerHeadless/src/HeadlessDecoder.h
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/headless/HeadlessDecoder.h
rename to vav2/Vav2Player/Vav2PlayerHeadless/src/HeadlessDecoder.h
diff --git a/vav2/Vav2Player/Vav2Player/headless/HeadlessLauncher.cpp b/vav2/Vav2Player/Vav2PlayerHeadless/src/HeadlessLauncher.cpp
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/headless/HeadlessLauncher.cpp
rename to vav2/Vav2Player/Vav2PlayerHeadless/src/HeadlessLauncher.cpp
diff --git a/vav2/Vav2Player/Vav2Player/headless/HeadlessMain.cpp b/vav2/Vav2Player/Vav2PlayerHeadless/src/HeadlessMain.cpp
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/headless/HeadlessMain.cpp
rename to vav2/Vav2Player/Vav2PlayerHeadless/src/HeadlessMain.cpp
diff --git a/vav2/Vav2Player/Vav2Player/headless/NVDECAV1Decoder_Headless.cpp b/vav2/Vav2Player/Vav2PlayerHeadless/src/NVDECAV1Decoder_Headless.cpp
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/headless/NVDECAV1Decoder_Headless.cpp
rename to vav2/Vav2Player/Vav2PlayerHeadless/src/NVDECAV1Decoder_Headless.cpp
diff --git a/vav2/Vav2Player/Vav2Player/headless/NVDECAV1Decoder_Headless.h b/vav2/Vav2Player/Vav2PlayerHeadless/src/NVDECAV1Decoder_Headless.h
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/headless/NVDECAV1Decoder_Headless.h
rename to vav2/Vav2Player/Vav2PlayerHeadless/src/NVDECAV1Decoder_Headless.h
diff --git a/vav2/Vav2Player/Vav2Player/headless/NVDECDebugTest.cpp b/vav2/Vav2Player/Vav2PlayerHeadless/src/NVDECDebugTest.cpp
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/headless/NVDECDebugTest.cpp
rename to vav2/Vav2Player/Vav2PlayerHeadless/src/NVDECDebugTest.cpp
diff --git a/vav2/Vav2Player/Vav2Player/headless/NVDECTestMain.cpp b/vav2/Vav2Player/Vav2PlayerHeadless/src/NVDECTestMain.cpp
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/headless/NVDECTestMain.cpp
rename to vav2/Vav2Player/Vav2PlayerHeadless/src/NVDECTestMain.cpp
diff --git a/vav2/Vav2Player/Vav2Player/headless/SimpleGPUIntegrationTest.cpp b/vav2/Vav2Player/Vav2PlayerHeadless/src/SimpleGPUIntegrationTest.cpp
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/headless/SimpleGPUIntegrationTest.cpp
rename to vav2/Vav2Player/Vav2PlayerHeadless/src/SimpleGPUIntegrationTest.cpp
diff --git a/vav2/Vav2Player/Vav2Player/headless/SimpleGPURenderer_Headless.h b/vav2/Vav2Player/Vav2PlayerHeadless/src/SimpleGPURenderer_Headless.h
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/headless/SimpleGPURenderer_Headless.h
rename to vav2/Vav2Player/Vav2PlayerHeadless/src/SimpleGPURenderer_Headless.h
diff --git a/vav2/Vav2Player/Vav2Player/headless/SimpleHeadlessMain.cpp b/vav2/Vav2Player/Vav2PlayerHeadless/src/SimpleHeadlessMain.cpp
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/headless/SimpleHeadlessMain.cpp
rename to vav2/Vav2Player/Vav2PlayerHeadless/src/SimpleHeadlessMain.cpp
diff --git a/vav2/Vav2Player/Vav2Player/headless/SimpleVavCoreTest.cpp b/vav2/Vav2Player/Vav2PlayerHeadless/src/SimpleVavCoreTest.cpp
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/headless/SimpleVavCoreTest.cpp
rename to vav2/Vav2Player/Vav2PlayerHeadless/src/SimpleVavCoreTest.cpp
diff --git a/vav2/Vav2Player/Vav2Player/headless/VavCoreHeadlessMain.cpp b/vav2/Vav2Player/Vav2PlayerHeadless/src/VavCoreHeadlessMain.cpp
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/headless/VavCoreHeadlessMain.cpp
rename to vav2/Vav2Player/Vav2PlayerHeadless/src/VavCoreHeadlessMain.cpp
diff --git a/vav2/Vav2Player/Vav2Player/headless/pch.cpp b/vav2/Vav2Player/Vav2PlayerHeadless/src/pch.cpp
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/headless/pch.cpp
rename to vav2/Vav2Player/Vav2PlayerHeadless/src/pch.cpp
diff --git a/vav2/Vav2Player/Vav2Player/headless/pch.h b/vav2/Vav2Player/Vav2PlayerHeadless/src/pch.h
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/headless/pch.h
rename to vav2/Vav2Player/Vav2PlayerHeadless/src/pch.h
diff --git a/vav2/Vav2Player/Vav2Player/Vav2UnitTest.vcxproj b/vav2/Vav2Player/Vav2UnitTest/Vav2UnitTest.vcxproj
similarity index 89%
rename from vav2/Vav2Player/Vav2Player/Vav2UnitTest.vcxproj
rename to vav2/Vav2Player/Vav2UnitTest/Vav2UnitTest.vcxproj
index 9172466..8cdceb0 100644
--- a/vav2/Vav2Player/Vav2Player/Vav2UnitTest.vcxproj
+++ b/vav2/Vav2Player/Vav2UnitTest/Vav2UnitTest.vcxproj
@@ -97,26 +97,26 @@
-
+
-
-
+
+
-
+
Create
Create
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/vav2/Vav2Player/Vav2Player/unit-test/AV1DecoderTest.cpp b/vav2/Vav2Player/Vav2UnitTest/tests/AV1DecoderTest.cpp
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/unit-test/AV1DecoderTest.cpp
rename to vav2/Vav2Player/Vav2UnitTest/tests/AV1DecoderTest.cpp
diff --git a/vav2/Vav2Player/Vav2Player/unit-test/MockVideoRenderer.cpp b/vav2/Vav2Player/Vav2UnitTest/tests/MockVideoRenderer.cpp
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/unit-test/MockVideoRenderer.cpp
rename to vav2/Vav2Player/Vav2UnitTest/tests/MockVideoRenderer.cpp
diff --git a/vav2/Vav2Player/Vav2Player/unit-test/MockVideoRenderer.h b/vav2/Vav2Player/Vav2UnitTest/tests/MockVideoRenderer.h
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/unit-test/MockVideoRenderer.h
rename to vav2/Vav2Player/Vav2UnitTest/tests/MockVideoRenderer.h
diff --git a/vav2/Vav2Player/Vav2Player/unit-test/MockWebMFileReader.cpp b/vav2/Vav2Player/Vav2UnitTest/tests/MockWebMFileReader.cpp
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/unit-test/MockWebMFileReader.cpp
rename to vav2/Vav2Player/Vav2UnitTest/tests/MockWebMFileReader.cpp
diff --git a/vav2/Vav2Player/Vav2Player/unit-test/MockWebMFileReader.h b/vav2/Vav2Player/Vav2UnitTest/tests/MockWebMFileReader.h
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/unit-test/MockWebMFileReader.h
rename to vav2/Vav2Player/Vav2UnitTest/tests/MockWebMFileReader.h
diff --git a/vav2/Vav2Player/Vav2Player/unit-test/VavCoreTest.cpp b/vav2/Vav2Player/Vav2UnitTest/tests/VavCoreTest.cpp
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/unit-test/VavCoreTest.cpp
rename to vav2/Vav2Player/Vav2UnitTest/tests/VavCoreTest.cpp
diff --git a/vav2/Vav2Player/Vav2Player/unit-test/VideoPlayerControlTest.cpp b/vav2/Vav2Player/Vav2UnitTest/tests/VideoPlayerControlTest.cpp
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/unit-test/VideoPlayerControlTest.cpp
rename to vav2/Vav2Player/Vav2UnitTest/tests/VideoPlayerControlTest.cpp
diff --git a/vav2/Vav2Player/Vav2Player/unit-test/VideoRendererTest.cpp b/vav2/Vav2Player/Vav2UnitTest/tests/VideoRendererTest.cpp
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/unit-test/VideoRendererTest.cpp
rename to vav2/Vav2Player/Vav2UnitTest/tests/VideoRendererTest.cpp
diff --git a/vav2/Vav2Player/Vav2Player/unit-test/VideoTypesTest.cpp b/vav2/Vav2Player/Vav2UnitTest/tests/VideoTypesTest.cpp
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/unit-test/VideoTypesTest.cpp
rename to vav2/Vav2Player/Vav2UnitTest/tests/VideoTypesTest.cpp
diff --git a/vav2/Vav2Player/Vav2Player/unit-test/WebMFileReaderTest.cpp b/vav2/Vav2Player/Vav2UnitTest/tests/WebMFileReaderTest.cpp
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/unit-test/WebMFileReaderTest.cpp
rename to vav2/Vav2Player/Vav2UnitTest/tests/WebMFileReaderTest.cpp
diff --git a/vav2/Vav2Player/Vav2Player/unit-test/pch.cpp b/vav2/Vav2Player/Vav2UnitTest/tests/pch.cpp
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/unit-test/pch.cpp
rename to vav2/Vav2Player/Vav2UnitTest/tests/pch.cpp
diff --git a/vav2/Vav2Player/Vav2Player/unit-test/pch.h b/vav2/Vav2Player/Vav2UnitTest/tests/pch.h
similarity index 100%
rename from vav2/Vav2Player/Vav2Player/unit-test/pch.h
rename to vav2/Vav2Player/Vav2UnitTest/tests/pch.h
diff --git a/vav2/todo7.txt b/vav2/todo7.txt
index 79a6a57..6e71eb1 100644
--- a/vav2/todo7.txt
+++ b/vav2/todo7.txt
@@ -3,18 +3,20 @@ amd decoder 를 탑재해야해.
-> adaptive 는 일단 제외.
-> nvidia
+
player UI 개선
-* 메뉴 추가 (Main, Multiple, Layered 화면 전환)
* log message 창을 별도로 만들어서 텍스트 로그 출력.
+* webm 파일을 읽어서 av1 코덱이 아니면, 지원하지 않는 코덱이라고 텍스트 로그를 출력.
+
+UI 화면/버튼, 폰트 크기를 재조정. 메뉴바 크기를 재조정.
+
+
android player 를 만들어서 av1 디코딩 테스트 필요.
-
IAdaptiveVideoDecoder.h 인터페이스가 정말로 필요한 것일까? 재검토를 해봐줘.
-
CLAUDE.md 에 현재 작업해야할 사항을 체크해봐주고. 완료된 것이면 업데이트해줘
-
● Now I understand. The VavCoreVideoFrame doesn't have a color_space field, and we need to update the MainWindow files
to use VavCoreVideoFrame instead of the old VideoFrame. Let me fix these issues: