原始像素太卡 走ffmpeg

This commit is contained in:
2026-08-29 20:24:11 +08:00
parent 45783201e4
commit 20be348a6a
27 changed files with 1310 additions and 684 deletions
+11 -5
View File
@@ -1,12 +1,12 @@
#include <gtest/gtest.h>
#include <web_server/src/H264_Encoder.hpp>
#include <web_server/src/media/detail/H264_Encoder.hpp>
#include <chrono>
#include <cstddef>
#include <cstdint>
#include <optional>
#include <vector>
namespace aethera::web {
namespace aethera::web::media::detail {
namespace {
std::vector<std::byte> test_pattern(std::uint32_t width,
std::uint32_t height) {
@@ -34,13 +34,15 @@ TEST(H264_Encoder, Rejects_Invalid_Input_Before_FFmpeg) {
const auto pixels = test_pattern(320, 180);
EXPECT_THROW(static_cast<void>(encoder.encode(
pixels, 319, 180, Video_Pixel_Layout::rgba,
1, std::chrono::microseconds{33'333})),
1, std::chrono::microseconds{33'333},
std::chrono::nanoseconds{1})),
std::invalid_argument);
EXPECT_THROW(static_cast<void>(encoder.encode(
std::span<const std::byte>{pixels}.first(
pixels.size() - 1U),
320, 180, Video_Pixel_Layout::rgba,
1, std::chrono::microseconds{33'333})),
1, std::chrono::microseconds{33'333},
std::chrono::nanoseconds{1})),
std::invalid_argument);
}
@@ -57,11 +59,15 @@ TEST(H264_Encoder, Libx264_Produces_Ordered_Annex_B_Access_Units) {
auto encoded = encoder.encode(
pixels, width, height, Video_Pixel_Layout::rgba, sequence,
std::chrono::microseconds{
static_cast<std::int64_t>(sequence * 33'333)});
static_cast<std::int64_t>(sequence * 33'333)},
std::chrono::nanoseconds{
static_cast<std::int64_t>(sequence * 1'000)});
if (!encoded) continue;
if (!first) first = encoded;
EXPECT_EQ(encoded->sequence, sequence);
EXPECT_EQ(encoded->backend, Video_Encoder_Backend::libx264);
EXPECT_EQ(encoded->source_time_unix,
std::chrono::nanoseconds{sequence * 1'000});
EXPECT_FALSE(encoded->annex_b.empty());
++produced;
}