mirror of
https://github.com/kunkundi/crossdesk.git
synced 2025-10-27 04:35:34 +08:00
Update ffmpeg codec configures
This commit is contained in:
@@ -47,7 +47,7 @@ FfmpegVideoDecoder::~FfmpegVideoDecoder() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int FfmpegVideoDecoder::Init() {
|
int FfmpegVideoDecoder::Init() {
|
||||||
// av_log_set_level(AV_LOG_DEBUG);
|
av_log_set_level(AV_LOG_ERROR);
|
||||||
|
|
||||||
codec_id_ = AV_CODEC_ID_H264;
|
codec_id_ = AV_CODEC_ID_H264;
|
||||||
codec_ = avcodec_find_decoder(codec_id_);
|
codec_ = avcodec_find_decoder(codec_id_);
|
||||||
@@ -59,6 +59,8 @@ int FfmpegVideoDecoder::Init() {
|
|||||||
if (!codec_ctx_) {
|
if (!codec_ctx_) {
|
||||||
printf("Could not allocate video codec context\n");
|
printf("Could not allocate video codec context\n");
|
||||||
return -1;
|
return -1;
|
||||||
|
} else {
|
||||||
|
LOG_INFO("Use H264 decoder [{}]", codec_->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
codec_ctx_->time_base.num = 1;
|
codec_ctx_->time_base.num = 1;
|
||||||
@@ -68,8 +70,8 @@ int FfmpegVideoDecoder::Init() {
|
|||||||
codec_ctx_->time_base.den = 29;
|
codec_ctx_->time_base.den = 29;
|
||||||
codec_ctx_->width = 1280;
|
codec_ctx_->width = 1280;
|
||||||
codec_ctx_->height = 720;
|
codec_ctx_->height = 720;
|
||||||
// codec_ctx_->pix_fmt = AV_PIX_FMT_NV12; // yuv420 default?
|
codec_ctx_->pix_fmt = AV_PIX_FMT_YUV420P; // yuv420 default?
|
||||||
codec_ctx_->color_range = AVCOL_RANGE_JPEG;
|
codec_ctx_->color_range = AVCOL_RANGE_MPEG;
|
||||||
|
|
||||||
if (avcodec_open2(codec_ctx_, codec_, NULL) < 0) {
|
if (avcodec_open2(codec_ctx_, codec_, NULL) < 0) {
|
||||||
printf("Could not open codec\n");
|
printf("Could not open codec\n");
|
||||||
|
|||||||
@@ -59,19 +59,23 @@ FFmpegVideoEncoder::~FFmpegVideoEncoder() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int FFmpegVideoEncoder::Init() {
|
int FFmpegVideoEncoder::Init() {
|
||||||
// av_log_set_level(AV_LOG_VERBOSE);
|
av_log_set_level(AV_LOG_ERROR);
|
||||||
|
|
||||||
codec_ = avcodec_find_encoder(AV_CODEC_ID_H264);
|
codec_ = avcodec_find_encoder(AV_CODEC_ID_H264);
|
||||||
if (!codec_) {
|
if (!codec_) {
|
||||||
LOG_ERROR("Failed to find H.264 encoder");
|
LOG_ERROR("Failed to find H.264 encoder");
|
||||||
return -1;
|
return -1;
|
||||||
} else {
|
} else {
|
||||||
if (0 == strcmp(codec_->name, "openh264")) {
|
#ifdef __linux__
|
||||||
|
if (0 != strcmp(codec_->name, "openh264")) {
|
||||||
use_openh264_ = true;
|
use_openh264_ = true;
|
||||||
LOG_INFO("Use H264 encoder [OpenH264]");
|
LOG_INFO("Use H264 encoder [OpenH264]");
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
LOG_INFO("Use H264 encoder [{}]", codec_->name);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
use_openh264_ = true;
|
// use_openh264_ = true;
|
||||||
|
|
||||||
codec_ctx_ = avcodec_alloc_context3(codec_);
|
codec_ctx_ = avcodec_alloc_context3(codec_);
|
||||||
if (!codec_ctx_) {
|
if (!codec_ctx_) {
|
||||||
@@ -93,10 +97,14 @@ int FFmpegVideoEncoder::Init() {
|
|||||||
codec_ctx_->gop_size = keyFrameInterval_;
|
codec_ctx_->gop_size = keyFrameInterval_;
|
||||||
codec_ctx_->keyint_min = keyFrameInterval_;
|
codec_ctx_->keyint_min = keyFrameInterval_;
|
||||||
codec_ctx_->max_b_frames = 0;
|
codec_ctx_->max_b_frames = 0;
|
||||||
codec_ctx_->bit_rate = maxBitrate_ * 2500;
|
codec_ctx_->bit_rate = maxBitrate_ * 2000;
|
||||||
|
codec_ctx_->qmin = 15;
|
||||||
|
codec_ctx_->qmax = 35;
|
||||||
|
codec_ctx_->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
|
||||||
|
codec_ctx_->flags2 |= AV_CODEC_FLAG2_LOCAL_HEADER;
|
||||||
|
|
||||||
av_opt_set_int(codec_ctx_->priv_data, "qp", 51, 0);
|
// av_opt_set_int(codec_ctx_->priv_data, "qp", 51, 0);
|
||||||
av_opt_set_int(codec_ctx_->priv_data, "crf", 23, 0);
|
// av_opt_set_int(codec_ctx_->priv_data, "crf", 23, 0);
|
||||||
|
|
||||||
if (!use_openh264_) {
|
if (!use_openh264_) {
|
||||||
av_opt_set(codec_ctx_->priv_data, "profile", "baseline", 0);
|
av_opt_set(codec_ctx_->priv_data, "profile", "baseline", 0);
|
||||||
|
|||||||
31
thirdparty/openh264/xmake.lua
vendored
31
thirdparty/openh264/xmake.lua
vendored
@@ -1,31 +0,0 @@
|
|||||||
package("openh264")
|
|
||||||
|
|
||||||
set_homepage("http://www.openh264.org/")
|
|
||||||
set_description("OpenH264 is a codec library which supports H.264 encoding and decoding.")
|
|
||||||
set_license("BSD-2-Clause")
|
|
||||||
|
|
||||||
add_urls("https://github.com/cisco/openh264/archive/refs/tags/$(version).tar.gz")
|
|
||||||
add_versions("v2.3.1", "453afa66dacb560bc5fd0468aabee90c483741571bca820a39a1c07f0362dc32")
|
|
||||||
|
|
||||||
add_deps("meson", "ninja", "nasm")
|
|
||||||
if is_plat("linux") then
|
|
||||||
add_syslinks("pthread", "rt")
|
|
||||||
end
|
|
||||||
on_install("windows", "linux", function (package)
|
|
||||||
import("package.tools.meson").build(package, {"-Dtests=disabled"}, {buildir = "out"})
|
|
||||||
import("package.tools.ninja").install(package, {}, {buildir = "out"})
|
|
||||||
-- if package:config("shared") then
|
|
||||||
-- os.tryrm(path.join(package:installdir("lib"), "libopenh264.a"))
|
|
||||||
-- else
|
|
||||||
-- os.tryrm(path.join(package:installdir("lib"), "libopenh264.so*"))
|
|
||||||
-- os.tryrm(path.join(package:installdir("lib"), "openh264.lib"))
|
|
||||||
-- os.tryrm(path.join(package:installdir("bin"), "openh264-*.dll"))
|
|
||||||
-- end
|
|
||||||
-- if package:is_plat("windows") then
|
|
||||||
-- os.trymv(path.join(package:installdir("lib"), "libopenh264.a"), path.join(package:installdir("lib"), "openh264.lib"))
|
|
||||||
-- end
|
|
||||||
end)
|
|
||||||
|
|
||||||
on_test(function (package)
|
|
||||||
assert(package:has_cxxfuncs("WelsGetCodecVersion", {includes = "wels/codec_api.h"}))
|
|
||||||
end)
|
|
||||||
1
thirdparty/xmake.lua
vendored
1
thirdparty/xmake.lua
vendored
@@ -1,4 +1,3 @@
|
|||||||
includes("openh264")
|
|
||||||
if is_plat("windows") then
|
if is_plat("windows") then
|
||||||
elseif is_plat("linux") then
|
elseif is_plat("linux") then
|
||||||
includes("ffmpeg")
|
includes("ffmpeg")
|
||||||
|
|||||||
@@ -29,17 +29,18 @@ if is_os("windows") then
|
|||||||
add_requires("vcpkg::ffmpeg 5.1.2", {configs = {shared = false}})
|
add_requires("vcpkg::ffmpeg 5.1.2", {configs = {shared = false}})
|
||||||
add_requires("vcpkg::libnice 0.1.21")
|
add_requires("vcpkg::libnice 0.1.21")
|
||||||
add_packages("vcpkg::libnice")
|
add_packages("vcpkg::libnice")
|
||||||
add_requires("openh264")
|
add_requires("openh264 2.1.1", {configs = {shared = false}})
|
||||||
elseif is_os("linux") then
|
elseif is_os("linux") then
|
||||||
add_requireconfs("ffmpeg.x264", {configs = {pic = true}})
|
add_requireconfs("ffmpeg.x264", {configs = {pic = true}})
|
||||||
add_requires("ffmpeg 5.1.2")
|
add_requires("ffmpeg 5.1.2")
|
||||||
add_requires("glib", {system = true})
|
add_requires("glib", {system = true})
|
||||||
add_requires("vcpkg::libnice 0.1.21")
|
add_requires("vcpkg::libnice 0.1.21")
|
||||||
add_requires("openh264")
|
add_requires("openh264 2.1.1", {configs = {shared = false}})
|
||||||
add_packages("glib", "vcpkg::libnice")
|
add_packages("glib", "vcpkg::libnice")
|
||||||
elseif is_os("macosx") then
|
elseif is_os("macosx") then
|
||||||
add_requires("ffmpeg 5.1.2", {system = false})
|
add_requires("ffmpeg 5.1.2", {system = false})
|
||||||
add_requires("brew::libnice", "brew::glib")
|
add_requires("brew::libnice", "brew::glib")
|
||||||
|
add_requires("openh264 2.1.1", {configs = {shared = false}})
|
||||||
end
|
end
|
||||||
|
|
||||||
add_packages("spdlog")
|
add_packages("spdlog")
|
||||||
|
|||||||
Reference in New Issue
Block a user