From 1347ee8943d364e574f646529d27e04a6864e331 Mon Sep 17 00:00:00 2001 From: Ali <> Date: Tue, 11 May 2021 11:11:40 +0400 Subject: [PATCH 01/10] OpenH264 experiment --- submodules/TelegramUI/BUILD | 1 + .../Sources/OngoingCallThreadLocalContext.mm | 3 +- submodules/TgVoipWebrtc/tgcalls | 2 +- .../Sources/FFMpeg/build-ffmpeg-bazel.sh | 4 +- third-party/libvpx/build-libvpx-bazel.sh | 3 +- third-party/openh264/BUILD | 268 + .../openh264/src/codec/api/meson.build | 1 + .../openh264/src/codec/api/svc/codec_api.h | 592 +++ .../src/codec/api/svc/codec_app_def.h | 810 +++ .../openh264/src/codec/api/svc/codec_def.h | 216 + .../openh264/src/codec/api/svc/codec_ver.h | 15 + .../openh264/src/codec/api/svc/meson.build | 13 + .../src/codec/build/android/.gitignore | 6 + .../build/android/dec/AndroidManifest.xml | 20 + .../codec/build/android/dec/jni/Android.mk | 9 + .../build/android/dec/jni/Application.mk | 6 + .../src/codec/build/android/dec/jni/myjni.cpp | 24 + .../build/android/dec/jni/welsdecdemo.mk | 47 + .../build/android/dec/res/layout/main.xml | 21 + .../build/android/dec/res/values/strings.xml | 4 + .../dec/src/com/wels/dec/WelsDecTest.java | 151 + .../build/android/enc/AndroidManifest.xml | 20 + .../codec/build/android/enc/jni/Android.mk | 9 + .../build/android/enc/jni/Application.mk | 6 + .../src/codec/build/android/enc/jni/myjni.cpp | 45 + .../build/android/enc/jni/welsencdemo.mk | 51 + .../build/android/enc/res/layout/main.xml | 21 + .../build/android/enc/res/values/strings.xml | 4 + .../enc/src/com/wels/enc/WelsEncTest.java | 173 + .../src/codec/build/generate_codec_ver.sh | 62 + .../openh264/src/codec/build/iOS/.gitignore | 3 + .../build/iOS/dec/demo/demo/DEMOAppDelegate.h | 39 + .../build/iOS/dec/demo/demo/DEMOAppDelegate.m | 68 + .../iOS/dec/demo/demo/DEMOViewController.h | 48 + .../iOS/dec/demo/demo/DEMOViewController.m | 187 + .../demo/DEMOViewControllerShowResource.h | 38 + .../demo/DEMOViewControllerShowResource.m | 93 + .../iOS/dec/demo/demo/Default-568h@2x.png | Bin 0 -> 18594 bytes .../codec/build/iOS/dec/demo/demo/Default.png | Bin 0 -> 6540 bytes .../build/iOS/dec/demo/demo/Default@2x.png | Bin 0 -> 16107 bytes .../build/iOS/dec/demo/demo/demo-Info.plist | 51 + .../dec/demo/demo/en.lproj/InfoPlist.strings | 2 + .../en.lproj/MainStoryboard_iPad.storyboard | 163 + .../en.lproj/MainStoryboard_iPhone.storyboard | 162 + .../src/codec/build/iOS/dec/demo/demo/main.m | 124 + .../iOS/enc/encDemo/encDemo/AppDelegate.h | 39 + .../iOS/enc/encDemo/encDemo/AppDelegate.m | 63 + .../encDemo/Base.lproj/Main_iPad.storyboard | 52 + .../encDemo/Base.lproj/Main_iPhone.storyboard | 52 + .../AppIcon.appiconset/Contents.json | 53 + .../LaunchImage.launchimage/Contents.json | 51 + .../iOS/enc/encDemo/encDemo/ViewController.h | 44 + .../iOS/enc/encDemo/encDemo/ViewController.m | 89 + .../encDemo/en.lproj/InfoPlist.strings | 2 + .../enc/encDemo/encDemo/encDemo-Info.plist | 49 + .../build/iOS/enc/encDemo/encDemo/main.m | 175 + .../openh264/src/codec/build/win32/.gitignore | 15 + .../codec/build/win32/dec/WelsDecCore.vcproj | 996 ++++ .../codec/build/win32/dec/WelsDecPlus.vcproj | 395 ++ .../src/codec/build/win32/dec/WelsDecoder.sln | 52 + .../codec/build/win32/dec/decConsole.vcproj | 389 ++ .../codec/build/win32/enc/WelsEncCore.vcproj | 1498 ++++++ .../codec/build/win32/enc/WelsEncPlus.vcproj | 405 ++ .../src/codec/build/win32/enc/WelsEncoder.sln | 66 + .../codec/build/win32/enc/encConsole.vcproj | 381 ++ .../src/codec/build/windowsphone/.gitignore | 29 + .../codec/build/windowsphone/all/CodecApp.sln | 76 + .../build/windowsphone/all/CodecApp/App.xaml | 20 + .../windowsphone/all/CodecApp/App.xaml.cs | 223 + .../all/CodecApp/Assets/AlignmentGrid.png | Bin 0 -> 9042 bytes .../all/CodecApp/Assets/ApplicationIcon.png | Bin 0 -> 3392 bytes .../all/CodecApp/Assets/BadgeLogo.png | Bin 0 -> 845 bytes .../windowsphone/all/CodecApp/Assets/Logo.png | Bin 0 -> 1679 bytes .../all/CodecApp/Assets/SplashScreen.png | Bin 0 -> 18843 bytes .../all/CodecApp/Assets/SquareTile150x150.png | Bin 0 -> 6329 bytes .../all/CodecApp/Assets/SquareTile71x71.png | Bin 0 -> 2811 bytes .../all/CodecApp/Assets/StoreLogo.png | Bin 0 -> 1375 bytes .../Assets/Tiles/FlipCycleTileLarge.png | Bin 0 -> 9930 bytes .../Assets/Tiles/FlipCycleTileMedium.png | Bin 0 -> 9070 bytes .../Assets/Tiles/FlipCycleTileSmall.png | Bin 0 -> 3674 bytes .../Assets/Tiles/IconicTileMediumLarge.png | Bin 0 -> 4937 bytes .../CodecApp/Assets/Tiles/IconicTileSmall.png | Bin 0 -> 3724 bytes .../all/CodecApp/Assets/WideLogo.png | Bin 0 -> 8107 bytes .../windowsphone/all/CodecApp/CodecApp.csproj | 210 + .../all/CodecApp/LocalizedStrings.cs | 14 + .../windowsphone/all/CodecApp/MainPage.xaml | 66 + .../all/CodecApp/MainPage.xaml.cs | 86 + .../all/CodecApp/Package.appxmanifest | 58 + .../all/CodecApp/Properties/AppManifest.xml | 6 + .../all/CodecApp/Properties/AssemblyInfo.cs | 37 + .../all/CodecApp/Properties/WMAppManifest.xml | 37 + .../Resources/AppResources.Designer.cs | 110 + .../all/CodecApp/Resources/AppResources.resx | 137 + .../windowsphone/all/CodecApp/layer2.cfg | 39 + .../windowsphone/all/CodecApp/welsenc.cfg | 62 + .../windowsphone/all/CodecRTComponent.cpp | 181 + .../build/windowsphone/all/CodecRTComponent.h | 22 + .../windowsphone/all/CodecRTComponent.vcxproj | 154 + .../all/CodecRTComponent.vcxproj.filters | 28 + .../codec/common/arm/arm_arch_common_macro.S | 83 + .../src/codec/common/arm/copy_mb_neon.S | 161 + .../src/codec/common/arm/deblocking_neon.S | 857 +++ .../codec/common/arm/expand_picture_neon.S | 154 + .../codec/common/arm/intra_pred_common_neon.S | 82 + .../openh264/src/codec/common/arm/mc_neon.S | 2283 ++++++++ .../common/arm64/arm_arch64_common_macro.S | 76 + .../codec/common/arm64/copy_mb_aarch64_neon.S | 202 + .../common/arm64/deblocking_aarch64_neon.S | 852 +++ .../arm64/expand_picture_aarch64_neon.S | 150 + .../arm64/intra_pred_common_aarch64_neon.S | 58 + .../src/codec/common/arm64/mc_aarch64_neon.S | 2614 +++++++++ .../src/codec/common/generate_version.sh | 28 + .../openh264/src/codec/common/inc/.gitignore | 1 + .../openh264/src/codec/common/inc/WelsList.h | 287 + .../openh264/src/codec/common/inc/WelsLock.h | 97 + .../openh264/src/codec/common/inc/WelsTask.h | 75 + .../src/codec/common/inc/WelsTaskThread.h | 83 + .../src/codec/common/inc/WelsThread.h | 106 + .../src/codec/common/inc/WelsThreadLib.h | 151 + .../src/codec/common/inc/WelsThreadPool.h | 124 + .../src/codec/common/inc/asmdefs_mmi.h | 340 ++ .../openh264/src/codec/common/inc/copy_mb.h | 96 + .../openh264/src/codec/common/inc/cpu.h | 80 + .../openh264/src/codec/common/inc/cpu_core.h | 95 + .../src/codec/common/inc/crt_util_safe_x.h | 101 + .../src/codec/common/inc/deblocking_common.h | 112 + .../src/codec/common/inc/expand_pic.h | 107 + .../src/codec/common/inc/golomb_common.h | 166 + .../src/codec/common/inc/intra_pred_common.h | 81 + .../src/codec/common/inc/ls_defines.h | 130 + .../openh264/src/codec/common/inc/macros.h | 329 ++ .../openh264/src/codec/common/inc/mc.h | 363 ++ .../src/codec/common/inc/measure_time.h | 88 + .../src/codec/common/inc/memory_align.h | 116 + .../src/codec/common/inc/msa_macros.h | 2393 +++++++++ .../src/codec/common/inc/sad_common.h | 124 + .../openh264/src/codec/common/inc/typedefs.h | 86 + .../openh264/src/codec/common/inc/utils.h | 95 + .../openh264/src/codec/common/inc/version.h | 10 + .../codec/common/inc/version_gen.h.template | 6 + .../src/codec/common/inc/welsCodecTrace.h | 64 + .../src/codec/common/inc/wels_common_defs.h | 373 ++ .../src/codec/common/inc/wels_const_common.h | 63 + .../openh264/src/codec/common/meson.build | 67 + .../src/codec/common/mips/copy_mb_mmi.c | 477 ++ .../src/codec/common/mips/copy_mb_msa.c | 80 + .../src/codec/common/mips/deblock_mmi.c | 2826 ++++++++++ .../src/codec/common/mips/deblock_msa.c | 1024 ++++ .../codec/common/mips/expand_picture_mmi.c | 673 +++ .../codec/common/mips/intra_pred_com_mmi.c | 548 ++ .../src/codec/common/mips/satd_sad_mmi.c | 2154 ++++++++ .../src/codec/common/src/WelsTaskThread.cpp | 88 + .../src/codec/common/src/WelsThread.cpp | 126 + .../src/codec/common/src/WelsThreadLib.cpp | 535 ++ .../src/codec/common/src/WelsThreadPool.cpp | 380 ++ .../src/codec/common/src/common_tables.cpp | 906 ++++ .../openh264/src/codec/common/src/copy_mb.cpp | 111 + .../openh264/src/codec/common/src/cpu.cpp | 359 ++ .../src/codec/common/src/crt_util_safe_x.cpp | 266 + .../codec/common/src/deblocking_common.cpp | 295 ++ .../src/codec/common/src/expand_pic.cpp | 415 ++ .../codec/common/src/intra_pred_common.cpp | 77 + .../openh264/src/codec/common/src/mc.cpp | 4266 +++++++++++++++ .../src/codec/common/src/memory_align.cpp | 174 + .../src/codec/common/src/sad_common.cpp | 165 + .../openh264/src/codec/common/src/utils.cpp | 126 + .../src/codec/common/src/welsCodecTrace.cpp | 103 + .../openh264/src/codec/common/targets.mk | 113 + .../openh264/src/codec/common/x86/asm_inc.asm | 743 +++ .../openh264/src/codec/common/x86/cpuid.asm | 212 + .../openh264/src/codec/common/x86/dct.asm | 1036 ++++ .../openh264/src/codec/common/x86/deblock.asm | 848 +++ .../src/codec/common/x86/expand_picture.asm | 728 +++ .../src/codec/common/x86/intra_pred_com.asm | 117 + .../openh264/src/codec/common/x86/mb_copy.asm | 615 +++ .../src/codec/common/x86/mc_chroma.asm | 313 ++ .../openh264/src/codec/common/x86/mc_luma.asm | 4490 ++++++++++++++++ .../src/codec/common/x86/satd_sad.asm | 2734 ++++++++++ .../openh264/src/codec/common/x86/vaa.asm | 411 ++ .../codec/console/common/inc/read_config.h | 68 + .../src/codec/console/common/meson.build | 12 + .../codec/console/common/src/read_config.cpp | 139 + .../src/codec/console/common/targets.mk | 20 + .../src/codec/console/dec/inc/d3d9_utils.h | 148 + .../src/codec/console/dec/meson.build | 15 + .../src/codec/console/dec/src/d3d9_utils.cpp | 648 +++ .../src/codec/console/dec/src/h264dec.cpp | 658 +++ .../openh264/src/codec/console/dec/targets.mk | 20 + .../src/codec/console/enc/meson.build | 9 + .../src/codec/console/enc/src/welsenc.cpp | 1161 ++++ .../openh264/src/codec/console/enc/targets.mk | 19 + .../openh264/src/codec/console/meson.build | 3 + .../codec/decoder/core/arm/block_add_neon.S | 129 + .../codec/decoder/core/arm/intra_pred_neon.S | 635 +++ .../core/arm64/block_add_aarch64_neon.S | 131 + .../core/arm64/intra_pred_aarch64_neon.S | 524 ++ .../src/codec/decoder/core/inc/au_parser.h | 199 + .../src/codec/decoder/core/inc/bit_stream.h | 62 + .../codec/decoder/core/inc/cabac_decoder.h | 111 + .../src/codec/decoder/core/inc/deblocking.h | 118 + .../src/codec/decoder/core/inc/dec_frame.h | 156 + .../src/codec/decoder/core/inc/dec_golomb.h | 344 ++ .../codec/decoder/core/inc/decode_mb_aux.h | 78 + .../src/codec/decoder/core/inc/decode_slice.h | 104 + .../src/codec/decoder/core/inc/decoder.h | 186 + .../codec/decoder/core/inc/decoder_context.h | 587 +++ .../src/codec/decoder/core/inc/decoder_core.h | 206 + .../src/codec/decoder/core/inc/error_code.h | 222 + .../decoder/core/inc/error_concealment.h | 68 + .../openh264/src/codec/decoder/core/inc/fmo.h | 114 + .../decoder/core/inc/get_intra_predictor.h | 191 + .../codec/decoder/core/inc/manage_dec_ref.h | 62 + .../src/codec/decoder/core/inc/mb_cache.h | 80 + .../codec/decoder/core/inc/memmgr_nal_unit.h | 66 + .../src/codec/decoder/core/inc/mv_pred.h | 195 + .../src/codec/decoder/core/inc/nal_prefix.h | 56 + .../src/codec/decoder/core/inc/nalu.h | 79 + .../codec/decoder/core/inc/parameter_sets.h | 217 + .../decoder/core/inc/parse_mb_syn_cabac.h | 89 + .../decoder/core/inc/parse_mb_syn_cavlc.h | 137 + .../src/codec/decoder/core/inc/pic_queue.h | 62 + .../src/codec/decoder/core/inc/picture.h | 111 + .../src/codec/decoder/core/inc/rec_mb.h | 104 + .../src/codec/decoder/core/inc/slice.h | 208 + .../src/codec/decoder/core/inc/vlc_decoder.h | 177 + .../decoder/core/inc/wels_common_basis.h | 317 ++ .../src/codec/decoder/core/inc/wels_const.h | 65 + .../decoder/core/inc/wels_decoder_thread.h | 170 + .../src/codec/decoder/core/mips/dct_mmi.c | 786 +++ .../src/codec/decoder/core/src/au_parser.cpp | 1787 +++++++ .../src/codec/decoder/core/src/bit_stream.cpp | 110 + .../codec/decoder/core/src/cabac_decoder.cpp | 333 ++ .../src/codec/decoder/core/src/deblocking.cpp | 1422 +++++ .../codec/decoder/core/src/decode_mb_aux.cpp | 190 + .../codec/decoder/core/src/decode_slice.cpp | 3064 +++++++++++ .../src/codec/decoder/core/src/decoder.cpp | 1250 +++++ .../codec/decoder/core/src/decoder_core.cpp | 3000 +++++++++++ .../decoder/core/src/decoder_data_tables.cpp | 568 ++ .../decoder/core/src/error_concealment.cpp | 480 ++ .../src/codec/decoder/core/src/fmo.cpp | 326 ++ .../decoder/core/src/get_intra_predictor.cpp | 1157 ++++ .../codec/decoder/core/src/manage_dec_ref.cpp | 958 ++++ .../decoder/core/src/memmgr_nal_unit.cpp | 148 + .../src/codec/decoder/core/src/mv_pred.cpp | 1183 +++++ .../decoder/core/src/parse_mb_syn_cabac.cpp | 1565 ++++++ .../decoder/core/src/parse_mb_syn_cavlc.cpp | 1729 ++++++ .../src/codec/decoder/core/src/pic_queue.cpp | 244 + .../src/codec/decoder/core/src/rec_mb.cpp | 1078 ++++ .../decoder/core/src/wels_decoder_thread.cpp | 311 ++ .../src/codec/decoder/core/x86/dct.asm | 72 + .../src/codec/decoder/core/x86/intra_pred.asm | 1456 +++++ .../openh264/src/codec/decoder/meson.build | 58 + .../codec/decoder/plus/inc/welsDecoderExt.h | 168 + .../codec/decoder/plus/src/welsDecoderExt.cpp | 1504 ++++++ .../decoder/plus/src/wels_dec_export.def | 4 + .../openh264/src/codec/decoder/targets.mk | 98 + .../codec/encoder/core/arm/intra_pred_neon.S | 589 +++ .../core/arm/intra_pred_sad_3_opt_neon.S | 735 +++ .../src/codec/encoder/core/arm/memory_neon.S | 62 + .../src/codec/encoder/core/arm/pixel_neon.S | 882 ++++ .../codec/encoder/core/arm/reconstruct_neon.S | 903 ++++ .../encoder/core/arm/svc_motion_estimation.S | 366 ++ .../core/arm64/intra_pred_aarch64_neon.S | 505 ++ .../arm64/intra_pred_sad_3_opt_aarch64_neon.S | 611 +++ .../encoder/core/arm64/memory_aarch64_neon.S | 63 + .../encoder/core/arm64/pixel_aarch64_neon.S | 621 +++ .../core/arm64/reconstruct_aarch64_neon.S | 717 +++ .../svc_motion_estimation_aarch64_neon.S | 350 ++ .../src/codec/encoder/core/inc/as264_common.h | 143 + .../src/codec/encoder/core/inc/au_set.h | 152 + .../src/codec/encoder/core/inc/deblocking.h | 92 + .../codec/encoder/core/inc/decode_mb_aux.h | 107 + .../src/codec/encoder/core/inc/dq_map.h | 58 + .../codec/encoder/core/inc/encode_mb_aux.h | 185 + .../src/codec/encoder/core/inc/encoder.h | 148 + .../codec/encoder/core/inc/encoder_context.h | 240 + .../src/codec/encoder/core/inc/extern.h | 124 + .../encoder/core/inc/get_intra_predictor.h | 175 + .../src/codec/encoder/core/inc/mb_cache.h | 141 + .../openh264/src/codec/encoder/core/inc/md.h | 181 + .../src/codec/encoder/core/inc/mt_defs.h | 91 + .../src/codec/encoder/core/inc/mv_pred.h | 191 + .../src/codec/encoder/core/inc/nal_encap.h | 143 + .../src/codec/encoder/core/inc/param_svc.h | 569 ++ .../codec/encoder/core/inc/parameter_sets.h | 181 + .../codec/encoder/core/inc/paraset_strategy.h | 310 ++ .../src/codec/encoder/core/inc/picture.h | 137 + .../codec/encoder/core/inc/picture_handle.h | 66 + .../openh264/src/codec/encoder/core/inc/rc.h | 283 + .../codec/encoder/core/inc/ref_list_mgr_svc.h | 148 + .../src/codec/encoder/core/inc/sample.h | 143 + .../codec/encoder/core/inc/set_mb_syn_cabac.h | 127 + .../codec/encoder/core/inc/set_mb_syn_cavlc.h | 92 + .../src/codec/encoder/core/inc/slice.h | 212 + .../encoder/core/inc/slice_multi_threading.h | 97 + .../src/codec/encoder/core/inc/stat.h | 102 + .../encoder/core/inc/svc_base_layer_md.h | 102 + .../codec/encoder/core/inc/svc_enc_frame.h | 136 + .../codec/encoder/core/inc/svc_enc_golomb.h | 123 + .../encoder/core/inc/svc_enc_macroblock.h | 82 + .../encoder/core/inc/svc_enc_slice_segment.h | 212 + .../codec/encoder/core/inc/svc_encode_mb.h | 63 + .../codec/encoder/core/inc/svc_encode_slice.h | 184 + .../encoder/core/inc/svc_mode_decision.h | 94 + .../encoder/core/inc/svc_motion_estimate.h | 359 ++ .../codec/encoder/core/inc/svc_set_mb_syn.h | 70 + .../encoder/core/inc/svc_set_mb_syn_cavlc.h | 67 + .../src/codec/encoder/core/inc/vlc_encoder.h | 92 + .../encoder/core/inc/wels_common_basis.h | 160 + .../src/codec/encoder/core/inc/wels_const.h | 174 + .../encoder/core/inc/wels_func_ptr_def.h | 300 ++ .../codec/encoder/core/inc/wels_preprocess.h | 251 + .../codec/encoder/core/inc/wels_task_base.h | 79 + .../encoder/core/inc/wels_task_encoder.h | 142 + .../encoder/core/inc/wels_task_management.h | 135 + .../encoder/core/inc/wels_transpose_matrix.h | 58 + .../src/codec/encoder/core/mips/dct_mmi.c | 529 ++ .../src/codec/encoder/core/mips/quant_mmi.c | 553 ++ .../src/codec/encoder/core/mips/score_mmi.c | 324 ++ .../src/codec/encoder/core/src/au_set.cpp | 634 +++ .../src/codec/encoder/core/src/deblocking.cpp | 885 ++++ .../codec/encoder/core/src/decode_mb_aux.cpp | 314 ++ .../codec/encoder/core/src/encode_mb_aux.cpp | 627 +++ .../src/codec/encoder/core/src/encoder.cpp | 551 ++ .../encoder/core/src/encoder_data_tables.cpp | 345 ++ .../codec/encoder/core/src/encoder_ext.cpp | 4617 ++++++++++++++++ .../encoder/core/src/get_intra_predictor.cpp | 738 +++ .../src/codec/encoder/core/src/md.cpp | 910 ++++ .../src/codec/encoder/core/src/mv_pred.cpp | 436 ++ .../src/codec/encoder/core/src/nal_encap.cpp | 198 + .../encoder/core/src/paraset_strategy.cpp | 713 +++ .../codec/encoder/core/src/picture_handle.cpp | 184 + .../src/codec/encoder/core/src/ratectl.cpp | 1556 ++++++ .../encoder/core/src/ref_list_mgr_svc.cpp | 1077 ++++ .../src/codec/encoder/core/src/sample.cpp | 495 ++ .../encoder/core/src/set_mb_syn_cabac.cpp | 204 + .../encoder/core/src/set_mb_syn_cavlc.cpp | 318 ++ .../core/src/slice_multi_threading.cpp | 640 +++ .../encoder/core/src/svc_base_layer_md.cpp | 2041 +++++++ .../core/src/svc_enc_slice_segment.cpp | 679 +++ .../codec/encoder/core/src/svc_encode_mb.cpp | 386 ++ .../encoder/core/src/svc_encode_slice.cpp | 2009 +++++++ .../encoder/core/src/svc_mode_decision.cpp | 686 +++ .../encoder/core/src/svc_motion_estimate.cpp | 1089 ++++ .../encoder/core/src/svc_set_mb_syn_cabac.cpp | 739 +++ .../encoder/core/src/svc_set_mb_syn_cavlc.cpp | 422 ++ .../encoder/core/src/wels_preprocess.cpp | 1458 +++++ .../codec/encoder/core/src/wels_task_base.cpp | 52 + .../encoder/core/src/wels_task_encoder.cpp | 341 ++ .../encoder/core/src/wels_task_management.cpp | 277 + .../src/codec/encoder/core/x86/coeff.asm | 695 +++ .../src/codec/encoder/core/x86/dct.asm | 108 + .../src/codec/encoder/core/x86/intra_pred.asm | 1129 ++++ .../encoder/core/x86/matrix_transpose.asm | 395 ++ .../src/codec/encoder/core/x86/memzero.asm | 132 + .../src/codec/encoder/core/x86/quant.asm | 507 ++ .../src/codec/encoder/core/x86/sample_sc.asm | 1829 +++++++ .../src/codec/encoder/core/x86/score.asm | 363 ++ .../openh264/src/codec/encoder/meson.build | 83 + .../codec/encoder/plus/inc/welsEncoderExt.h | 129 + .../src/codec/encoder/plus/src/DllEntry.cpp | 43 + .../codec/encoder/plus/src/welsEncoderExt.cpp | 1395 +++++ .../encoder/plus/src/wels_enc_export.def | 5 + .../openh264/src/codec/encoder/targets.mk | 125 + third-party/openh264/src/codec/meson.build | 9 + .../codec/processing/build/win32/.gitignore | 8 + .../processing/build/win32/WelsVP.vcproj | 836 +++ .../src/codec/processing/interface/IWelsVP.h | 310 ++ .../openh264/src/codec/processing/meson.build | 59 + .../AdaptiveQuantization.cpp | 270 + .../AdaptiveQuantization.h | 97 + .../src/arm/adaptive_quantization.S | 110 + .../processing/src/arm/down_sample_neon.S | 443 ++ .../codec/processing/src/arm/pixel_sad_neon.S | 67 + .../codec/processing/src/arm/vaa_calc_neon.S | 755 +++ .../adaptive_quantization_aarch64_neon.S | 89 + .../src/arm64/down_sample_aarch64_neon.S | 334 ++ .../src/arm64/pixel_sad_aarch64_neon.S | 51 + .../src/arm64/vaa_calc_aarch64_neon.S | 549 ++ .../BackgroundDetection.cpp | 383 ++ .../backgrounddetection/BackgroundDetection.h | 105 + .../processing/src/common/WelsFrameWork.cpp | 302 ++ .../processing/src/common/WelsFrameWork.h | 130 + .../processing/src/common/WelsFrameWorkEx.cpp | 96 + .../codec/processing/src/common/WelsVP.def | 36 + .../src/codec/processing/src/common/WelsVP.rc | 115 + .../src/codec/processing/src/common/common.h | 84 + .../codec/processing/src/common/memory.cpp | 117 + .../src/codec/processing/src/common/memory.h | 110 + .../codec/processing/src/common/resource.h | 15 + .../src/codec/processing/src/common/typedef.h | 56 + .../src/codec/processing/src/common/util.h | 105 + .../complexityanalysis/ComplexityAnalysis.cpp | 489 ++ .../complexityanalysis/ComplexityAnalysis.h | 107 + .../codec/processing/src/denoise/denoise.cpp | 124 + .../codec/processing/src/denoise/denoise.h | 109 + .../processing/src/denoise/denoise_filter.cpp | 126 + .../processing/src/downsample/downsample.cpp | 294 ++ .../processing/src/downsample/downsample.h | 201 + .../src/downsample/downsamplefuncs.cpp | 300 ++ .../src/imagerotate/imagerotate.cpp | 92 + .../processing/src/imagerotate/imagerotate.h | 85 + .../src/imagerotate/imagerotatefuncs.cpp | 65 + .../src/codec/processing/src/mips/vaa_mmi.c | 892 ++++ .../SceneChangeDetection.cpp | 53 + .../SceneChangeDetection.h | 270 + .../src/scrolldetection/ScrollDetection.cpp | 115 + .../src/scrolldetection/ScrollDetection.h | 68 + .../scrolldetection/ScrollDetectionFuncs.cpp | 200 + .../scrolldetection/ScrollDetectionFuncs.h | 61 + .../processing/src/vaacalc/vaacalcfuncs.cpp | 598 +++ .../processing/src/vaacalc/vaacalculation.cpp | 161 + .../processing/src/vaacalc/vaacalculation.h | 164 + .../processing/src/x86/denoisefilter.asm | 284 + .../src/x86/downsample_bilinear.asm | 4686 +++++++++++++++++ .../src/codec/processing/src/x86/vaa.asm | 3563 +++++++++++++ .../openh264/src/codec/processing/targets.mk | 99 + third-party/webrtc/BUILD | 6 + third-party/webrtc/webrtc | 2 +- 419 files changed, 153657 insertions(+), 6 deletions(-) create mode 100644 third-party/openh264/BUILD create mode 100644 third-party/openh264/src/codec/api/meson.build create mode 100644 third-party/openh264/src/codec/api/svc/codec_api.h create mode 100644 third-party/openh264/src/codec/api/svc/codec_app_def.h create mode 100644 third-party/openh264/src/codec/api/svc/codec_def.h create mode 100644 third-party/openh264/src/codec/api/svc/codec_ver.h create mode 100644 third-party/openh264/src/codec/api/svc/meson.build create mode 100644 third-party/openh264/src/codec/build/android/.gitignore create mode 100644 third-party/openh264/src/codec/build/android/dec/AndroidManifest.xml create mode 100644 third-party/openh264/src/codec/build/android/dec/jni/Android.mk create mode 100644 third-party/openh264/src/codec/build/android/dec/jni/Application.mk create mode 100644 third-party/openh264/src/codec/build/android/dec/jni/myjni.cpp create mode 100644 third-party/openh264/src/codec/build/android/dec/jni/welsdecdemo.mk create mode 100644 third-party/openh264/src/codec/build/android/dec/res/layout/main.xml create mode 100644 third-party/openh264/src/codec/build/android/dec/res/values/strings.xml create mode 100644 third-party/openh264/src/codec/build/android/dec/src/com/wels/dec/WelsDecTest.java create mode 100644 third-party/openh264/src/codec/build/android/enc/AndroidManifest.xml create mode 100644 third-party/openh264/src/codec/build/android/enc/jni/Android.mk create mode 100644 third-party/openh264/src/codec/build/android/enc/jni/Application.mk create mode 100644 third-party/openh264/src/codec/build/android/enc/jni/myjni.cpp create mode 100644 third-party/openh264/src/codec/build/android/enc/jni/welsencdemo.mk create mode 100644 third-party/openh264/src/codec/build/android/enc/res/layout/main.xml create mode 100644 third-party/openh264/src/codec/build/android/enc/res/values/strings.xml create mode 100644 third-party/openh264/src/codec/build/android/enc/src/com/wels/enc/WelsEncTest.java create mode 100755 third-party/openh264/src/codec/build/generate_codec_ver.sh create mode 100644 third-party/openh264/src/codec/build/iOS/.gitignore create mode 100644 third-party/openh264/src/codec/build/iOS/dec/demo/demo/DEMOAppDelegate.h create mode 100644 third-party/openh264/src/codec/build/iOS/dec/demo/demo/DEMOAppDelegate.m create mode 100644 third-party/openh264/src/codec/build/iOS/dec/demo/demo/DEMOViewController.h create mode 100644 third-party/openh264/src/codec/build/iOS/dec/demo/demo/DEMOViewController.m create mode 100644 third-party/openh264/src/codec/build/iOS/dec/demo/demo/DEMOViewControllerShowResource.h create mode 100644 third-party/openh264/src/codec/build/iOS/dec/demo/demo/DEMOViewControllerShowResource.m create mode 100644 third-party/openh264/src/codec/build/iOS/dec/demo/demo/Default-568h@2x.png create mode 100644 third-party/openh264/src/codec/build/iOS/dec/demo/demo/Default.png create mode 100644 third-party/openh264/src/codec/build/iOS/dec/demo/demo/Default@2x.png create mode 100644 third-party/openh264/src/codec/build/iOS/dec/demo/demo/demo-Info.plist create mode 100644 third-party/openh264/src/codec/build/iOS/dec/demo/demo/en.lproj/InfoPlist.strings create mode 100644 third-party/openh264/src/codec/build/iOS/dec/demo/demo/en.lproj/MainStoryboard_iPad.storyboard create mode 100644 third-party/openh264/src/codec/build/iOS/dec/demo/demo/en.lproj/MainStoryboard_iPhone.storyboard create mode 100644 third-party/openh264/src/codec/build/iOS/dec/demo/demo/main.m create mode 100644 third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/AppDelegate.h create mode 100644 third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/AppDelegate.m create mode 100644 third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/Base.lproj/Main_iPad.storyboard create mode 100644 third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/Base.lproj/Main_iPhone.storyboard create mode 100644 third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/Images.xcassets/LaunchImage.launchimage/Contents.json create mode 100644 third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/ViewController.h create mode 100644 third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/ViewController.m create mode 100644 third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/en.lproj/InfoPlist.strings create mode 100644 third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/encDemo-Info.plist create mode 100644 third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/main.m create mode 100644 third-party/openh264/src/codec/build/win32/.gitignore create mode 100644 third-party/openh264/src/codec/build/win32/dec/WelsDecCore.vcproj create mode 100644 third-party/openh264/src/codec/build/win32/dec/WelsDecPlus.vcproj create mode 100644 third-party/openh264/src/codec/build/win32/dec/WelsDecoder.sln create mode 100644 third-party/openh264/src/codec/build/win32/dec/decConsole.vcproj create mode 100644 third-party/openh264/src/codec/build/win32/enc/WelsEncCore.vcproj create mode 100644 third-party/openh264/src/codec/build/win32/enc/WelsEncPlus.vcproj create mode 100644 third-party/openh264/src/codec/build/win32/enc/WelsEncoder.sln create mode 100644 third-party/openh264/src/codec/build/win32/enc/encConsole.vcproj create mode 100644 third-party/openh264/src/codec/build/windowsphone/.gitignore create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp.sln create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/App.xaml create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/App.xaml.cs create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/AlignmentGrid.png create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/ApplicationIcon.png create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/BadgeLogo.png create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/Logo.png create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/SplashScreen.png create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/SquareTile150x150.png create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/SquareTile71x71.png create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/StoreLogo.png create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/Tiles/FlipCycleTileLarge.png create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/Tiles/FlipCycleTileMedium.png create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/Tiles/FlipCycleTileSmall.png create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/Tiles/IconicTileMediumLarge.png create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/Tiles/IconicTileSmall.png create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/WideLogo.png create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/CodecApp.csproj create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/LocalizedStrings.cs create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/MainPage.xaml create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/MainPage.xaml.cs create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Package.appxmanifest create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Properties/AppManifest.xml create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Properties/AssemblyInfo.cs create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Properties/WMAppManifest.xml create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Resources/AppResources.Designer.cs create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Resources/AppResources.resx create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/layer2.cfg create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecApp/welsenc.cfg create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecRTComponent.cpp create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecRTComponent.h create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecRTComponent.vcxproj create mode 100644 third-party/openh264/src/codec/build/windowsphone/all/CodecRTComponent.vcxproj.filters create mode 100644 third-party/openh264/src/codec/common/arm/arm_arch_common_macro.S create mode 100644 third-party/openh264/src/codec/common/arm/copy_mb_neon.S create mode 100644 third-party/openh264/src/codec/common/arm/deblocking_neon.S create mode 100644 third-party/openh264/src/codec/common/arm/expand_picture_neon.S create mode 100644 third-party/openh264/src/codec/common/arm/intra_pred_common_neon.S create mode 100644 third-party/openh264/src/codec/common/arm/mc_neon.S create mode 100644 third-party/openh264/src/codec/common/arm64/arm_arch64_common_macro.S create mode 100644 third-party/openh264/src/codec/common/arm64/copy_mb_aarch64_neon.S create mode 100644 third-party/openh264/src/codec/common/arm64/deblocking_aarch64_neon.S create mode 100644 third-party/openh264/src/codec/common/arm64/expand_picture_aarch64_neon.S create mode 100644 third-party/openh264/src/codec/common/arm64/intra_pred_common_aarch64_neon.S create mode 100644 third-party/openh264/src/codec/common/arm64/mc_aarch64_neon.S create mode 100755 third-party/openh264/src/codec/common/generate_version.sh create mode 100644 third-party/openh264/src/codec/common/inc/.gitignore create mode 100644 third-party/openh264/src/codec/common/inc/WelsList.h create mode 100644 third-party/openh264/src/codec/common/inc/WelsLock.h create mode 100644 third-party/openh264/src/codec/common/inc/WelsTask.h create mode 100644 third-party/openh264/src/codec/common/inc/WelsTaskThread.h create mode 100644 third-party/openh264/src/codec/common/inc/WelsThread.h create mode 100644 third-party/openh264/src/codec/common/inc/WelsThreadLib.h create mode 100644 third-party/openh264/src/codec/common/inc/WelsThreadPool.h create mode 100644 third-party/openh264/src/codec/common/inc/asmdefs_mmi.h create mode 100644 third-party/openh264/src/codec/common/inc/copy_mb.h create mode 100644 third-party/openh264/src/codec/common/inc/cpu.h create mode 100644 third-party/openh264/src/codec/common/inc/cpu_core.h create mode 100644 third-party/openh264/src/codec/common/inc/crt_util_safe_x.h create mode 100644 third-party/openh264/src/codec/common/inc/deblocking_common.h create mode 100644 third-party/openh264/src/codec/common/inc/expand_pic.h create mode 100644 third-party/openh264/src/codec/common/inc/golomb_common.h create mode 100644 third-party/openh264/src/codec/common/inc/intra_pred_common.h create mode 100644 third-party/openh264/src/codec/common/inc/ls_defines.h create mode 100644 third-party/openh264/src/codec/common/inc/macros.h create mode 100644 third-party/openh264/src/codec/common/inc/mc.h create mode 100644 third-party/openh264/src/codec/common/inc/measure_time.h create mode 100644 third-party/openh264/src/codec/common/inc/memory_align.h create mode 100644 third-party/openh264/src/codec/common/inc/msa_macros.h create mode 100644 third-party/openh264/src/codec/common/inc/sad_common.h create mode 100644 third-party/openh264/src/codec/common/inc/typedefs.h create mode 100644 third-party/openh264/src/codec/common/inc/utils.h create mode 100644 third-party/openh264/src/codec/common/inc/version.h create mode 100644 third-party/openh264/src/codec/common/inc/version_gen.h.template create mode 100644 third-party/openh264/src/codec/common/inc/welsCodecTrace.h create mode 100644 third-party/openh264/src/codec/common/inc/wels_common_defs.h create mode 100644 third-party/openh264/src/codec/common/inc/wels_const_common.h create mode 100644 third-party/openh264/src/codec/common/meson.build create mode 100644 third-party/openh264/src/codec/common/mips/copy_mb_mmi.c create mode 100644 third-party/openh264/src/codec/common/mips/copy_mb_msa.c create mode 100644 third-party/openh264/src/codec/common/mips/deblock_mmi.c create mode 100644 third-party/openh264/src/codec/common/mips/deblock_msa.c create mode 100644 third-party/openh264/src/codec/common/mips/expand_picture_mmi.c create mode 100644 third-party/openh264/src/codec/common/mips/intra_pred_com_mmi.c create mode 100644 third-party/openh264/src/codec/common/mips/satd_sad_mmi.c create mode 100644 third-party/openh264/src/codec/common/src/WelsTaskThread.cpp create mode 100644 third-party/openh264/src/codec/common/src/WelsThread.cpp create mode 100644 third-party/openh264/src/codec/common/src/WelsThreadLib.cpp create mode 100644 third-party/openh264/src/codec/common/src/WelsThreadPool.cpp create mode 100644 third-party/openh264/src/codec/common/src/common_tables.cpp create mode 100644 third-party/openh264/src/codec/common/src/copy_mb.cpp create mode 100644 third-party/openh264/src/codec/common/src/cpu.cpp create mode 100644 third-party/openh264/src/codec/common/src/crt_util_safe_x.cpp create mode 100644 third-party/openh264/src/codec/common/src/deblocking_common.cpp create mode 100644 third-party/openh264/src/codec/common/src/expand_pic.cpp create mode 100644 third-party/openh264/src/codec/common/src/intra_pred_common.cpp create mode 100644 third-party/openh264/src/codec/common/src/mc.cpp create mode 100644 third-party/openh264/src/codec/common/src/memory_align.cpp create mode 100644 third-party/openh264/src/codec/common/src/sad_common.cpp create mode 100644 third-party/openh264/src/codec/common/src/utils.cpp create mode 100644 third-party/openh264/src/codec/common/src/welsCodecTrace.cpp create mode 100644 third-party/openh264/src/codec/common/targets.mk create mode 100644 third-party/openh264/src/codec/common/x86/asm_inc.asm create mode 100644 third-party/openh264/src/codec/common/x86/cpuid.asm create mode 100644 third-party/openh264/src/codec/common/x86/dct.asm create mode 100644 third-party/openh264/src/codec/common/x86/deblock.asm create mode 100644 third-party/openh264/src/codec/common/x86/expand_picture.asm create mode 100644 third-party/openh264/src/codec/common/x86/intra_pred_com.asm create mode 100644 third-party/openh264/src/codec/common/x86/mb_copy.asm create mode 100644 third-party/openh264/src/codec/common/x86/mc_chroma.asm create mode 100644 third-party/openh264/src/codec/common/x86/mc_luma.asm create mode 100644 third-party/openh264/src/codec/common/x86/satd_sad.asm create mode 100644 third-party/openh264/src/codec/common/x86/vaa.asm create mode 100644 third-party/openh264/src/codec/console/common/inc/read_config.h create mode 100644 third-party/openh264/src/codec/console/common/meson.build create mode 100644 third-party/openh264/src/codec/console/common/src/read_config.cpp create mode 100644 third-party/openh264/src/codec/console/common/targets.mk create mode 100644 third-party/openh264/src/codec/console/dec/inc/d3d9_utils.h create mode 100644 third-party/openh264/src/codec/console/dec/meson.build create mode 100644 third-party/openh264/src/codec/console/dec/src/d3d9_utils.cpp create mode 100644 third-party/openh264/src/codec/console/dec/src/h264dec.cpp create mode 100644 third-party/openh264/src/codec/console/dec/targets.mk create mode 100644 third-party/openh264/src/codec/console/enc/meson.build create mode 100644 third-party/openh264/src/codec/console/enc/src/welsenc.cpp create mode 100644 third-party/openh264/src/codec/console/enc/targets.mk create mode 100644 third-party/openh264/src/codec/console/meson.build create mode 100644 third-party/openh264/src/codec/decoder/core/arm/block_add_neon.S create mode 100644 third-party/openh264/src/codec/decoder/core/arm/intra_pred_neon.S create mode 100644 third-party/openh264/src/codec/decoder/core/arm64/block_add_aarch64_neon.S create mode 100644 third-party/openh264/src/codec/decoder/core/arm64/intra_pred_aarch64_neon.S create mode 100644 third-party/openh264/src/codec/decoder/core/inc/au_parser.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/bit_stream.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/cabac_decoder.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/deblocking.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/dec_frame.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/dec_golomb.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/decode_mb_aux.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/decode_slice.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/decoder.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/decoder_context.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/decoder_core.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/error_code.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/error_concealment.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/fmo.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/get_intra_predictor.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/manage_dec_ref.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/mb_cache.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/memmgr_nal_unit.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/mv_pred.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/nal_prefix.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/nalu.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/parameter_sets.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/parse_mb_syn_cabac.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/parse_mb_syn_cavlc.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/pic_queue.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/picture.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/rec_mb.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/slice.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/vlc_decoder.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/wels_common_basis.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/wels_const.h create mode 100644 third-party/openh264/src/codec/decoder/core/inc/wels_decoder_thread.h create mode 100644 third-party/openh264/src/codec/decoder/core/mips/dct_mmi.c create mode 100644 third-party/openh264/src/codec/decoder/core/src/au_parser.cpp create mode 100644 third-party/openh264/src/codec/decoder/core/src/bit_stream.cpp create mode 100644 third-party/openh264/src/codec/decoder/core/src/cabac_decoder.cpp create mode 100644 third-party/openh264/src/codec/decoder/core/src/deblocking.cpp create mode 100644 third-party/openh264/src/codec/decoder/core/src/decode_mb_aux.cpp create mode 100644 third-party/openh264/src/codec/decoder/core/src/decode_slice.cpp create mode 100644 third-party/openh264/src/codec/decoder/core/src/decoder.cpp create mode 100644 third-party/openh264/src/codec/decoder/core/src/decoder_core.cpp create mode 100644 third-party/openh264/src/codec/decoder/core/src/decoder_data_tables.cpp create mode 100644 third-party/openh264/src/codec/decoder/core/src/error_concealment.cpp create mode 100644 third-party/openh264/src/codec/decoder/core/src/fmo.cpp create mode 100644 third-party/openh264/src/codec/decoder/core/src/get_intra_predictor.cpp create mode 100644 third-party/openh264/src/codec/decoder/core/src/manage_dec_ref.cpp create mode 100644 third-party/openh264/src/codec/decoder/core/src/memmgr_nal_unit.cpp create mode 100644 third-party/openh264/src/codec/decoder/core/src/mv_pred.cpp create mode 100644 third-party/openh264/src/codec/decoder/core/src/parse_mb_syn_cabac.cpp create mode 100644 third-party/openh264/src/codec/decoder/core/src/parse_mb_syn_cavlc.cpp create mode 100644 third-party/openh264/src/codec/decoder/core/src/pic_queue.cpp create mode 100644 third-party/openh264/src/codec/decoder/core/src/rec_mb.cpp create mode 100644 third-party/openh264/src/codec/decoder/core/src/wels_decoder_thread.cpp create mode 100644 third-party/openh264/src/codec/decoder/core/x86/dct.asm create mode 100644 third-party/openh264/src/codec/decoder/core/x86/intra_pred.asm create mode 100644 third-party/openh264/src/codec/decoder/meson.build create mode 100644 third-party/openh264/src/codec/decoder/plus/inc/welsDecoderExt.h create mode 100644 third-party/openh264/src/codec/decoder/plus/src/welsDecoderExt.cpp create mode 100644 third-party/openh264/src/codec/decoder/plus/src/wels_dec_export.def create mode 100644 third-party/openh264/src/codec/decoder/targets.mk create mode 100644 third-party/openh264/src/codec/encoder/core/arm/intra_pred_neon.S create mode 100644 third-party/openh264/src/codec/encoder/core/arm/intra_pred_sad_3_opt_neon.S create mode 100644 third-party/openh264/src/codec/encoder/core/arm/memory_neon.S create mode 100644 third-party/openh264/src/codec/encoder/core/arm/pixel_neon.S create mode 100644 third-party/openh264/src/codec/encoder/core/arm/reconstruct_neon.S create mode 100644 third-party/openh264/src/codec/encoder/core/arm/svc_motion_estimation.S create mode 100644 third-party/openh264/src/codec/encoder/core/arm64/intra_pred_aarch64_neon.S create mode 100644 third-party/openh264/src/codec/encoder/core/arm64/intra_pred_sad_3_opt_aarch64_neon.S create mode 100644 third-party/openh264/src/codec/encoder/core/arm64/memory_aarch64_neon.S create mode 100644 third-party/openh264/src/codec/encoder/core/arm64/pixel_aarch64_neon.S create mode 100644 third-party/openh264/src/codec/encoder/core/arm64/reconstruct_aarch64_neon.S create mode 100644 third-party/openh264/src/codec/encoder/core/arm64/svc_motion_estimation_aarch64_neon.S create mode 100644 third-party/openh264/src/codec/encoder/core/inc/as264_common.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/au_set.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/deblocking.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/decode_mb_aux.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/dq_map.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/encode_mb_aux.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/encoder.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/encoder_context.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/extern.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/get_intra_predictor.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/mb_cache.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/md.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/mt_defs.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/mv_pred.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/nal_encap.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/param_svc.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/parameter_sets.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/paraset_strategy.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/picture.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/picture_handle.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/rc.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/ref_list_mgr_svc.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/sample.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/set_mb_syn_cabac.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/set_mb_syn_cavlc.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/slice.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/slice_multi_threading.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/stat.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/svc_base_layer_md.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/svc_enc_frame.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/svc_enc_golomb.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/svc_enc_macroblock.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/svc_enc_slice_segment.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/svc_encode_mb.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/svc_encode_slice.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/svc_mode_decision.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/svc_motion_estimate.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/svc_set_mb_syn.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/svc_set_mb_syn_cavlc.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/vlc_encoder.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/wels_common_basis.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/wels_const.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/wels_func_ptr_def.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/wels_preprocess.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/wels_task_base.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/wels_task_encoder.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/wels_task_management.h create mode 100644 third-party/openh264/src/codec/encoder/core/inc/wels_transpose_matrix.h create mode 100644 third-party/openh264/src/codec/encoder/core/mips/dct_mmi.c create mode 100644 third-party/openh264/src/codec/encoder/core/mips/quant_mmi.c create mode 100644 third-party/openh264/src/codec/encoder/core/mips/score_mmi.c create mode 100644 third-party/openh264/src/codec/encoder/core/src/au_set.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/deblocking.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/decode_mb_aux.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/encode_mb_aux.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/encoder.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/encoder_data_tables.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/encoder_ext.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/get_intra_predictor.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/md.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/mv_pred.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/nal_encap.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/paraset_strategy.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/picture_handle.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/ratectl.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/ref_list_mgr_svc.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/sample.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/set_mb_syn_cabac.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/set_mb_syn_cavlc.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/slice_multi_threading.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/svc_base_layer_md.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/svc_enc_slice_segment.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/svc_encode_mb.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/svc_encode_slice.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/svc_mode_decision.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/svc_motion_estimate.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/svc_set_mb_syn_cabac.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/svc_set_mb_syn_cavlc.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/wels_preprocess.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/wels_task_base.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/wels_task_encoder.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/src/wels_task_management.cpp create mode 100644 third-party/openh264/src/codec/encoder/core/x86/coeff.asm create mode 100644 third-party/openh264/src/codec/encoder/core/x86/dct.asm create mode 100644 third-party/openh264/src/codec/encoder/core/x86/intra_pred.asm create mode 100644 third-party/openh264/src/codec/encoder/core/x86/matrix_transpose.asm create mode 100644 third-party/openh264/src/codec/encoder/core/x86/memzero.asm create mode 100644 third-party/openh264/src/codec/encoder/core/x86/quant.asm create mode 100644 third-party/openh264/src/codec/encoder/core/x86/sample_sc.asm create mode 100644 third-party/openh264/src/codec/encoder/core/x86/score.asm create mode 100644 third-party/openh264/src/codec/encoder/meson.build create mode 100644 third-party/openh264/src/codec/encoder/plus/inc/welsEncoderExt.h create mode 100644 third-party/openh264/src/codec/encoder/plus/src/DllEntry.cpp create mode 100644 third-party/openh264/src/codec/encoder/plus/src/welsEncoderExt.cpp create mode 100644 third-party/openh264/src/codec/encoder/plus/src/wels_enc_export.def create mode 100644 third-party/openh264/src/codec/encoder/targets.mk create mode 100644 third-party/openh264/src/codec/meson.build create mode 100644 third-party/openh264/src/codec/processing/build/win32/.gitignore create mode 100644 third-party/openh264/src/codec/processing/build/win32/WelsVP.vcproj create mode 100644 third-party/openh264/src/codec/processing/interface/IWelsVP.h create mode 100644 third-party/openh264/src/codec/processing/meson.build create mode 100644 third-party/openh264/src/codec/processing/src/adaptivequantization/AdaptiveQuantization.cpp create mode 100644 third-party/openh264/src/codec/processing/src/adaptivequantization/AdaptiveQuantization.h create mode 100644 third-party/openh264/src/codec/processing/src/arm/adaptive_quantization.S create mode 100644 third-party/openh264/src/codec/processing/src/arm/down_sample_neon.S create mode 100644 third-party/openh264/src/codec/processing/src/arm/pixel_sad_neon.S create mode 100644 third-party/openh264/src/codec/processing/src/arm/vaa_calc_neon.S create mode 100644 third-party/openh264/src/codec/processing/src/arm64/adaptive_quantization_aarch64_neon.S create mode 100644 third-party/openh264/src/codec/processing/src/arm64/down_sample_aarch64_neon.S create mode 100644 third-party/openh264/src/codec/processing/src/arm64/pixel_sad_aarch64_neon.S create mode 100644 third-party/openh264/src/codec/processing/src/arm64/vaa_calc_aarch64_neon.S create mode 100644 third-party/openh264/src/codec/processing/src/backgrounddetection/BackgroundDetection.cpp create mode 100644 third-party/openh264/src/codec/processing/src/backgrounddetection/BackgroundDetection.h create mode 100644 third-party/openh264/src/codec/processing/src/common/WelsFrameWork.cpp create mode 100644 third-party/openh264/src/codec/processing/src/common/WelsFrameWork.h create mode 100644 third-party/openh264/src/codec/processing/src/common/WelsFrameWorkEx.cpp create mode 100644 third-party/openh264/src/codec/processing/src/common/WelsVP.def create mode 100644 third-party/openh264/src/codec/processing/src/common/WelsVP.rc create mode 100644 third-party/openh264/src/codec/processing/src/common/common.h create mode 100644 third-party/openh264/src/codec/processing/src/common/memory.cpp create mode 100644 third-party/openh264/src/codec/processing/src/common/memory.h create mode 100644 third-party/openh264/src/codec/processing/src/common/resource.h create mode 100644 third-party/openh264/src/codec/processing/src/common/typedef.h create mode 100644 third-party/openh264/src/codec/processing/src/common/util.h create mode 100644 third-party/openh264/src/codec/processing/src/complexityanalysis/ComplexityAnalysis.cpp create mode 100644 third-party/openh264/src/codec/processing/src/complexityanalysis/ComplexityAnalysis.h create mode 100644 third-party/openh264/src/codec/processing/src/denoise/denoise.cpp create mode 100644 third-party/openh264/src/codec/processing/src/denoise/denoise.h create mode 100644 third-party/openh264/src/codec/processing/src/denoise/denoise_filter.cpp create mode 100644 third-party/openh264/src/codec/processing/src/downsample/downsample.cpp create mode 100644 third-party/openh264/src/codec/processing/src/downsample/downsample.h create mode 100644 third-party/openh264/src/codec/processing/src/downsample/downsamplefuncs.cpp create mode 100644 third-party/openh264/src/codec/processing/src/imagerotate/imagerotate.cpp create mode 100644 third-party/openh264/src/codec/processing/src/imagerotate/imagerotate.h create mode 100644 third-party/openh264/src/codec/processing/src/imagerotate/imagerotatefuncs.cpp create mode 100644 third-party/openh264/src/codec/processing/src/mips/vaa_mmi.c create mode 100644 third-party/openh264/src/codec/processing/src/scenechangedetection/SceneChangeDetection.cpp create mode 100644 third-party/openh264/src/codec/processing/src/scenechangedetection/SceneChangeDetection.h create mode 100644 third-party/openh264/src/codec/processing/src/scrolldetection/ScrollDetection.cpp create mode 100644 third-party/openh264/src/codec/processing/src/scrolldetection/ScrollDetection.h create mode 100644 third-party/openh264/src/codec/processing/src/scrolldetection/ScrollDetectionFuncs.cpp create mode 100644 third-party/openh264/src/codec/processing/src/scrolldetection/ScrollDetectionFuncs.h create mode 100644 third-party/openh264/src/codec/processing/src/vaacalc/vaacalcfuncs.cpp create mode 100644 third-party/openh264/src/codec/processing/src/vaacalc/vaacalculation.cpp create mode 100644 third-party/openh264/src/codec/processing/src/vaacalc/vaacalculation.h create mode 100644 third-party/openh264/src/codec/processing/src/x86/denoisefilter.asm create mode 100644 third-party/openh264/src/codec/processing/src/x86/downsample_bilinear.asm create mode 100644 third-party/openh264/src/codec/processing/src/x86/vaa.asm create mode 100644 third-party/openh264/src/codec/processing/targets.mk diff --git a/submodules/TelegramUI/BUILD b/submodules/TelegramUI/BUILD index 391f01676d..6b6657682f 100644 --- a/submodules/TelegramUI/BUILD +++ b/submodules/TelegramUI/BUILD @@ -222,6 +222,7 @@ swift_library( "//submodules/DebugSettingsUI:DebugSettingsUI", "//submodules/ImportStickerPackUI:ImportStickerPackUI", "//submodules/GradientBackground:GradientBackground", + "//third-party/openh264:openh264", ], visibility = [ "//visibility:public", diff --git a/submodules/TgVoipWebrtc/Sources/OngoingCallThreadLocalContext.mm b/submodules/TgVoipWebrtc/Sources/OngoingCallThreadLocalContext.mm index 30f3099d1c..cb978ef85b 100644 --- a/submodules/TgVoipWebrtc/Sources/OngoingCallThreadLocalContext.mm +++ b/submodules/TgVoipWebrtc/Sources/OngoingCallThreadLocalContext.mm @@ -970,8 +970,7 @@ private: } std::vector videoCodecPreferences; - videoCodecPreferences.push_back(tgcalls::VideoCodecName::VP8); - //videoCodecPreferences.push_back(tgcalls::VideoCodecName::VP9); + //videoCodecPreferences.push_back(tgcalls::VideoCodecName::H264); int minOutgoingVideoBitrateKbit = 500; diff --git a/submodules/TgVoipWebrtc/tgcalls b/submodules/TgVoipWebrtc/tgcalls index 9a136a755a..4cf89129f5 160000 --- a/submodules/TgVoipWebrtc/tgcalls +++ b/submodules/TgVoipWebrtc/tgcalls @@ -1 +1 @@ -Subproject commit 9a136a755aafe710311fb4a8f99c373513f7fd4a +Subproject commit 4cf89129f5972d029228f11717bd0e8d48d99f27 diff --git a/submodules/ffmpeg/Sources/FFMpeg/build-ffmpeg-bazel.sh b/submodules/ffmpeg/Sources/FFMpeg/build-ffmpeg-bazel.sh index 7391972e92..8b4aff7cf7 100755 --- a/submodules/ffmpeg/Sources/FFMpeg/build-ffmpeg-bazel.sh +++ b/submodules/ffmpeg/Sources/FFMpeg/build-ffmpeg-bazel.sh @@ -57,6 +57,8 @@ CONFIGURE_FLAGS="--enable-cross-compile --disable-programs \ #--enable-hwaccel=h264_videotoolbox,hevc_videotoolbox \ +EXTRA_CFLAGS="-DCONFIG_SAFE_BITSTREAM_READER=1" + if [ "$1" = "debug" ]; then CONFIGURE_FLAGS="$CONFIGURE_FLAGS --disable-optimizations --disable-stripping" @@ -121,7 +123,7 @@ then LIBOPUS_PATH="$SOURCE_DIR/libopus" - CFLAGS="-arch $ARCH" + CFLAGS="$EXTRA_CFLAGS -arch $ARCH" if [ "$RAW_ARCH" = "i386" -o "$RAW_ARCH" = "x86_64" ] then PLATFORM="iPhoneSimulator" diff --git a/third-party/libvpx/build-libvpx-bazel.sh b/third-party/libvpx/build-libvpx-bazel.sh index a2ac3011d2..0719302b8c 100755 --- a/third-party/libvpx/build-libvpx-bazel.sh +++ b/third-party/libvpx/build-libvpx-bazel.sh @@ -17,7 +17,8 @@ BUILD_ROOT="_iosbuild" CONFIGURE_ARGS="--disable-docs --disable-examples --disable-libyuv - --disable-unit-tests" + --disable-unit-tests + --enable-postproc" DIST_DIR="_dist" FRAMEWORK_DIR="VPX.framework" FRAMEWORK_LIB="VPX.framework/VPX" diff --git a/third-party/openh264/BUILD b/third-party/openh264/BUILD new file mode 100644 index 0000000000..cdbe26eeb6 --- /dev/null +++ b/third-party/openh264/BUILD @@ -0,0 +1,268 @@ + +arm64_specific_sources = [ + "src/codec/encoder/core/arm64/intra_pred_aarch64_neon.S", + "src/codec/encoder/core/arm64/intra_pred_sad_3_opt_aarch64_neon.S", + "src/codec/encoder/core/arm64/memory_aarch64_neon.S", + "src/codec/encoder/core/arm64/pixel_aarch64_neon.S", + "src/codec/encoder/core/arm64/reconstruct_aarch64_neon.S", + "src/codec/encoder/core/arm64/svc_motion_estimation_aarch64_neon.S", + "src/codec/common/arm64/copy_mb_aarch64_neon.S", + "src/codec/common/arm64/deblocking_aarch64_neon.S", + "src/codec/common/arm64/expand_picture_aarch64_neon.S", + "src/codec/common/arm64/intra_pred_common_aarch64_neon.S", + "src/codec/common/arm64/mc_aarch64_neon.S", + "src/codec/processing/src/arm64/adaptive_quantization_aarch64_neon.S", + "src/codec/processing/src/arm64/down_sample_aarch64_neon.S", + "src/codec/processing/src/arm64/pixel_sad_aarch64_neon.S", + "src/codec/processing/src/arm64/vaa_calc_aarch64_neon.S", +] + +arm64_specific_textual_hdrs = [ + "src/codec/common/arm64/arm_arch64_common_macro.S", +] + +arm_specific_sources = [ + "src/codec/encoder/core/arm/intra_pred_neon.S", + "src/codec/encoder/core/arm/intra_pred_sad_3_opt_neon.S", + "src/codec/encoder/core/arm/memory_neon.S", + "src/codec/encoder/core/arm/pixel_neon.S", + "src/codec/encoder/core/arm/reconstruct_neon.S", + "src/codec/encoder/core/arm/svc_motion_estimation.S", + "src/codec/common/arm/copy_mb_neon.S", + "src/codec/common/arm/deblocking_neon.S", + "src/codec/common/arm/expand_picture_neon.S", + "src/codec/common/arm/intra_pred_common_neon.S", + "src/codec/common/arm/mc_neon.S", + "src/codec/processing/src/arm/adaptive_quantization.S", + "src/codec/processing/src/arm/down_sample_neon.S", + "src/codec/processing/src/arm/pixel_sad_neon.S", + "src/codec/processing/src/arm/vaa_calc_neon.S", +] + +arm_specific_textual_hdrs = [ + "src/codec/common/arm/arm_arch_common_macro.S", +] + +arm64_specific_copts = [ + "-DHAVE_NEON_AARCH64=1", + "-Ithird-party/openh264/src/codec/common/arm64", +] + +arm_specific_copts = [ + "-DHAVE_NEON=1", + "-Ithird-party/openh264/src/codec/common/arm", +] + +arch_specific_sources = select({ + "@build_bazel_rules_apple//apple:ios_armv7": arm_specific_sources, + "@build_bazel_rules_apple//apple:ios_arm64": arm64_specific_sources, + "//build-system:ios_sim_arm64": arm64_specific_sources, + "@build_bazel_rules_apple//apple:ios_x86_64": [], +}) + +arch_specific_copts = select({ + "@build_bazel_rules_apple//apple:ios_armv7": arm_specific_copts, + "@build_bazel_rules_apple//apple:ios_arm64": arm64_specific_copts, + "//build-system:ios_sim_arm64": arm64_specific_copts, + "@build_bazel_rules_apple//apple:ios_x86_64": [], +}) + +arch_specific_textual_hdrs = select({ + "@build_bazel_rules_apple//apple:ios_armv7": arm_specific_textual_hdrs, + "@build_bazel_rules_apple//apple:ios_arm64": arm64_specific_textual_hdrs, + "//build-system:ios_sim_arm64": arm64_specific_textual_hdrs, + "@build_bazel_rules_apple//apple:ios_x86_64": [], +}) + +cc_library( + name = "openh264", + srcs = arch_specific_sources + [ + "src/codec/encoder/core/inc/as264_common.h", + "src/codec/encoder/core/inc/au_set.h", + "src/codec/encoder/core/inc/deblocking.h", + "src/codec/encoder/core/inc/decode_mb_aux.h", + "src/codec/encoder/core/inc/dq_map.h", + "src/codec/encoder/core/inc/encode_mb_aux.h", + "src/codec/encoder/core/inc/encoder_context.h", + "src/codec/encoder/core/inc/encoder.h", + "src/codec/encoder/core/inc/extern.h", + "src/codec/encoder/core/inc/get_intra_predictor.h", + "src/codec/encoder/core/inc/mb_cache.h", + "src/codec/encoder/core/inc/md.h", + "src/codec/encoder/core/inc/mt_defs.h", + "src/codec/encoder/core/inc/mv_pred.h", + "src/codec/encoder/core/inc/nal_encap.h", + "src/codec/encoder/core/inc/param_svc.h", + "src/codec/encoder/core/inc/parameter_sets.h", + "src/codec/encoder/core/inc/paraset_strategy.h", + "src/codec/encoder/core/inc/picture_handle.h", + "src/codec/encoder/core/inc/picture.h", + "src/codec/encoder/core/inc/rc.h", + "src/codec/encoder/core/inc/ref_list_mgr_svc.h", + "src/codec/encoder/core/inc/sample.h", + "src/codec/encoder/core/inc/set_mb_syn_cabac.h", + "src/codec/encoder/core/inc/set_mb_syn_cavlc.h", + "src/codec/encoder/core/inc/slice_multi_threading.h", + "src/codec/encoder/core/inc/slice.h", + "src/codec/encoder/core/inc/stat.h", + "src/codec/encoder/core/inc/svc_base_layer_md.h", + "src/codec/encoder/core/inc/svc_enc_frame.h", + "src/codec/encoder/core/inc/svc_enc_golomb.h", + "src/codec/encoder/core/inc/svc_enc_macroblock.h", + "src/codec/encoder/core/inc/svc_enc_slice_segment.h", + "src/codec/encoder/core/inc/svc_encode_mb.h", + "src/codec/encoder/core/inc/svc_encode_slice.h", + "src/codec/encoder/core/inc/svc_mode_decision.h", + "src/codec/encoder/core/inc/svc_motion_estimate.h", + "src/codec/encoder/core/inc/svc_set_mb_syn_cavlc.h", + "src/codec/encoder/core/inc/svc_set_mb_syn.h", + "src/codec/encoder/core/inc/vlc_encoder.h", + "src/codec/encoder/core/inc/wels_common_basis.h", + "src/codec/encoder/core/inc/wels_const.h", + "src/codec/encoder/core/inc/wels_func_ptr_def.h", + "src/codec/encoder/core/inc/wels_preprocess.h", + "src/codec/encoder/core/inc/wels_task_base.h", + "src/codec/encoder/core/inc/wels_task_encoder.h", + "src/codec/encoder/core/inc/wels_task_management.h", + "src/codec/encoder/core/inc/wels_transpose_matrix.h", + "src/codec/common/inc/crt_util_safe_x.h", + "src/codec/common/inc/typedefs.h", + "src/codec/common/inc/utils.h", + "src/codec/api/svc/codec_app_def.h", + "src/codec/api/svc/codec_def.h", + "src/codec/api/svc/codec_api.h", + "src/codec/common/inc/WelsTask.h", + "src/codec/common/inc/macros.h", + "src/codec/common/inc/wels_const_common.h", + "src/codec/common/inc/wels_common_defs.h", + "src/codec/common/inc/memory_align.h", + "src/codec/common/inc/expand_pic.h", + "src/codec/common/inc/mc.h", + "src/codec/common/inc/cpu_core.h", + "src/codec/common/inc/WelsThreadLib.h", + "src/codec/common/inc/WelsLock.h", + "src/codec/common/inc/WelsThreadPool.h", + "src/codec/common/inc/WelsTaskThread.h", + "src/codec/common/inc/WelsThread.h", + "src/codec/common/inc/WelsList.h", + "src/codec/common/inc/copy_mb.h", + "src/codec/common/inc/golomb_common.h", + "src/codec/common/inc/ls_defines.h", + "src/codec/common/inc/measure_time.h", + "src/codec/common/inc/deblocking_common.h", + "src/codec/common/inc/cpu.h", + "src/codec/api/svc/codec_ver.h", + "src/codec/common/inc/intra_pred_common.h", + "src/codec/common/inc/sad_common.h", + ] + [ + "src/codec/encoder/core/src/au_set.cpp", + "src/codec/encoder/core/src/deblocking.cpp", + "src/codec/encoder/core/src/decode_mb_aux.cpp", + "src/codec/encoder/core/src/encode_mb_aux.cpp", + "src/codec/encoder/core/src/encoder_data_tables.cpp", + "src/codec/encoder/core/src/encoder_ext.cpp", + "src/codec/encoder/core/src/encoder.cpp", + "src/codec/encoder/core/src/get_intra_predictor.cpp", + "src/codec/encoder/core/src/md.cpp", + "src/codec/encoder/core/src/mv_pred.cpp", + "src/codec/encoder/core/src/nal_encap.cpp", + "src/codec/encoder/core/src/paraset_strategy.cpp", + "src/codec/encoder/core/src/picture_handle.cpp", + "src/codec/encoder/core/src/ratectl.cpp", + "src/codec/encoder/core/src/ref_list_mgr_svc.cpp", + "src/codec/encoder/core/src/sample.cpp", + "src/codec/encoder/core/src/set_mb_syn_cabac.cpp", + "src/codec/encoder/core/src/set_mb_syn_cavlc.cpp", + "src/codec/encoder/core/src/slice_multi_threading.cpp", + "src/codec/encoder/core/src/svc_base_layer_md.cpp", + "src/codec/encoder/core/src/svc_enc_slice_segment.cpp", + "src/codec/encoder/core/src/svc_encode_mb.cpp", + "src/codec/encoder/core/src/svc_encode_slice.cpp", + "src/codec/encoder/core/src/svc_mode_decision.cpp", + "src/codec/encoder/core/src/svc_motion_estimate.cpp", + "src/codec/encoder/core/src/svc_set_mb_syn_cabac.cpp", + "src/codec/encoder/core/src/svc_set_mb_syn_cavlc.cpp", + "src/codec/encoder/core/src/wels_preprocess.cpp", + "src/codec/encoder/core/src/wels_task_base.cpp", + "src/codec/encoder/core/src/wels_task_encoder.cpp", + "src/codec/encoder/core/src/wels_task_management.cpp", + ] + [ + "src/codec/encoder/plus/inc/welsEncoderExt.h", + "src/codec/common/inc/version.h", + "src/codec/common/inc/welsCodecTrace.h", + "src/codec/common/inc/asmdefs_mmi.h", + ] + [ + "src/codec/encoder/plus/src/welsEncoderExt.cpp", + "src/codec/common/src/welsCodecTrace.cpp", + "src/codec/common/src/common_tables.cpp", + "src/codec/common/src/copy_mb.cpp", + "src/codec/common/src/cpu.cpp", + "src/codec/common/src/crt_util_safe_x.cpp", + "src/codec/common/src/deblocking_common.cpp", + "src/codec/common/src/expand_pic.cpp", + "src/codec/common/src/intra_pred_common.cpp", + "src/codec/common/src/mc.cpp", + "src/codec/common/src/memory_align.cpp", + "src/codec/common/src/sad_common.cpp", + "src/codec/common/src/WelsTaskThread.cpp", + "src/codec/common/src/WelsThread.cpp", + "src/codec/common/src/WelsThreadLib.cpp", + "src/codec/common/src/WelsThreadPool.cpp", + "src/codec/common/src/utils.cpp", + ] + [ + "src/codec/processing/interface/IWelsVP.h", + "src/codec/processing/src/adaptivequantization/AdaptiveQuantization.cpp", + "src/codec/processing/src/adaptivequantization/AdaptiveQuantization.h", + "src/codec/processing/src/backgrounddetection/BackgroundDetection.cpp", + "src/codec/processing/src/backgrounddetection/BackgroundDetection.h", + "src/codec/processing/src/common/common.h", + "src/codec/processing/src/common/memory.cpp", + "src/codec/processing/src/common/memory.h", + "src/codec/processing/src/common/resource.h", + "src/codec/processing/src/common/typedef.h", + "src/codec/processing/src/common/util.h", + "src/codec/processing/src/common/WelsFrameWork.cpp", + "src/codec/processing/src/common/WelsFrameWork.h", + "src/codec/processing/src/common/WelsFrameWorkEx.cpp", + "src/codec/processing/src/complexityanalysis/ComplexityAnalysis.cpp", + "src/codec/processing/src/complexityanalysis/ComplexityAnalysis.h", + "src/codec/processing/src/denoise/denoise.cpp", + "src/codec/processing/src/denoise/denoise_filter.cpp", + "src/codec/processing/src/denoise/denoise.h", + "src/codec/processing/src/downsample/downsample.cpp", + "src/codec/processing/src/downsample/downsample.h", + "src/codec/processing/src/downsample/downsamplefuncs.cpp", + "src/codec/processing/src/imagerotate/imagerotate.cpp", + "src/codec/processing/src/imagerotate/imagerotate.h", + "src/codec/processing/src/imagerotate/imagerotatefuncs.cpp", + "src/codec/processing/src/scenechangedetection/SceneChangeDetection.cpp", + "src/codec/processing/src/scenechangedetection/SceneChangeDetection.h", + "src/codec/processing/src/scrolldetection/ScrollDetection.cpp", + "src/codec/processing/src/scrolldetection/ScrollDetection.h", + "src/codec/processing/src/scrolldetection/ScrollDetectionFuncs.cpp", + "src/codec/processing/src/scrolldetection/ScrollDetectionFuncs.h", + "src/codec/processing/src/vaacalc/vaacalcfuncs.cpp", + "src/codec/processing/src/vaacalc/vaacalculation.cpp", + "src/codec/processing/src/vaacalc/vaacalculation.h", + ], + hdrs = glob([ + ]), + textual_hdrs = arch_specific_textual_hdrs, + includes = [ + ], + copts = arch_specific_copts + [ + "-Ithird-party/openh264/src/codec/encoder/core/inc", + "-Ithird-party/openh264/src/codec/encoder/plus/inc", + "-Ithird-party/openh264/src/codec/decoder/plus/inc", + "-Ithird-party/openh264/src/codec/common/inc", + "-Ithird-party/openh264/src/codec/api/svc", + "-Ithird-party/openh264/src/codec/processing/interface", + "-Ithird-party/openh264/src/codec/processing/src/common", + "-Os", + ], + deps = [ + ], + visibility = [ + "//visibility:public", + ], +) diff --git a/third-party/openh264/src/codec/api/meson.build b/third-party/openh264/src/codec/api/meson.build new file mode 100644 index 0000000000..0f133adecd --- /dev/null +++ b/third-party/openh264/src/codec/api/meson.build @@ -0,0 +1 @@ +subdir ('svc') diff --git a/third-party/openh264/src/codec/api/svc/codec_api.h b/third-party/openh264/src/codec/api/svc/codec_api.h new file mode 100644 index 0000000000..a1326c8f05 --- /dev/null +++ b/third-party/openh264/src/codec/api/svc/codec_api.h @@ -0,0 +1,592 @@ +/*! + *@page License + * + * \copy + * Copyright (c) 2013, Cisco Systems + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef WELS_VIDEO_CODEC_SVC_API_H__ +#define WELS_VIDEO_CODEC_SVC_API_H__ + +#ifndef __cplusplus +#if defined(_MSC_VER) && (_MSC_VER < 1800) +typedef unsigned char bool; +#else +#include +#endif +#endif + +#include "codec_app_def.h" +#include "codec_def.h" + +#if defined(_WIN32) || defined(__cdecl) +#define EXTAPI __cdecl +#else +#define EXTAPI +#endif + +/** + * @file codec_api.h +*/ + +/** + * @page Overview + * * This page is for openh264 codec API usage. + * * For how to use the encoder,please refer to page UsageExampleForEncoder + * * For how to use the decoder,please refer to page UsageExampleForDecoder + * * For more detail about ISVEncoder,please refer to page ISVCEncoder + * * For more detail about ISVDecoder,please refer to page ISVCDecoder +*/ + +/** + * @page DecoderUsageExample + * + * @brief + * * An example for using the decoder for Decoding only or Parsing only + * + * Step 1:decoder declaration + * @code + * + * //decoder declaration + * ISVCDecoder *pSvcDecoder; + * //input: encoded bitstream start position; should include start code prefix + * unsigned char *pBuf =...; + * //input: encoded bit stream length; should include the size of start code prefix + * int iSize =...; + * //output: [0~2] for Y,U,V buffer for Decoding only + * unsigned char *pData[3] =...; + * //in-out: for Decoding only: declare and initialize the output buffer info, this should never co-exist with Parsing only + * SBufferInfo sDstBufInfo; + * memset(&sDstBufInfo, 0, sizeof(SBufferInfo)); + * //in-out: for Parsing only: declare and initialize the output bitstream buffer info for parse only, this should never co-exist with Decoding only + * SParserBsInfo sDstParseInfo; + * memset(&sDstParseInfo, 0, sizeof(SParserBsInfo)); + * sDstParseInfo.pDstBuff = new unsigned char[PARSE_SIZE]; //In Parsing only, allocate enough buffer to save transcoded bitstream for a frame + * + * @endcode + * + * Step 2:decoder creation + * @code + * WelsCreateDecoder(&pSvcDecoder); + * @endcode + * + * Step 3:declare required parameter, used to differentiate Decoding only and Parsing only + * @code + * SDecodingParam sDecParam = {0}; + * sDecParam.sVideoProperty.eVideoBsType = VIDEO_BITSTREAM_AVC; + * //for Parsing only, the assignment is mandatory + * sDecParam.bParseOnly = true; + * @endcode + * + * Step 4:initialize the parameter and decoder context, allocate memory + * @code + * pSvcDecoder->Initialize(&sDecParam); + * @endcode + * + * Step 5:do actual decoding process in slice level; + * this can be done in a loop until data ends + * @code + * //for Decoding only + * iRet = pSvcDecoder->DecodeFrameNoDelay(pBuf, iSize, pData, &sDstBufInfo); + * //or + * iRet = pSvcDecoder->DecodeFrame2(pBuf, iSize, pData, &sDstBufInfo); + * //for Parsing only + * iRet = pSvcDecoder->DecodeParser(pBuf, iSize, &sDstParseInfo); + * //decode failed + * If (iRet != 0){ + * //error handling (RequestIDR or something like that) + * } + * //for Decoding only, pData can be used for render. + * if (sDstBufInfo.iBufferStatus==1){ + * //output handling (pData[0], pData[1], pData[2]) + * } + * //for Parsing only, sDstParseInfo can be used for, e.g., HW decoding + * if (sDstBufInfo.iNalNum > 0){ + * //Hardware decoding sDstParseInfo; + * } + * //no-delay decoding can be realized by directly calling DecodeFrameNoDelay(), which is the recommended usage. + * //no-delay decoding can also be realized by directly calling DecodeFrame2() again with NULL input, as in the following. In this case, decoder would immediately reconstruct the input data. This can also be used similarly for Parsing only. Consequent decoding error and output indication should also be considered as above. + * iRet = pSvcDecoder->DecodeFrame2(NULL, 0, pData, &sDstBufInfo); + * //judge iRet, sDstBufInfo.iBufferStatus ... + * @endcode + * + * Step 6:uninitialize the decoder and memory free + * @code + * pSvcDecoder->Uninitialize(); + * @endcode + * + * Step 7:destroy the decoder + * @code + * DestroyDecoder(pSvcDecoder); + * @endcode + * +*/ + +/** + * @page EncoderUsageExample1 + * + * @brief + * * An example for using encoder with basic parameter + * + * Step1:setup encoder + * @code + * ISVCEncoder* encoder_; + * int rv = WelsCreateSVCEncoder (&encoder_); + * assert (rv == 0); + * assert (encoder_ != NULL); + * @endcode + * + * Step2:initilize with basic parameter + * @code + * SEncParamBase param; + * memset (¶m, 0, sizeof (SEncParamBase)); + * param.iUsageType = usageType; //from EUsageType enum + * param.fMaxFrameRate = frameRate; + * param.iPicWidth = width; + * param.iPicHeight = height; + * param.iTargetBitrate = 5000000; + * encoder_->Initialize (¶m); + * @endcode + * + * Step3:set option, set option during encoding process + * @code + * encoder_->SetOption (ENCODER_OPTION_TRACE_LEVEL, &g_LevelSetting); + * int videoFormat = videoFormatI420; + * encoder_->SetOption (ENCODER_OPTION_DATAFORMAT, &videoFormat); + * @endcode + * + * Step4: encode and store ouput bistream + * @code + * int frameSize = width * height * 3 / 2; + * BufferedData buf; + * buf.SetLength (frameSize); + * assert (buf.Length() == (size_t)frameSize); + * SFrameBSInfo info; + * memset (&info, 0, sizeof (SFrameBSInfo)); + * SSourcePicture pic; + * memset (&pic, 0, sizeof (SsourcePicture)); + * pic.iPicWidth = width; + * pic.iPicHeight = height; + * pic.iColorFormat = videoFormatI420; + * pic.iStride[0] = pic.iPicWidth; + * pic.iStride[1] = pic.iStride[2] = pic.iPicWidth >> 1; + * pic.pData[0] = buf.data(); + * pic.pData[1] = pic.pData[0] + width * height; + * pic.pData[2] = pic.pData[1] + (width * height >> 2); + * for(int num = 0;numEncodeFrame (&pic, &info); + * assert (rv == cmResultSuccess); + * if (info.eFrameType != videoFrameTypeSkip) { + * //output bitstream handling + * } + * } + * @endcode + * + * Step5:teardown encoder + * @code + * if (encoder_) { + * encoder_->Uninitialize(); + * WelsDestroySVCEncoder (encoder_); + * } + * @endcode + * + */ + +/** + * @page EncoderUsageExample2 + * + * @brief + * * An example for using the encoder with extension parameter. + * * The same operation on Step 1,3,4,5 with Example-1 + * + * Step 2:initialize with extension parameter + * @code + * SEncParamExt param; + * encoder_->GetDefaultParams (¶m); + * param.iUsageType = usageType; + * param.fMaxFrameRate = frameRate; + * param.iPicWidth = width; + * param.iPicHeight = height; + * param.iTargetBitrate = 5000000; + * param.bEnableDenoise = denoise; + * param.iSpatialLayerNum = layers; + * //SM_DYN_SLICE don't support multi-thread now + * if (sliceMode != SM_SINGLE_SLICE && sliceMode != SM_DYN_SLICE) + * param.iMultipleThreadIdc = 2; + * + * for (int i = 0; i < param.iSpatialLayerNum; i++) { + * param.sSpatialLayers[i].iVideoWidth = width >> (param.iSpatialLayerNum - 1 - i); + * param.sSpatialLayers[i].iVideoHeight = height >> (param.iSpatialLayerNum - 1 - i); + * param.sSpatialLayers[i].fFrameRate = frameRate; + * param.sSpatialLayers[i].iSpatialBitrate = param.iTargetBitrate; + * + * param.sSpatialLayers[i].sSliceCfg.uiSliceMode = sliceMode; + * if (sliceMode == SM_DYN_SLICE) { + * param.sSpatialLayers[i].sSliceCfg.sSliceArgument.uiSliceSizeConstraint = 600; + * param.uiMaxNalSize = 1500; + * } + * } + * param.iTargetBitrate *= param.iSpatialLayerNum; + * encoder_->InitializeExt (¶m); + * int videoFormat = videoFormatI420; + * encoder_->SetOption (ENCODER_OPTION_DATAFORMAT, &videoFormat); + * + * @endcode + */ + + + + +#ifdef __cplusplus +/** +* @brief Endocder definition +*/ +class ISVCEncoder { + public: + /** + * @brief Initialize the encoder + * @param pParam basic encoder parameter + * @return CM_RETURN: 0 - success; otherwise - failed; + */ + virtual int EXTAPI Initialize (const SEncParamBase* pParam) = 0; + + /** + * @brief Initilaize encoder by using extension parameters. + * @param pParam extension parameter for encoder + * @return CM_RETURN: 0 - success; otherwise - failed; + */ + virtual int EXTAPI InitializeExt (const SEncParamExt* pParam) = 0; + + /** + * @brief Get the default extension parameters. + * If you want to change some parameters of encoder, firstly you need to get the default encoding parameters, + * after that you can change part of parameters you want to. + * @param pParam extension parameter for encoder + * @return CM_RETURN: 0 - success; otherwise - failed; + * */ + virtual int EXTAPI GetDefaultParams (SEncParamExt* pParam) = 0; + /// uninitialize the encoder + virtual int EXTAPI Uninitialize() = 0; + + /** + * @brief Encode one frame + * @param kpSrcPic the pointer to the source luminance plane + * chrominance data: + * CbData = kpSrc + m_iMaxPicWidth * m_iMaxPicHeight; + * CrData = CbData + (m_iMaxPicWidth * m_iMaxPicHeight)/4; + * the application calling this interface needs to ensure the data validation between the location + * @param pBsInfo output bit stream + * @return 0 - success; otherwise -failed; + */ + virtual int EXTAPI EncodeFrame (const SSourcePicture* kpSrcPic, SFrameBSInfo* pBsInfo) = 0; + + /** + * @brief Encode the parameters from output bit stream + * @param pBsInfo output bit stream + * @return 0 - success; otherwise - failed; + */ + virtual int EXTAPI EncodeParameterSets (SFrameBSInfo* pBsInfo) = 0; + + /** + * @brief Force encoder to encoder frame as IDR if bIDR set as true + * @param bIDR true: force encoder to encode frame as IDR frame;false, return 1 and nothing to do + * @return 0 - success; otherwise - failed; + */ + virtual int EXTAPI ForceIntraFrame (bool bIDR, int iLayerId = -1) = 0; + + /** + * @brief Set option for encoder, detail option type, please refer to enumurate ENCODER_OPTION. + * @param pOption option for encoder such as InDataFormat, IDRInterval, SVC Encode Param, Frame Rate, Bitrate,... + * @return CM_RETURN: 0 - success; otherwise - failed; + */ + virtual int EXTAPI SetOption (ENCODER_OPTION eOptionId, void* pOption) = 0; + + /** + * @brief Get option for encoder, detail option type, please refer to enumurate ENCODER_OPTION. + * @param pOption option for encoder such as InDataFormat, IDRInterval, SVC Encode Param, Frame Rate, Bitrate,... + * @return CM_RETURN: 0 - success; otherwise - failed; + */ + virtual int EXTAPI GetOption (ENCODER_OPTION eOptionId, void* pOption) = 0; + virtual ~ISVCEncoder() {} +}; + + + +/** +* @brief Decoder definition +*/ +class ISVCDecoder { + public: + + /** + * @brief Initilaize decoder + * @param pParam parameter for decoder + * @return 0 - success; otherwise - failed; + */ + virtual long EXTAPI Initialize (const SDecodingParam* pParam) = 0; + + /// Uninitialize the decoder + virtual long EXTAPI Uninitialize() = 0; + + /** + * @brief Decode one frame + * @param pSrc the h264 stream to be decoded + * @param iSrcLen the length of h264 stream + * @param ppDst buffer pointer of decoded data (YUV) + * @param pStride output stride + * @param iWidth output width + * @param iHeight output height + * @return 0 - success; otherwise -failed; + */ + virtual DECODING_STATE EXTAPI DecodeFrame (const unsigned char* pSrc, + const int iSrcLen, + unsigned char** ppDst, + int* pStride, + int& iWidth, + int& iHeight) = 0; + + /** + * @brief For slice level DecodeFrameNoDelay() (4 parameters input), + * whatever the function return value is, the output data + * of I420 format will only be available when pDstInfo->iBufferStatus == 1,. + * This function will parse and reconstruct the input frame immediately if it is complete + * It is recommended as the main decoding function for H.264/AVC format input + * @param pSrc the h264 stream to be decoded + * @param iSrcLen the length of h264 stream + * @param ppDst buffer pointer of decoded data (YUV) + * @param pDstInfo information provided to API(width, height, etc.) + * @return 0 - success; otherwise -failed; + */ + virtual DECODING_STATE EXTAPI DecodeFrameNoDelay (const unsigned char* pSrc, + const int iSrcLen, + unsigned char** ppDst, + SBufferInfo* pDstInfo) = 0; + + /** + * @brief For slice level DecodeFrame2() (4 parameters input), + * whatever the function return value is, the output data + * of I420 format will only be available when pDstInfo->iBufferStatus == 1,. + * (e.g., in multi-slice cases, only when the whole picture + * is completely reconstructed, this variable would be set equal to 1.) + * @param pSrc the h264 stream to be decoded + * @param iSrcLen the length of h264 stream + * @param ppDst buffer pointer of decoded data (YUV) + * @param pDstInfo information provided to API(width, height, etc.) + * @return 0 - success; otherwise -failed; + */ + virtual DECODING_STATE EXTAPI DecodeFrame2 (const unsigned char* pSrc, + const int iSrcLen, + unsigned char** ppDst, + SBufferInfo* pDstInfo) = 0; + + + /** + * @brief This function gets a decoded ready frame remaining in buffers after the last frame has been decoded. + * Use GetOption with option DECODER_OPTION_NUM_OF_FRAMES_REMAINING_IN_BUFFER to get the number of frames remaining in buffers. + * Note that it is only applicable for profile_idc != 66 + * @param ppDst buffer pointer of decoded data (YUV) + * @param pDstInfo information provided to API(width, height, etc.) + * @return 0 - success; otherwise -failed; + */ + virtual DECODING_STATE EXTAPI FlushFrame (unsigned char** ppDst, + SBufferInfo* pDstInfo) = 0; + + /** + * @brief This function parse input bitstream only, and rewrite possible SVC syntax to AVC syntax + * @param pSrc the h264 stream to be decoded + * @param iSrcLen the length of h264 stream + * @param pDstInfo bit stream info + * @return 0 - success; otherwise -failed; + */ + virtual DECODING_STATE EXTAPI DecodeParser (const unsigned char* pSrc, + const int iSrcLen, + SParserBsInfo* pDstInfo) = 0; + + /** + * @brief This API does not work for now!! This is for future use to support non-I420 color format output. + * @param pSrc the h264 stream to be decoded + * @param iSrcLen the length of h264 stream + * @param pDst buffer pointer of decoded data (YUV) + * @param iDstStride output stride + * @param iDstLen bit stream info + * @param iWidth output width + * @param iHeight output height + * @param iColorFormat output color format + * @return to do ... + */ + virtual DECODING_STATE EXTAPI DecodeFrameEx (const unsigned char* pSrc, + const int iSrcLen, + unsigned char* pDst, + int iDstStride, + int& iDstLen, + int& iWidth, + int& iHeight, + int& iColorFormat) = 0; + + /** + * @brief Set option for decoder, detail option type, please refer to enumurate DECODER_OPTION. + * @param pOption option for decoder such as OutDataFormat, Eos Flag, EC method, ... + * @return CM_RETURN: 0 - success; otherwise - failed; + */ + virtual long EXTAPI SetOption (DECODER_OPTION eOptionId, void* pOption) = 0; + + /** + * @brief Get option for decoder, detail option type, please refer to enumurate DECODER_OPTION. + * @param pOption option for decoder such as OutDataFormat, Eos Flag, EC method, ... + * @return CM_RETURN: 0 - success; otherwise - failed; + */ + virtual long EXTAPI GetOption (DECODER_OPTION eOptionId, void* pOption) = 0; + virtual ~ISVCDecoder() {} +}; + + +extern "C" +{ +#else + +typedef struct ISVCEncoderVtbl ISVCEncoderVtbl; +typedef const ISVCEncoderVtbl* ISVCEncoder; +struct ISVCEncoderVtbl { + +int (*Initialize) (ISVCEncoder*, const SEncParamBase* pParam); +int (*InitializeExt) (ISVCEncoder*, const SEncParamExt* pParam); + +int (*GetDefaultParams) (ISVCEncoder*, SEncParamExt* pParam); + +int (*Uninitialize) (ISVCEncoder*); + +int (*EncodeFrame) (ISVCEncoder*, const SSourcePicture* kpSrcPic, SFrameBSInfo* pBsInfo); +int (*EncodeParameterSets) (ISVCEncoder*, SFrameBSInfo* pBsInfo); + +int (*ForceIntraFrame) (ISVCEncoder*, bool bIDR); + +int (*SetOption) (ISVCEncoder*, ENCODER_OPTION eOptionId, void* pOption); +int (*GetOption) (ISVCEncoder*, ENCODER_OPTION eOptionId, void* pOption); +}; + +typedef struct ISVCDecoderVtbl ISVCDecoderVtbl; +typedef const ISVCDecoderVtbl* ISVCDecoder; +struct ISVCDecoderVtbl { +long (*Initialize) (ISVCDecoder*, const SDecodingParam* pParam); +long (*Uninitialize) (ISVCDecoder*); + +DECODING_STATE (*DecodeFrame) (ISVCDecoder*, const unsigned char* pSrc, + const int iSrcLen, + unsigned char** ppDst, + int* pStride, + int* iWidth, + int* iHeight); + +DECODING_STATE (*DecodeFrameNoDelay) (ISVCDecoder*, const unsigned char* pSrc, + const int iSrcLen, + unsigned char** ppDst, + SBufferInfo* pDstInfo); + +DECODING_STATE (*DecodeFrame2) (ISVCDecoder*, const unsigned char* pSrc, + const int iSrcLen, + unsigned char** ppDst, + SBufferInfo* pDstInfo); + +DECODING_STATE (*FlushFrame) (ISVCDecoder*, unsigned char** ppDst, + SBufferInfo* pDstInfo); + +DECODING_STATE (*DecodeParser) (ISVCDecoder*, const unsigned char* pSrc, + const int iSrcLen, + SParserBsInfo* pDstInfo); + +DECODING_STATE (*DecodeFrameEx) (ISVCDecoder*, const unsigned char* pSrc, + const int iSrcLen, + unsigned char* pDst, + int iDstStride, + int* iDstLen, + int* iWidth, + int* iHeight, + int* iColorFormat); + +long (*SetOption) (ISVCDecoder*, DECODER_OPTION eOptionId, void* pOption); +long (*GetOption) (ISVCDecoder*, DECODER_OPTION eOptionId, void* pOption); +}; +#endif + +typedef void (*WelsTraceCallback) (void* ctx, int level, const char* string); + +/** @brief Create encoder + * @param ppEncoder encoder + * @return 0 - success; otherwise - failed; +*/ +int WelsCreateSVCEncoder (ISVCEncoder** ppEncoder); + + +/** @brief Destroy encoder +* @param pEncoder encoder + * @return void +*/ +void WelsDestroySVCEncoder (ISVCEncoder* pEncoder); + + +/** @brief Get the capability of decoder + * @param pDecCapability decoder capability + * @return 0 - success; otherwise - failed; +*/ +int WelsGetDecoderCapability (SDecoderCapability* pDecCapability); + + +/** @brief Create decoder + * @param ppDecoder decoder + * @return 0 - success; otherwise - failed; +*/ +long WelsCreateDecoder (ISVCDecoder** ppDecoder); + + +/** @brief Destroy decoder + * @param pDecoder decoder + * @return void +*/ +void WelsDestroyDecoder (ISVCDecoder* pDecoder); + +/** @brief Get codec version + * Note, old versions of Mingw (GCC < 4.7) are buggy and use an + * incorrect/different ABI for calling this function, making it + * incompatible with MSVC builds. + * @return The linked codec version +*/ +OpenH264Version WelsGetCodecVersion (void); + +/** @brief Get codec version + * @param pVersion struct to fill in with the version +*/ +void WelsGetCodecVersionEx (OpenH264Version* pVersion); + +#ifdef __cplusplus +} +#endif + +#endif//WELS_VIDEO_CODEC_SVC_API_H__ diff --git a/third-party/openh264/src/codec/api/svc/codec_app_def.h b/third-party/openh264/src/codec/api/svc/codec_app_def.h new file mode 100644 index 0000000000..bb3c3d67b7 --- /dev/null +++ b/third-party/openh264/src/codec/api/svc/codec_app_def.h @@ -0,0 +1,810 @@ +/*! + * \copy + * Copyright (c) 2013, Cisco Systems + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + + + +#ifndef WELS_VIDEO_CODEC_APPLICATION_DEFINITION_H__ +#define WELS_VIDEO_CODEC_APPLICATION_DEFINITION_H__ +/** + * @file codec_app_def.h + * @brief Data and /or structures introduced in Cisco OpenH264 application +*/ + +#include "codec_def.h" +/* Constants */ +#define MAX_TEMPORAL_LAYER_NUM 4 +#define MAX_SPATIAL_LAYER_NUM 4 +#define MAX_QUALITY_LAYER_NUM 4 + +#define MAX_LAYER_NUM_OF_FRAME 128 +#define MAX_NAL_UNITS_IN_LAYER 128 ///< predetermined here, adjust it later if need + +#define MAX_RTP_PAYLOAD_LEN 1000 +#define AVERAGE_RTP_PAYLOAD_LEN 800 + + +#define SAVED_NALUNIT_NUM_TMP ( (MAX_SPATIAL_LAYER_NUM*MAX_QUALITY_LAYER_NUM) + 1 + MAX_SPATIAL_LAYER_NUM ) ///< SPS/PPS + SEI/SSEI + PADDING_NAL +#define MAX_SLICES_NUM_TMP ( ( MAX_NAL_UNITS_IN_LAYER - SAVED_NALUNIT_NUM_TMP ) / 3 ) + + +#define AUTO_REF_PIC_COUNT -1 ///< encoder selects the number of reference frame automatically +#define UNSPECIFIED_BIT_RATE 0 ///< to do: add detail comment + +/** + * @brief Struct of OpenH264 version + */ +/// +/// E.g. SDK version is 1.2.0.0, major version number is 1, minor version number is 2, and revision number is 0. +typedef struct _tagVersion { + unsigned int uMajor; ///< The major version number + unsigned int uMinor; ///< The minor version number + unsigned int uRevision; ///< The revision number + unsigned int uReserved; ///< The reserved number, it should be 0. +} OpenH264Version; + +/** +* @brief Decoding status +*/ +typedef enum { + /** + * Errors derived from bitstream parsing + */ + dsErrorFree = 0x00, ///< bit stream error-free + dsFramePending = 0x01, ///< need more throughput to generate a frame output, + dsRefLost = 0x02, ///< layer lost at reference frame with temporal id 0 + dsBitstreamError = 0x04, ///< error bitstreams(maybe broken internal frame) the decoder cared + dsDepLayerLost = 0x08, ///< dependented layer is ever lost + dsNoParamSets = 0x10, ///< no parameter set NALs involved + dsDataErrorConcealed = 0x20, ///< current data error concealed specified + dsRefListNullPtrs = 0x40, /// do not write any of the following information to the header + unsigned char + uiVideoFormat; // EVideoFormatSPS; 3 bits in header; 0-5 => component, kpal, ntsc, secam, mac, undef + bool bFullRange; // false => analog video data range [16, 235]; true => full data range [0,255] + bool bColorDescriptionPresent; // false => do not write any of the following three items to the header + unsigned char + uiColorPrimaries; // EColorPrimaries; 8 bits in header; 0 - 9 => ???, bt709, undef, ???, bt470m, bt470bg, + // smpte170m, smpte240m, film, bt2020 + unsigned char + uiTransferCharacteristics; // ETransferCharacteristics; 8 bits in header; 0 - 15 => ???, bt709, undef, ???, bt470m, bt470bg, smpte170m, + // smpte240m, linear, log100, log316, iec61966-2-4, bt1361e, iec61966-2-1, bt2020-10, bt2020-12 + unsigned char + uiColorMatrix; // EColorMatrix; 8 bits in header (corresponds to FFmpeg "colorspace"); 0 - 10 => GBR, bt709, + // undef, ???, fcc, bt470bg, smpte170m, smpte240m, YCgCo, bt2020nc, bt2020c + + bool bAspectRatioPresent; ///< aspect ratio present in VUI + ESampleAspectRatio eAspectRatio; ///< aspect ratio idc + unsigned short sAspectRatioExtWidth; ///< use if aspect ratio idc == 255 + unsigned short sAspectRatioExtHeight; ///< use if aspect ratio idc == 255 + +} SSpatialLayerConfig; + +/** +* @brief Encoder usage type +*/ +typedef enum { + CAMERA_VIDEO_REAL_TIME, ///< camera video for real-time communication + SCREEN_CONTENT_REAL_TIME, ///< screen content signal + CAMERA_VIDEO_NON_REAL_TIME, + SCREEN_CONTENT_NON_REAL_TIME, + INPUT_CONTENT_TYPE_ALL, +} EUsageType; + +/** +* @brief Enumulate the complexity mode +*/ +typedef enum { + LOW_COMPLEXITY = 0, ///< the lowest compleixty,the fastest speed, + MEDIUM_COMPLEXITY, ///< medium complexity, medium speed,medium quality + HIGH_COMPLEXITY ///< high complexity, lowest speed, high quality +} ECOMPLEXITY_MODE; + +/** + * @brief Enumulate for the stategy of SPS/PPS strategy + */ +typedef enum { + CONSTANT_ID = 0, ///< constant id in SPS/PPS + INCREASING_ID = 0x01, ///< SPS/PPS id increases at each IDR + SPS_LISTING = 0x02, ///< using SPS in the existing list if possible + SPS_LISTING_AND_PPS_INCREASING = 0x03, + SPS_PPS_LISTING = 0x06, +} EParameterSetStrategy; + +// TODO: Refine the parameters definition. +/** +* @brief SVC Encoding Parameters +*/ +typedef struct TagEncParamBase { + EUsageType + iUsageType; ///< application type; please refer to the definition of EUsageType + + int iPicWidth; ///< width of picture in luminance samples (the maximum of all layers if multiple spatial layers presents) + int iPicHeight; ///< height of picture in luminance samples((the maximum of all layers if multiple spatial layers presents) + int iTargetBitrate; ///< target bitrate desired, in unit of bps + RC_MODES iRCMode; ///< rate control mode + float fMaxFrameRate; ///< maximal input frame rate + +} SEncParamBase, *PEncParamBase; + +/** +* @brief SVC Encoding Parameters extention +*/ +typedef struct TagEncParamExt { + EUsageType + iUsageType; ///< same as in TagEncParamBase + + int iPicWidth; ///< same as in TagEncParamBase + int iPicHeight; ///< same as in TagEncParamBase + int iTargetBitrate; ///< same as in TagEncParamBase + RC_MODES iRCMode; ///< same as in TagEncParamBase + float fMaxFrameRate; ///< same as in TagEncParamBase + + int iTemporalLayerNum; ///< temporal layer number, max temporal layer = 4 + int iSpatialLayerNum; ///< spatial layer number,1<= iSpatialLayerNum <= MAX_SPATIAL_LAYER_NUM, MAX_SPATIAL_LAYER_NUM = 4 + SSpatialLayerConfig sSpatialLayers[MAX_SPATIAL_LAYER_NUM]; + + ECOMPLEXITY_MODE iComplexityMode; + unsigned int uiIntraPeriod; ///< period of Intra frame + int iNumRefFrame; ///< number of reference frame used + EParameterSetStrategy + eSpsPpsIdStrategy; ///< different stategy in adjust ID in SPS/PPS: 0- constant ID, 1-additional ID, 6-mapping and additional + bool bPrefixNalAddingCtrl; ///< false:not use Prefix NAL; true: use Prefix NAL + bool bEnableSSEI; ///< false:not use SSEI; true: use SSEI -- TODO: planning to remove the interface of SSEI + bool bSimulcastAVC; ///< (when encoding more than 1 spatial layer) false: use SVC syntax for higher layers; true: use Simulcast AVC + int iPaddingFlag; ///< 0:disable padding;1:padding + int iEntropyCodingModeFlag; ///< 0:CAVLC 1:CABAC. + + /* rc control */ + bool bEnableFrameSkip; ///< False: don't skip frame even if VBV buffer overflow.True: allow skipping frames to keep the bitrate within limits + int iMaxBitrate; ///< the maximum bitrate, in unit of bps, set it to UNSPECIFIED_BIT_RATE if not needed + int iMaxQp; ///< the maximum QP encoder supports + int iMinQp; ///< the minmum QP encoder supports + unsigned int uiMaxNalSize; ///< the maximum NAL size. This value should be not 0 for dynamic slice mode + + /*LTR settings*/ + bool bEnableLongTermReference; ///< 1: on, 0: off + int iLTRRefNum; ///< the number of LTR(long term reference),TODO: not supported to set it arbitrary yet + unsigned int iLtrMarkPeriod; ///< the LTR marked period that is used in feedback. + /* multi-thread settings*/ + unsigned short + iMultipleThreadIdc; ///< 1 # 0: auto(dynamic imp. internal encoder); 1: multiple threads imp. disabled; lager than 1: count number of threads; + bool bUseLoadBalancing; ///< only used when uiSliceMode=1 or 3, will change slicing of a picture during the run-time of multi-thread encoding, so the result of each run may be different + + /* Deblocking loop filter */ + int iLoopFilterDisableIdc; ///< 0: on, 1: off, 2: on except for slice boundaries + int iLoopFilterAlphaC0Offset; ///< AlphaOffset: valid range [-6, 6], default 0 + int iLoopFilterBetaOffset; ///< BetaOffset: valid range [-6, 6], default 0 + /*pre-processing feature*/ + bool bEnableDenoise; ///< denoise control + bool bEnableBackgroundDetection; ///< background detection control //VAA_BACKGROUND_DETECTION //BGD cmd + bool bEnableAdaptiveQuant; ///< adaptive quantization control + bool bEnableFrameCroppingFlag; ///< enable frame cropping flag: TRUE always in application + bool bEnableSceneChangeDetect; + + bool bIsLosslessLink; ///< LTR advanced setting +} SEncParamExt; + +/** +* @brief Define a new struct to show the property of video bitstream. +*/ +typedef struct { + unsigned int size; ///< size of the struct + VIDEO_BITSTREAM_TYPE eVideoBsType; ///< video stream type (AVC/SVC) +} SVideoProperty; + +/** +* @brief SVC Decoding Parameters, reserved here and potential applicable in the future +*/ +typedef struct TagSVCDecodingParam { + char* pFileNameRestructed; ///< file name of reconstructed frame used for PSNR calculation based debug + + unsigned int uiCpuLoad; ///< CPU load + unsigned char uiTargetDqLayer; ///< setting target dq layer id + + ERROR_CON_IDC eEcActiveIdc; ///< whether active error concealment feature in decoder + bool bParseOnly; ///< decoder for parse only, no reconstruction. When it is true, SPS/PPS size should not exceed SPS_PPS_BS_SIZE (128). Otherwise, it will return error info + + SVideoProperty sVideoProperty; ///< video stream property +} SDecodingParam, *PDecodingParam; + +/** +* @brief Bitstream inforamtion of a layer being encoded +*/ +typedef struct { + unsigned char uiTemporalId; + unsigned char uiSpatialId; + unsigned char uiQualityId; + EVideoFrameType eFrameType; + unsigned char uiLayerType; + + /** + * The sub sequence layers are ordered hierarchically based on their dependency on each other so that any picture in a layer shall not be + * predicted from any picture on any higher layer. + */ + int iSubSeqId; ///< refer to D.2.11 Sub-sequence information SEI message semantics + int iNalCount; ///< count number of NAL coded already + int* pNalLengthInByte; ///< length of NAL size in byte from 0 to iNalCount-1 + unsigned char* pBsBuf; ///< buffer of bitstream contained +} SLayerBSInfo, *PLayerBSInfo; + +/** +* @brief Frame bit stream info +*/ +typedef struct { + int iLayerNum; + SLayerBSInfo sLayerInfo[MAX_LAYER_NUM_OF_FRAME]; + + EVideoFrameType eFrameType; + int iFrameSizeInBytes; + long long uiTimeStamp; +} SFrameBSInfo, *PFrameBSInfo; + +/** +* @brief Structure for source picture +*/ +typedef struct Source_Picture_s { + int iColorFormat; ///< color space type + int iStride[4]; ///< stride for each plane pData + unsigned char* pData[4]; ///< plane pData + int iPicWidth; ///< luma picture width in x coordinate + int iPicHeight; ///< luma picture height in y coordinate + long long uiTimeStamp; ///< timestamp of the source picture, unit: millisecond +} SSourcePicture; +/** +* @brief Structure for bit rate info +*/ +typedef struct TagBitrateInfo { + LAYER_NUM iLayer; + int iBitrate; ///< the maximum bitrate +} SBitrateInfo; + +/** +* @brief Structure for dump layer info +*/ +typedef struct TagDumpLayer { + int iLayer; + char* pFileName; +} SDumpLayer; + +/** +* @brief Structure for profile info in layer +* +*/ +typedef struct TagProfileInfo { + int iLayer; + EProfileIdc uiProfileIdc; ///< the profile info +} SProfileInfo; + +/** +* @brief Structure for level info in layer +* +*/ +typedef struct TagLevelInfo { + int iLayer; + ELevelIdc uiLevelIdc; ///< the level info +} SLevelInfo; +/** +* @brief Structure for dilivery status +* +*/ +typedef struct TagDeliveryStatus { + bool bDeliveryFlag; ///< 0: the previous frame isn't delivered,1: the previous frame is delivered + int iDropFrameType; ///< the frame type that is dropped; reserved + int iDropFrameSize; ///< the frame size that is dropped; reserved +} SDeliveryStatus; + +/** +* @brief The capability of decoder, for SDP negotiation +*/ +typedef struct TagDecoderCapability { + int iProfileIdc; ///< profile_idc + int iProfileIop; ///< profile-iop + int iLevelIdc; ///< level_idc + int iMaxMbps; ///< max-mbps + int iMaxFs; ///< max-fs + int iMaxCpb; ///< max-cpb + int iMaxDpb; ///< max-dpb + int iMaxBr; ///< max-br + bool bRedPicCap; ///< redundant-pic-cap +} SDecoderCapability; + +/** +* @brief Structure for parse only output +*/ +typedef struct TagParserBsInfo { + int iNalNum; ///< total NAL number in current AU + int* pNalLenInByte; ///< each nal length + unsigned char* pDstBuff; ///< outputted dst buffer for parsed bitstream + int iSpsWidthInPixel; ///< required SPS width info + int iSpsHeightInPixel; ///< required SPS height info + unsigned long long uiInBsTimeStamp; ///< input BS timestamp + unsigned long long uiOutBsTimeStamp; ///< output BS timestamp +} SParserBsInfo, *PParserBsInfo; + +/** +* @brief Structure for encoder statistics +*/ +typedef struct TagVideoEncoderStatistics { + unsigned int uiWidth; ///< the width of encoded frame + unsigned int uiHeight; ///< the height of encoded frame + //following standard, will be 16x aligned, if there are multiple spatial, this is of the highest + float fAverageFrameSpeedInMs; ///< average_Encoding_Time + + // rate control related + float fAverageFrameRate; ///< the average frame rate in, calculate since encoding starts, supposed that the input timestamp is in unit of ms + float fLatestFrameRate; ///< the frame rate in, in the last second, supposed that the input timestamp is in unit of ms (? useful for checking BR, but is it easy to calculate? + unsigned int uiBitRate; ///< sendrate in Bits per second, calculated within the set time-window + unsigned int uiAverageFrameQP; ///< the average QP of last encoded frame + + unsigned int uiInputFrameCount; ///< number of frames + unsigned int uiSkippedFrameCount; ///< number of frames + + unsigned int uiResolutionChangeTimes; ///< uiResolutionChangeTimes + unsigned int uiIDRReqNum; ///< number of IDR requests + unsigned int uiIDRSentNum; ///< number of actual IDRs sent + unsigned int uiLTRSentNum; ///< number of LTR sent/marked + + long long iStatisticsTs; ///< Timestamp of updating the statistics + + unsigned long iTotalEncodedBytes; + unsigned long iLastStatisticsBytes; + unsigned long iLastStatisticsFrameCount; +} SEncoderStatistics; + +/** +* @brief Structure for decoder statistics +*/ +typedef struct TagVideoDecoderStatistics { + unsigned int uiWidth; ///< the width of encode/decode frame + unsigned int uiHeight; ///< the height of encode/decode frame + float fAverageFrameSpeedInMs; ///< average_Decoding_Time + float fActualAverageFrameSpeedInMs; ///< actual average_Decoding_Time, including freezing pictures + unsigned int uiDecodedFrameCount; ///< number of frames + unsigned int uiResolutionChangeTimes; ///< uiResolutionChangeTimes + unsigned int uiIDRCorrectNum; ///< number of correct IDR received + //EC on related + unsigned int + uiAvgEcRatio; ///< when EC is on, the average ratio of total EC areas, can be an indicator of reconstruction quality + unsigned int + uiAvgEcPropRatio; ///< when EC is on, the rough average ratio of propogate EC areas, can be an indicator of reconstruction quality + unsigned int uiEcIDRNum; ///< number of actual unintegrity IDR or not received but eced + unsigned int uiEcFrameNum; ///< + unsigned int uiIDRLostNum; ///< number of whole lost IDR + unsigned int + uiFreezingIDRNum; ///< number of freezing IDR with error (partly received), under resolution change + unsigned int uiFreezingNonIDRNum; ///< number of freezing non-IDR with error + int iAvgLumaQp; ///< average luma QP. default: -1, no correct frame outputted + int iSpsReportErrorNum; ///< number of Sps Invalid report + int iSubSpsReportErrorNum; ///< number of SubSps Invalid report + int iPpsReportErrorNum; ///< number of Pps Invalid report + int iSpsNoExistNalNum; ///< number of Sps NoExist Nal + int iSubSpsNoExistNalNum; ///< number of SubSps NoExist Nal + int iPpsNoExistNalNum; ///< number of Pps NoExist Nal + + unsigned int uiProfile; ///< Profile idc in syntax + unsigned int uiLevel; ///< level idc according to Annex A-1 + + int iCurrentActiveSpsId; ///< current active SPS id + int iCurrentActivePpsId; ///< current active PPS id + + unsigned int iStatisticsLogInterval; ///< frame interval of statistics log +} SDecoderStatistics; // in building, coming soon + +/** +* @brief Structure for sample aspect ratio (SAR) info in VUI +*/ +typedef struct TagVuiSarInfo { + unsigned int uiSarWidth; ///< SAR width + unsigned int uiSarHeight; ///< SAR height + bool bOverscanAppropriateFlag; ///< SAR overscan flag +} SVuiSarInfo, *PVuiSarInfo; + +#endif//WELS_VIDEO_CODEC_APPLICATION_DEFINITION_H__ diff --git a/third-party/openh264/src/codec/api/svc/codec_def.h b/third-party/openh264/src/codec/api/svc/codec_def.h new file mode 100644 index 0000000000..edde5f4a2e --- /dev/null +++ b/third-party/openh264/src/codec/api/svc/codec_def.h @@ -0,0 +1,216 @@ +/*! + * \copy + * Copyright (c) 2013, Cisco Systems + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef WELS_VIDEO_CODEC_DEFINITION_H__ +#define WELS_VIDEO_CODEC_DEFINITION_H__ + +/** + * @file codec_def.h +*/ + +/** +* @brief Enumerate the type of video format +*/ +typedef enum { + videoFormatRGB = 1, ///< rgb color formats + videoFormatRGBA = 2, + videoFormatRGB555 = 3, + videoFormatRGB565 = 4, + videoFormatBGR = 5, + videoFormatBGRA = 6, + videoFormatABGR = 7, + videoFormatARGB = 8, + + videoFormatYUY2 = 20, ///< yuv color formats + videoFormatYVYU = 21, + videoFormatUYVY = 22, + videoFormatI420 = 23, ///< the same as IYUV + videoFormatYV12 = 24, + videoFormatInternal = 25, ///< only used in SVC decoder testbed + + videoFormatNV12 = 26, ///< new format for output by DXVA decoding + + videoFormatVFlip = 0x80000000 +} EVideoFormatType; + +/** +* @brief Enumerate video frame type +*/ +typedef enum { + videoFrameTypeInvalid, ///< encoder not ready or parameters are invalidate + videoFrameTypeIDR, ///< IDR frame in H.264 + videoFrameTypeI, ///< I frame type + videoFrameTypeP, ///< P frame type + videoFrameTypeSkip, ///< skip the frame based encoder kernel + videoFrameTypeIPMixed ///< a frame where I and P slices are mixing, not supported yet +} EVideoFrameType; + +/** +* @brief Enumerate return type +*/ +typedef enum { + cmResultSuccess, ///< successful + cmInitParaError, ///< parameters are invalid + cmUnknownReason, + cmMallocMemeError, ///< malloc a memory error + cmInitExpected, ///< initial action is expected + cmUnsupportedData +} CM_RETURN; + +/** +* @brief Enumulate the nal unit type +*/ +enum ENalUnitType { + NAL_UNKNOWN = 0, + NAL_SLICE = 1, + NAL_SLICE_DPA = 2, + NAL_SLICE_DPB = 3, + NAL_SLICE_DPC = 4, + NAL_SLICE_IDR = 5, ///< ref_idc != 0 + NAL_SEI = 6, ///< ref_idc == 0 + NAL_SPS = 7, + NAL_PPS = 8 + ///< ref_idc == 0 for 6,9,10,11,12 +}; + +/** +* @brief NRI: eNalRefIdc +*/ +enum ENalPriority { + NAL_PRIORITY_DISPOSABLE = 0, + NAL_PRIORITY_LOW = 1, + NAL_PRIORITY_HIGH = 2, + NAL_PRIORITY_HIGHEST = 3 +}; + +#define IS_PARAMETER_SET_NAL(eNalRefIdc, eNalType) \ +( (eNalRefIdc == NAL_PRIORITY_HIGHEST) && (eNalType == (NAL_SPS|NAL_PPS) || eNalType == NAL_SPS) ) + +#define IS_IDR_NAL(eNalRefIdc, eNalType) \ +( (eNalRefIdc == NAL_PRIORITY_HIGHEST) && (eNalType == NAL_SLICE_IDR) ) + +#define FRAME_NUM_PARAM_SET (-1) +#define FRAME_NUM_IDR 0 + +/** + * @brief eDeblockingIdc + */ +enum { + DEBLOCKING_IDC_0 = 0, + DEBLOCKING_IDC_1 = 1, + DEBLOCKING_IDC_2 = 2 +}; +#define DEBLOCKING_OFFSET (6) +#define DEBLOCKING_OFFSET_MINUS (-6) + +/* Error Tools definition */ +typedef unsigned short ERR_TOOL; + +/** + @brief to do +*/ +enum { + ET_NONE = 0x00, ///< NONE Error Tools + ET_IP_SCALE = 0x01, ///< IP Scalable + ET_FMO = 0x02, ///< Flexible Macroblock Ordering + ET_IR_R1 = 0x04, ///< Intra Refresh in predifined 2% MB + ET_IR_R2 = 0x08, ///< Intra Refresh in predifined 5% MB + ET_IR_R3 = 0x10, ///< Intra Refresh in predifined 10% MB + ET_FEC_HALF = 0x20, ///< Forward Error Correction in 50% redundency mode + ET_FEC_FULL = 0x40, ///< Forward Error Correction in 100% redundency mode + ET_RFS = 0x80 ///< Reference Frame Selection +}; + +/** +* @brief Information of coded Slice(=NAL)(s) +*/ +typedef struct SliceInformation { + unsigned char* pBufferOfSlices; ///< base buffer of coded slice(s) + int iCodedSliceCount; ///< number of coded slices + unsigned int* pLengthOfSlices; ///< array of slices length accordingly by number of slice + int iFecType; ///< FEC type[0, 50%FEC, 100%FEC] + unsigned char uiSliceIdx; ///< index of slice in frame [FMO: 0,..,uiSliceCount-1; No FMO: 0] + unsigned char uiSliceCount; ///< count number of slice in frame [FMO: 2-8; No FMO: 1] + char iFrameIndex; ///< index of frame[-1, .., idr_interval-1] + unsigned char uiNalRefIdc; ///< NRI, priority level of slice(NAL) + unsigned char uiNalType; ///< NAL type + unsigned char + uiContainingFinalNal; ///< whether final NAL is involved in buffer of coded slices, flag used in Pause feature in T27 +} SliceInfo, *PSliceInfo; + +/** +* @brief thresholds of the initial, maximal and minimal rate +*/ +typedef struct { + int iWidth; ///< frame width + int iHeight; ///< frame height + int iThresholdOfInitRate; ///< threshold of initial rate + int iThresholdOfMaxRate; ///< threshold of maximal rate + int iThresholdOfMinRate; ///< threshold of minimal rate + int iMinThresholdFrameRate; ///< min frame rate min + int iSkipFrameRate; ///< skip to frame rate min + int iSkipFrameStep; ///< how many frames to skip +} SRateThresholds, *PRateThresholds; + +/** +* @brief Structure for decoder memery +*/ +typedef struct TagSysMemBuffer { + int iWidth; ///< width of decoded pic for display + int iHeight; ///< height of decoded pic for display + int iFormat; ///< type is "EVideoFormatType" + int iStride[2]; ///< stride of 2 component +} SSysMEMBuffer; + +/** +* @brief Buffer info +*/ +typedef struct TagBufferInfo { + int iBufferStatus; ///< 0: one frame data is not ready; 1: one frame data is ready + unsigned long long uiInBsTimeStamp; ///< input BS timestamp + unsigned long long uiOutYuvTimeStamp; ///< output YUV timestamp, when bufferstatus is 1 + union { + SSysMEMBuffer sSystemBuffer; ///< memory info for one picture + } UsrData; ///< output buffer info + unsigned char* pDst[3]; //point to picture YUV data +} SBufferInfo; + + +/** +* @brief In a GOP, multiple of the key frame number, derived from +* the number of layers(index or array below) +*/ +static const char kiKeyNumMultiple[] = { + 1, 1, 2, 4, 8, 16, +}; + +#endif//WELS_VIDEO_CODEC_DEFINITION_H__ diff --git a/third-party/openh264/src/codec/api/svc/codec_ver.h b/third-party/openh264/src/codec/api/svc/codec_ver.h new file mode 100644 index 0000000000..a4e494f6b0 --- /dev/null +++ b/third-party/openh264/src/codec/api/svc/codec_ver.h @@ -0,0 +1,15 @@ +//The current file is auto-generated by script: generate_codec_ver.sh +#ifndef CODEC_VER_H +#define CODEC_VER_H + +#include "codec_app_def.h" + +static const OpenH264Version g_stCodecVersion = {2, 1, 0, 2002}; +static const char* const g_strCodecVer = "OpenH264 version:2.1.0.2002"; + +#define OPENH264_MAJOR (2) +#define OPENH264_MINOR (1) +#define OPENH264_REVISION (0) +#define OPENH264_RESERVED (2002) + +#endif // CODEC_VER_H diff --git a/third-party/openh264/src/codec/api/svc/meson.build b/third-party/openh264/src/codec/api/svc/meson.build new file mode 100644 index 0000000000..d1683fcaab --- /dev/null +++ b/third-party/openh264/src/codec/api/svc/meson.build @@ -0,0 +1,13 @@ +headers = [ + 'codec_api.h', + 'codec_app_def.h', + 'codec_def.h', + 'codec_ver.h', +] + +foreach header : headers + api_headers += [[header, files(header)]] +endforeach + +install_headers(headers, + subdir: 'wels') diff --git a/third-party/openh264/src/codec/build/android/.gitignore b/third-party/openh264/src/codec/build/android/.gitignore new file mode 100644 index 0000000000..2c1dd5fcbc --- /dev/null +++ b/third-party/openh264/src/codec/build/android/.gitignore @@ -0,0 +1,6 @@ +build.xml +local.properties +proguard-project.txt +gen +bin +project.properties diff --git a/third-party/openh264/src/codec/build/android/dec/AndroidManifest.xml b/third-party/openh264/src/codec/build/android/dec/AndroidManifest.xml new file mode 100644 index 0000000000..84428273f3 --- /dev/null +++ b/third-party/openh264/src/codec/build/android/dec/AndroidManifest.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + diff --git a/third-party/openh264/src/codec/build/android/dec/jni/Android.mk b/third-party/openh264/src/codec/build/android/dec/jni/Android.mk new file mode 100644 index 0000000000..959de7c211 --- /dev/null +++ b/third-party/openh264/src/codec/build/android/dec/jni/Android.mk @@ -0,0 +1,9 @@ + +LOCAL_PATH := $(call my-dir) +MY_LOCAL_PATH := $(LOCAL_PATH) + +# Step3 +#Generate the libwelsdecdemo.so file +include $(LOCAL_PATH)/welsdecdemo.mk +LOCAL_PATH := $(MY_LOCAL_PATH) + diff --git a/third-party/openh264/src/codec/build/android/dec/jni/Application.mk b/third-party/openh264/src/codec/build/android/dec/jni/Application.mk new file mode 100644 index 0000000000..175295f48a --- /dev/null +++ b/third-party/openh264/src/codec/build/android/dec/jni/Application.mk @@ -0,0 +1,6 @@ +ifeq ($(NDK_TOOLCHAIN_VERSION), clang) +APP_STL := c++_shared +else +APP_STL := stlport_shared +endif +APP_PLATFORM := android-12 diff --git a/third-party/openh264/src/codec/build/android/dec/jni/myjni.cpp b/third-party/openh264/src/codec/build/android/dec/jni/myjni.cpp new file mode 100644 index 0000000000..73edb6534c --- /dev/null +++ b/third-party/openh264/src/codec/build/android/dec/jni/myjni.cpp @@ -0,0 +1,24 @@ +#include +#include +#include +#include + +#define LOG_TAG "welsdec" +#define LOGI(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__) + +extern int DecMain (int argc, char* argv[]); +extern "C" +JNIEXPORT void JNICALL Java_com_wels_dec_WelsDecTest_DoDecoderTest +(JNIEnv* env, jobject thiz, jstring jsFileNameIn, jstring jsFileNameOut) { + /**************** Add the native codes/API *****************/ + char* argv[3]; + int argc = 3; + argv[0] = (char*) ("decConsole.exe"); + argv[1] = (char*) ((*env).GetStringUTFChars (jsFileNameIn, NULL)); + argv[2] = (char*) ((*env).GetStringUTFChars (jsFileNameOut, NULL)); + LOGI ("Start to run JNI module!+++"); + DecMain (argc, argv); + LOGI ("End to run JNI module!+++"); +} + + diff --git a/third-party/openh264/src/codec/build/android/dec/jni/welsdecdemo.mk b/third-party/openh264/src/codec/build/android/dec/jni/welsdecdemo.mk new file mode 100644 index 0000000000..09f51e4b44 --- /dev/null +++ b/third-party/openh264/src/codec/build/android/dec/jni/welsdecdemo.mk @@ -0,0 +1,47 @@ +# Generate the libwelsdecdemo.so file +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) +LOCAL_MODULE := wels +LOCAL_SRC_FILES := ../../../../../libopenh264.so +ifneq (,$(wildcard $(LOCAL_PATH)/$(LOCAL_SRC_FILES))) +include $(PREBUILT_SHARED_LIBRARY) +endif + + + +include $(CLEAR_VARS) + +# +# Module Settings +# +LOCAL_MODULE := welsdecdemo + +# +# Source Files +# +CODEC_PATH := ../../../../ +CONSOLE_DEC_PATH := ../../../../console/dec +CONSOLE_COMMON_PATH := ../../../../console/common +LOCAL_SRC_FILES := \ + $(CONSOLE_DEC_PATH)/src/h264dec.cpp \ + $(CONSOLE_COMMON_PATH)/src/read_config.cpp \ + $(CONSOLE_DEC_PATH)/src/d3d9_utils.cpp \ + myjni.cpp +# +# Header Includes +# +LOCAL_C_INCLUDES := \ + $(LOCAL_PATH)/../../../../api/svc \ + $(LOCAL_PATH)/../../../../console/dec/inc \ + $(LOCAL_PATH)/../../../../console/common/inc \ + $(LOCAL_PATH)/../../../../common/inc +# +# Compile Flags and Link Libraries +# +LOCAL_CFLAGS := -DANDROID_NDK + +LOCAL_LDLIBS := -llog +LOCAL_SHARED_LIBRARIES := wels + +include $(BUILD_SHARED_LIBRARY) diff --git a/third-party/openh264/src/codec/build/android/dec/res/layout/main.xml b/third-party/openh264/src/codec/build/android/dec/res/layout/main.xml new file mode 100644 index 0000000000..76326b16d6 --- /dev/null +++ b/third-party/openh264/src/codec/build/android/dec/res/layout/main.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/third-party/openh264/src/codec/build/iOS/dec/demo/demo/en.lproj/MainStoryboard_iPhone.storyboard b/third-party/openh264/src/codec/build/iOS/dec/demo/demo/en.lproj/MainStoryboard_iPhone.storyboard new file mode 100644 index 0000000000..ffc00b3dd8 --- /dev/null +++ b/third-party/openh264/src/codec/build/iOS/dec/demo/demo/en.lproj/MainStoryboard_iPhone.storyboard @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/third-party/openh264/src/codec/build/iOS/dec/demo/demo/main.m b/third-party/openh264/src/codec/build/iOS/dec/demo/demo/main.m new file mode 100644 index 0000000000..99bec98e6d --- /dev/null +++ b/third-party/openh264/src/codec/build/iOS/dec/demo/demo/main.m @@ -0,0 +1,124 @@ +/*! + * \copy + * Copyright (c) 2013, Cisco Systems + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#import + +#import "DEMOAppDelegate.h" + +extern int DecMain (int argc, char* argv[]); + +//redirect NSLog and stdout to logfile +void redirectLogToDocumentFile() { + NSArray* path = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); + NSString* document = [path objectAtIndex:0]; + NSString* fileName = [NSString stringWithFormat:@"decPerf.log"]; + NSString* logPath = [document stringByAppendingPathComponent:fileName]; + + NSFileManager* defaultManager = [NSFileManager defaultManager]; + [defaultManager removeItemAtPath:logPath error:nil]; + + freopen ([logPath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stdout); + freopen ([logPath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr); +} + + +//run auto test to get encoder performance +int AutoTestDec() { + + + NSString* document = [[NSString alloc] init]; + NSArray* paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); + if ([paths count] == 0) { + NSLog (@"could not find document path"); + return 2; + } + document = [paths objectAtIndex:0]; + + + NSString* decFilePath = [document stringByAppendingString:@"/DecoderPerfTestRes"]; + NSFileManager* manage = [NSFileManager defaultManager]; + + NSString* outYuvPath = [decFilePath stringByAppendingString:@"/yuv"]; + [manage removeItemAtPath:outYuvPath error:nil]; + [manage createDirectoryAtPath:outYuvPath withIntermediateDirectories:YES attributes:nil error: nil]; + + + NSArray* bitstreams = [manage subpathsAtPath:decFilePath]; + if (bitstreams == nil) { + NSLog (@"could not find any bitstream under decoderperfpath"); + return 1; + } + + redirectLogToDocumentFile(); //output to console, just comment this line + + for (int caseNO = 0; caseNO < [bitstreams count]; caseNO++) { + + NSString* caseName = [bitstreams objectAtIndex:caseNO]; + if ([caseName isEqual: @"yuv"]) { + break; + } + NSString* bitstream = [decFilePath stringByAppendingString:@"/"]; + bitstream = [bitstream stringByAppendingString:caseName]; + NSString* yuvFileName = [caseName stringByAppendingString:@".yuv"]; + NSString* tmpyuvFileName = [outYuvPath stringByAppendingString:@"/"]; + yuvFileName = [tmpyuvFileName stringByAppendingString:yuvFileName]; + + [manage createFileAtPath:yuvFileName contents:nil attributes:nil]; + + const char* argvv[] = { + "decConsole.exe", + [bitstream UTF8String], + [yuvFileName UTF8String] + }; + DecMain (sizeof (argvv) / sizeof (argvv[0]), (char**)&argvv[0]); + [manage removeItemAtPath:yuvFileName error:nil];//FOR limited devices spaces + fflush (stdout); // flush the content of stdout instantly + } + + + return 0; +} + +int main (int argc, char* argv[]) { + //***For auto testing of decoder performance, call auto test here, if you not want to do auto test, you can comment it manualy + + if (AutoTestDec() == 0) + NSLog (@"Auto testing running sucessfully"); + else + NSLog (@"Auto testing running failed"); + abort(); + //******** + + @autoreleasepool { + return UIApplicationMain (argc, argv, nil, NSStringFromClass ([DEMOAppDelegate class])); + } +} diff --git a/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/AppDelegate.h b/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/AppDelegate.h new file mode 100644 index 0000000000..8f3a936a70 --- /dev/null +++ b/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/AppDelegate.h @@ -0,0 +1,39 @@ +/*! + * \copy + * Copyright (c) 2013, Cisco Systems + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#import + +@interface AppDelegate : UIResponder + + @property (strong, nonatomic) UIWindow* window; + +@end diff --git a/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/AppDelegate.m b/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/AppDelegate.m new file mode 100644 index 0000000000..fcfab2110e --- /dev/null +++ b/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/AppDelegate.m @@ -0,0 +1,63 @@ + +/*! + * \copy + * Copyright (c) 2013, Cisco Systems + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#import "AppDelegate.h" + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + return YES; +} + +- (void)applicationWillResignActive:(UIApplication *)application +{ +} + +- (void)applicationDidEnterBackground:(UIApplication *)application +{ +} + +- (void)applicationWillEnterForeground:(UIApplication *)application +{ +} + +- (void)applicationDidBecomeActive:(UIApplication *)application +{ +} + +- (void)applicationWillTerminate:(UIApplication *)application +{ +} + +@end diff --git a/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/Base.lproj/Main_iPad.storyboard b/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/Base.lproj/Main_iPad.storyboard new file mode 100644 index 0000000000..39c0b14343 --- /dev/null +++ b/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/Base.lproj/Main_iPad.storyboard @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/Base.lproj/Main_iPhone.storyboard b/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/Base.lproj/Main_iPhone.storyboard new file mode 100644 index 0000000000..5d614171d7 --- /dev/null +++ b/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/Base.lproj/Main_iPhone.storyboard @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/Images.xcassets/AppIcon.appiconset/Contents.json b/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000..91bf9c14a7 --- /dev/null +++ b/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,53 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/Images.xcassets/LaunchImage.launchimage/Contents.json b/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/Images.xcassets/LaunchImage.launchimage/Contents.json new file mode 100644 index 0000000000..6f870a4629 --- /dev/null +++ b/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/Images.xcassets/LaunchImage.launchimage/Contents.json @@ -0,0 +1,51 @@ +{ + "images" : [ + { + "orientation" : "portrait", + "idiom" : "iphone", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "iphone", + "subtype" : "retina4", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "1x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "1x" + }, + { + "orientation" : "portrait", + "idiom" : "ipad", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + }, + { + "orientation" : "landscape", + "idiom" : "ipad", + "extent" : "full-screen", + "minimum-system-version" : "7.0", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/ViewController.h b/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/ViewController.h new file mode 100644 index 0000000000..c4f7b52561 --- /dev/null +++ b/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/ViewController.h @@ -0,0 +1,44 @@ +/*! + * \copy + * Copyright (c) 2013, Cisco Systems + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#import + +@interface ViewController : UIViewController { + UILabel* statusText_; +} + +@property (retain, nonatomic) IBOutlet UILabel* statusText; + +- (IBAction) buttonPressed: (id)sender; + + +@end diff --git a/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/ViewController.m b/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/ViewController.m new file mode 100644 index 0000000000..f2331beb17 --- /dev/null +++ b/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/ViewController.m @@ -0,0 +1,89 @@ +/*! + * \copy + * Copyright (c) 2013, Cisco Systems + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +extern int EncMain(int argc, char **argv); + +#import "ViewController.h" + + +@interface ViewController () + +@end + +@implementation ViewController +@synthesize statusText=statusText_; + +- (void)viewDidLoad +{ + [super viewDidLoad]; + statusText_.text = @"Status: Ready for Go"; +} + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; +} + +- (IBAction) buttonPressed:(id)sender +{ + NSBundle * bundle = [NSBundle mainBundle]; + NSString * encCfg = [bundle pathForResource:@"welsenc_ios" ofType:@"cfg"]; + NSString * dlayerCfg = [bundle pathForResource:@"layer2" ofType:@"cfg"]; + NSString * yuvFile = [bundle pathForResource:@"CiscoVT2people_320x192_12fps" ofType:@"yuv"]; + NSString * bsfile = [NSString stringWithFormat:@"%@/%@", [self getPathForWrite], @"test.264"]; + NSLog(@"WELS_INFO: enc config file: %@, yuv file %@", encCfg, yuvFile); + const char * argv[] = { + "dummy", + [encCfg UTF8String], + "-org", + [yuvFile UTF8String], + "-bf", + [bsfile UTF8String], + "-numl", + "1", + "-lconfig", + "0", + [dlayerCfg UTF8String], + }; + NSLog(@"WELS_INFO: enc config file: %@", encCfg); + EncMain(sizeof(argv)/sizeof(argv[0]), (char**)&argv[0]); + statusText_.text = @"Status: Test Over"; +} + +- (NSString*) getPathForWrite { + NSArray * pathes = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); + NSString * documentDirectory = [pathes objectAtIndex:0]; + return documentDirectory; +} + + +@end diff --git a/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/en.lproj/InfoPlist.strings b/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/en.lproj/InfoPlist.strings new file mode 100644 index 0000000000..477b28ff8f --- /dev/null +++ b/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/encDemo-Info.plist b/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/encDemo-Info.plist new file mode 100644 index 0000000000..3c9aaf9010 --- /dev/null +++ b/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/encDemo-Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + cisco.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + LSRequiresIPhoneOS + + UIMainStoryboardFile + Main_iPhone + UIMainStoryboardFile~ipad + Main_iPad + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/main.m b/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/main.m new file mode 100644 index 0000000000..fd27f11418 --- /dev/null +++ b/third-party/openh264/src/codec/build/iOS/enc/encDemo/encDemo/main.m @@ -0,0 +1,175 @@ +/*! + * \copy + * Copyright (c) 2013, Cisco Systems + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + + +#import + +#import "AppDelegate.h" + +extern int EncMain (int argc, char** argv); + +//redirect NSLog and stdout to logfile +void redirectLogToDocumentFile() { + NSArray* path = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); + NSString* document = [path objectAtIndex:0]; + NSString* fileName = [NSString stringWithFormat:@"encPerf.log"]; + NSString* logPath = [document stringByAppendingPathComponent:fileName]; + + NSFileManager* defaultManager = [NSFileManager defaultManager]; + [defaultManager removeItemAtPath:logPath error:nil]; + + freopen ([logPath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stdout); + freopen ([logPath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr); +} + +//to judge whether the path is needed case path +bool IsOneDeptDir (NSString* path) { + BOOL isDir = NO; + BOOL isOneDeptDir = NO; + NSFileManager* fileManager = [NSFileManager defaultManager]; + NSArray* dirPathArray = [fileManager subpathsAtPath:path]; + if ([dirPathArray count] == 0 || dirPathArray == nil) + isOneDeptDir = NO; + else { + for (NSString * dirPath in dirPathArray) { + NSString* tmpPath = [path stringByAppendingString:@"/"]; + tmpPath = [tmpPath stringByAppendingString:dirPath]; + [fileManager fileExistsAtPath:tmpPath isDirectory:&isDir]; + if (isDir) { + isOneDeptDir = YES; + break; + } + } + } + return isOneDeptDir; +} + +//run auto test to get encoder performance +int AutoTestEnc() { + NSString* document = [[NSString alloc] init]; + NSArray* paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); + if ([paths count] == 0) { + NSLog (@"could not find document path"); + return 2; + } + document = [paths objectAtIndex:0]; + + NSString* encFilePath = [document stringByAppendingString:@"/EncoderPerfTestRes"]; + NSFileManager* manage = [NSFileManager defaultManager]; + + NSArray* cases = [manage subpathsAtPath:encFilePath]; + if (cases == nil) { + NSLog (@"could not find any test case under encoderperftest"); + return 1; + + } + redirectLogToDocumentFile(); + NSMutableArray* dirArray = [[NSMutableArray alloc] init]; + for (NSString * casePath in cases) { + + NSString* path = [encFilePath stringByAppendingPathComponent:casePath]; + if (IsOneDeptDir (path)) { + [dirArray addObject:casePath]; + } + + } + for (int caseNO = 0; caseNO < [dirArray count]; caseNO++) { + + NSString* caseName = [dirArray objectAtIndex:caseNO]; + NSString* caseFilePath = [encFilePath stringByAppendingString:@"/"]; + caseFilePath = [caseFilePath stringByAppendingString:caseName]; + [manage changeCurrentDirectoryPath:[caseFilePath stringByExpandingTildeInPath]]; + + NSString* welscfg = [caseFilePath stringByAppendingString:@"/welsenc.cfg"]; + NSString* layercfg = [caseFilePath stringByAppendingString:@"/layer2.cfg"]; + NSString* yuvFilePath = [caseFilePath stringByAppendingString:@"/yuv"]; + NSString* bitFilePath = [caseFilePath stringByAppendingString:@"/bit"]; + [manage removeItemAtPath:bitFilePath error:nil]; + [manage createDirectoryAtPath:bitFilePath withIntermediateDirectories:YES attributes:nil error:nil]; + + + NSArray* files = [manage subpathsAtPath:yuvFilePath]; + + [manage changeCurrentDirectoryPath:[bitFilePath stringByExpandingTildeInPath]]; + + for (int i = 0; i < [files count]; i++) { + NSString* yuvFileName = [files objectAtIndex:i]; + NSString* bitFileName = [yuvFileName stringByAppendingString:@".264"]; + + NSString* bitFileNamePath = [bitFilePath stringByAppendingString:@"/"]; + bitFileName = [bitFileNamePath stringByAppendingString:bitFileName]; + + + [manage createFileAtPath:bitFileName contents:nil attributes:nil]; + [manage changeCurrentDirectoryPath:[yuvFilePath stringByExpandingTildeInPath]]; + const char* argvv[] = { + "dummy", + [welscfg UTF8String], + "-org", + [yuvFileName UTF8String], + "-bf", + [bitFileName UTF8String], + "-numl", + "1", + "-lconfig", + "0", + [layercfg UTF8String] + }; + + NSLog (@"WELS_INFO: enc config file: %@", welscfg); + NSLog (@"WELS_INFO: enc yuv file: %@", yuvFileName); + EncMain (sizeof (argvv) / sizeof (argvv[0]), (char**)&argvv[0]); + fflush (stdout); // flush the content of stdout instantly + } + + } + + + return 0; +} + + +int main (int argc, char* argv[]) { + + + //***For auto testing of encoder performance, call auto test here, if you not want to do auto test, you can comment it manualy + + if (AutoTestEnc() == 0) + NSLog (@"Auto testing running sucessfully"); + else + NSLog (@"Auto testing running failed"); + abort(); + //************************ + @autoreleasepool { + return UIApplicationMain (argc, argv, nil, NSStringFromClass ([AppDelegate class])); + } +} diff --git a/third-party/openh264/src/codec/build/win32/.gitignore b/third-party/openh264/src/codec/build/win32/.gitignore new file mode 100644 index 0000000000..95ce52f658 --- /dev/null +++ b/third-party/openh264/src/codec/build/win32/.gitignore @@ -0,0 +1,15 @@ +# Files generated by Visual Studio 2008 +*.user +*.ncb +*.suo + +Win32 +x64 + +# Files generated by upgrading the project files +*.vcxproj* +Backup +UpgradeLog.htm + +# Files generated by Visual Studio 2012 +*.sdf diff --git a/third-party/openh264/src/codec/build/win32/dec/WelsDecCore.vcproj b/third-party/openh264/src/codec/build/win32/dec/WelsDecCore.vcproj new file mode 100644 index 0000000000..033522f244 --- /dev/null +++ b/third-party/openh264/src/codec/build/win32/dec/WelsDecCore.vcproj @@ -0,0 +1,996 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/third-party/openh264/src/codec/build/win32/dec/WelsDecPlus.vcproj b/third-party/openh264/src/codec/build/win32/dec/WelsDecPlus.vcproj new file mode 100644 index 0000000000..d2006867ef --- /dev/null +++ b/third-party/openh264/src/codec/build/win32/dec/WelsDecPlus.vcproj @@ -0,0 +1,395 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/third-party/openh264/src/codec/build/win32/dec/WelsDecoder.sln b/third-party/openh264/src/codec/build/win32/dec/WelsDecoder.sln new file mode 100644 index 0000000000..d7aad3d67f --- /dev/null +++ b/third-party/openh264/src/codec/build/win32/dec/WelsDecoder.sln @@ -0,0 +1,52 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WelsDecCore", "WelsDecCore.vcproj", "{01B4AE41-6AD6-4CAF-AEB3-C42F7F9121D5}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WelsDecPlus", "WelsDecPlus.vcproj", "{1131558A-9986-4F4B-A13F-8B7F4C8438BF}" + ProjectSection(ProjectDependencies) = postProject + {01B4AE41-6AD6-4CAF-AEB3-C42F7F9121D5} = {01B4AE41-6AD6-4CAF-AEB3-C42F7F9121D5} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "decConsole", "decConsole.vcproj", "{71973A8E-103D-4FB7-951F-55E35E7F60FA}" + ProjectSection(ProjectDependencies) = postProject + {1131558A-9986-4F4B-A13F-8B7F4C8438BF} = {1131558A-9986-4F4B-A13F-8B7F4C8438BF} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {01B4AE41-6AD6-4CAF-AEB3-C42F7F9121D5}.Debug|Win32.ActiveCfg = Debug|Win32 + {01B4AE41-6AD6-4CAF-AEB3-C42F7F9121D5}.Debug|Win32.Build.0 = Debug|Win32 + {01B4AE41-6AD6-4CAF-AEB3-C42F7F9121D5}.Debug|x64.ActiveCfg = Debug|x64 + {01B4AE41-6AD6-4CAF-AEB3-C42F7F9121D5}.Debug|x64.Build.0 = Debug|x64 + {01B4AE41-6AD6-4CAF-AEB3-C42F7F9121D5}.Release|Win32.ActiveCfg = Release|Win32 + {01B4AE41-6AD6-4CAF-AEB3-C42F7F9121D5}.Release|Win32.Build.0 = Release|Win32 + {01B4AE41-6AD6-4CAF-AEB3-C42F7F9121D5}.Release|x64.ActiveCfg = Release|x64 + {01B4AE41-6AD6-4CAF-AEB3-C42F7F9121D5}.Release|x64.Build.0 = Release|x64 + {1131558A-9986-4F4B-A13F-8B7F4C8438BF}.Debug|Win32.ActiveCfg = Debug|Win32 + {1131558A-9986-4F4B-A13F-8B7F4C8438BF}.Debug|Win32.Build.0 = Debug|Win32 + {1131558A-9986-4F4B-A13F-8B7F4C8438BF}.Debug|x64.ActiveCfg = Debug|x64 + {1131558A-9986-4F4B-A13F-8B7F4C8438BF}.Debug|x64.Build.0 = Debug|x64 + {1131558A-9986-4F4B-A13F-8B7F4C8438BF}.Release|Win32.ActiveCfg = Release|Win32 + {1131558A-9986-4F4B-A13F-8B7F4C8438BF}.Release|Win32.Build.0 = Release|Win32 + {1131558A-9986-4F4B-A13F-8B7F4C8438BF}.Release|x64.ActiveCfg = Release|x64 + {1131558A-9986-4F4B-A13F-8B7F4C8438BF}.Release|x64.Build.0 = Release|x64 + {71973A8E-103D-4FB7-951F-55E35E7F60FA}.Debug|Win32.ActiveCfg = Debug|Win32 + {71973A8E-103D-4FB7-951F-55E35E7F60FA}.Debug|Win32.Build.0 = Debug|Win32 + {71973A8E-103D-4FB7-951F-55E35E7F60FA}.Debug|x64.ActiveCfg = Debug|x64 + {71973A8E-103D-4FB7-951F-55E35E7F60FA}.Debug|x64.Build.0 = Debug|x64 + {71973A8E-103D-4FB7-951F-55E35E7F60FA}.Release|Win32.ActiveCfg = Release|Win32 + {71973A8E-103D-4FB7-951F-55E35E7F60FA}.Release|Win32.Build.0 = Release|Win32 + {71973A8E-103D-4FB7-951F-55E35E7F60FA}.Release|x64.ActiveCfg = Release|x64 + {71973A8E-103D-4FB7-951F-55E35E7F60FA}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/third-party/openh264/src/codec/build/win32/dec/decConsole.vcproj b/third-party/openh264/src/codec/build/win32/dec/decConsole.vcproj new file mode 100644 index 0000000000..2544cd4134 --- /dev/null +++ b/third-party/openh264/src/codec/build/win32/dec/decConsole.vcproj @@ -0,0 +1,389 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/third-party/openh264/src/codec/build/win32/enc/WelsEncCore.vcproj b/third-party/openh264/src/codec/build/win32/enc/WelsEncCore.vcproj new file mode 100644 index 0000000000..b30272d74d --- /dev/null +++ b/third-party/openh264/src/codec/build/win32/enc/WelsEncCore.vcproj @@ -0,0 +1,1498 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/third-party/openh264/src/codec/build/win32/enc/WelsEncPlus.vcproj b/third-party/openh264/src/codec/build/win32/enc/WelsEncPlus.vcproj new file mode 100644 index 0000000000..ab769557bf --- /dev/null +++ b/third-party/openh264/src/codec/build/win32/enc/WelsEncPlus.vcproj @@ -0,0 +1,405 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/third-party/openh264/src/codec/build/win32/enc/WelsEncoder.sln b/third-party/openh264/src/codec/build/win32/enc/WelsEncoder.sln new file mode 100644 index 0000000000..b75cb695ee --- /dev/null +++ b/third-party/openh264/src/codec/build/win32/enc/WelsEncoder.sln @@ -0,0 +1,66 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WelsEncCore", "WelsEncCore.vcproj", "{59208004-1774-4816-AC24-31FF44C324B4}" + ProjectSection(ProjectDependencies) = postProject + {E8DFAFA1-8DAC-4127-8D27-FBD5819EE562} = {E8DFAFA1-8DAC-4127-8D27-FBD5819EE562} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WelsEncPlus", "WelsEncPlus.vcproj", "{1E7B4E9A-986E-4167-8C70-6E4F60EAEE7F}" + ProjectSection(ProjectDependencies) = postProject + {59208004-1774-4816-AC24-31FF44C324B4} = {59208004-1774-4816-AC24-31FF44C324B4} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "encConsole", "encConsole.vcproj", "{8509E2A8-2CBD-49E2-B564-3EFF1E927459}" + ProjectSection(ProjectDependencies) = postProject + {1E7B4E9A-986E-4167-8C70-6E4F60EAEE7F} = {1E7B4E9A-986E-4167-8C70-6E4F60EAEE7F} + {E8DFAFA1-8DAC-4127-8D27-FBD5819EE562} = {E8DFAFA1-8DAC-4127-8D27-FBD5819EE562} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WelsVP", "..\..\..\processing\build\win32\WelsVP.vcproj", "{E8DFAFA1-8DAC-4127-8D27-FBD5819EE562}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {59208004-1774-4816-AC24-31FF44C324B4}.Debug|Win32.ActiveCfg = Debug|Win32 + {59208004-1774-4816-AC24-31FF44C324B4}.Debug|Win32.Build.0 = Debug|Win32 + {59208004-1774-4816-AC24-31FF44C324B4}.Debug|x64.ActiveCfg = Debug|x64 + {59208004-1774-4816-AC24-31FF44C324B4}.Debug|x64.Build.0 = Debug|x64 + {59208004-1774-4816-AC24-31FF44C324B4}.Release|Win32.ActiveCfg = Release|Win32 + {59208004-1774-4816-AC24-31FF44C324B4}.Release|Win32.Build.0 = Release|Win32 + {59208004-1774-4816-AC24-31FF44C324B4}.Release|x64.ActiveCfg = Release|x64 + {59208004-1774-4816-AC24-31FF44C324B4}.Release|x64.Build.0 = Release|x64 + {1E7B4E9A-986E-4167-8C70-6E4F60EAEE7F}.Debug|Win32.ActiveCfg = Debug|Win32 + {1E7B4E9A-986E-4167-8C70-6E4F60EAEE7F}.Debug|Win32.Build.0 = Debug|Win32 + {1E7B4E9A-986E-4167-8C70-6E4F60EAEE7F}.Debug|x64.ActiveCfg = Debug|x64 + {1E7B4E9A-986E-4167-8C70-6E4F60EAEE7F}.Debug|x64.Build.0 = Debug|x64 + {1E7B4E9A-986E-4167-8C70-6E4F60EAEE7F}.Release|Win32.ActiveCfg = Release|Win32 + {1E7B4E9A-986E-4167-8C70-6E4F60EAEE7F}.Release|Win32.Build.0 = Release|Win32 + {1E7B4E9A-986E-4167-8C70-6E4F60EAEE7F}.Release|x64.ActiveCfg = Release|x64 + {1E7B4E9A-986E-4167-8C70-6E4F60EAEE7F}.Release|x64.Build.0 = Release|x64 + {8509E2A8-2CBD-49E2-B564-3EFF1E927459}.Debug|Win32.ActiveCfg = Debug|Win32 + {8509E2A8-2CBD-49E2-B564-3EFF1E927459}.Debug|Win32.Build.0 = Debug|Win32 + {8509E2A8-2CBD-49E2-B564-3EFF1E927459}.Debug|x64.ActiveCfg = Debug|x64 + {8509E2A8-2CBD-49E2-B564-3EFF1E927459}.Debug|x64.Build.0 = Debug|x64 + {8509E2A8-2CBD-49E2-B564-3EFF1E927459}.Release|Win32.ActiveCfg = Release|Win32 + {8509E2A8-2CBD-49E2-B564-3EFF1E927459}.Release|Win32.Build.0 = Release|Win32 + {8509E2A8-2CBD-49E2-B564-3EFF1E927459}.Release|x64.ActiveCfg = Release|x64 + {8509E2A8-2CBD-49E2-B564-3EFF1E927459}.Release|x64.Build.0 = Release|x64 + {E8DFAFA1-8DAC-4127-8D27-FBD5819EE562}.Debug|Win32.ActiveCfg = Debug|Win32 + {E8DFAFA1-8DAC-4127-8D27-FBD5819EE562}.Debug|Win32.Build.0 = Debug|Win32 + {E8DFAFA1-8DAC-4127-8D27-FBD5819EE562}.Debug|x64.ActiveCfg = Debug|x64 + {E8DFAFA1-8DAC-4127-8D27-FBD5819EE562}.Debug|x64.Build.0 = Debug|x64 + {E8DFAFA1-8DAC-4127-8D27-FBD5819EE562}.Release|Win32.ActiveCfg = Release|Win32 + {E8DFAFA1-8DAC-4127-8D27-FBD5819EE562}.Release|Win32.Build.0 = Release|Win32 + {E8DFAFA1-8DAC-4127-8D27-FBD5819EE562}.Release|x64.ActiveCfg = Release|x64 + {E8DFAFA1-8DAC-4127-8D27-FBD5819EE562}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/third-party/openh264/src/codec/build/win32/enc/encConsole.vcproj b/third-party/openh264/src/codec/build/win32/enc/encConsole.vcproj new file mode 100644 index 0000000000..4714a24e45 --- /dev/null +++ b/third-party/openh264/src/codec/build/win32/enc/encConsole.vcproj @@ -0,0 +1,381 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/third-party/openh264/src/codec/build/windowsphone/.gitignore b/third-party/openh264/src/codec/build/windowsphone/.gitignore new file mode 100644 index 0000000000..9cb17a9bda --- /dev/null +++ b/third-party/openh264/src/codec/build/windowsphone/.gitignore @@ -0,0 +1,29 @@ +# Files generated by Visual Studio 2008 +*.user +*.ncb +*.suo +*.opensdf + +Win32 +x64 +ARM +Debug +Release + +# Files generated by upgrading the project files +Backup +Generated Files +UpgradeLog.htm + +# Files generated by Visual Studio 2013 +*.sdf +ipch +Draft + +# Files used in App +Bin +obj +res +*.dll +*.yuv +*.264 diff --git a/third-party/openh264/src/codec/build/windowsphone/all/CodecApp.sln b/third-party/openh264/src/codec/build/windowsphone/all/CodecApp.sln new file mode 100644 index 0000000000..3543986e35 --- /dev/null +++ b/third-party/openh264/src/codec/build/windowsphone/all/CodecApp.sln @@ -0,0 +1,76 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.31101.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodecApp", "CodecApp\CodecApp.csproj", "{5424CF29-908E-417E-93F3-F1CD81E5372C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CodecRTComponent", "CodecRTComponent.vcxproj", "{FE5BF241-F4EA-4B94-B36A-23511E5908EC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|ARM = Debug|ARM + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|ARM = Release|ARM + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Debug|ARM.ActiveCfg = Debug|ARM + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Debug|ARM.Build.0 = Debug|ARM + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Debug|ARM.Deploy.0 = Debug|ARM + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Debug|Mixed Platforms.Deploy.0 = Debug|x86 + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Debug|Win32.ActiveCfg = Debug|x86 + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Debug|Win32.Build.0 = Debug|x86 + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Debug|Win32.Deploy.0 = Debug|x86 + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Debug|x86.ActiveCfg = Debug|x86 + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Debug|x86.Build.0 = Debug|x86 + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Debug|x86.Deploy.0 = Debug|x86 + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Release|Any CPU.Build.0 = Release|Any CPU + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Release|Any CPU.Deploy.0 = Release|Any CPU + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Release|ARM.ActiveCfg = Release|ARM + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Release|ARM.Build.0 = Release|ARM + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Release|ARM.Deploy.0 = Release|ARM + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Release|Mixed Platforms.Build.0 = Release|x86 + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Release|Mixed Platforms.Deploy.0 = Release|x86 + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Release|Win32.ActiveCfg = Release|x86 + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Release|Win32.Build.0 = Release|x86 + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Release|Win32.Deploy.0 = Release|x86 + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Release|x86.ActiveCfg = Release|x86 + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Release|x86.Build.0 = Release|x86 + {5424CF29-908E-417E-93F3-F1CD81E5372C}.Release|x86.Deploy.0 = Release|x86 + {FE5BF241-F4EA-4B94-B36A-23511E5908EC}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {FE5BF241-F4EA-4B94-B36A-23511E5908EC}.Debug|ARM.ActiveCfg = Debug|ARM + {FE5BF241-F4EA-4B94-B36A-23511E5908EC}.Debug|ARM.Build.0 = Debug|ARM + {FE5BF241-F4EA-4B94-B36A-23511E5908EC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {FE5BF241-F4EA-4B94-B36A-23511E5908EC}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {FE5BF241-F4EA-4B94-B36A-23511E5908EC}.Debug|Win32.ActiveCfg = Debug|Win32 + {FE5BF241-F4EA-4B94-B36A-23511E5908EC}.Debug|Win32.Build.0 = Debug|Win32 + {FE5BF241-F4EA-4B94-B36A-23511E5908EC}.Debug|x86.ActiveCfg = Debug|Win32 + {FE5BF241-F4EA-4B94-B36A-23511E5908EC}.Debug|x86.Build.0 = Debug|Win32 + {FE5BF241-F4EA-4B94-B36A-23511E5908EC}.Release|Any CPU.ActiveCfg = Release|Win32 + {FE5BF241-F4EA-4B94-B36A-23511E5908EC}.Release|ARM.ActiveCfg = Release|ARM + {FE5BF241-F4EA-4B94-B36A-23511E5908EC}.Release|ARM.Build.0 = Release|ARM + {FE5BF241-F4EA-4B94-B36A-23511E5908EC}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {FE5BF241-F4EA-4B94-B36A-23511E5908EC}.Release|Mixed Platforms.Build.0 = Release|Win32 + {FE5BF241-F4EA-4B94-B36A-23511E5908EC}.Release|Win32.ActiveCfg = Release|Win32 + {FE5BF241-F4EA-4B94-B36A-23511E5908EC}.Release|Win32.Build.0 = Release|Win32 + {FE5BF241-F4EA-4B94-B36A-23511E5908EC}.Release|x86.ActiveCfg = Release|Win32 + {FE5BF241-F4EA-4B94-B36A-23511E5908EC}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/App.xaml b/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/App.xaml new file mode 100644 index 0000000000..d1508a95bb --- /dev/null +++ b/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/App.xaml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/App.xaml.cs b/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/App.xaml.cs new file mode 100644 index 0000000000..97c1852c9b --- /dev/null +++ b/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/App.xaml.cs @@ -0,0 +1,223 @@ +using System; +using System.Diagnostics; +using System.Resources; +using System.Windows; +using System.Windows.Markup; +using System.Windows.Navigation; +using Microsoft.Phone.Controls; +using Microsoft.Phone.Shell; +using CodecApp.Resources; + +namespace CodecApp +{ + public partial class App : Application + { + /// + /// Provides easy access to the root frame of the Phone Application. + /// + /// The root frame of the Phone Application. + public static PhoneApplicationFrame RootFrame { get; private set; } + + /// + /// Constructor for the Application object. + /// + public App() + { + // Global handler for uncaught exceptions. + UnhandledException += Application_UnhandledException; + + // Standard XAML initialization + InitializeComponent(); + + // Phone-specific initialization + InitializePhoneApplication(); + + // Language display initialization + InitializeLanguage(); + + // Show graphics profiling information while debugging. + if (Debugger.IsAttached) + { + // Display the current frame rate counters. + Application.Current.Host.Settings.EnableFrameRateCounter = true; + + // Show the areas of the app that are being redrawn in each frame. + //Application.Current.Host.Settings.EnableRedrawRegions = true; + + // Enable non-production analysis visualization mode, + // which shows areas of a page that are handed off to GPU with a colored overlay. + //Application.Current.Host.Settings.EnableCacheVisualization = true; + + // Prevent the screen from turning off while under the debugger by disabling + // the application's idle detection. + // Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run + // and consume battery power when the user is not using the phone. + PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled; + } + + } + + // Code to execute when the application is launching (eg, from Start) + // This code will not execute when the application is reactivated + private void Application_Launching(object sender, LaunchingEventArgs e) + { + } + + // Code to execute when the application is activated (brought to foreground) + // This code will not execute when the application is first launched + private void Application_Activated(object sender, ActivatedEventArgs e) + { + } + + // Code to execute when the application is deactivated (sent to background) + // This code will not execute when the application is closing + private void Application_Deactivated(object sender, DeactivatedEventArgs e) + { + } + + // Code to execute when the application is closing (eg, user hit Back) + // This code will not execute when the application is deactivated + private void Application_Closing(object sender, ClosingEventArgs e) + { + } + + // Code to execute if a navigation fails + private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e) + { + if (Debugger.IsAttached) + { + // A navigation has failed; break into the debugger + Debugger.Break(); + } + } + + // Code to execute on Unhandled Exceptions + private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) + { + if (Debugger.IsAttached) + { + // An unhandled exception has occurred; break into the debugger + Debugger.Break(); + } + } + + #region Phone application initialization + + // Avoid double-initialization + private bool phoneApplicationInitialized = false; + + // Do not add any additional code to this method + private void InitializePhoneApplication() + { + if (phoneApplicationInitialized) + return; + + // Create the frame but don't set it as RootVisual yet; this allows the splash + // screen to remain active until the application is ready to render. + RootFrame = new PhoneApplicationFrame(); + RootFrame.Navigated += CompleteInitializePhoneApplication; + + // Handle navigation failures + RootFrame.NavigationFailed += RootFrame_NavigationFailed; + + // Handle reset requests for clearing the backstack + RootFrame.Navigated += CheckForResetNavigation; + + // Ensure we don't initialize again + phoneApplicationInitialized = true; + } + + // Do not add any additional code to this method + private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e) + { + // Set the root visual to allow the application to render + if (RootVisual != RootFrame) + RootVisual = RootFrame; + + // Remove this handler since it is no longer needed + RootFrame.Navigated -= CompleteInitializePhoneApplication; + } + + private void CheckForResetNavigation(object sender, NavigationEventArgs e) + { + // If the app has received a 'reset' navigation, then we need to check + // on the next navigation to see if the page stack should be reset + if (e.NavigationMode == NavigationMode.Reset) + RootFrame.Navigated += ClearBackStackAfterReset; + } + + private void ClearBackStackAfterReset(object sender, NavigationEventArgs e) + { + // Unregister the event so it doesn't get called again + RootFrame.Navigated -= ClearBackStackAfterReset; + + // Only clear the stack for 'new' (forward) and 'refresh' navigations + if (e.NavigationMode != NavigationMode.New && e.NavigationMode != NavigationMode.Refresh) + return; + + // For UI consistency, clear the entire page stack + while (RootFrame.RemoveBackEntry() != null) + { + ; // do nothing + } + } + + #endregion + + // Initialize the app's font and flow direction as defined in its localized resource strings. + // + // To ensure that the font of your application is aligned with its supported languages and that the + // FlowDirection for each of those languages follows its traditional direction, ResourceLanguage + // and ResourceFlowDirection should be initialized in each resx file to match these values with that + // file's culture. For example: + // + // AppResources.es-ES.resx + // ResourceLanguage's value should be "es-ES" + // ResourceFlowDirection's value should be "LeftToRight" + // + // AppResources.ar-SA.resx + // ResourceLanguage's value should be "ar-SA" + // ResourceFlowDirection's value should be "RightToLeft" + // + // For more info on localizing Windows Phone apps see http://go.microsoft.com/fwlink/?LinkId=262072. + // + private void InitializeLanguage() + { + try + { + // Set the font to match the display language defined by the + // ResourceLanguage resource string for each supported language. + // + // Fall back to the font of the neutral language if the Display + // language of the phone is not supported. + // + // If a compiler error is hit then ResourceLanguage is missing from + // the resource file. + RootFrame.Language = XmlLanguage.GetLanguage(AppResources.ResourceLanguage); + + // Set the FlowDirection of all elements under the root frame based + // on the ResourceFlowDirection resource string for each + // supported language. + // + // If a compiler error is hit then ResourceFlowDirection is missing from + // the resource file. + FlowDirection flow = (FlowDirection)Enum.Parse(typeof(FlowDirection), AppResources.ResourceFlowDirection); + RootFrame.FlowDirection = flow; + } + catch + { + // If an exception is caught here it is most likely due to either + // ResourceLangauge not being correctly set to a supported language + // code or ResourceFlowDirection is set to a value other than LeftToRight + // or RightToLeft. + + if (Debugger.IsAttached) + { + Debugger.Break(); + } + + throw; + } + } + } +} \ No newline at end of file diff --git a/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/AlignmentGrid.png b/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/AlignmentGrid.png new file mode 100644 index 0000000000000000000000000000000000000000..f7d2e97804e451530960b57429a2b0a26c86f5d7 GIT binary patch literal 9042 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 WvY8ND=rdIS0000dy zva_p?c@%vdyo@Znx^gmj9*9m|P|}HEM^{bMIX;V#D8a|e$g-O&CfPNf#Zys&$J5KQ zldC0zj&UX?MG1~hE6Xmfl#IH?xtJ9tI6j>$JGe^nv{Sqji=qUtP9w|Ru8>T2iT7fa zD8cKu%W|hzC$k-5MywVk7F8wBj<_RsixOPvCd({GCY!V4o;V~*aIIXH8IDSJWyW1`Sd`#u znJn)*A~}+kl!y{sulTB!emf#Vl!+2V>@Lb#Ur7#0lE@LIq69IU3v@B1s}obP*+pTNL1#UnOOdBr-)eQG&=x5q|bjQYuLzS9BF6h#d*V&pqXm zB(gxYZ-j;|(%WFteAh~jElLEd#lawID`EQ)JAzH%j*aaSA?#g%f&2D2QQ zY|f5*Vz(&9yGb^f>F8wBj<_RsiDI<7WP{mWk*wYo^J23o#$G1b;0~`!R_%;gu}Kso zFPCg^msci>yJJqQ7RBqgNjA9CtCQIdF(X!q;?>(F8{F**$z+#!FBU~{d>Y9HJGe^n zv{Sqjv!XaUon(VuTqzlKi*qq4ipSGRHrUD4l0nBf6Hi6)@$`}nc5}rfyT-E^iQ?B~ zBpdALs);(sXEAsHmy>L;t1Bmi=SR_dE+g4sXICFHC3-o@2D@8f$lPD_qxgz`7Ps3U XE*G}&Ucr8300000NkvXXu0mjfzDs=J literal 0 HcmV?d00001 diff --git a/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/Logo.png b/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f2e1f40a079c5e083a6988d33c3b07c1bf829038 GIT binary patch literal 1679 zcmYjSe>B^N7SHQR_tMZVBw_7TNhE?W;q|p^qdn@Il9*Whs(50giIlA-SxU9a5#{9v zT9U=2adP@)4W$}vMx$E9(FE}r&yQ7$S{Z3kTdP&wzB}igv-iin_k7MhpL6d$_nyy{ zeaZ~ojogQX!C<@TVL%iV)BiNYdytQDH&sFbE(neYhQXSz*u72J3E{nBTD&;=%T#f8 ziii&j=6%WKyV1|42>4O_6kd+d%%{R&@43@~;F$AC&(wAq_>WN`i)SwW7&Pjdrsg%< zHShmvTX~1K^0)5EnKy>btI6-)R@--D4kDt*+^Fc^R&{2AVe8Y(friI*UJZdZ>dpLx zq_OQDuLiX3h<9X0*JJ60wqVZ)O?O$%GElwMdLBhv6Izzx#!|V`HvPEoHi+nAvP)C+ zth1sYn{_fhh;WTymnK)T(q8=MmQGO#;YhY;@17dV!US`h*@>mCrCW~d%5ugMBaOda zY-V7(SG-o-Y~-8aNm)w=x!;o{gy{b=Cu3vOozJW*CL#+yaHFx*P*dm49kqNvK3Q9&|8-RX@O8auaRtZ z#1r(xPrsr?L-{-{*@~+1h)8`g1$K}mHOEgnwe}3W(HLXO9Ah zSnyN!J_`coX_iy>e7e}0Fd2>uCBS}^)1Kb-@ zwRmXhXdfR$G?5`PE^0LB+A6kEj%#m&$WoG-P?h^bdm^TLoX=Z-F1?yqMeuT$&%QzC zr!%&*juw*ea=J33QI%Pv&*SIWuGwUI4gmnz)8)WmC4m4G(Z z-c#l^smgt_a0#qLJ54mSp@a6-T zHy1s7q2hkU&NS3^(qLq<3ebL*dzmEJyl37Q=eTaqm3x;6PzT(RBa6DOWw)2T`7Uoa zl&^I%pWp@kiOr8)3B6`f2Bnc?y5u7no{tSskp)g6@)Kj@J2s(KdLM|AC|Z)~VIp=4Jb-+{5%NVHx!xTC%e ztLPcpoF>J?*Z(vSafkPk12&KnDcahdsihC-8@8@cF}moth8hKCo0nfC8R#TYym)6&bBcEW(w&Lk_ zTCbDg%<2(=oCs!)^@k_SenH`irW=n%YWMj_Y(rrkZfaciN*)3l z_>2oXj8aC$(9C(=q%U$nUwg=)tRqg1mA{g5K!cc(u*)cuSB!IV?oN`C12<~_lA#FD zz++7BGRiF#Kg{G*$NM60>uU=Qt#y7mQ`aY?vEW)d<1dw4kHfe|(*I8dF-4)#QTR!I zjD{*+S)8vYt)tVFWfkN9DPsT)9+P}w*Awa+46b5^ZVf1uxe~?mP@SX@jgl-E{Yfq4OhbH&x6zg>aU{6OBjs^gV!4O@Rt+CCY9q|kQvU=G6be}DJ> XgEka!=>CgG&_{vMX-uH$M6%=$sBH{F literal 0 HcmV?d00001 diff --git a/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/SplashScreen.png b/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/SplashScreen.png new file mode 100644 index 0000000000000000000000000000000000000000..4b9072882aa6910bacba3505b85d0ca698bf4dfa GIT binary patch literal 18843 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 aEZ>cNC*sI^Jb?cmK%s$=0S$X%F8&`q%Kr}l literal 0 HcmV?d00001 diff --git a/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/SquareTile71x71.png b/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/SquareTile71x71.png new file mode 100644 index 0000000000000000000000000000000000000000..4754af3a7c1bd185524ee360a1c123377635319c GIT binary patch literal 2811 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 literal 0 HcmV?d00001 diff --git a/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/StoreLogo.png b/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..12c5f4f65546d138e9d16b60b395c43d4cec24be GIT binary patch literal 1375 zcmXX`Yfuwc6y7RDgwk3On}mqgW$ZZAu{MSXQV|W|(P9)W1qBs`BmySsB9w$!Lbdf# zlVEs^#3*!znd*#!KWk0h|xf%_wMpzcfUP*zVAHlIeT{Z zu2_FxnlFMN{_%0_B=D5L%f}ns!?VJ=!NW@sofwTEjir8b8SjI4YJN;g{$4RZzc3?@ zheT(IGkI&`g&6`~5-%f5iap>(0**7D9lcL-a9n*rg@!L%{Kj*kx3(*(Wo1X!1?%gw ziuD4-d3Td+cYl7G|VU48-=qcXYXyzu|+ym)+14-;Wk>hNv2gN zOGf%v8$G9a^g&@vNC{V-((cqN&v-QiUS#H_MG1F?lsrq)aa5z~#4}z)ZG0uYqxQhE zr7h>Q%&Fs+quWD}ji&vmW%||lS+AiOJtuggQX2q1%X-YXu_$-#dlKhmW}bYauPP2X zIM+$LRZ}Sb8jy;cIK=~>i4p(|ZsZhqT@l4Yc#~tAC})K%FZslhf*yMF()uyb64a?J zR-DgXG&vlYYr|*%3{)dV$y3@}-B)5ZU=08P@q`s-RamE%M+~ont^qw}`Kkgxn8Es7 zTO(@?5UrWf#s<&-0BzZKFdJ384j5&wMAT9g3N(8kiYZci5U8ZBx;}F1l^#aFosQXj z#A|_LtfAYyXJ7}2sLK0Ajo$tVltjR=L|GZgf< zgrJ7A?XXRpyBsL$loIn89tOksa3YSJ!nD9Oa|KEdduT`m{7q$yk1l2RtplQzPU`8d zFi|;(q!=@w6wvjsO`L-JFLWv^Y!hldR`Q6{8k?o8b&~=oxgR#QlJFe&1KnRFEHCul zPs&zxhVHB*Wgm@c?k1D6{MY91uaUA0x3wg+l!%~fX4(EDBLvPwA4Im% zVrgwOm)vMLA;U%2BfbPlSEaAkkKC49-PT92T+O`D{4^GJT33|SQb{025#R7FX_N9A z0!f=xaP=vN@N?bY9;*BXRLY-xkdaK)!16_<(a9779kqPgR0_X>J|G%`i$+XMrV^+& z93P^Rw(#k{pA&kulou@;0-=6bk`U64B9<+ zD&Y|ef5%v8F$11)w*nV&+;D)f3Qb49V#XW7pFwdZ16E|F(tU~BUk2b@meOtH_EkXGNz*TEr%Bg7K5;pSTx7$-B0sLfI%Feu zIM&ygj!4TuH6Zm}$3|uR#UNB;D&FoKTM3(>46>lwWlM){?!((({}aYu)a%O>9hY0r z#341F2E|A-$Z|JsKPF~$`%YZNrpM6oSv;62+Ey4Vidx~fck#wu{>II6&)kxrTM6d$ TC9Q$r4~fLb>|)pNIDF!NbGB?N literal 0 HcmV?d00001 diff --git a/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/Tiles/FlipCycleTileLarge.png b/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/Tiles/FlipCycleTileLarge.png new file mode 100644 index 0000000000000000000000000000000000000000..e0c59ac014604b803533ef2debb7c10874a2f607 GIT binary patch literal 9930 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 IP1{HR1(GMkF8}}l literal 0 HcmV?d00001 diff --git a/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/Tiles/FlipCycleTileMedium.png b/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/Tiles/FlipCycleTileMedium.png new file mode 100644 index 0000000000000000000000000000000000000000..e93b89d600641c9d5b05f94493a9fde6afa850e8 GIT binary patch literal 9070 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 literal 0 HcmV?d00001 diff --git a/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/Tiles/IconicTileSmall.png b/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/Assets/Tiles/IconicTileSmall.png new file mode 100644 index 0000000000000000000000000000000000000000..d4b5ede1b567fd4b90505217330edf7de0474432 GIT binary patch literal 3724 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 + + + Debug + AnyCPU + 10.0.20506 + 2.0 + {5424CF29-908E-417E-93F3-F1CD81E5372C} + {C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + CodecApp + CodecApp + WindowsPhone + v8.1 + + + true + + + true + true + CodecApp_$(Configuration)_$(Platform).xap + Properties\AppManifest.xml + CodecApp.App + true + 12.0 + true + + en-US + + + true + full + false + Bin\Debug + DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + pdbonly + true + Bin\Release + TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + true + full + false + Bin\x86\Debug + DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + + pdbonly + true + Bin\x86\Release + TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + + true + full + false + Bin\ARM\Debug + DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + + pdbonly + true + Bin\ARM\Release + TRACE;SILVERLIGHT;WINDOWS_PHONE + true + true + prompt + 4 + + + + + App.xaml + + + + MainPage.xaml + + + + True + True + AppResources.resx + + + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + + + + + + + + + + Always + + + Always + + + Always + + + Always + + + Always + + + Designer + + + + Designer + + + Always + + + Always + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + PublicResXFileCodeGenerator + AppResources.Designer.cs + + + + + {fe5bf241-f4ea-4b94-b36a-23511e5908ec} + CodecRTComponent + + + + + + + + copy /y ..\..\..\..\..\..\..\..\bin\$(Platform)\$(Configuration)\openh264.dll ..\..\..\ +copy /y ..\..\..\..\..\..\..\..\res\*.yuv ..\..\..\ +copy /y ..\..\..\..\..\..\..\..\res\B*.264 ..\..\..\ + + + \ No newline at end of file diff --git a/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/LocalizedStrings.cs b/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/LocalizedStrings.cs new file mode 100644 index 0000000000..e18e5b6786 --- /dev/null +++ b/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/LocalizedStrings.cs @@ -0,0 +1,14 @@ +using CodecApp.Resources; + +namespace CodecApp +{ + /// + /// Provides access to string resources. + /// + public class LocalizedStrings + { + private static AppResources _localizedResources = new AppResources(); + + public AppResources LocalizedResources { get { return _localizedResources; } } + } +} \ No newline at end of file diff --git a/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/MainPage.xaml b/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/MainPage.xaml new file mode 100644 index 0000000000..46191fa81b --- /dev/null +++ b/third-party/openh264/src/codec/build/windowsphone/all/CodecApp/MainPage.xaml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + +