diff --git a/vav2/Vav2Player/Vav2Player/Vav2Player.vcxproj b/vav2/Vav2Player/Vav2Player/Vav2Player.vcxproj
index 55a74a0..4e2faf7 100644
--- a/vav2/Vav2Player/Vav2Player/Vav2Player.vcxproj
+++ b/vav2/Vav2Player/Vav2Player/Vav2Player.vcxproj
@@ -149,8 +149,7 @@
-
-
+
@@ -180,8 +179,7 @@
-
-
+
diff --git a/vav2/Vav2Player/Vav2Player/VideoPlayerControl.xaml.cpp b/vav2/Vav2Player/Vav2Player/VideoPlayerControl.xaml.cpp
index 80ddd20..bce4a96 100644
--- a/vav2/Vav2Player/Vav2Player/VideoPlayerControl.xaml.cpp
+++ b/vav2/Vav2Player/Vav2Player/VideoPlayerControl.xaml.cpp
@@ -11,7 +11,7 @@
#include
#include
#include
-#include "headless/AV1Decoder_Headless.h"
+#include "src/Decoder/AV1Decoder.h"
#include "src/Rendering/SimpleGPURenderer.h"
#include "src/Common/VideoTypes.h"
#include "src/FileIO/WebMFileReader.h"
diff --git a/vav2/Vav2Player/Vav2Player/headless/AV1Decoder_Headless.cpp b/vav2/Vav2Player/Vav2Player/src/Decoder/AV1Decoder.cpp
similarity index 88%
rename from vav2/Vav2Player/Vav2Player/headless/AV1Decoder_Headless.cpp
rename to vav2/Vav2Player/Vav2Player/src/Decoder/AV1Decoder.cpp
index 797f6d8..f2a684c 100644
--- a/vav2/Vav2Player/Vav2Player/headless/AV1Decoder_Headless.cpp
+++ b/vav2/Vav2Player/Vav2Player/src/Decoder/AV1Decoder.cpp
@@ -1,5 +1,5 @@
#include "pch.h"
-#include "AV1Decoder_Headless.h"
+#include "AV1Decoder.h"
#include
#include
@@ -10,7 +10,7 @@ static void DummyFreeCallback(const uint8_t* data, void* user_data) {
// Do nothing - packet data is managed externally
}
-AV1Decoder_Headless::AV1Decoder_Headless()
+AV1Decoder::AV1Decoder()
: m_dav1d_context(nullptr)
, m_initialized(false) {
// Initialize default AV1 settings
@@ -20,11 +20,11 @@ AV1Decoder_Headless::AV1Decoder_Headless()
m_av1_settings.all_layers = false;
}
-AV1Decoder_Headless::~AV1Decoder_Headless() {
+AV1Decoder::~AV1Decoder() {
Cleanup();
}
-bool AV1Decoder_Headless::Initialize(const VideoMetadata& metadata) {
+bool AV1Decoder::Initialize(const VideoMetadata& metadata) {
if (m_initialized) {
LogError("Decoder already initialized");
return false;
@@ -61,7 +61,7 @@ bool AV1Decoder_Headless::Initialize(const VideoMetadata& metadata) {
return true;
}
-void AV1Decoder_Headless::Cleanup() {
+void AV1Decoder::Cleanup() {
if (m_dav1d_context) {
dav1d_close(&m_dav1d_context);
m_dav1d_context = nullptr;
@@ -69,11 +69,11 @@ void AV1Decoder_Headless::Cleanup() {
m_initialized = false;
}
-bool AV1Decoder_Headless::IsInitialized() const {
+bool AV1Decoder::IsInitialized() const {
return m_initialized;
}
-bool AV1Decoder_Headless::DecodeFrame(const VideoPacket& input_packet, VideoFrame& output_frame) {
+bool AV1Decoder::DecodeFrame(const VideoPacket& input_packet, VideoFrame& output_frame) {
if (!input_packet.IsValid()) {
LogError("Invalid input packet");
return false;
@@ -82,7 +82,7 @@ bool AV1Decoder_Headless::DecodeFrame(const VideoPacket& input_packet, VideoFram
return DecodeFrame(input_packet.data.get(), input_packet.size, output_frame);
}
-bool AV1Decoder_Headless::DecodeFrame(const uint8_t* packet_data, size_t packet_size, VideoFrame& output_frame) {
+bool AV1Decoder::DecodeFrame(const uint8_t* packet_data, size_t packet_size, VideoFrame& output_frame) {
if (!m_initialized || !packet_data || packet_size == 0) {
LogError("Invalid parameters or decoder not initialized");
return false;
@@ -134,7 +134,7 @@ bool AV1Decoder_Headless::DecodeFrame(const uint8_t* packet_data, size_t packet_
return true;
}
-bool AV1Decoder_Headless::DecodeFrameZeroCopy(const uint8_t* packet_data, size_t packet_size, VideoFrame& output_frame) {
+bool AV1Decoder::DecodeFrameZeroCopy(const uint8_t* packet_data, size_t packet_size, VideoFrame& output_frame) {
if (!m_initialized || !packet_data || packet_size == 0) {
LogError("Invalid parameters or decoder not initialized");
return false;
@@ -184,7 +184,7 @@ bool AV1Decoder_Headless::DecodeFrameZeroCopy(const uint8_t* packet_data, size_t
return true;
}
-bool AV1Decoder_Headless::Reset() {
+bool AV1Decoder::Reset() {
if (!m_initialized) {
return false;
}
@@ -193,7 +193,7 @@ bool AV1Decoder_Headless::Reset() {
return true;
}
-bool AV1Decoder_Headless::Flush() {
+bool AV1Decoder::Flush() {
if (!m_initialized) {
return false;
}
@@ -202,7 +202,7 @@ bool AV1Decoder_Headless::Flush() {
return true;
}
-bool AV1Decoder_Headless::ConvertDav1dPicture(const Dav1dPicture& dav1d_picture, VideoFrame& output_frame) {
+bool AV1Decoder::ConvertDav1dPicture(const Dav1dPicture& dav1d_picture, VideoFrame& output_frame) {
// Allocate YUV420P frame
if (!output_frame.AllocateYUV420P(dav1d_picture.p.w, dav1d_picture.p.h)) {
LogError("Failed to allocate VideoFrame");
@@ -240,17 +240,17 @@ bool AV1Decoder_Headless::ConvertDav1dPicture(const Dav1dPicture& dav1d_picture,
return true;
}
-void AV1Decoder_Headless::UpdateDecodingStats(double decode_time_ms, size_t packet_size) {
+void AV1Decoder::UpdateDecodingStats(double decode_time_ms, size_t packet_size) {
m_stats.total_frames_decoded++;
m_stats.total_bytes_processed += packet_size;
m_stats.total_decode_time_ms += decode_time_ms;
}
-void AV1Decoder_Headless::LogError(const std::string& message) {
+void AV1Decoder::LogError(const std::string& message) {
std::cout << "[AV1Decoder_Headless ERROR] " << message << std::endl;
}
-void AV1Decoder_Headless::ApplyOptimalSettingsForResolution(uint32_t width, uint32_t height) {
+void AV1Decoder::ApplyOptimalSettingsForResolution(uint32_t width, uint32_t height) {
// Apply resolution-based optimizations
AV1Settings settings = m_av1_settings;
diff --git a/vav2/Vav2Player/Vav2Player/headless/AV1Decoder_Headless.h b/vav2/Vav2Player/Vav2Player/src/Decoder/AV1Decoder.h
similarity index 89%
rename from vav2/Vav2Player/Vav2Player/headless/AV1Decoder_Headless.h
rename to vav2/Vav2Player/Vav2Player/src/Decoder/AV1Decoder.h
index 9070dc6..f804c08 100644
--- a/vav2/Vav2Player/Vav2Player/headless/AV1Decoder_Headless.h
+++ b/vav2/Vav2Player/Vav2Player/src/Decoder/AV1Decoder.h
@@ -1,20 +1,20 @@
#pragma once
-#include "../src/Decoder/IVideoDecoder.h"
+#include "IVideoDecoder.h"
#include
#include
#include
namespace Vav2Player {
-// Headless version of AV1Decoder with GPU methods removed
-class AV1Decoder_Headless : public IVideoDecoder {
+// AV1 decoder using dav1d library
+class AV1Decoder : public IVideoDecoder {
public:
- AV1Decoder_Headless();
- ~AV1Decoder_Headless() override;
+ AV1Decoder();
+ ~AV1Decoder() override;
// Prevent copying
- AV1Decoder_Headless(const AV1Decoder_Headless&) = delete;
- AV1Decoder_Headless& operator=(const AV1Decoder_Headless&) = delete;
+ AV1Decoder(const AV1Decoder&) = delete;
+ AV1Decoder& operator=(const AV1Decoder&) = delete;
// IVideoDecoder interface implementation
bool Initialize(const VideoMetadata& metadata) override;
diff --git a/vav2/Vav2Player/Vav2Player/src/Decoder/VideoDecoderFactory.cpp b/vav2/Vav2Player/Vav2Player/src/Decoder/VideoDecoderFactory.cpp
index 3b6eb78..f4fc0de 100644
--- a/vav2/Vav2Player/Vav2Player/src/Decoder/VideoDecoderFactory.cpp
+++ b/vav2/Vav2Player/Vav2Player/src/Decoder/VideoDecoderFactory.cpp
@@ -1,6 +1,6 @@
#include "pch.h"
#include "VideoDecoderFactory.h"
-#include "../../headless/AV1Decoder_Headless.h"
+#include "AV1Decoder.h"
#include "MediaFoundationAV1Decoder.h"
// #include "VP9Decoder.h" // TODO: activate when VP9 implemented
@@ -52,7 +52,7 @@ std::unique_ptr VideoDecoderFactory::CreateAV1Decoder(DecoderType
case DecoderType::SOFTWARE:
if (s_av1_available) {
OutputDebugStringA("[VideoDecoderFactory] Creating software AV1 decoder (dav1d)\n");
- return std::make_unique();
+ return std::make_unique();
}
break;
@@ -69,7 +69,7 @@ std::unique_ptr VideoDecoderFactory::CreateAV1Decoder(DecoderType
// Fallback to dav1d when Media Foundation fails
if (s_av1_available) {
OutputDebugStringA("[VideoDecoderFactory] Auto mode: falling back to software AV1 decoder (dav1d)\n");
- return std::make_unique();
+ return std::make_unique();
}
break;
}