From 95a03d9931ae4290408314334e77e2a1dd55aa49 Mon Sep 17 00:00:00 2001 From: Isaac <> Date: Tue, 7 Apr 2026 10:44:45 +0200 Subject: [PATCH] subcodec --- .../Components/AnimationCache/BUILD | 1 + third-party/openh264/BUILD | 69 +++++++++++++++ third-party/subcodec/.gitignore | 1 + third-party/subcodec/BUILD | 84 +++++++++++++++++++ 4 files changed, 155 insertions(+) create mode 100644 third-party/subcodec/BUILD diff --git a/submodules/TelegramUI/Components/AnimationCache/BUILD b/submodules/TelegramUI/Components/AnimationCache/BUILD index e655aa9fe6..f751e8899f 100644 --- a/submodules/TelegramUI/Components/AnimationCache/BUILD +++ b/submodules/TelegramUI/Components/AnimationCache/BUILD @@ -14,6 +14,7 @@ swift_library( "//submodules/CryptoUtils:CryptoUtils", "//submodules/ManagedFile:ManagedFile", "//submodules/TelegramUI/Components/AnimationCache/ImageDCT:ImageDCT", + "//third-party/subcodec:SubcodecObjC", ], visibility = [ "//visibility:public", diff --git a/third-party/openh264/BUILD b/third-party/openh264/BUILD index 845e670c25..cb340b6fb7 100644 --- a/third-party/openh264/BUILD +++ b/third-party/openh264/BUILD @@ -267,3 +267,72 @@ cc_library( "//visibility:public", ], ) + +cc_library( + name = "openh264_decoder", + srcs = [ + "third_party/openh264/src/codec/decoder/core/src/au_parser.cpp", + "third_party/openh264/src/codec/decoder/core/src/bit_stream.cpp", + "third_party/openh264/src/codec/decoder/core/src/cabac_decoder.cpp", + "third_party/openh264/src/codec/decoder/core/src/deblocking.cpp", + "third_party/openh264/src/codec/decoder/core/src/decode_mb_aux.cpp", + "third_party/openh264/src/codec/decoder/core/src/decode_slice.cpp", + "third_party/openh264/src/codec/decoder/core/src/decoder.cpp", + "third_party/openh264/src/codec/decoder/core/src/decoder_core.cpp", + "third_party/openh264/src/codec/decoder/core/src/decoder_data_tables.cpp", + "third_party/openh264/src/codec/decoder/core/src/error_concealment.cpp", + "third_party/openh264/src/codec/decoder/core/src/fmo.cpp", + "third_party/openh264/src/codec/decoder/core/src/get_intra_predictor.cpp", + "third_party/openh264/src/codec/decoder/core/src/manage_dec_ref.cpp", + "third_party/openh264/src/codec/decoder/core/src/memmgr_nal_unit.cpp", + "third_party/openh264/src/codec/decoder/core/src/mv_pred.cpp", + "third_party/openh264/src/codec/decoder/core/src/parse_mb_syn_cabac.cpp", + "third_party/openh264/src/codec/decoder/core/src/parse_mb_syn_cavlc.cpp", + "third_party/openh264/src/codec/decoder/core/src/pic_queue.cpp", + "third_party/openh264/src/codec/decoder/core/src/rec_mb.cpp", + "third_party/openh264/src/codec/decoder/core/src/wels_decoder_thread.cpp", + "third_party/openh264/src/codec/decoder/plus/src/welsDecoderExt.cpp", + "third_party/openh264/src/codec/decoder/core/inc/au_parser.h", + "third_party/openh264/src/codec/decoder/core/inc/bit_stream.h", + "third_party/openh264/src/codec/decoder/core/inc/cabac_decoder.h", + "third_party/openh264/src/codec/decoder/core/inc/deblocking.h", + "third_party/openh264/src/codec/decoder/core/inc/dec_frame.h", + "third_party/openh264/src/codec/decoder/core/inc/dec_golomb.h", + "third_party/openh264/src/codec/decoder/core/inc/decode_mb_aux.h", + "third_party/openh264/src/codec/decoder/core/inc/decode_slice.h", + "third_party/openh264/src/codec/decoder/core/inc/decoder.h", + "third_party/openh264/src/codec/decoder/core/inc/decoder_context.h", + "third_party/openh264/src/codec/decoder/core/inc/decoder_core.h", + "third_party/openh264/src/codec/decoder/core/inc/error_code.h", + "third_party/openh264/src/codec/decoder/core/inc/error_concealment.h", + "third_party/openh264/src/codec/decoder/core/inc/fmo.h", + "third_party/openh264/src/codec/decoder/core/inc/get_intra_predictor.h", + "third_party/openh264/src/codec/decoder/core/inc/manage_dec_ref.h", + "third_party/openh264/src/codec/decoder/core/inc/mb_cache.h", + "third_party/openh264/src/codec/decoder/core/inc/memmgr_nal_unit.h", + "third_party/openh264/src/codec/decoder/core/inc/mv_pred.h", + "third_party/openh264/src/codec/decoder/core/inc/nal_prefix.h", + "third_party/openh264/src/codec/decoder/core/inc/nalu.h", + "third_party/openh264/src/codec/decoder/core/inc/parameter_sets.h", + "third_party/openh264/src/codec/decoder/core/inc/parse_mb_syn_cabac.h", + "third_party/openh264/src/codec/decoder/core/inc/parse_mb_syn_cavlc.h", + "third_party/openh264/src/codec/decoder/core/inc/pic_queue.h", + "third_party/openh264/src/codec/decoder/core/inc/picture.h", + "third_party/openh264/src/codec/decoder/core/inc/rec_mb.h", + "third_party/openh264/src/codec/decoder/core/inc/slice.h", + "third_party/openh264/src/codec/decoder/core/inc/vlc_decoder.h", + "third_party/openh264/src/codec/decoder/core/inc/wels_common_basis.h", + "third_party/openh264/src/codec/decoder/plus/inc/welsDecoderExt.h", + ], + includes = ["."], + copts = [ + "-Ithird-party/openh264/third_party/openh264/src/codec/decoder/core/inc", + "-Ithird-party/openh264/third_party/openh264/src/codec/decoder/plus/inc", + "-Ithird-party/openh264/third_party/openh264/src/codec/common/inc", + "-Ithird-party/openh264/third_party/openh264/src/codec/api/wels", + "-Os", + "-Wno-all", + ], + deps = [":openh264"], + visibility = ["//visibility:public"], +) diff --git a/third-party/subcodec/.gitignore b/third-party/subcodec/.gitignore index 3d7733fa15..e31c357df5 100644 --- a/third-party/subcodec/.gitignore +++ b/third-party/subcodec/.gitignore @@ -1,5 +1,6 @@ build/ build-*/ +build_*/ .build/ .swiftpm/ *.h264 diff --git a/third-party/subcodec/BUILD b/third-party/subcodec/BUILD new file mode 100644 index 0000000000..1a9d598989 --- /dev/null +++ b/third-party/subcodec/BUILD @@ -0,0 +1,84 @@ +cc_library( + name = "h264bitstream", + srcs = [ + "third_party/h264bitstream/h264_stream.c", + "third_party/h264bitstream/h264_nal.c", + "third_party/h264bitstream/h264_sei.c", + ], + hdrs = glob(["third_party/h264bitstream/*.h"]), + includes = ["third_party/h264bitstream"], + copts = ["-Wno-all"], +) + +cc_library( + name = "subcodec", + srcs = [ + "src/frame_writer.cpp", + "src/cavlc.cpp", + "src/h264_parser.cpp", + "src/sprite_data.cpp", + "src/mbs_encode.cpp", + "src/mbs_mux_common.cpp", + "src/mux_surface.cpp", + ], + hdrs = glob(["src/*.h"]), + includes = ["src"], + copts = [ + "-std=c++2b", + "-Wno-all", + ], + deps = [":h264bitstream"], +) + +cc_library( + name = "sprite_encode", + srcs = [ + "src/sprite_encode.cpp", + "src/sprite_extractor.cpp", + ], + hdrs = glob(["src/*.h"]), + includes = ["src"], + copts = [ + "-std=c++2b", + "-Wno-all", + "-Ithird-party/openh264/third_party/openh264/src/codec/api/wels", + ], + deps = [ + ":subcodec", + "//third-party/openh264:openh264", + ], +) + +objc_library( + name = "SubcodecObjC", + module_name = "SubcodecObjC", + enable_modules = True, + srcs = [ + "Sources/SubcodecObjC/SCSprite.mm", + "Sources/SubcodecObjC/SCMuxSurface.mm", + "Sources/SubcodecObjC/SCSpriteRegion.mm", + "Sources/SubcodecObjC/SCDecodedFrame.mm", + "Sources/SubcodecObjC/SCOpenH264Decoder.mm", + "Sources/SubcodecObjC/SCVideoToolboxDecoder.mm", + "Sources/SubcodecObjC/AnnexBSplitter.h", + ], + hdrs = glob(["Sources/SubcodecObjC/include/*.h"]), + includes = ["Sources/SubcodecObjC/include"], + copts = [ + "-std=c++2b", + "-Wno-all", + "-Ithird-party/openh264/third_party/openh264/src/codec/api/wels", + ], + deps = [ + ":subcodec", + ":sprite_encode", + "//third-party/openh264:openh264", + "//third-party/openh264:openh264_decoder", + ], + sdk_frameworks = [ + "VideoToolbox", + "CoreMedia", + "CoreVideo", + ], + visibility = ["//visibility:public"], +)