summaryrefslogtreecommitdiffstats
path: root/packages/media-libs
diff options
context:
space:
mode:
Diffstat (limited to 'packages/media-libs')
-rw-r--r--packages/media-libs/libmysofa/libmysofa-1.3.5.exheres-036
-rw-r--r--packages/media-libs/nanosvg/files/nanosvg.patch248
-rw-r--r--packages/media-libs/nanosvg/nanosvg-0.1.0.1.exheres-035
-rw-r--r--packages/media-libs/tg_owt/files/tg_owt-0_pre20260803-abseil.patch159
-rw-r--r--packages/media-libs/tg_owt/tg_owt-0_pre20260803.exheres-090
-rw-r--r--packages/media-libs/zita-convolver/files/zita-convolver-4.0.3-makefile.patch23
-rw-r--r--packages/media-libs/zita-convolver/zita-convolver-4.0.3.exheres-033
7 files changed, 624 insertions, 0 deletions
diff --git a/packages/media-libs/libmysofa/libmysofa-1.3.5.exheres-0 b/packages/media-libs/libmysofa/libmysofa-1.3.5.exheres-0
new file mode 100644
index 0000000..dc31d82
--- /dev/null
+++ b/packages/media-libs/libmysofa/libmysofa-1.3.5.exheres-0
@@ -0,0 +1,36 @@
+# Copyright 2026 Gurov <thuggerthugger1@duck.com>
+# Distributed under the terms of the GNU General Public License v2
+
+require cmake
+
+SUMMARY="Library for reading AES SOFA files"
+HOMEPAGE="https://github.com/hoene/libmysofa"
+DOWNLOADS="https://github.com/hoene/libmysofa/archive/refs/tags/v${PV}.tar.gz -> ${PNV}.tar.gz"
+
+LICENCES="BSD-3"
+SLOT="0"
+PLATFORMS="~amd64"
+
+DEPENDENCIES="
+ build+run:
+ sys-libs/zlib
+
+ test:
+ app-arch/bzip2
+ dev-lang/node
+ dev-util/cunit
+"
+
+CMAKE_SRC_CONFIGURE_PARAMS=(
+ -DBUILD_SHARED_LIBS=ON
+ -DBUILD_STATIC_LIBS=OFF
+)
+
+CMAKE_SRC_CONFIGURE_TESTS=(
+ '-DBUILD_TESTS=ON -DBUILD_TESTS=OFF'
+)
+
+src_install() {
+ cmake_src_install
+ edo rm -r "${IMAGE}/usr/share/libmysofa"
+}
diff --git a/packages/media-libs/nanosvg/files/nanosvg.patch b/packages/media-libs/nanosvg/files/nanosvg.patch
new file mode 100644
index 0000000..dc11e93
--- /dev/null
+++ b/packages/media-libs/nanosvg/files/nanosvg.patch
@@ -0,0 +1,248 @@
+From abcd277ea45e9098bed752cf9c6875b533c0892f Mon Sep 17 00:00:00 2001
+From: AlbrechtS <AlbrechtS.svn@fltk.example.org>
+Date: Sun, 4 Feb 2018 23:47:38 +0100
+Subject: [PATCH] Modify rasterizer to support non-square X,Y axes scaling.
+
+Add new function nsvgRasterizeXY() similar to nsvgRasterize() but with
+separate scaling factors for x-axis and y-axis.
+---
+ src/nanosvgrast.h | 78 +++++++++++++++++++++++++++++++----------------
+ 1 file changed, 51 insertions(+), 27 deletions(-)
+
+diff --git a/src/nanosvgrast.h b/src/nanosvgrast.h
+index 17ba3b0..a83db27 100644
+--- a/src/nanosvgrast.h
++++ b/src/nanosvgrast.h
+@@ -22,6 +22,12 @@
+ *
+ */
+
++/* Modified by FLTK to support non-square X,Y axes scaling.
++ *
++ * Added: nsvgRasterizeXY()
++*/
++
++
+ #ifndef NANOSVGRAST_H
+ #define NANOSVGRAST_H
+
+@@ -46,6 +52,9 @@ typedef struct NSVGrasterizer NSVGrasterizer;
+ unsigned char* img = malloc(w*h*4);
+ // Rasterize
+ nsvgRasterize(rast, image, 0,0,1, img, w, h, w*4);
++
++ // For non-square X,Y scaling, use
++ nsvgRasterizeXY(rast, image, 0,0,1,1, img, w, h, w*4);
+ */
+
+ // Allocated rasterizer context.
+@@ -55,7 +64,7 @@ NSVGrasterizer* nsvgCreateRasterizer(void);
+ // r - pointer to rasterizer context
+ // image - pointer to image to rasterize
+ // tx,ty - image offset (applied after scaling)
+-// scale - image scale
++// scale - image scale (assumes square aspect ratio)
+ // dst - pointer to destination image data, 4 bytes per pixel (RGBA)
+ // w - width of the image to render
+ // h - height of the image to render
+@@ -64,6 +73,12 @@ void nsvgRasterize(NSVGrasterizer* r,
+ NSVGimage* image, float tx, float ty, float scale,
+ unsigned char* dst, int w, int h, int stride);
+
++// As above, but allow X and Y axes to scale independently for non-square aspects
++void nsvgRasterizeXY(NSVGrasterizer* r,
++ NSVGimage* image, float tx, float ty,
++ float sx, float sy,
++ unsigned char* dst, int w, int h, int stride);
++
+ // Deletes rasterizer context.
+ void nsvgDeleteRasterizer(NSVGrasterizer*);
+
+@@ -370,7 +385,7 @@ static void nsvg__flattenCubicBez(NSVGrasterizer* r,
+ nsvg__flattenCubicBez(r, x1234,y1234, x234,y234, x34,y34, x4,y4, level+1, type);
+ }
+
+-static void nsvg__flattenShape(NSVGrasterizer* r, NSVGshape* shape, float scale)
++static void nsvg__flattenShape(NSVGrasterizer* r, NSVGshape* shape, float sx, float sy)
+ {
+ int i, j;
+ NSVGpath* path;
+@@ -378,13 +393,13 @@ static void nsvg__flattenShape(NSVGrasterizer* r, NSVGshape* shape, float scale)
+ for (path = shape->paths; path != NULL; path = path->next) {
+ r->npoints = 0;
+ // Flatten path
+- nsvg__addPathPoint(r, path->pts[0]*scale, path->pts[1]*scale, 0);
++ nsvg__addPathPoint(r, path->pts[0]*sx, path->pts[1]*sy, 0);
+ for (i = 0; i < path->npts-1; i += 3) {
+ float* p = &path->pts[i*2];
+- nsvg__flattenCubicBez(r, p[0]*scale,p[1]*scale, p[2]*scale,p[3]*scale, p[4]*scale,p[5]*scale, p[6]*scale,p[7]*scale, 0, 0);
++ nsvg__flattenCubicBez(r, p[0]*sx,p[1]*sy, p[2]*sx,p[3]*sy, p[4]*sx,p[5]*sy, p[6]*sx,p[7]*sy, 0, 0);
+ }
+ // Close path
+- nsvg__addPathPoint(r, path->pts[0]*scale, path->pts[1]*scale, 0);
++ nsvg__addPathPoint(r, path->pts[0]*sx, path->pts[1]*sy, 0);
+ // Build edges
+ for (i = 0, j = r->npoints-1; i < r->npoints; j = i++)
+ nsvg__addEdge(r, r->points[j].x, r->points[j].y, r->points[i].x, r->points[i].y);
+@@ -734,7 +749,7 @@ static void nsvg__prepareStroke(NSVGrasterizer* r, float miterLimit, int lineJoi
+ }
+ }
+
+-static void nsvg__flattenShapeStroke(NSVGrasterizer* r, NSVGshape* shape, float scale)
++static void nsvg__flattenShapeStroke(NSVGrasterizer* r, NSVGshape* shape, float sx, float sy)
+ {
+ int i, j, closed;
+ NSVGpath* path;
+@@ -742,15 +757,16 @@ static void nsvg__flattenShapeStroke(NSVGrasterizer* r, NSVGshape* shape, float
+ float miterLimit = shape->miterLimit;
+ int lineJoin = shape->strokeLineJoin;
+ int lineCap = shape->strokeLineCap;
+- float lineWidth = shape->strokeWidth * scale;
++ const float sw = (sx + sy) / 2; // average scaling factor
++ const float lineWidth = shape->strokeWidth * sw; // FIXME (?)
+
+ for (path = shape->paths; path != NULL; path = path->next) {
+ // Flatten path
+ r->npoints = 0;
+- nsvg__addPathPoint(r, path->pts[0]*scale, path->pts[1]*scale, NSVG_PT_CORNER);
++ nsvg__addPathPoint(r, path->pts[0]*sx, path->pts[1]*sy, NSVG_PT_CORNER);
+ for (i = 0; i < path->npts-1; i += 3) {
+ float* p = &path->pts[i*2];
+- nsvg__flattenCubicBez(r, p[0]*scale,p[1]*scale, p[2]*scale,p[3]*scale, p[4]*scale,p[5]*scale, p[6]*scale,p[7]*scale, 0, NSVG_PT_CORNER);
++ nsvg__flattenCubicBez(r, p[0]*sx,p[1]*sy, p[2]*sx,p[3]*sy, p[4]*sx,p[5]*sy, p[6]*sx,p[7]*sy, 0, NSVG_PT_CORNER);
+ }
+ if (r->npoints < 2)
+ continue;
+@@ -796,7 +812,7 @@ static void nsvg__flattenShapeStroke(NSVGrasterizer* r, NSVGshape* shape, float
+ dashOffset -= shape->strokeDashArray[idash];
+ idash = (idash + 1) % shape->strokeDashCount;
+ }
+- dashLen = (shape->strokeDashArray[idash] - dashOffset) * scale;
++ dashLen = (shape->strokeDashArray[idash] - dashOffset) * sw;
+
+ for (j = 1; j < r->npoints2; ) {
+ float dx = r->points2[j].x - cur.x;
+@@ -818,7 +834,7 @@ static void nsvg__flattenShapeStroke(NSVGrasterizer* r, NSVGshape* shape, float
+ // Advance dash pattern
+ dashState = !dashState;
+ idash = (idash+1) % shape->strokeDashCount;
+- dashLen = shape->strokeDashArray[idash] * scale;
++ dashLen = shape->strokeDashArray[idash] * sw;
+ // Restart
+ cur.x = x;
+ cur.y = y;
+@@ -987,7 +1003,7 @@ static inline int nsvg__div255(int x)
+ }
+
+ static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* cover, int x, int y,
+- float tx, float ty, float scale, NSVGcachedPaint* cache)
++ float tx, float ty, float sx, float sy, NSVGcachedPaint* cache)
+ {
+
+ if (cache->type == NSVG_PAINT_COLOR) {
+@@ -1028,9 +1044,9 @@ static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* co
+ int i, cr, cg, cb, ca;
+ unsigned int c;
+
+- fx = ((float)x - tx) / scale;
+- fy = ((float)y - ty) / scale;
+- dx = 1.0f / scale;
++ fx = ((float)x - tx) / sx;
++ fy = ((float)y - ty) / sy;
++ dx = 1.0f / sx;
+
+ for (i = 0; i < count; i++) {
+ int r,g,b,a,ia;
+@@ -1073,9 +1089,9 @@ static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* co
+ int i, cr, cg, cb, ca;
+ unsigned int c;
+
+- fx = ((float)x - tx) / scale;
+- fy = ((float)y - ty) / scale;
+- dx = 1.0f / scale;
++ fx = ((float)x - tx) / sx;
++ fy = ((float)y - ty) / sy;
++ dx = 1.0f / sx;
+
+ for (i = 0; i < count; i++) {
+ int r,g,b,a,ia;
+@@ -1114,7 +1130,7 @@ static void nsvg__scanlineSolid(unsigned char* dst, int count, unsigned char* co
+ }
+ }
+
+-static void nsvg__rasterizeSortedEdges(NSVGrasterizer *r, float tx, float ty, float scale, NSVGcachedPaint* cache, char fillRule)
++static void nsvg__rasterizeSortedEdges(NSVGrasterizer *r, float tx, float ty, float sx, float sy, NSVGcachedPaint* cache, char fillRule)
+ {
+ NSVGactiveEdge *active = NULL;
+ int y, s;
+@@ -1196,7 +1212,7 @@ static void nsvg__rasterizeSortedEdges(NSVGrasterizer *r, float tx, float ty, fl
+ if (xmin < 0) xmin = 0;
+ if (xmax > r->width-1) xmax = r->width-1;
+ if (xmin <= xmax) {
+- nsvg__scanlineSolid(&r->bitmap[y * r->stride] + xmin*4, xmax-xmin+1, &r->scanline[xmin], xmin, y, tx,ty, scale, cache);
++ nsvg__scanlineSolid(&r->bitmap[y * r->stride] + xmin*4, xmax-xmin+1, &r->scanline[xmin], xmin, y, tx,ty, sx, sy, cache);
+ }
+ }
+
+@@ -1364,8 +1380,9 @@ static void dumpEdges(NSVGrasterizer* r, const char* name)
+ }
+ */
+
+-void nsvgRasterize(NSVGrasterizer* r,
+- NSVGimage* image, float tx, float ty, float scale,
++void nsvgRasterizeXY(NSVGrasterizer* r,
++ NSVGimage* image, float tx, float ty,
++ float sx, float sy,
+ unsigned char* dst, int w, int h, int stride)
+ {
+ NSVGshape *shape = NULL;
+@@ -1396,7 +1413,7 @@ void nsvgRasterize(NSVGrasterizer* r,
+ r->freelist = NULL;
+ r->nedges = 0;
+
+- nsvg__flattenShape(r, shape, scale);
++ nsvg__flattenShape(r, shape, sx, sy);
+
+ // Scale and translate edges
+ for (i = 0; i < r->nedges; i++) {
+@@ -1414,14 +1431,14 @@ void nsvgRasterize(NSVGrasterizer* r,
+ // now, traverse the scanlines and find the intersections on each scanline, use non-zero rule
+ nsvg__initPaint(&cache, &shape->fill, shape->opacity);
+
+- nsvg__rasterizeSortedEdges(r, tx,ty,scale, &cache, shape->fillRule);
++ nsvg__rasterizeSortedEdges(r, tx,ty, sx, sy, &cache, shape->fillRule);
+ }
+- if (shape->stroke.type != NSVG_PAINT_NONE && (shape->strokeWidth * scale) > 0.01f) {
++ if (shape->stroke.type != NSVG_PAINT_NONE && (shape->strokeWidth * sx) > 0.01f) {
+ nsvg__resetPool(r);
+ r->freelist = NULL;
+ r->nedges = 0;
+
+- nsvg__flattenShapeStroke(r, shape, scale);
++ nsvg__flattenShapeStroke(r, shape, sx, sy);
+
+ // dumpEdges(r, "edge.svg");
+
+@@ -1441,7 +1458,7 @@ void nsvgRasterize(NSVGrasterizer* r,
+ // now, traverse the scanlines and find the intersections on each scanline, use non-zero rule
+ nsvg__initPaint(&cache, &shape->stroke, shape->opacity);
+
+- nsvg__rasterizeSortedEdges(r, tx,ty,scale, &cache, NSVG_FILLRULE_NONZERO);
++ nsvg__rasterizeSortedEdges(r, tx,ty,sx, sy, &cache, NSVG_FILLRULE_NONZERO);
+ }
+ }
+
+@@ -1453,6 +1470,13 @@ void nsvgRasterize(NSVGrasterizer* r,
+ r->stride = 0;
+ }
+
++void nsvgRasterize(NSVGrasterizer* r,
++ NSVGimage* image, float tx, float ty, float scale,
++ unsigned char* dst, int w, int h, int stride)
++{
++ nsvgRasterizeXY(r,image, tx, ty, scale, scale, dst, w, h, stride);
++}
++
+ #endif // NANOSVGRAST_IMPLEMENTATION
+
+ #endif // NANOSVGRAST_H
diff --git a/packages/media-libs/nanosvg/nanosvg-0.1.0.1.exheres-0 b/packages/media-libs/nanosvg/nanosvg-0.1.0.1.exheres-0
new file mode 100644
index 0000000..5b9838f
--- /dev/null
+++ b/packages/media-libs/nanosvg/nanosvg-0.1.0.1.exheres-0
@@ -0,0 +1,35 @@
+# Copyright 2026 Gurov <thuggerthugger1@duck.com>
+# Distributed under the terms of the GNU General Public License v2
+
+require cmake
+
+NANOSVG_COMMIT="9da543e8329fdd81b64eb48742d8ccb09377aed1"
+
+SUMMARY="Simple stupid SVG parser"
+HOMEPAGE="https://github.com/memononen/nanosvg"
+
+DOWNLOADS="
+ https://github.com/memononen/nanosvg/archive/${NANOSVG_COMMIT}.tar.gz
+ -> ${PNV}.tar.gz
+"
+
+LICENCES="ZLIB"
+SLOT="0"
+PLATFORMS="~amd64"
+
+CMAKE_SOURCE="${WORKBASE}/nanosvg-${NANOSVG_COMMIT}"
+
+DEFAULT_SRC_PREPARE_PATCHES=(
+ "${FILES}/nanosvg.patch"
+)
+
+CMAKE_SRC_CONFIGURE_PARAMS=(
+ -DBUILD_SHARED_LIBS=ON
+)
+
+src_install() {
+ cmake_src_install
+
+ insinto /usr/share/licenses/${PN}
+ newins "${CMAKE_SOURCE}/LICENSE.txt" LICENSE
+}
diff --git a/packages/media-libs/tg_owt/files/tg_owt-0_pre20260803-abseil.patch b/packages/media-libs/tg_owt/files/tg_owt-0_pre20260803-abseil.patch
new file mode 100644
index 0000000..6305158
--- /dev/null
+++ b/packages/media-libs/tg_owt/files/tg_owt-0_pre20260803-abseil.patch
@@ -0,0 +1,159 @@
+--- a/cmake/libabsl.cmake
++++ b/cmake/libabsl.cmake
+@@ -1,128 +1,37 @@
+-add_library(libabsl OBJECT EXCLUDE_FROM_ALL)
+-init_target(libabsl)
+-add_library(tg_owt::libabsl ALIAS libabsl)
+-
++set(_tg_owt_build_shared_libs ${BUILD_SHARED_LIBS})
++set(BUILD_SHARED_LIBS OFF)
++set(ABSL_ENABLE_INSTALL OFF)
+ set(libabsl_loc ${third_party_loc}/abseil-cpp)
++add_subdirectory(${libabsl_loc} ${CMAKE_CURRENT_BINARY_DIR}/abseil-cpp EXCLUDE_FROM_ALL)
++set(BUILD_SHARED_LIBS ${_tg_owt_build_shared_libs})
++
++add_library(libabsl INTERFACE)
++add_library(tg_owt::libabsl ALIAS libabsl)
++target_compile_features(libabsl INTERFACE cxx_std_20)
+
+-nice_target_sources(libabsl ${libabsl_loc}
++target_link_libraries(tg_owt
+ PRIVATE
+- # absl/base/dynamic_annotations.cc
+- # absl/base/internal/cycleclock.cc
+- # absl/base/internal/exception_safety_testing.cc
+- # absl/base/internal/exponential_biased.cc
+- # absl/base/internal/low_level_alloc.cc
+- # absl/base/internal/periodic_sampler.cc
+- absl/base/internal/raw_logging.cc
+- # absl/base/internal/scoped_set_env.cc
+- # absl/base/internal/spinlock.cc
+- # absl/base/internal/spinlock_wait.cc
+- # absl/base/internal/strerror.cc
+- # absl/base/internal/sysinfo.cc
+- # absl/base/internal/thread_identity.cc
+- absl/base/internal/throw_delegate.cc
+- # absl/base/internal/unscaledcycleclock.cc
+- # absl/base/log_severity.cc
+- # absl/container/internal/hash_generator_testing.cc
+- # absl/container/internal/hashtablez_sampler.cc
+- # absl/container/internal/hashtablez_sampler_force_weak_definition.cc
+- # absl/container/internal/raw_hash_set.cc
+- # absl/container/internal/test_instance_tracker.cc
+- # absl/debugging/failure_signal_handler.cc
+- # absl/debugging/internal/address_is_readable.cc
+- # absl/debugging/internal/demangle.cc
+- # absl/debugging/internal/elf_mem_image.cc
+- # absl/debugging/internal/examine_stack.cc
+- # absl/debugging/internal/stack_consumption.cc
+- # absl/debugging/internal/vdso_support.cc
+- # absl/debugging/leak_check.cc
+- # absl/debugging/leak_check_disable.cc
+- # absl/debugging/stacktrace.cc
+- # absl/debugging/symbolize.cc
+- # absl/flags/flag.cc
+- # absl/flags/flag_test_defs.cc
+- # absl/flags/internal/commandlineflag.cc
+- # absl/flags/internal/flag.cc
+- # absl/flags/internal/program_name.cc
+- # absl/flags/internal/registry.cc
+- # absl/flags/internal/type_erased.cc
+- # absl/flags/internal/usage.cc
+- # absl/flags/marshalling.cc
+- # absl/flags/parse.cc
+- # absl/flags/usage.cc
+- # absl/flags/usage_config.cc
+- # absl/hash/internal/city.cc
+- # absl/hash/internal/hash.cc
+- absl/numeric/int128.cc
+- # absl/random/discrete_distribution.cc
+- # absl/random/gaussian_distribution.cc
+- # absl/random/internal/chi_square.cc
+- # absl/random/internal/distribution_test_util.cc
+- # absl/random/internal/nanobenchmark.cc
+- # absl/random/internal/pool_urbg.cc
+- # absl/random/internal/randen.cc
+- # absl/random/internal/randen_detect.cc
+- # absl/random/internal/randen_hwaes.cc
+- # absl/random/internal/randen_slow.cc
+- # absl/random/internal/seed_material.cc
+- # absl/random/seed_gen_exception.cc
+- # absl/random/seed_sequences.cc
+- # absl/status/status.cc
+- # absl/status/status_payload_printer.cc
+- absl/strings/ascii.cc
+- absl/strings/charconv.cc
+- absl/strings/cord.cc
+- absl/strings/escaping.cc
+- absl/strings/internal/charconv_bigint.cc
+- absl/strings/internal/charconv_parse.cc
+- absl/strings/internal/escaping.cc
+- absl/strings/internal/memutil.cc
+- absl/strings/internal/ostringstream.cc
+- absl/strings/internal/pow10_helper.cc
+- absl/strings/internal/str_format/arg.cc
+- absl/strings/internal/str_format/bind.cc
+- absl/strings/internal/str_format/extension.cc
+- absl/strings/internal/str_format/float_conversion.cc
+- absl/strings/internal/str_format/output.cc
+- absl/strings/internal/str_format/parser.cc
+- absl/strings/internal/utf8.cc
+- absl/strings/match.cc
+- absl/strings/numbers.cc
+- absl/strings/str_cat.cc
+- absl/strings/str_replace.cc
+- absl/strings/str_split.cc
+- absl/strings/string_view.cc
+- absl/strings/substitute.cc
+- # absl/synchronization/barrier.cc
+- # absl/synchronization/blocking_counter.cc
+- # absl/synchronization/internal/create_thread_identity.cc
+- # absl/synchronization/internal/graphcycles.cc
+- # absl/synchronization/internal/per_thread_sem.cc
+- # absl/synchronization/internal/waiter.cc
+- # absl/synchronization/mutex.cc
+- # absl/synchronization/notification.cc
+- # absl/time/civil_time.cc
+- # absl/time/clock.cc
+- # absl/time/duration.cc
+- # absl/time/format.cc
+- # absl/time/internal/cctz/src/civil_time_detail.cc
+- # absl/time/internal/cctz/src/time_zone_fixed.cc
+- # absl/time/internal/cctz/src/time_zone_format.cc
+- # absl/time/internal/cctz/src/time_zone_if.cc
+- # absl/time/internal/cctz/src/time_zone_impl.cc
+- # absl/time/internal/cctz/src/time_zone_info.cc
+- # absl/time/internal/cctz/src/time_zone_libc.cc
+- # absl/time/internal/cctz/src/time_zone_lookup.cc
+- # absl/time/internal/cctz/src/time_zone_posix.cc
+- # absl/time/internal/cctz/src/zone_info_source.cc
+- # absl/time/internal/test_util.cc
+- # absl/time/time.cc
+- # absl/types/bad_any_cast.cc
+- absl/types/bad_optional_access.cc
+- absl/types/bad_variant_access.cc
++ absl::algorithm_container
++ absl::bind_front
++ absl::config
++ absl::cord
++ absl::core_headers
++ absl::flat_hash_map
++ absl::inlined_vector
++ absl::flags
++ absl::flags_parse
++ absl::flags_usage
++ absl::memory
++ absl::optional
++ absl::str_format
++ absl::strings
++ absl::synchronization
++ absl::type_traits
++ absl::variant
+ )
+
+ target_include_directories(libabsl
+-PUBLIC
++INTERFACE
+ $<BUILD_INTERFACE:${libabsl_loc}>
+ $<INSTALL_INTERFACE:${webrtc_includedir}/third_party/abseil-cpp>
+ )
diff --git a/packages/media-libs/tg_owt/tg_owt-0_pre20260803.exheres-0 b/packages/media-libs/tg_owt/tg_owt-0_pre20260803.exheres-0
new file mode 100644
index 0000000..8d7f3eb
--- /dev/null
+++ b/packages/media-libs/tg_owt/tg_owt-0_pre20260803.exheres-0
@@ -0,0 +1,90 @@
+# Copyright 2026 Gurov <thuggerthugger1@duck.com>
+# Distributed under the terms of the GNU General Public License v2
+
+require cmake flag-o-matic
+
+TG_OWT_COMMIT="26068e29bfa8d74a9dc9c8f7f94172fafbc262b8"
+LIBYUV_COMMIT="04821d1e7d60845525e8db55c7bcd41ef5be9406"
+CRC32C_COMMIT="21fc8ef30415a635e7351ffa0e5d5367943d4a94"
+ABSEIL_COMMIT="d7aaad83b488fd62bd51c81ecf16cd938532cc0a"
+
+SUMMARY="WebRTC build for Telegram"
+HOMEPAGE="https://github.com/desktop-app/tg_owt"
+DOWNLOADS="
+ https://github.com/desktop-app/tg_owt/archive/${TG_OWT_COMMIT}.tar.gz -> ${PNV}.tar.gz
+ https://gitlab.com/chromiumsrc/libyuv/-/archive/${LIBYUV_COMMIT}/libyuv-${LIBYUV_COMMIT}.tar.bz2
+ https://github.com/google/crc32c/archive/${CRC32C_COMMIT}.tar.gz -> crc32c-${CRC32C_COMMIT}.tar.gz
+ https://github.com/abseil/abseil-cpp/archive/${ABSEIL_COMMIT}.tar.gz -> abseil-cpp-${ABSEIL_COMMIT}.tar.gz
+"
+
+LICENCES="Apache-2.0 BSD-3"
+SLOT="0"
+PLATFORMS="~amd64"
+
+DEPENDENCIES="
+ build:
+ virtual/pkg-config
+ x11-proto/xorgproto
+
+ build+run:
+ dev-libs/glib:2
+ dev-libs/libglvnd
+ dev-libs/openssl
+ media-libs/libjpeg-turbo
+ media-libs/libvpx[>=1.10]
+ media-libs/openh264
+ media-libs/opus
+ media/ffmpeg
+ media/pipewire
+ media-sound/pulseaudio
+ net-libs/libsrtp
+ sys-sound/alsa-lib
+ x11-dri/libdrm
+ x11-dri/mesa
+ x11-libs/libX11
+ x11-libs/libXcomposite
+ x11-libs/libXdamage
+ x11-libs/libXext
+ x11-libs/libXfixes
+ x11-libs/libXrandr
+ x11-libs/libXrender
+ x11-libs/libXtst
+"
+
+CMAKE_SOURCE="${WORKBASE}/tg_owt-${TG_OWT_COMMIT}"
+
+DEFAULT_SRC_PREPARE_PATCHES=(
+ "${FILES}/${PNV}-abseil.patch"
+)
+
+CMAKE_SRC_CONFIGURE_PARAMS=(
+ -DCMAKE_DISABLE_FIND_PACKAGE_absl=ON
+ -DCMAKE_CXX_STANDARD=20
+ -DCMAKE_SHARED_LINKER_FLAGS=-Wl,-z,defs
+ -DBUILD_SHARED_LIBS=ON
+ -DTG_OWT_USE_X11=ON
+ -DTG_OWT_USE_PIPEWIRE=ON
+ -DTG_OWT_DLOPEN_PIPEWIRE=ON
+ -DTG_OWT_BUILD_AUDIO_BACKENDS=ON
+)
+
+src_prepare() {
+ edo rmdir "${CMAKE_SOURCE}/src/third_party/libyuv"
+ edo mv "${WORKBASE}/libyuv-${LIBYUV_COMMIT}" "${CMAKE_SOURCE}/src/third_party/libyuv"
+ edo rmdir "${CMAKE_SOURCE}/src/third_party/crc32c/src"
+ edo mv "${WORKBASE}/crc32c-${CRC32C_COMMIT}" "${CMAKE_SOURCE}/src/third_party/crc32c/src"
+ edo rmdir "${CMAKE_SOURCE}/src/third_party/abseil-cpp"
+ edo mv "${WORKBASE}/abseil-cpp-${ABSEIL_COMMIT}" "${CMAKE_SOURCE}/src/third_party/abseil-cpp"
+ edo cd "${CMAKE_SOURCE}"
+ default
+}
+
+src_configure() {
+ append-cxxflags -DNDEBUG
+ cmake_src_configure
+}
+
+src_install() {
+ cmake_src_install
+ edo find "${IMAGE}/usr/$(exhost --target)/include/tg_owt" -depth -type d -empty -delete
+}
diff --git a/packages/media-libs/zita-convolver/files/zita-convolver-4.0.3-makefile.patch b/packages/media-libs/zita-convolver/files/zita-convolver-4.0.3-makefile.patch
new file mode 100644
index 0000000..625fa55
--- /dev/null
+++ b/packages/media-libs/zita-convolver/files/zita-convolver-4.0.3-makefile.patch
@@ -0,0 +1,23 @@
+diff -urN zita-convolver-4.0.3.orig/source/Makefile zita-convolver-4.0.3/source/Makefile
+--- zita-convolver-4.0.3.orig/source/Makefile 2018-08-26 16:35:37.000000000 +0300
++++ zita-convolver-4.0.3/source/Makefile 2019-04-13 22:32:29.558347119 +0300
+@@ -33,8 +33,7 @@
+
+ CPPFLAGS += -I. -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS
+ CPPFLAGS += -DENABLE_VECTOR_MODE
+-CXXFLAGS += -fPIC -Wall -ffast-math -funroll-loops -O2
+-CXXFLAGS += -march=native
++CXXFLAGS += -fPIC -Wall -ffast-math -funroll-loops
+ LDLFAGS +=
+ LDLIBS +=
+
+@@ -56,8 +55,8 @@
+ install -d $(DESTDIR)$(LIBDIR)
+ install -m 644 $(ZITA-CONVOLVER_H) $(DESTDIR)$(INCDIR)
+ install -m 755 $(ZITA-CONVOLVER_MIN) $(DESTDIR)$(LIBDIR)
+- ldconfig
+ ln -sf $(ZITA-CONVOLVER_MIN) $(DESTDIR)$(LIBDIR)/$(ZITA-CONVOLVER_SO)
++ ln -sf $(ZITA-CONVOLVER_MIN) $(DESTDIR)$(LIBDIR)/$(ZITA-CONVOLVER_MAJ)
+
+ uninstall:
+ rm -rf $(DESTDIR)$(INCDIR)/$(ZITA-CONVOLVER_H)
diff --git a/packages/media-libs/zita-convolver/zita-convolver-4.0.3.exheres-0 b/packages/media-libs/zita-convolver/zita-convolver-4.0.3.exheres-0
new file mode 100644
index 0000000..91bb41e
--- /dev/null
+++ b/packages/media-libs/zita-convolver/zita-convolver-4.0.3.exheres-0
@@ -0,0 +1,33 @@
+# Copyright 2026 Gurov <thuggerthugger1@duck.com>
+# Distributed under the terms of the GNU General Public License v2
+
+SUMMARY="Real-time convolution matrix library"
+HOMEPAGE="https://kokkinizita.linuxaudio.org/linuxaudio/"
+DOWNLOADS="https://kokkinizita.linuxaudio.org/linuxaudio/downloads/${PNV}.tar.bz2"
+
+LICENCES="GPL-3+"
+SLOT="4"
+PLATFORMS="~amd64"
+
+DEPENDENCIES="
+ build+run:
+ sci-libs/fftw
+"
+
+DEFAULT_SRC_PREPARE_PATCHES=(
+ "${FILES}/${PNV}-makefile.patch"
+)
+
+src_compile() {
+ emake -C source CXX="${CXX}"
+}
+
+src_install() {
+ emake -C source install \
+ CXX="${CXX}" \
+ DESTDIR="${IMAGE}" \
+ PREFIX="/usr/$(exhost --target)" \
+ LIBDIR="/usr/$(exhost --target)/lib"
+
+ emagicdocs
+}