From caa04039bbd0c9ce10a7f49e4af90dfab07d819f Mon Sep 17 00:00:00 2001 From: xuzhangchi Date: Thu, 15 May 2025 20:48:42 +0800 Subject: [PATCH 01/20] =?UTF-8?q?=E5=BD=95=E5=B1=8F=E6=A1=86=E6=9E=B6?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=20sample=20=E5=88=9D=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: xuzhangchi --- .../ScreenCaptureSample/.gitignore | 12 ++++ .../ScreenCaptureSample/AppScope/app.json5 | 10 ++++ .../resources/base/element/string.json | 8 +++ .../resources/base/media/background.png | Bin 0 -> 91942 bytes .../resources/base/media/foreground.png | Bin 0 -> 8805 bytes .../resources/base/media/layered_image.json | 7 +++ .../ScreenCaptureSample/build-profile.json5 | 56 ++++++++++++++++++ .../ScreenCaptureSample/code-linter.json5 | 32 ++++++++++ .../ScreenCaptureSample/entry/.gitignore | 6 ++ .../entry/build-profile.json5 | 39 ++++++++++++ .../ScreenCaptureSample/entry/hvigorfile.ts | 6 ++ .../entry/obfuscation-rules.txt | 23 +++++++ .../entry/oh-package-lock.json5 | 18 ++++++ .../entry/oh-package.json5 | 11 ++++ .../entry/src/main/cpp/CMakeLists.txt | 15 +++++ .../entry/src/main/cpp/napi_init.cpp | 55 +++++++++++++++++ .../src/main/cpp/types/libentry/Index.d.ts | 1 + .../main/cpp/types/libentry/oh-package.json5 | 6 ++ .../main/ets/entryability/EntryAbility.ets | 44 ++++++++++++++ .../entrybackupability/EntryBackupAbility.ets | 16 +++++ .../entry/src/main/ets/pages/Index.ets | 26 ++++++++ .../entry/src/main/module.json5 | 52 ++++++++++++++++ .../main/resources/base/element/color.json | 8 +++ .../main/resources/base/element/float.json | 8 +++ .../main/resources/base/element/string.json | 16 +++++ .../main/resources/base/media/background.png | Bin 0 -> 91942 bytes .../main/resources/base/media/foreground.png | Bin 0 -> 8805 bytes .../resources/base/media/layered_image.json | 7 +++ .../main/resources/base/media/startIcon.png | Bin 0 -> 20093 bytes .../resources/base/profile/backup_config.json | 3 + .../resources/base/profile/main_pages.json | 5 ++ .../main/resources/dark/element/color.json | 8 +++ .../entry/src/mock/Libentry.mock.ets | 7 +++ .../entry/src/mock/mock-config.json5 | 5 ++ .../src/ohosTest/ets/test/Ability.test.ets | 35 +++++++++++ .../entry/src/ohosTest/ets/test/List.test.ets | 5 ++ .../entry/src/ohosTest/module.json5 | 13 ++++ .../entry/src/test/List.test.ets | 5 ++ .../entry/src/test/LocalUnit.test.ets | 33 +++++++++++ .../hvigor/hvigor-config.json5 | 22 +++++++ .../ScreenCaptureSample/hvigorfile.ts | 6 ++ .../ScreenCaptureSample/oh-package-lock.json5 | 27 +++++++++ .../ScreenCaptureSample/oh-package.json5 | 10 ++++ 43 files changed, 666 insertions(+) create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/.gitignore create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/AppScope/app.json5 create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/AppScope/resources/base/element/string.json create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/AppScope/resources/base/media/background.png create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/AppScope/resources/base/media/foreground.png create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/AppScope/resources/base/media/layered_image.json create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/build-profile.json5 create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/code-linter.json5 create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/.gitignore create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/build-profile.json5 create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/hvigorfile.ts create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/obfuscation-rules.txt create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/oh-package-lock.json5 create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/oh-package.json5 create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/CMakeLists.txt create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/types/libentry/Index.d.ts create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/types/libentry/oh-package.json5 create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Index.ets create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/module.json5 create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/element/color.json create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/element/float.json create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/element/string.json create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/media/background.png create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/media/foreground.png create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/media/layered_image.json create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/media/startIcon.png create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/profile/backup_config.json create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/profile/main_pages.json create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/dark/element/color.json create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/mock/Libentry.mock.ets create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/mock/mock-config.json5 create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/ets/test/Ability.test.ets create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/ets/test/List.test.ets create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/module.json5 create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/test/List.test.ets create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/test/LocalUnit.test.ets create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/hvigor/hvigor-config.json5 create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/hvigorfile.ts create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/oh-package-lock.json5 create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/oh-package.json5 diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/.gitignore b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/.gitignore new file mode 100644 index 0000000000..d2ff20141c --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/.gitignore @@ -0,0 +1,12 @@ +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +**/.test +/.appanalyzer \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/AppScope/app.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/AppScope/app.json5 new file mode 100644 index 0000000000..27274f3d61 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/AppScope/app.json5 @@ -0,0 +1,10 @@ +{ + "app": { + "bundleName": "com.example.screencapturesample", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:layered_image", + "label": "$string:app_name" + } +} diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/AppScope/resources/base/element/string.json b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/AppScope/resources/base/element/string.json new file mode 100644 index 0000000000..a0e0f994dc --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "ScreenCaptureSample" + } + ] +} diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/AppScope/resources/base/media/background.png b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/AppScope/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..923f2b3f27e915d6871871deea0420eb45ce102f GIT binary patch literal 91942 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 number; \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/types/libentry/oh-package.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/types/libentry/oh-package.json5 new file mode 100644 index 0000000000..ea410725a8 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/types/libentry/oh-package.json5 @@ -0,0 +1,6 @@ +{ + "name": "libentry.so", + "types": "./Index.d.ts", + "version": "1.0.0", + "description": "Please describe the basic information." +} \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 0000000000..508880af8c --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,44 @@ +import { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit'; +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { window } from '@kit.ArkUI'; + +const DOMAIN = 0x0000; + +export default class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { + this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET); + hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onCreate'); + } + + onDestroy(): void { + hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onDestroy'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + // Main window is created, set main page for this ability + hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); + + windowStage.loadContent('pages/Index', (err) => { + if (err.code) { + hilog.error(DOMAIN, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err)); + return; + } + hilog.info(DOMAIN, 'testTag', 'Succeeded in loading the content.'); + }); + } + + onWindowStageDestroy(): void { + // Main window is destroyed, release UI related resources + hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageDestroy'); + } + + onForeground(): void { + // Ability has brought to foreground + hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onForeground'); + } + + onBackground(): void { + // Ability has back to background + hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onBackground'); + } +} \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets new file mode 100644 index 0000000000..8e4de99282 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets @@ -0,0 +1,16 @@ +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { BackupExtensionAbility, BundleVersion } from '@kit.CoreFileKit'; + +const DOMAIN = 0x0000; + +export default class EntryBackupAbility extends BackupExtensionAbility { + async onBackup() { + hilog.info(DOMAIN, 'testTag', 'onBackup ok'); + await Promise.resolve(); + } + + async onRestore(bundleVersion: BundleVersion) { + hilog.info(DOMAIN, 'testTag', 'onRestore ok %{public}s', JSON.stringify(bundleVersion)); + await Promise.resolve(); + } +} \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Index.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Index.ets new file mode 100644 index 0000000000..0738f87946 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,26 @@ +import { hilog } from '@kit.PerformanceAnalysisKit'; +import testNapi from 'libentry.so'; + +const DOMAIN = 0x0000; + +@Entry +@Component +struct Index { + @State message: string = 'Hello World'; + + build() { + Row() { + Column() { + Text(this.message) + .fontSize($r('app.float.page_text_font_size')) + .fontWeight(FontWeight.Bold) + .onClick(() => { + this.message = 'Welcome'; + hilog.info(DOMAIN, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3)); + }) + } + .width('100%') + } + .height('100%') + } +} diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/module.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/module.json5 new file mode 100644 index 0000000000..a1cea8b6a4 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/module.json5 @@ -0,0 +1,52 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "phone", + "tablet", + "2in1" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:layered_image", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ], + "extensionAbilities": [ + { + "name": "EntryBackupAbility", + "srcEntry": "./ets/entrybackupability/EntryBackupAbility.ets", + "type": "backup", + "exported": false, + "metadata": [ + { + "name": "ohos.extension.backup", + "resource": "$profile:backup_config" + } + ], + } + ] + } +} \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/element/color.json b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/element/color.json new file mode 100644 index 0000000000..3c712962da --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/element/float.json b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/element/float.json new file mode 100644 index 0000000000..33ea22304f --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/element/float.json @@ -0,0 +1,8 @@ +{ + "float": [ + { + "name": "page_text_font_size", + "value": "50fp" + } + ] +} diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/element/string.json b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000000..f94595515a --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/media/background.png b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..923f2b3f27e915d6871871deea0420eb45ce102f GIT binary patch literal 91942 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

c)ijgxDm}8EsRXFt3h@+Ufr7@DN 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 literal 0 HcmV?d00001 diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/profile/backup_config.json b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 0000000000..78f40ae7c4 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/profile/main_pages.json b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 0000000000..1898d94f58 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/dark/element/color.json b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/dark/element/color.json new file mode 100644 index 0000000000..79b11c2747 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/dark/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#000000" + } + ] +} \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/mock/Libentry.mock.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/mock/Libentry.mock.ets new file mode 100644 index 0000000000..c2171716d0 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/mock/Libentry.mock.ets @@ -0,0 +1,7 @@ +const NativeMock: Record = { + 'add': (a: number, b: number) => { + return a + b; + }, +}; + +export default NativeMock; \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/mock/mock-config.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/mock/mock-config.json5 new file mode 100644 index 0000000000..6540976c9a --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/mock/mock-config.json5 @@ -0,0 +1,5 @@ +{ + "libentry.so": { + "source": "src/mock/Libentry.mock.ets" + } +} \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/ets/test/Ability.test.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 0000000000..85c78f6757 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,35 @@ +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }) + }) +} \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/ets/test/List.test.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 0000000000..794c7dc4ed --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,5 @@ +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); +} \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/module.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/module.json5 new file mode 100644 index 0000000000..55725a9299 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/module.json5 @@ -0,0 +1,13 @@ +{ + "module": { + "name": "entry_test", + "type": "feature", + "deviceTypes": [ + "phone", + "tablet", + "2in1" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/test/List.test.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/test/List.test.ets new file mode 100644 index 0000000000..bb5b5c3731 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/test/List.test.ets @@ -0,0 +1,5 @@ +import localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/test/LocalUnit.test.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/test/LocalUnit.test.ets new file mode 100644 index 0000000000..165fc1615e --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/test/LocalUnit.test.ets @@ -0,0 +1,33 @@ +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function localUnitTest() { + describe('localUnitTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); +} \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/hvigor/hvigor-config.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/hvigor/hvigor-config.json5 new file mode 100644 index 0000000000..5bebc97554 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/hvigor/hvigor-config.json5 @@ -0,0 +1,22 @@ +{ + "modelVersion": "5.0.5", + "dependencies": { + }, + "execution": { + // "analyze": "normal", /* Define the build analyze mode. Value: [ "normal" | "advanced" | false ]. Default: "normal" */ + // "daemon": true, /* Enable daemon compilation. Value: [ true | false ]. Default: true */ + // "incremental": true, /* Enable incremental compilation. Value: [ true | false ]. Default: true */ + // "parallel": true, /* Enable parallel compilation. Value: [ true | false ]. Default: true */ + // "typeCheck": false, /* Enable typeCheck. Value: [ true | false ]. Default: false */ + }, + "logging": { + // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */ + }, + "debugging": { + // "stacktrace": false /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */ + }, + "nodeOptions": { + // "maxOldSpaceSize": 8192 /* Enable nodeOptions maxOldSpaceSize compilation. Unit M. Used for the daemon process. Default: 8192*/ + // "exposeGC": true /* Enable to trigger garbage collection explicitly. Default: true*/ + } +} diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/hvigorfile.ts b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/hvigorfile.ts new file mode 100644 index 0000000000..f3cb9f1a87 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/hvigorfile.ts @@ -0,0 +1,6 @@ +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/oh-package-lock.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/oh-package-lock.json5 new file mode 100644 index 0000000000..c6f99f5c73 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/oh-package-lock.json5 @@ -0,0 +1,27 @@ +{ + "meta": { + "stableOrder": true + }, + "lockfileVersion": 3, + "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", + "specifiers": { + "@ohos/hamock@1.0.0": "@ohos/hamock@1.0.0", + "@ohos/hypium@1.0.21": "@ohos/hypium@1.0.21" + }, + "packages": { + "@ohos/hamock@1.0.0": { + "name": "@ohos/hamock", + "version": "1.0.0", + "integrity": "sha512-K6lDPYc6VkKe6ZBNQa9aoG+ZZMiwqfcR/7yAVFSUGIuOAhPvCJAo9+t1fZnpe0dBRBPxj2bxPPbKh69VuyAtDg==", + "resolved": "https://repo.harmonyos.com/ohpm/@ohos/hamock/-/hamock-1.0.0.har", + "registryType": "ohpm" + }, + "@ohos/hypium@1.0.21": { + "name": "@ohos/hypium", + "version": "1.0.21", + "integrity": "sha512-iyKGMXxE+9PpCkqEwu0VykN/7hNpb+QOeIuHwkmZnxOpI+dFZt6yhPB7k89EgV1MiSK/ieV/hMjr5Z2mWwRfMQ==", + "resolved": "https://repo.harmonyos.com/ohpm/@ohos/hypium/-/hypium-1.0.21.har", + "registryType": "ohpm" + } + } +} \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/oh-package.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/oh-package.json5 new file mode 100644 index 0000000000..a8aff0c5af --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/oh-package.json5 @@ -0,0 +1,10 @@ +{ + "modelVersion": "5.0.5", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + "@ohos/hypium": "1.0.21", + "@ohos/hamock": "1.0.0" + } +} -- Gitee From a0d102a8fe5bdbec5cc15f57c7f5523cf11efaf3 Mon Sep 17 00:00:00 2001 From: x00800313 Date: Sat, 17 May 2025 14:59:47 +0800 Subject: [PATCH 02/20] =?UTF-8?q?=E5=BD=95=E5=B1=8F=20sample=202.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: x00800313 --- .../entry/src/main/cpp/napi_init.cpp | 405 +++++++++++++++++- .../main/ets/entryability/EntryAbility.ets | 28 +- .../entry/src/main/ets/pages/Index.ets | 104 ++++- .../entry/src/main/ets/pages/Menu.ets | 92 ++++ .../entry/src/main/ets/pages/Scene1.ets | 65 +++ .../entry/src/main/ets/pages/Scene2.ets | 65 +++ .../entry/src/main/ets/pages/Scene3.ets | 65 +++ .../entry/src/main/ets/pages/Scene4.ets | 148 +++++++ 8 files changed, 932 insertions(+), 40 deletions(-) create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Menu.ets create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene1.ets create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene2.ets create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene3.ets create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene4.ets diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp index 8cd86c7e26..e63b315eac 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp @@ -1,38 +1,400 @@ -#include "napi/native_api.h" -#include "hilog/log.h" +#include "main.h" -static napi_value Add(napi_env env, napi_callback_info info) -{ - OH_LOG_INFO(LOG_APP, "xuzhangchi 1"); +using namespace std; +#define LOG_DOMAIN 0x3200 +#define LOG_TAG "MY_TAG" + +static napi_value Add(napi_env env, napi_callback_info info) { + size_t requireArgc = 2; size_t argc = 2; napi_value args[2] = {nullptr}; - OH_LOG_INFO(LOG_APP, "xuzhangchi 2"); - napi_get_cb_info(env, info, &argc, args , nullptr, nullptr); - OH_LOG_INFO(LOG_APP, "xuzhangchi 3"); + + napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); + napi_valuetype valuetype0; napi_typeof(env, args[0], &valuetype0); - OH_LOG_INFO(LOG_APP, "xuzhangchi 4"); + napi_valuetype valuetype1; napi_typeof(env, args[1], &valuetype1); - OH_LOG_INFO(LOG_APP, "xuzhangchi 5"); + double value0; napi_get_value_double(env, args[0], &value0); - OH_LOG_INFO(LOG_APP, "xuzhangchi 6"); + double value1; napi_get_value_double(env, args[1], &value1); - OH_LOG_INFO(LOG_APP, "xuzhangchi 7"); + napi_value sum; napi_create_double(env, value0 + value1, &sum); - OH_LOG_INFO(LOG_APP, "xuzhangchi 8"); return sum; +} + +void OpenFile(std::string filename_) { + snprintf(filename, sizeof(filename), "data/storage/el2/base/files/MIC_%s.pcm", filename_.c_str()); + micFile_ = fopen(filename, "w+"); + if (micFile_ == nullptr) { + // OH_LOG_ERROR(LOG_APP, "OpenFile micFile_ audio open failed. %{public}s", strerror(errno)); + } + snprintf(filename, sizeof(filename), "data/storage/el2/base/files/INNER_%s.pcm", filename_.c_str()); + innerFile_ = fopen(filename, "w+"); + if (innerFile_ == nullptr) { + // OH_LOG_ERROR(LOG_APP, "OpenFile innerFile_ audio open failed. %{public}s", strerror(errno)); + } + snprintf(filename, sizeof(filename), "data/storage/el2/base/files/VIDEO_%s.yuv", filename_.c_str()); + vFile_ = fopen(filename, "w+"); + if (vFile_ == nullptr) { + // OH_LOG_ERROR(LOG_APP, "OpenFile vFile video open failed. %{public}s", strerror(errno)); + } +} + +void CloseFile(void) { + if (micFile_ != nullptr) { + fclose(micFile_); + micFile_ = nullptr; + } + if (innerFile_ != nullptr) { + fclose(innerFile_); + innerFile_ = nullptr; + } + if (vFile_ != nullptr) { + fclose(vFile_); + vFile_ = nullptr; + } +} + +void SetConfig(OH_AVScreenCaptureConfig &config) { + int32_t width = 720; + int32_t height = 1280; + OH_AudioCaptureInfo micCapInfo = {.audioSampleRate = 48000, .audioChannels = 2, .audioSource = OH_MIC}; + OH_AudioCaptureInfo innerCapInfo = {.audioSampleRate = 48000, .audioChannels = 2, .audioSource = OH_ALL_PLAYBACK}; + OH_AudioEncInfo audioEncInfo = {.audioBitrate = 48000, .audioCodecformat = OH_AudioCodecFormat::OH_AAC_LC}; + OH_AudioInfo audioInfo = {.micCapInfo = micCapInfo, .innerCapInfo = innerCapInfo, .audioEncInfo = audioEncInfo}; + + OH_VideoCaptureInfo videoCapInfo = { + .videoFrameWidth = width, .videoFrameHeight = height, .videoSource = OH_VIDEO_SOURCE_SURFACE_RGBA}; + OH_VideoEncInfo videoEncInfo = { + .videoCodec = OH_VideoCodecFormat::OH_H264, .videoBitrate = 2000000, .videoFrameRate = 30}; + OH_VideoInfo videoInfo = {.videoCapInfo = videoCapInfo, .videoEncInfo = videoEncInfo}; + + config = { + .captureMode = OH_CAPTURE_HOME_SCREEN, + .dataType = OH_ORIGINAL_STREAM, + .audioInfo = audioInfo, + .videoInfo = videoInfo, + }; +} + +void OnError(OH_AVScreenCapture *capture, int32_t errorCode, void *userData) { + (void)capture; + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture OnError errorCode is %{public}d", errorCode); + (void)userData; +} + +void OnStateChange(struct OH_AVScreenCapture *capture, OH_AVScreenCaptureStateCode stateCode, void *userData) { + if (stateCode == OH_SCREEN_CAPTURE_STATE_STARTED) { + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture OnStateChange started"); + // ״̬ + // ѡ ¼ת + int32_t retRotation = OH_AVScreenCapture_SetCanvasRotation(capture, true); + } + if (stateCode == OH_SCREEN_CAPTURE_STATE_INTERRUPTED_BY_OTHER) { + // ״̬ + } + (void)userData; +} + + +void OnBufferAvailable(OH_AVScreenCapture *capture, OH_AVBuffer *buffer, OH_AVScreenCaptureBufferType bufferType, + int64_t timestamp, void *userData) { + if (m_isRunning) { + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture OnBufferAvailable bufferType is %{public}d", bufferType); + if (bufferType == OH_SCREEN_CAPTURE_BUFFERTYPE_VIDEO) { + // Ƶbuffer + OH_NativeBuffer *nativebuffer = OH_AVBuffer_GetNativeBuffer(buffer); + if (nativebuffer != nullptr) { + int bufferLen = OH_AVBuffer_GetCapacity(buffer); + OH_AVCodecBufferAttr info; + int32_t ret = OH_AVBuffer_GetBufferAttr(buffer, &info); + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture size %{public}d", info.size); + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture bufferLen %{public}d", bufferLen); + OH_NativeBuffer_Config config; + OH_NativeBuffer_GetConfig(nativebuffer, &config); + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture height %{public}d width %{public}d", config.height, + config.width); + // int32_t length = config.height * config.width * 4; + uint8_t *buf = OH_AVBuffer_GetAddr(buffer); + if (buf == nullptr) { + return; + } + fwrite(buf, 1, bufferLen, vFile_); + OH_NativeBuffer_Unreference(nativebuffer); + buffer = nullptr; + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture OnBufferAvailable inner audio"); + } + } else if (bufferType == OH_SCREEN_CAPTURE_BUFFERTYPE_AUDIO_INNER) { + // ¼buffer + int bufferLen = OH_AVBuffer_GetCapacity(buffer); + uint8_t *buf = OH_AVBuffer_GetAddr(buffer); + if (buf != nullptr) { + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture OnBufferAvailable inner audio"); + fwrite(buf, 1, bufferLen, innerFile_); + } + } else if (bufferType == OH_SCREEN_CAPTURE_BUFFERTYPE_AUDIO_MIC) { + // ˷buffer + int bufferLen = OH_AVBuffer_GetCapacity(buffer); + uint8_t *buf = OH_AVBuffer_GetAddr(buffer); + if (buf != nullptr) { + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture OnBufferAvailable mic audio"); + fwrite(buf, 1, bufferLen, micFile_); + } + } + } + return; +} + +// ʼ¼ԭʼ +static napi_value StartScreenCapture_01(napi_env env, napi_callback_info info) { + g_avCapture = OH_AVScreenCapture_Create(); + if (g_avCapture == nullptr) { + OH_LOG_ERROR(LOG_APP, "create screen capture failed"); + } + OH_AVScreenCaptureConfig config_; + SetConfig(config_); + OpenFile("Demo"); + bool isMicrophone = true; + OH_AVScreenCapture_SetMicrophoneEnabled(g_avCapture, isMicrophone); + OH_AVScreenCapture_SetErrorCallback(g_avCapture, OnError, nullptr); + OH_AVScreenCapture_SetStateCallback(g_avCapture, OnStateChange, nullptr); + OH_AVScreenCapture_SetDataCallback(g_avCapture, OnBufferAvailable, nullptr); + int result = OH_AVScreenCapture_Init(g_avCapture, config_); + if (result != AV_SCREEN_CAPTURE_ERR_OK) { + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture OH_AVScreenCapture_Init failed %{public}d", result); + } + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture OH_AVScreenCapture_Init %{public}d", result); + + result = OH_AVScreenCapture_StartScreenCapture(g_avCapture); + if (result != AV_SCREEN_CAPTURE_ERR_OK) { + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture Started failed %{public}d", result); + OH_AVScreenCapture_Release(g_avCapture); + } + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture Started %{public}d", result); + + m_isRunning = true; + + napi_value res; + napi_create_int32(env, result, &res); + return res; +} + +// ʼ¼ļ +static napi_value StartScreenCapture_02(napi_env env, napi_callback_info info) { + g_avCapture = OH_AVScreenCapture_Create(); + if (g_avCapture == nullptr) { + OH_LOG_ERROR(LOG_APP, "create screen capture failed"); + } + OH_AVScreenCaptureConfig config_; + + OH_RecorderInfo recorderInfo; + const std::string SCREEN_CAPTURE_ROOT = "/data/storage/el2/base/files/"; + int32_t outputFd = open((SCREEN_CAPTURE_ROOT + "screen01.mp4").c_str(), O_RDWR | O_CREAT, 0777); + std::string fileUrl = "fd://" + std::to_string(outputFd); + recorderInfo.url = const_cast(fileUrl.c_str()); + recorderInfo.fileFormat = OH_ContainerFormatType::CFT_MPEG_4; + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture fileUrl %{public}s", fileUrl.c_str()); + + SetConfig(config_); + config_.captureMode = OH_CAPTURE_HOME_SCREEN; + config_.dataType = OH_CAPTURE_FILE; + config_.recorderInfo = recorderInfo; + bool isMicrophone = true; + OH_AVScreenCapture_SetMicrophoneEnabled(g_avCapture, isMicrophone); + OH_AVScreenCapture_SetStateCallback(g_avCapture, OnStateChange, nullptr); + + OH_AVSCREEN_CAPTURE_ErrCode result = OH_AVScreenCapture_Init(g_avCapture, config_); + if (result != AV_SCREEN_CAPTURE_ERR_OK) { + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture OH_AVScreenCapture_Init failed %{public}d", result); + } + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture OH_AVScreenCapture_Init %{public}d", result); + + result = OH_AVScreenCapture_StartScreenRecording(g_avCapture); + if (result != AV_SCREEN_CAPTURE_ERR_OK) { + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture Started failed %{public}d", result); + OH_AVScreenCapture_Release(g_avCapture); + } + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture Started %{public}d", result); + + m_scSaveFileIsRunning = true; + napi_value res; + napi_create_int32(env, result, &res); + return res; +} + +// ʼ¼ԭʼSurfaceMode +static napi_value StartScreenCapture_03(napi_env env, napi_callback_info info) { + g_avCapture = OH_AVScreenCapture_Create(); + if (g_avCapture == nullptr) { + OH_LOG_ERROR(LOG_APP, "create screen capture failed"); + } + OH_AVScreenCaptureConfig config_; + SetConfig(config_); + OpenFile("Demo"); + bool isMicrophone = true; + OH_AVScreenCapture_SetMicrophoneEnabled(g_avCapture, isMicrophone); + OH_AVScreenCapture_SetErrorCallback(g_avCapture, OnError, nullptr); + OH_AVScreenCapture_SetStateCallback(g_avCapture, OnStateChange, nullptr); + OH_AVScreenCapture_SetDataCallback(g_avCapture, OnBufferAvailable, nullptr); + int result = OH_AVScreenCapture_Init(g_avCapture, config_); + if (result != AV_SCREEN_CAPTURE_ERR_OK) { + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture OH_AVScreenCapture_Init failed %{public}d", result); + } + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture OH_AVScreenCapture_Init %{public}d", result); + + // ȡҪSurfaceԽб + OH_AVCapability *capability = OH_AVCodec_GetCapability(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true); + const char *name = OH_AVCapability_GetName(capability); + g_videoEnc = OH_VideoEncoder_CreateByName(name); + auto sampleInfo = new SampleInfo; + auto codecUserData = new CodecUserData; + codecUserData->sampleInfo = sampleInfo; + // 첽ص OH_VideoEncoder_SetCallback ӿ + int32_t ret = + OH_VideoEncoder_RegisterCallback(g_videoEnc, + {SampleCallback::OnError, SampleCallback::OnStreamChanged, + SampleCallback::OnNeedInputBuffer, SampleCallback::OnNewOutputBuffer}, + codecUserData); + OH_AVFormat *format = OH_AVFormat_Create(); + // Ƶ֡ + double frameRate = 30.0; + // ƵYUVֵΧ־ + bool rangeFlag = false; + // Ƶԭɫ + int32_t primary = static_cast(OH_ColorPrimary::COLOR_PRIMARY_BT709); + // ô + int32_t transfer = static_cast(OH_TransferCharacteristic::TRANSFER_CHARACTERISTIC_BT709); + // ϵ + int32_t matrix = static_cast(OH_MatrixCoefficient::MATRIX_COEFFICIENT_IDENTITY); + // ñProfile + int32_t profile = static_cast(OH_AVCProfile::AVC_PROFILE_BASELINE); + // ñģʽ + int32_t rateMode = static_cast(OH_VideoEncodeBitrateMode::CBR); + // ùؼ֡ļλΪ + int32_t iFrameInterval = 23000; + // ıֻں㶨ģʽõıִ֧ + int32_t quality = 0; + // ñ + int64_t bitRate = 3000000; + OH_AVFormat_SetIntValue(format, OH_MD_KEY_WIDTH, DEFAULT_WIDTH); + OH_AVFormat_SetIntValue(format, OH_MD_KEY_HEIGHT, DEFAULT_HEIGHT); + OH_AVFormat_SetIntValue(format, OH_MD_KEY_PIXEL_FORMAT, DEFAULT_PIXELFORMAT); + OH_AVFormat_SetDoubleValue(format, OH_MD_KEY_FRAME_RATE, frameRate); + OH_AVFormat_SetIntValue(format, OH_MD_KEY_RANGE_FLAG, rangeFlag); + OH_AVFormat_SetIntValue(format, OH_MD_KEY_COLOR_PRIMARIES, primary); + OH_AVFormat_SetIntValue(format, OH_MD_KEY_TRANSFER_CHARACTERISTICS, transfer); + OH_AVFormat_SetIntValue(format, OH_MD_KEY_MATRIX_COEFFICIENTS, matrix); + OH_AVFormat_SetIntValue(format, OH_MD_KEY_I_FRAME_INTERVAL, iFrameInterval); + OH_AVFormat_SetIntValue(format, OH_MD_KEY_PROFILE, profile); + OH_AVFormat_SetIntValue(format, OH_MD_KEY_VIDEO_ENCODE_BITRATE_MODE, rateMode); + OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, bitRate); + OH_AVFormat_SetIntValue(format, OH_MD_KEY_QUALITY, quality); + result = OH_VideoEncoder_Configure(g_videoEnc, format); + OH_LOG_INFO(LOG_APP, "==DEMO== OH_VideoEncoder_Configure ret=%{public}d", result); + OH_AVFormat_Destroy(format); + + // ƵȡSurface + OHNativeWindow *nativeWindow; + result = OH_VideoEncoder_GetSurface(g_videoEnc, &nativeWindow); + if (result != AV_ERR_OK) { + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture Started OH_VideoEncoder_GetSurface ret=%{public}d", result); + } + result = OH_VideoEncoder_Prepare(g_videoEnc); + std::string_view outputFilePath = "/data/storage/el2/base/files/DemoSurface.h264"; + std::unique_ptr outputFile = std::make_unique(); + outputFile->open(outputFilePath.data(), std::ios::out | std::ios::binary | std::ios::ate); + + // + int32_t retEnc = OH_VideoEncoder_Start(g_videoEnc); + // ָsurfaceʼ¼ + result = OH_AVScreenCapture_StartScreenCaptureWithSurface(g_avCapture, nativeWindow); + if (result != AV_SCREEN_CAPTURE_ERR_OK) { + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture Started failed %{public}d", result); + OH_AVScreenCapture_Release(g_avCapture); + } + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture Started %{public}d", result); + + m_scSurfaceIsRunning = true; + napi_value res; + napi_create_int32(env, result, &res); + return res; +} + +// ֹͣ +static napi_value StopScreenCapture(napi_env env, napi_callback_info info) { + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture Stop"); + OH_AVSCREEN_CAPTURE_ErrCode result = AV_SCREEN_CAPTURE_ERR_OPERATE_NOT_PERMIT; + napi_value res; + if (m_scSurfaceIsRunning) { + int32_t ret = OH_VideoEncoder_NotifyEndOfStream(g_videoEnc); + if (ret != AV_ERR_OK) { + // 쳣 + } + ret = OH_VideoEncoder_Stop(g_videoEnc); + if (ret != AV_ERR_OK) { + // 쳣 + } + ret = OH_VideoEncoder_Destroy(g_videoEnc); + g_videoEnc = nullptr; + if (ret != AV_ERR_OK) { + // 쳣 + } + } + + if (m_scSaveFileIsRunning) { + if (g_avCapture == nullptr) { + OH_LOG_ERROR(LOG_APP, "capture_ is null."); + } + result = OH_AVScreenCapture_StopScreenRecording(g_avCapture); + if (result != AV_SCREEN_CAPTURE_ERR_BASE) { + OH_LOG_ERROR(LOG_APP, "StopScreenCapture OH_AVScreenCapture_StopScreenCapture Result: %{public}d", result); + } + OH_LOG_INFO(LOG_APP, "StopScreenCapture OH_AVScreenCapture_StopScreenCapture"); + result = OH_AVScreenCapture_Release(g_avCapture); + if (result != AV_SCREEN_CAPTURE_ERR_BASE) { + OH_LOG_ERROR(LOG_APP, "StopScreenCapture OH_AVScreenCapture_Release: %{public}d", result); + } + OH_LOG_INFO(LOG_APP, "OH_AVScreenCapture_Release success"); + m_scSaveFileIsRunning = false; + } else { + if (g_avCapture == nullptr) { + OH_LOG_ERROR(LOG_APP, "capture_ is null."); + } + result = OH_AVScreenCapture_StopScreenCapture(g_avCapture); + if (result != AV_SCREEN_CAPTURE_ERR_BASE) { + OH_LOG_ERROR(LOG_APP, "StopScreenCapture OH_AVScreenCapture_StopScreenCapture Result: %{public}d", result); + } + OH_LOG_INFO(LOG_APP, "StopScreenCapture OH_AVScreenCapture_StopScreenCapture"); + result = OH_AVScreenCapture_Release(g_avCapture); + if (result != AV_SCREEN_CAPTURE_ERR_BASE) { + OH_LOG_ERROR(LOG_APP, "StopScreenCapture OH_AVScreenCapture_Release: %{public}d", result); + } + OH_LOG_INFO(LOG_APP, "OH_AVScreenCapture_Release success"); + CloseFile(); + OH_LOG_INFO(LOG_APP, "CloseFile success"); + m_isRunning = false; + } + + napi_create_int32(env, result, &res); + return res; } EXTERN_C_START -static napi_value Init(napi_env env, napi_value exports) -{ +static napi_value Init(napi_env env, napi_value exports) { napi_property_descriptor desc[] = { - { "add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr } + {"add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr}, + {"startScreenCapture", nullptr, StartScreenCapture_01, nullptr, nullptr, nullptr, napi_default, nullptr}, + {"stopScreenCapture", nullptr, StopScreenCapture, nullptr, nullptr, nullptr, napi_default, nullptr}, + {"startCaptureAsFile", nullptr, StartScreenCapture_02, nullptr, nullptr, nullptr, napi_default, nullptr}, + {"startScreenCaptureWithSurface", nullptr, StartScreenCapture_03, nullptr, nullptr, nullptr, napi_default, + nullptr}, }; napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); return exports; @@ -44,12 +406,9 @@ static napi_module demoModule = { .nm_flags = 0, .nm_filename = nullptr, .nm_register_func = Init, - .nm_modname = "entry", - .nm_priv = ((void*)0), - .reserved = { 0 }, + .nm_modname = "screencapture", + .nm_priv = ((void *)0), + .reserved = {0}, }; -extern "C" __attribute__((constructor)) void RegisterEntryModule(void) -{ - napi_module_register(&demoModule); -} +extern "C" __attribute__((constructor)) void RegisterScreencaptureModule(void) { napi_module_register(&demoModule); } diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets index 508880af8c..c7993b3890 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets @@ -1,8 +1,32 @@ -import { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit'; +import { abilityAccessCtrl, AbilityConstant, common, Permissions, UIAbility, Want } from '@kit.AbilityKit'; import { hilog } from '@kit.PerformanceAnalysisKit'; import { window } from '@kit.ArkUI'; +import { BusinessError } from '@kit.BasicServicesKit'; -const DOMAIN = 0x0000; + +const permissions: Array = ['ohos.permission.MICROPHONE', + 'ohos.permission.READ_MEDIA', + 'ohos.permission.WRITE_MEDIA']; + +function reqPermissionsFromUser(permissions: Array, context: common.UIAbilityContext): void { + let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); + // requestPermissionsFromUserжȨ޵Ȩ״̬Ƿ𵯴 + atManager.requestPermissionsFromUser(context, permissions).then((data) => { + let grantStatus: Array = data.authResults; + let length: number = grantStatus.length; + for (let i = 0; i < length; i++) { + if (grantStatus[i] === 0) { + // ûȨԼĿ + } else { + // ûܾȨʾûȨܷʵǰҳĹܣûϵͳдӦȨ + return; + } + } + // Ȩɹ + }).catch((err: BusinessError) => { + console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`); + }) +} export default class EntryAbility extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Index.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Index.ets index 0738f87946..6b7d1b6697 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Index.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Index.ets @@ -1,25 +1,99 @@ -import { hilog } from '@kit.PerformanceAnalysisKit'; -import testNapi from 'libentry.so'; +import {Scene1} from './Scene1'; +import {Scene2} from './Scene2'; +import {Scene3} from './Scene3'; +import {Scene4} from './Scene4'; -const DOMAIN = 0x0000; +class DividerTmp { + strokeWidth: Length = 1 + startMargin: Length = 60 + endMargin: Length = 10 + color: ResourceColor = '#ffe9f0f0' -@Entry + constructor(strokeWidth: Length, startMargin: Length, endMargin: Length, color: ResourceColor) { + this.strokeWidth = strokeWidth + this.startMargin = startMargin + this.endMargin = endMargin + this.color = color + } +} + +@Entry({ routeName : 'Index' }) @Component struct Index { - @State message: string = 'Hello World'; + @State message: string = 'Av Screen Capture'; + @Provide('NavPathStack') pageInfos: NavPathStack = new NavPathStack() + @State egDivider: DividerTmp = new DividerTmp(1, 60, 10, '#ffe9f0f0') + + @Builder + PagesMap(name: string) { + if (name == 'Scene1') { + Scene1() + } else if (name == 'Scene2') { + Scene2() + } else if (name == 'Scene3') { + Scene3() + } else if (name == 'Scene4') { + Scene4() + } + } build() { - Row() { - Column() { - Text(this.message) - .fontSize($r('app.float.page_text_font_size')) - .fontWeight(FontWeight.Bold) - .onClick(() => { - this.message = 'Welcome'; - hilog.info(DOMAIN, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3)); - }) + Column({ space: 15 }) { + + Navigation(this.pageInfos) { + List({ space: 12 }) { + ListItem() { + Text('Av Screen Capture ¼DEMO') + .fontSize(18) + } + ListItem() { + Text('¼ļ') + .fontSize(20) + } + ListItem() { + Button('¼ļ') + .width('80%') + .onClick(() => { + this.pageInfos.pushPathByName('Scene1', ''); + }) + } + ListItem() { + Text('¼ȡ') + .fontSize(20) + } + ListItem() { + Button('¼ȡ',{ type: ButtonType.Capsule, stateEffect: true }) + .width('80%') + .onClick(() => { + this.pageInfos.pushPathByName('Scene2', ''); + }) + } + ListItem() { + Button('¼ȡSurfaceMode') + .width('80%') + .onClick(() => { + this.pageInfos.pushPathByName('Scene3', ''); + }) + } + ListItem() { + Text('') + .fontSize(20) + } + ListItem() { + + } + } + .width("100%") + .margin({ top: 12 }) + .alignListItem(ListItemAlign.Center) + .divider(this.egDivider) + } - .width('100%') + .mode(NavigationMode.Stack) + .title("¼ӦDEMO") + .titleMode(NavigationTitleMode.Full) + .navDestination(this.PagesMap) + } .height('100%') } diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Menu.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Menu.ets new file mode 100644 index 0000000000..0281f702b3 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Menu.ets @@ -0,0 +1,92 @@ +import router from '@ohos.router'; + +@Component +export struct MenuSCComponent { + @State select: boolean = true + @Builder + MyMenu(){ + Menu() { + + MenuItemGroup({ header: '录屏场景列表' }) { + MenuItem({ content: "主页" }) + .onChange((selected) => { + console.info("menuItem select" + selected); + router.pushUrl({ + url: 'pages/Index' // 目标url + }, router.RouterMode.Single, (err) => { + if (err) { + console.error(`Invoke pushUrl failed, code is ${err.code}, message is ${err.message}`); + return; + } + console.info('Invoke pushUrl succeeded.'); + }); + }) + + MenuItem({ content: "录屏存文件" }) + .onChange((selected) => { + router.pushUrl({ + url: 'pages/Scene1' // 目标url + }, router.RouterMode.Single, (err) => { + if (err) { + console.error(`Invoke pushUrl failed, code is ${err.code}, message is ${err.message}`); + return; + } + console.info('Invoke pushUrl succeeded.'); + }); + }) + + MenuItem({ content: "录屏取码流" }) + .onChange((selected) => { + router.pushUrl({ + url: 'pages/Scene2' // 目标url + }, router.RouterMode.Single, (err) => { + if (err) { + console.error(`Invoke pushUrl failed, code is ${err.code}, message is ${err.message}`); + return; + } + console.info('Invoke pushUrl succeeded.'); + }); + }) + + MenuItem({ content: "录屏取码流Surface模式"}) + .onChange((selected) => { + router.pushUrl({ + url: 'pages/Scene3' // 目标url + }, router.RouterMode.Single, (err) => { + if (err) { + console.error(`Invoke pushUrl failed, code is ${err.code}, message is ${err.message}`); + return; + } + console.info('Invoke pushUrl succeeded.'); + }); + }) + } + + MenuItemGroup({ header: '录屏场景2' }) { + MenuItem({ content: "全场景" }) + .onChange((selected) => { + router.pushUrl({ + url: 'pages/Scene4' // 目标url + }, router.RouterMode.Single, (err) => { + if (err) { + console.error(`Invoke pushUrl failed, code is ${err.code}, message is ${err.message}`); + return; + } + console.info('Invoke pushUrl succeeded.'); + }); + }) + MenuItem({ + content: "待增加场景", + }) + } + } + } + + build() { + Button('选择录屏场景', { type: ButtonType.Capsule, stateEffect: true }) + .fontSize(25) + .backgroundColor(0x317aff) + .fontWeight(800) + .bindMenu(this.MyMenu) + } + } \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene1.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene1.ets new file mode 100644 index 0000000000..ead8af0539 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene1.ets @@ -0,0 +1,65 @@ +import { hilog } from '@kit.PerformanceAnalysisKit'; +import testNapi from 'libscreencapture.so'; + +@Entry({ routeName : 'Scene1' }) +@Component +export struct Scene1 { + @State message: string = '录屏存文件'; + @State isCapturing: boolean = false; + @Consume('pageInfos') pageInfos: NavPathStack; + + build() { + NavDestination() { + Column({ space: 15 }) { + Column() { + Text(this.message) + .fontSize(30) + .fontWeight(FontWeight.Bold) + .onClick(() => { + hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3)); + }) + } + .width('100%') + .height('20%') + Column() { + List({ space: 40 }) { + ListItem() { + Button('Start', { type: ButtonType.Circle, stateEffect: true }) + .backgroundColor(0xF55A42) + .width(90) + .height(90) + .onClick(() => { + if (testNapi.startCaptureAsFile() == 0) { + this.isCapturing = true; + } + }) + } + ListItem() { + Button('Stop', { type: ButtonType.Normal, stateEffect: true }) + .backgroundColor(0x000000) + .width(85) + .height(85) + .shadow({ radius: 10 }) + .onClick(() => { + if (this.isCapturing) { + testNapi.stopScreenCapture(); + this.isCapturing = false; + } + }) + } + }.listDirection(Axis.Horizontal).lanes({ minLength: 200, maxLength: 300 }) + } + .width('100%') + .height('20%') + + Column() { + } + .width('100%') + .height('20%') + } + .width('100%') + } + .title('录屏存文件') + + } +} \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene2.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene2.ets new file mode 100644 index 0000000000..af47631070 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene2.ets @@ -0,0 +1,65 @@ +import { hilog } from '@kit.PerformanceAnalysisKit'; +import testNapi from 'libscreencapture.so'; + +@Entry({ routeName : 'Scene2' }) +@Component +export struct Scene2 { + @State message: string = '录屏取码流'; + @State isCapturing: boolean = false; + @Consume('pageInfos') pageInfos: NavPathStack; + + build() { + NavDestination() { + + Column({ space: 15 }) { + Column() { + Text(this.message) + .fontSize(30) + .fontWeight(FontWeight.Bold) + .onClick(() => { + hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3)); + }) + } + .width('100%') + .height('20%') + Column() { + List({ space: 40 }) { + ListItem() { + Button('Start', { type: ButtonType.Circle, stateEffect: true }) + .backgroundColor(0xF55A42) + .width(90) + .height(90) + .onClick(() => { + if (testNapi.startScreenCapture() == 0) { + this.isCapturing = true; + } + }) + } + ListItem() { + Button('Stop', { type: ButtonType.Normal, stateEffect: true }) + .backgroundColor(0x000000) + .width(85) + .height(85) + .shadow({ radius: 10 }) + .onClick(() => { + if (this.isCapturing) { + testNapi.stopScreenCapture(); + this.isCapturing = false; + } + }) + } + }.listDirection(Axis.Horizontal).lanes({ minLength: 200, maxLength: 300 }) + } + .width('100%') + .height('20%') + + Column() { + } + .width('100%') + .height('20%') + } + .width('100%') + } + .title('录屏取码流') + } +} \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene3.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene3.ets new file mode 100644 index 0000000000..1b9d1adbb0 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene3.ets @@ -0,0 +1,65 @@ +import { hilog } from '@kit.PerformanceAnalysisKit'; +import testNapi from 'libscreencapture.so'; + +@Entry({ routeName : 'Scene3' }) +@Component +export struct Scene3 { + @State message: string = '录屏取码流Surface模式'; + @State isCapturing: boolean = false; + @Consume('pageInfos') pageInfos: NavPathStack; + + build() { + NavDestination() { + + Column({ space: 15 }) { + Column() { + Text(this.message) + .fontSize(30) + .fontWeight(FontWeight.Bold) + .onClick(() => { + hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3)); + }) + } + .width('100%') + .height('20%') + Column() { + List({ space: 40 }) { + ListItem() { + Button('Start', { type: ButtonType.Circle, stateEffect: true }) + .backgroundColor(0xF55A42) + .width(90) + .height(90) + .onClick(() => { + if (testNapi.startScreenCaptureWithSurface() == 0) { + this.isCapturing = true; + } + }) + } + ListItem() { + Button('Stop', { type: ButtonType.Normal, stateEffect: true }) + .backgroundColor(0x000000) + .width(85) + .height(85) + .shadow({ radius: 10 }) + .onClick(() => { + if (this.isCapturing) { + testNapi.stopScreenCapture(); + this.isCapturing = false; + } + }) + } + }.listDirection(Axis.Horizontal).lanes({ minLength: 200, maxLength: 300 }) + } + .width('100%') + .height('20%') + + Column() { + } + .width('100%') + .height('20%') + } + .width('100%') + } + .title('录屏取码流Surface模式') + } +} \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene4.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene4.ets new file mode 100644 index 0000000000..31c1f1d650 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene4.ets @@ -0,0 +1,148 @@ +import { hilog } from '@kit.PerformanceAnalysisKit'; +import testNapi from 'libscreencapture.so'; +import {MenuSCComponent} from './Menu'; + +@Entry({ routeName : 'Scene4' }) +@Component +export struct Scene4 { + @State message: string = '全量'; + @State isCapturing: boolean = false; + @Consume('pageInfos') pageInfos: NavPathStack; + + build() { + NavDestination() { + + Column({ space: 15 }) { + Column() { + MenuSCComponent() + Text(this.message) + .fontSize(25) + .fontWeight(FontWeight.Bold) + } + .width('100%') + .height('10%').border({ width: 1 }) + + Column() { + Text("Save File") + .fontSize(20) + .fontWeight(FontWeight.Bold) + .onClick(() => { + hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3)); + }) + List({ space: 40 }) { + ListItem() { + Button('Start', { type: ButtonType.Circle, stateEffect: true }) + .backgroundColor(0xF55A42) + .width(90) + .height(90) + .onClick(() => { + if (testNapi.startCaptureAsFile() == 0) { + this.isCapturing = true; + } + }) + } + + ListItem() { + } + + ListItem() { + Button('Stop', { type: ButtonType.Normal, stateEffect: true }) + .backgroundColor(0x000000) + .width(85) + .height(85) + .shadow({ radius: 10 }) + .onClick(() => { + if (this.isCapturing) { + testNapi.stopScreenCapture(); + this.isCapturing = false; + } + }) + } + }.listDirection(Axis.Horizontal).lanes({ minLength: 200, maxLength: 300 }) + } + .width('100%') + .height('20%').border({ width: 1 }) + + Column() { + Text("Original Stream") + .fontSize(20) + .fontWeight(FontWeight.Bold) + .onClick(() => { + hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3)); + }) + List({ space: 40 }) { + ListItem() { + Button('Start', { type: ButtonType.Circle, stateEffect: true }) + .backgroundColor(0xF55A42) + .width(90) + .height(90) + .onClick(() => { + if (testNapi.startScreenCapture() == 0) { + this.isCapturing = true; + } + }) + } + ListItem() { + } + ListItem() { + Button('Stop', { type: ButtonType.Normal, stateEffect: true }) + .backgroundColor(0x000000) + .width(85) + .height(85) + .shadow({ radius: 10 }) + .onClick(() => { + if (this.isCapturing) { + testNapi.stopScreenCapture(); + this.isCapturing = false; + } + }) + } + }.listDirection(Axis.Horizontal).lanes({ minLength: 200, maxLength: 300 }) + } + .width('100%') + .height('20%').border({ width: 1 }) + + Column() { + Text("Original Stream With Surface") + .fontSize(20) + .fontWeight(FontWeight.Bold) + .onClick(() => { + hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3)); + }) + List({ space: 40 }) { + ListItem() { + Button('Start', { type: ButtonType.Circle, stateEffect: true }) + .backgroundColor(0xF55A42) + .width(90) + .height(90) + .onClick(() => { + if (testNapi.startScreenCaptureWithSurface() == 0) { + this.isCapturing = true; + } + }) + } + ListItem() { + } + ListItem() { + Button('Stop', { type: ButtonType.Normal, stateEffect: true }) + .backgroundColor(0x000000) + .width(85) + .height(85) + .shadow({ radius: 10 }) + .onClick(() => { + if (this.isCapturing) { + testNapi.stopScreenCapture(); + this.isCapturing = false; + } + }) + } + }.listDirection(Axis.Horizontal).lanes({ minLength: 200, maxLength: 300 }) + } + .width('100%') + .height('20%').border({ width: 1 }) + } + .height('100%') + } + .title('全量') + } +} \ No newline at end of file -- Gitee From f887d99b8d014587ba4a87db8b1225aba5e76f27 Mon Sep 17 00:00:00 2001 From: x00800313 Date: Sat, 17 May 2025 15:46:15 +0800 Subject: [PATCH 03/20] =?UTF-8?q?=E5=BD=95=E5=B1=8F=20sample=203.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: x00800313 --- .../entry/src/main/cpp/CMakeLists.txt | 11 +- .../entry/src/main/cpp/include/libyuv.h | 32 + .../src/main/cpp/include/libyuv/basic_types.h | 68 + .../src/main/cpp/include/libyuv/compare.h | 111 + .../src/main/cpp/include/libyuv/compare_row.h | 141 + .../src/main/cpp/include/libyuv/convert.h | 504 ++ .../main/cpp/include/libyuv/convert_argb.h | 721 +++ .../main/cpp/include/libyuv/convert_from.h | 366 ++ .../cpp/include/libyuv/convert_from_argb.h | 298 ++ .../src/main/cpp/include/libyuv/cpu_id.h | 120 + .../src/main/cpp/include/libyuv/macros_msa.h | 233 + .../main/cpp/include/libyuv/mjpeg_decoder.h | 195 + .../cpp/include/libyuv/planar_functions.h | 860 ++++ .../src/main/cpp/include/libyuv/rotate.h | 182 + .../src/main/cpp/include/libyuv/rotate_argb.h | 37 + .../src/main/cpp/include/libyuv/rotate_row.h | 223 + .../entry/src/main/cpp/include/libyuv/row.h | 4037 +++++++++++++++++ .../entry/src/main/cpp/include/libyuv/scale.h | 179 + .../src/main/cpp/include/libyuv/scale_argb.h | 76 + .../src/main/cpp/include/libyuv/scale_row.h | 1107 +++++ .../src/main/cpp/include/libyuv/version.h | 16 + .../main/cpp/include/libyuv/video_common.h | 191 + .../entry/src/main/cpp/main.h | 56 + .../entry/src/main/cpp/napi_init.cpp | 56 +- .../entry/src/main/cpp/sample_callback.cpp | 63 + .../entry/src/main/cpp/sample_callback.h | 13 + .../entry/src/main/cpp/sample_info.h | 106 + .../src/main/cpp/types/libentry/Index.d.ts | 6 +- 28 files changed, 9976 insertions(+), 32 deletions(-) create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/basic_types.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/compare.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/compare_row.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_argb.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_from.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_from_argb.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/cpu_id.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/macros_msa.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/mjpeg_decoder.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/planar_functions.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate_argb.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate_row.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/row.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale_argb.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale_row.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/version.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/video_common.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/main.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.cpp create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_info.h diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/CMakeLists.txt b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/CMakeLists.txt index 0e5690b95e..081c7be3af 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/CMakeLists.txt +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/CMakeLists.txt @@ -9,7 +9,12 @@ if(DEFINED PACKAGE_FIND_FILE) endif() include_directories(${NATIVERENDER_ROOT_PATH} - ${NATIVERENDER_ROOT_PATH}/include) + ${NATIVERENDER_ROOT_PATH}/include + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/include) -add_library(entry SHARED napi_init.cpp) -target_link_libraries(entry PUBLIC libace_napi.z.so libhilog_ndk.z.so) \ No newline at end of file +add_library(entry SHARED napi_init.cpp sample_callback.cpp) +target_link_libraries(entry PUBLIC libace_napi.z.so libnative_buffer.so libhilog_ndk.z.so librawfile.z.so libnative_avscreen_capture.so + libace_ndk.z.so libnative_media_codecbase.so libnative_media_core.so libnative_media_venc.so libnative_window.so libnative_media_avdemuxer.so + libnative_media_avsource.so libnative_image.so librawfile.z.so libnative_media_avmuxer.so libnative_media_adec.so libnative_media_aenc.so + libnative_media_vdec.so ${CMAKE_CURRENT_SOURCE_DIR}/libyuv.a) \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv.h new file mode 100644 index 0000000000..aeffd5ef7a --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv.h @@ -0,0 +1,32 @@ +/* + * Copyright 2011 The LibYuv Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef INCLUDE_LIBYUV_H_ +#define INCLUDE_LIBYUV_H_ + +#include "libyuv/basic_types.h" +#include "libyuv/compare.h" +#include "libyuv/convert.h" +#include "libyuv/convert_argb.h" +#include "libyuv/convert_from.h" +#include "libyuv/convert_from_argb.h" +#include "libyuv/cpu_id.h" +#include "libyuv/mjpeg_decoder.h" +#include "libyuv/planar_functions.h" +#include "libyuv/rotate.h" +#include "libyuv/rotate_argb.h" +#include "libyuv/row.h" +#include "libyuv/scale.h" +#include "libyuv/scale_argb.h" +#include "libyuv/scale_row.h" +#include "libyuv/version.h" +#include "libyuv/video_common.h" + +#endif // INCLUDE_LIBYUV_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/basic_types.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/basic_types.h new file mode 100644 index 0000000000..1bea67f2f2 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/basic_types.h @@ -0,0 +1,68 @@ +/* + * Copyright 2011 The LibYuv Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef INCLUDE_LIBYUV_BASIC_TYPES_H_ +#define INCLUDE_LIBYUV_BASIC_TYPES_H_ + +#include // For size_t and NULL + +#if !defined(INT_TYPES_DEFINED) && !defined(GG_LONGLONG) +#define INT_TYPES_DEFINED + +#if defined(_MSC_VER) && (_MSC_VER < 1600) +#include // for uintptr_t on x86 +typedef unsigned __int64 uint64_t; +typedef __int64 int64_t; +typedef unsigned int uint32_t; +typedef int int32_t; +typedef unsigned short uint16_t; +typedef short int16_t; +typedef unsigned char uint8_t; +typedef signed char int8_t; +#else +#include // for uintptr_t and C99 types +#endif // defined(_MSC_VER) && (_MSC_VER < 1600) +// Types are deprecated. Enable this macro for legacy types. +#ifdef LIBYUV_LEGACY_TYPES +typedef uint64_t uint64; +typedef int64_t int64; +typedef uint32_t uint32; +typedef int32_t int32; +typedef uint16_t uint16; +typedef int16_t int16; +typedef uint8_t uint8; +typedef int8_t int8; +#endif // LIBYUV_LEGACY_TYPES +#endif // INT_TYPES_DEFINED + +#if !defined(LIBYUV_API) +#if defined(_WIN32) || defined(__CYGWIN__) +#if defined(LIBYUV_BUILDING_SHARED_LIBRARY) +#define LIBYUV_API __declspec(dllexport) +#elif defined(LIBYUV_USING_SHARED_LIBRARY) +#define LIBYUV_API __declspec(dllimport) +#else +#define LIBYUV_API +#endif // LIBYUV_BUILDING_SHARED_LIBRARY +#elif defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__APPLE__) && \ + (defined(LIBYUV_BUILDING_SHARED_LIBRARY) || \ + defined(LIBYUV_USING_SHARED_LIBRARY)) +#define LIBYUV_API __attribute__((visibility("default"))) +#else +#define LIBYUV_API +#endif // __GNUC__ +#endif // LIBYUV_API + +// TODO(fbarchard): Remove bool macros. +#define LIBYUV_BOOL int +#define LIBYUV_FALSE 0 +#define LIBYUV_TRUE 1 + +#endif // INCLUDE_LIBYUV_BASIC_TYPES_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/compare.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/compare.h new file mode 100644 index 0000000000..3353ad71c6 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/compare.h @@ -0,0 +1,111 @@ +/* + * Copyright 2011 The LibYuv Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef INCLUDE_LIBYUV_COMPARE_H_ +#define INCLUDE_LIBYUV_COMPARE_H_ + +#include "libyuv/basic_types.h" + +#ifdef __cplusplus +namespace libyuv { +extern "C" { +#endif + +// Compute a hash for specified memory. Seed of 5381 recommended. +LIBYUV_API +uint32_t HashDjb2(const uint8_t* src, uint64_t count, uint32_t seed); + +// Hamming Distance +LIBYUV_API +uint64_t ComputeHammingDistance(const uint8_t* src_a, + const uint8_t* src_b, + int count); + +// Scan an opaque argb image and return fourcc based on alpha offset. +// Returns FOURCC_ARGB, FOURCC_BGRA, or 0 if unknown. +LIBYUV_API +uint32_t ARGBDetect(const uint8_t* argb, + int stride_argb, + int width, + int height); + +// Sum Square Error - used to compute Mean Square Error or PSNR. +LIBYUV_API +uint64_t ComputeSumSquareError(const uint8_t* src_a, + const uint8_t* src_b, + int count); + +LIBYUV_API +uint64_t ComputeSumSquareErrorPlane(const uint8_t* src_a, + int stride_a, + const uint8_t* src_b, + int stride_b, + int width, + int height); + +static const int kMaxPsnr = 128; + +LIBYUV_API +double SumSquareErrorToPsnr(uint64_t sse, uint64_t count); + +LIBYUV_API +double CalcFramePsnr(const uint8_t* src_a, + int stride_a, + const uint8_t* src_b, + int stride_b, + int width, + int height); + +LIBYUV_API +double I420Psnr(const uint8_t* src_y_a, + int stride_y_a, + const uint8_t* src_u_a, + int stride_u_a, + const uint8_t* src_v_a, + int stride_v_a, + const uint8_t* src_y_b, + int stride_y_b, + const uint8_t* src_u_b, + int stride_u_b, + const uint8_t* src_v_b, + int stride_v_b, + int width, + int height); + +LIBYUV_API +double CalcFrameSsim(const uint8_t* src_a, + int stride_a, + const uint8_t* src_b, + int stride_b, + int width, + int height); + +LIBYUV_API +double I420Ssim(const uint8_t* src_y_a, + int stride_y_a, + const uint8_t* src_u_a, + int stride_u_a, + const uint8_t* src_v_a, + int stride_v_a, + const uint8_t* src_y_b, + int stride_y_b, + const uint8_t* src_u_b, + int stride_u_b, + const uint8_t* src_v_b, + int stride_v_b, + int width, + int height); + +#ifdef __cplusplus +} // extern "C" +} // namespace libyuv +#endif + +#endif // INCLUDE_LIBYUV_COMPARE_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/compare_row.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/compare_row.h new file mode 100644 index 0000000000..e95b9d93eb --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/compare_row.h @@ -0,0 +1,141 @@ +/* + * Copyright 2013 The LibYuv Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef INCLUDE_LIBYUV_COMPARE_ROW_H_ +#define INCLUDE_LIBYUV_COMPARE_ROW_H_ + +#include "libyuv/basic_types.h" + +#ifdef __cplusplus +namespace libyuv { +extern "C" { +#endif + +#if defined(__pnacl__) || defined(__CLR_VER) || \ + (defined(__native_client__) && defined(__x86_64__)) || \ + (defined(__i386__) && !defined(__SSE__) && !defined(__clang__)) +#define LIBYUV_DISABLE_X86 +#endif +#if defined(__native_client__) +#define LIBYUV_DISABLE_NEON +#endif +// MemorySanitizer does not support assembly code yet. http://crbug.com/344505 +#if defined(__has_feature) +#if __has_feature(memory_sanitizer) +#define LIBYUV_DISABLE_X86 +#endif +#endif +// Visual C 2012 required for AVX2. +#if defined(_M_IX86) && !defined(__clang__) && defined(_MSC_VER) && \ + _MSC_VER >= 1700 +#define VISUALC_HAS_AVX2 1 +#endif // VisualStudio >= 2012 + +// clang >= 3.4.0 required for AVX2. +#if defined(__clang__) && (defined(__x86_64__) || defined(__i386__)) +#if (__clang_major__ > 3) || (__clang_major__ == 3 && (__clang_minor__ >= 4)) +#define CLANG_HAS_AVX2 1 +#endif // clang >= 3.4 +#endif // __clang__ + +// The following are available for Visual C and GCC: +#if !defined(LIBYUV_DISABLE_X86) && \ + (defined(__x86_64__) || defined(__i386__) || defined(_M_IX86)) +#define HAS_HASHDJB2_SSE41 +#define HAS_SUMSQUAREERROR_SSE2 +#define HAS_HAMMINGDISTANCE_SSE42 +#endif + +// The following are available for Visual C and clangcl 32 bit: +#if !defined(LIBYUV_DISABLE_X86) && defined(_M_IX86) && defined(_MSC_VER) && \ + (defined(VISUALC_HAS_AVX2) || defined(CLANG_HAS_AVX2)) +#define HAS_HASHDJB2_AVX2 +#define HAS_SUMSQUAREERROR_AVX2 +#endif + +// The following are available for GCC and clangcl 64 bit: +#if !defined(LIBYUV_DISABLE_X86) && \ + (defined(__x86_64__) || (defined(__i386__) && !defined(_MSC_VER))) +#define HAS_HAMMINGDISTANCE_SSSE3 +#endif + +// The following are available for GCC and clangcl 64 bit: +#if !defined(LIBYUV_DISABLE_X86) && defined(CLANG_HAS_AVX2) && \ + (defined(__x86_64__) || (defined(__i386__) && !defined(_MSC_VER))) +#define HAS_HAMMINGDISTANCE_AVX2 +#endif + +// The following are available for Neon: +#if !defined(LIBYUV_DISABLE_NEON) && \ + (defined(__ARM_NEON__) || defined(LIBYUV_NEON) || defined(__aarch64__)) +#define HAS_SUMSQUAREERROR_NEON +#define HAS_HAMMINGDISTANCE_NEON +#endif + +#if !defined(LIBYUV_DISABLE_MSA) && defined(__mips_msa) +#define HAS_HAMMINGDISTANCE_MSA +#define HAS_SUMSQUAREERROR_MSA +#endif + +#if !defined(LIBYUV_DISABLE_MMI) && defined(_MIPS_ARCH_LOONGSON3A) +#define HAS_HAMMINGDISTANCE_MMI +#define HAS_SUMSQUAREERROR_MMI +#endif + +uint32_t HammingDistance_C(const uint8_t* src_a, + const uint8_t* src_b, + int count); +uint32_t HammingDistance_SSE42(const uint8_t* src_a, + const uint8_t* src_b, + int count); +uint32_t HammingDistance_SSSE3(const uint8_t* src_a, + const uint8_t* src_b, + int count); +uint32_t HammingDistance_AVX2(const uint8_t* src_a, + const uint8_t* src_b, + int count); +uint32_t HammingDistance_NEON(const uint8_t* src_a, + const uint8_t* src_b, + int count); +uint32_t HammingDistance_MSA(const uint8_t* src_a, + const uint8_t* src_b, + int count); +uint32_t HammingDistance_MMI(const uint8_t* src_a, + const uint8_t* src_b, + int count); +uint32_t SumSquareError_C(const uint8_t* src_a, + const uint8_t* src_b, + int count); +uint32_t SumSquareError_SSE2(const uint8_t* src_a, + const uint8_t* src_b, + int count); +uint32_t SumSquareError_AVX2(const uint8_t* src_a, + const uint8_t* src_b, + int count); +uint32_t SumSquareError_NEON(const uint8_t* src_a, + const uint8_t* src_b, + int count); +uint32_t SumSquareError_MSA(const uint8_t* src_a, + const uint8_t* src_b, + int count); +uint32_t SumSquareError_MMI(const uint8_t* src_a, + const uint8_t* src_b, + int count); + +uint32_t HashDjb2_C(const uint8_t* src, int count, uint32_t seed); +uint32_t HashDjb2_SSE41(const uint8_t* src, int count, uint32_t seed); +uint32_t HashDjb2_AVX2(const uint8_t* src, int count, uint32_t seed); + +#ifdef __cplusplus +} // extern "C" +} // namespace libyuv +#endif + +#endif // INCLUDE_LIBYUV_COMPARE_ROW_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert.h new file mode 100644 index 0000000000..f571142fab --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert.h @@ -0,0 +1,504 @@ +/* + * Copyright 2011 The LibYuv Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef INCLUDE_LIBYUV_CONVERT_H_ +#define INCLUDE_LIBYUV_CONVERT_H_ + +#include "libyuv/basic_types.h" + +#include "libyuv/rotate.h" // For enum RotationMode. + +// TODO(fbarchard): fix WebRTC source to include following libyuv headers: +#include "libyuv/convert_argb.h" // For WebRTC I420ToARGB. b/620 +#include "libyuv/convert_from.h" // For WebRTC ConvertFromI420. b/620 +#include "libyuv/planar_functions.h" // For WebRTC I420Rect, CopyPlane. b/618 + +#ifdef __cplusplus +namespace libyuv { +extern "C" { +#endif + +// Convert I444 to I420. +LIBYUV_API +int I444ToI420(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Convert I444 to NV21. +LIBYUV_API +int I444ToNV21(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_vu, + int dst_stride_vu, + int width, + int height); + +// Convert I422 to I420. +LIBYUV_API +int I422ToI420(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Convert I422 to NV21. +LIBYUV_API +int I422ToNV21(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_vu, + int dst_stride_vu, + int width, + int height); + +// Copy I420 to I420. +#define I420ToI420 I420Copy +LIBYUV_API +int I420Copy(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Copy I010 to I010 +#define I010ToI010 I010Copy +#define H010ToH010 I010Copy +LIBYUV_API +int I010Copy(const uint16_t* src_y, + int src_stride_y, + const uint16_t* src_u, + int src_stride_u, + const uint16_t* src_v, + int src_stride_v, + uint16_t* dst_y, + int dst_stride_y, + uint16_t* dst_u, + int dst_stride_u, + uint16_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Convert 10 bit YUV to 8 bit +#define H010ToH420 I010ToI420 +LIBYUV_API +int I010ToI420(const uint16_t* src_y, + int src_stride_y, + const uint16_t* src_u, + int src_stride_u, + const uint16_t* src_v, + int src_stride_v, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Convert I400 (grey) to I420. +LIBYUV_API +int I400ToI420(const uint8_t* src_y, + int src_stride_y, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Convert I400 (grey) to NV21. +LIBYUV_API +int I400ToNV21(const uint8_t* src_y, + int src_stride_y, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_vu, + int dst_stride_vu, + int width, + int height); + +#define J400ToJ420 I400ToI420 + +// Convert NV12 to I420. +LIBYUV_API +int NV12ToI420(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_uv, + int src_stride_uv, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Convert NV21 to I420. +LIBYUV_API +int NV21ToI420(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_vu, + int src_stride_vu, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Convert YUY2 to I420. +LIBYUV_API +int YUY2ToI420(const uint8_t* src_yuy2, + int src_stride_yuy2, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Convert UYVY to I420. +LIBYUV_API +int UYVYToI420(const uint8_t* src_uyvy, + int src_stride_uyvy, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Convert AYUV to NV12. +LIBYUV_API +int AYUVToNV12(const uint8_t* src_ayuv, + int src_stride_ayuv, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_uv, + int dst_stride_uv, + int width, + int height); + +// Convert AYUV to NV21. +LIBYUV_API +int AYUVToNV21(const uint8_t* src_ayuv, + int src_stride_ayuv, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_vu, + int dst_stride_vu, + int width, + int height); + +// Convert M420 to I420. +LIBYUV_API +int M420ToI420(const uint8_t* src_m420, + int src_stride_m420, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Convert Android420 to I420. +LIBYUV_API +int Android420ToI420(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + int src_pixel_stride_uv, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// ARGB little endian (bgra in memory) to I420. +LIBYUV_API +int ARGBToI420(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// BGRA little endian (argb in memory) to I420. +LIBYUV_API +int BGRAToI420(const uint8_t* src_bgra, + int src_stride_bgra, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// ABGR little endian (rgba in memory) to I420. +LIBYUV_API +int ABGRToI420(const uint8_t* src_abgr, + int src_stride_abgr, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// RGBA little endian (abgr in memory) to I420. +LIBYUV_API +int RGBAToI420(const uint8_t* src_rgba, + int src_stride_rgba, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// RGB little endian (bgr in memory) to I420. +LIBYUV_API +int RGB24ToI420(const uint8_t* src_rgb24, + int src_stride_rgb24, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// RGB little endian (bgr in memory) to J420. +LIBYUV_API +int RGB24ToJ420(const uint8_t* src_rgb24, + int src_stride_rgb24, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// RGB big endian (rgb in memory) to I420. +LIBYUV_API +int RAWToI420(const uint8_t* src_raw, + int src_stride_raw, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// RGB16 (RGBP fourcc) little endian to I420. +LIBYUV_API +int RGB565ToI420(const uint8_t* src_rgb565, + int src_stride_rgb565, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// RGB15 (RGBO fourcc) little endian to I420. +LIBYUV_API +int ARGB1555ToI420(const uint8_t* src_argb1555, + int src_stride_argb1555, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// RGB12 (R444 fourcc) little endian to I420. +LIBYUV_API +int ARGB4444ToI420(const uint8_t* src_argb4444, + int src_stride_argb4444, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// RGB little endian (bgr in memory) to J400. +LIBYUV_API +int RGB24ToJ400(const uint8_t* src_rgb24, + int src_stride_rgb24, + uint8_t* dst_yj, + int dst_stride_yj, + int width, + int height); + +#ifdef HAVE_JPEG +// src_width/height provided by capture. +// dst_width/height for clipping determine final size. +LIBYUV_API +int MJPGToI420(const uint8_t* sample, + size_t sample_size, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int src_width, + int src_height, + int dst_width, + int dst_height); + +// JPEG to NV21 +LIBYUV_API +int MJPGToNV21(const uint8_t* sample, + size_t sample_size, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_vu, + int dst_stride_vu, + int src_width, + int src_height, + int dst_width, + int dst_height); + +// Query size of MJPG in pixels. +LIBYUV_API +int MJPGSize(const uint8_t* sample, + size_t sample_size, + int* width, + int* height); +#endif + +// Convert camera sample to I420 with cropping, rotation and vertical flip. +// "src_size" is needed to parse MJPG. +// "dst_stride_y" number of bytes in a row of the dst_y plane. +// Normally this would be the same as dst_width, with recommended alignment +// to 16 bytes for better efficiency. +// If rotation of 90 or 270 is used, stride is affected. The caller should +// allocate the I420 buffer according to rotation. +// "dst_stride_u" number of bytes in a row of the dst_u plane. +// Normally this would be the same as (dst_width + 1) / 2, with +// recommended alignment to 16 bytes for better efficiency. +// If rotation of 90 or 270 is used, stride is affected. +// "crop_x" and "crop_y" are starting position for cropping. +// To center, crop_x = (src_width - dst_width) / 2 +// crop_y = (src_height - dst_height) / 2 +// "src_width" / "src_height" is size of src_frame in pixels. +// "src_height" can be negative indicating a vertically flipped image source. +// "crop_width" / "crop_height" is the size to crop the src to. +// Must be less than or equal to src_width/src_height +// Cropping parameters are pre-rotation. +// "rotation" can be 0, 90, 180 or 270. +// "fourcc" is a fourcc. ie 'I420', 'YUY2' +// Returns 0 for successful; -1 for invalid parameter. Non-zero for failure. +LIBYUV_API +int ConvertToI420(const uint8_t* sample, + size_t sample_size, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int crop_x, + int crop_y, + int src_width, + int src_height, + int crop_width, + int crop_height, + enum RotationMode rotation, + uint32_t fourcc); + +#ifdef __cplusplus +} // extern "C" +} // namespace libyuv +#endif + +#endif // INCLUDE_LIBYUV_CONVERT_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_argb.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_argb.h new file mode 100644 index 0000000000..e8ed1f59f3 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_argb.h @@ -0,0 +1,721 @@ +/* + * Copyright 2012 The LibYuv Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef INCLUDE_LIBYUV_CONVERT_ARGB_H_ +#define INCLUDE_LIBYUV_CONVERT_ARGB_H_ + +#include "libyuv/basic_types.h" + +#include "libyuv/rotate.h" // For enum RotationMode. + +// TODO(fbarchard): This set of functions should exactly match convert.h +// TODO(fbarchard): Add tests. Create random content of right size and convert +// with C vs Opt and or to I420 and compare. +// TODO(fbarchard): Some of these functions lack parameter setting. + +#ifdef __cplusplus +namespace libyuv { +extern "C" { +#endif + +// Alias. +#define ARGBToARGB ARGBCopy + +// Copy ARGB to ARGB. +LIBYUV_API +int ARGBCopy(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert I420 to ARGB. +LIBYUV_API +int I420ToARGB(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Duplicate prototype for function in convert_from.h for remoting. +LIBYUV_API +int I420ToABGR(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_abgr, + int dst_stride_abgr, + int width, + int height); + +// Convert I010 to ARGB. +LIBYUV_API +int I010ToARGB(const uint16_t* src_y, + int src_stride_y, + const uint16_t* src_u, + int src_stride_u, + const uint16_t* src_v, + int src_stride_v, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert I010 to ARGB. +LIBYUV_API +int I010ToARGB(const uint16_t* src_y, + int src_stride_y, + const uint16_t* src_u, + int src_stride_u, + const uint16_t* src_v, + int src_stride_v, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert I010 to ABGR. +LIBYUV_API +int I010ToABGR(const uint16_t* src_y, + int src_stride_y, + const uint16_t* src_u, + int src_stride_u, + const uint16_t* src_v, + int src_stride_v, + uint8_t* dst_abgr, + int dst_stride_abgr, + int width, + int height); + +// Convert H010 to ARGB. +LIBYUV_API +int H010ToARGB(const uint16_t* src_y, + int src_stride_y, + const uint16_t* src_u, + int src_stride_u, + const uint16_t* src_v, + int src_stride_v, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert H010 to ABGR. +LIBYUV_API +int H010ToABGR(const uint16_t* src_y, + int src_stride_y, + const uint16_t* src_u, + int src_stride_u, + const uint16_t* src_v, + int src_stride_v, + uint8_t* dst_abgr, + int dst_stride_abgr, + int width, + int height); + +// Convert I422 to ARGB. +LIBYUV_API +int I422ToARGB(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert I444 to ARGB. +LIBYUV_API +int I444ToARGB(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert J444 to ARGB. +LIBYUV_API +int J444ToARGB(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert I444 to ABGR. +LIBYUV_API +int I444ToABGR(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_abgr, + int dst_stride_abgr, + int width, + int height); + +// Convert I420 with Alpha to preattenuated ARGB. +LIBYUV_API +int I420AlphaToARGB(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + const uint8_t* src_a, + int src_stride_a, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height, + int attenuate); + +// Convert I420 with Alpha to preattenuated ABGR. +LIBYUV_API +int I420AlphaToABGR(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + const uint8_t* src_a, + int src_stride_a, + uint8_t* dst_abgr, + int dst_stride_abgr, + int width, + int height, + int attenuate); + +// Convert I400 (grey) to ARGB. Reverse of ARGBToI400. +LIBYUV_API +int I400ToARGB(const uint8_t* src_y, + int src_stride_y, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert J400 (jpeg grey) to ARGB. +LIBYUV_API +int J400ToARGB(const uint8_t* src_y, + int src_stride_y, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Alias. +#define YToARGB I400ToARGB + +// Convert NV12 to ARGB. +LIBYUV_API +int NV12ToARGB(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_uv, + int src_stride_uv, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert NV21 to ARGB. +LIBYUV_API +int NV21ToARGB(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_vu, + int src_stride_vu, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert NV12 to ABGR. +LIBYUV_API +int NV12ToABGR(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_uv, + int src_stride_uv, + uint8_t* dst_abgr, + int dst_stride_abgr, + int width, + int height); + +// Convert NV21 to ABGR. +LIBYUV_API +int NV21ToABGR(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_vu, + int src_stride_vu, + uint8_t* dst_abgr, + int dst_stride_abgr, + int width, + int height); + +// Convert NV12 to RGB24. +LIBYUV_API +int NV12ToRGB24(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_uv, + int src_stride_uv, + uint8_t* dst_rgb24, + int dst_stride_rgb24, + int width, + int height); + +// Convert NV21 to RGB24. +LIBYUV_API +int NV21ToRGB24(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_vu, + int src_stride_vu, + uint8_t* dst_rgb24, + int dst_stride_rgb24, + int width, + int height); + +// Convert NV21 to YUV24. +LIBYUV_API +int NV21ToYUV24(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_vu, + int src_stride_vu, + uint8_t* dst_yuv24, + int dst_stride_yuv24, + int width, + int height); + +// Convert NV12 to RAW. +LIBYUV_API +int NV12ToRAW(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_uv, + int src_stride_uv, + uint8_t* dst_raw, + int dst_stride_raw, + int width, + int height); + +// Convert NV21 to RAW. +LIBYUV_API +int NV21ToRAW(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_vu, + int src_stride_vu, + uint8_t* dst_raw, + int dst_stride_raw, + int width, + int height); + +// Convert M420 to ARGB. +LIBYUV_API +int M420ToARGB(const uint8_t* src_m420, + int src_stride_m420, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert YUY2 to ARGB. +LIBYUV_API +int YUY2ToARGB(const uint8_t* src_yuy2, + int src_stride_yuy2, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert UYVY to ARGB. +LIBYUV_API +int UYVYToARGB(const uint8_t* src_uyvy, + int src_stride_uyvy, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert J420 to ARGB. +LIBYUV_API +int J420ToARGB(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert J422 to ARGB. +LIBYUV_API +int J422ToARGB(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert J420 to ABGR. +LIBYUV_API +int J420ToABGR(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_abgr, + int dst_stride_abgr, + int width, + int height); + +// Convert J422 to ABGR. +LIBYUV_API +int J422ToABGR(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_abgr, + int dst_stride_abgr, + int width, + int height); + +// Convert H420 to ARGB. +LIBYUV_API +int H420ToARGB(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert H422 to ARGB. +LIBYUV_API +int H422ToARGB(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert H420 to ABGR. +LIBYUV_API +int H420ToABGR(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_abgr, + int dst_stride_abgr, + int width, + int height); + +// Convert H422 to ABGR. +LIBYUV_API +int H422ToABGR(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_abgr, + int dst_stride_abgr, + int width, + int height); + +// Convert H010 to ARGB. +LIBYUV_API +int H010ToARGB(const uint16_t* src_y, + int src_stride_y, + const uint16_t* src_u, + int src_stride_u, + const uint16_t* src_v, + int src_stride_v, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert I010 to AR30. +LIBYUV_API +int I010ToAR30(const uint16_t* src_y, + int src_stride_y, + const uint16_t* src_u, + int src_stride_u, + const uint16_t* src_v, + int src_stride_v, + uint8_t* dst_ar30, + int dst_stride_ar30, + int width, + int height); + +// Convert H010 to AR30. +LIBYUV_API +int H010ToAR30(const uint16_t* src_y, + int src_stride_y, + const uint16_t* src_u, + int src_stride_u, + const uint16_t* src_v, + int src_stride_v, + uint8_t* dst_ar30, + int dst_stride_ar30, + int width, + int height); + +// Convert I010 to AB30. +LIBYUV_API +int I010ToAB30(const uint16_t* src_y, + int src_stride_y, + const uint16_t* src_u, + int src_stride_u, + const uint16_t* src_v, + int src_stride_v, + uint8_t* dst_ab30, + int dst_stride_ab30, + int width, + int height); + +// Convert H010 to AB30. +LIBYUV_API +int H010ToAB30(const uint16_t* src_y, + int src_stride_y, + const uint16_t* src_u, + int src_stride_u, + const uint16_t* src_v, + int src_stride_v, + uint8_t* dst_ab30, + int dst_stride_ab30, + int width, + int height); + +// BGRA little endian (argb in memory) to ARGB. +LIBYUV_API +int BGRAToARGB(const uint8_t* src_bgra, + int src_stride_bgra, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// ABGR little endian (rgba in memory) to ARGB. +LIBYUV_API +int ABGRToARGB(const uint8_t* src_abgr, + int src_stride_abgr, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// RGBA little endian (abgr in memory) to ARGB. +LIBYUV_API +int RGBAToARGB(const uint8_t* src_rgba, + int src_stride_rgba, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Deprecated function name. +#define BG24ToARGB RGB24ToARGB + +// RGB little endian (bgr in memory) to ARGB. +LIBYUV_API +int RGB24ToARGB(const uint8_t* src_rgb24, + int src_stride_rgb24, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// RGB big endian (rgb in memory) to ARGB. +LIBYUV_API +int RAWToARGB(const uint8_t* src_raw, + int src_stride_raw, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// RGB16 (RGBP fourcc) little endian to ARGB. +LIBYUV_API +int RGB565ToARGB(const uint8_t* src_rgb565, + int src_stride_rgb565, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// RGB15 (RGBO fourcc) little endian to ARGB. +LIBYUV_API +int ARGB1555ToARGB(const uint8_t* src_argb1555, + int src_stride_argb1555, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// RGB12 (R444 fourcc) little endian to ARGB. +LIBYUV_API +int ARGB4444ToARGB(const uint8_t* src_argb4444, + int src_stride_argb4444, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Aliases +#define AB30ToARGB AR30ToABGR +#define AB30ToABGR AR30ToARGB +#define AB30ToAR30 AR30ToAB30 + +// Convert AR30 To ARGB. +LIBYUV_API +int AR30ToARGB(const uint8_t* src_ar30, + int src_stride_ar30, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert AR30 To ABGR. +LIBYUV_API +int AR30ToABGR(const uint8_t* src_ar30, + int src_stride_ar30, + uint8_t* dst_abgr, + int dst_stride_abgr, + int width, + int height); + +// Convert AR30 To AB30. +LIBYUV_API +int AR30ToAB30(const uint8_t* src_ar30, + int src_stride_ar30, + uint8_t* dst_ab30, + int dst_stride_ab30, + int width, + int height); + +#ifdef HAVE_JPEG +// src_width/height provided by capture +// dst_width/height for clipping determine final size. +LIBYUV_API +int MJPGToARGB(const uint8_t* sample, + size_t sample_size, + uint8_t* dst_argb, + int dst_stride_argb, + int src_width, + int src_height, + int dst_width, + int dst_height); +#endif + +// Convert Android420 to ARGB. +LIBYUV_API +int Android420ToARGB(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + int src_pixel_stride_uv, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert Android420 to ABGR. +LIBYUV_API +int Android420ToABGR(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + int src_pixel_stride_uv, + uint8_t* dst_abgr, + int dst_stride_abgr, + int width, + int height); + +// Convert camera sample to ARGB with cropping, rotation and vertical flip. +// "sample_size" is needed to parse MJPG. +// "dst_stride_argb" number of bytes in a row of the dst_argb plane. +// Normally this would be the same as dst_width, with recommended alignment +// to 16 bytes for better efficiency. +// If rotation of 90 or 270 is used, stride is affected. The caller should +// allocate the I420 buffer according to rotation. +// "dst_stride_u" number of bytes in a row of the dst_u plane. +// Normally this would be the same as (dst_width + 1) / 2, with +// recommended alignment to 16 bytes for better efficiency. +// If rotation of 90 or 270 is used, stride is affected. +// "crop_x" and "crop_y" are starting position for cropping. +// To center, crop_x = (src_width - dst_width) / 2 +// crop_y = (src_height - dst_height) / 2 +// "src_width" / "src_height" is size of src_frame in pixels. +// "src_height" can be negative indicating a vertically flipped image source. +// "crop_width" / "crop_height" is the size to crop the src to. +// Must be less than or equal to src_width/src_height +// Cropping parameters are pre-rotation. +// "rotation" can be 0, 90, 180 or 270. +// "fourcc" is a fourcc. ie 'I420', 'YUY2' +// Returns 0 for successful; -1 for invalid parameter. Non-zero for failure. +LIBYUV_API +int ConvertToARGB(const uint8_t* sample, + size_t sample_size, + uint8_t* dst_argb, + int dst_stride_argb, + int crop_x, + int crop_y, + int src_width, + int src_height, + int crop_width, + int crop_height, + enum RotationMode rotation, + uint32_t fourcc); + +#ifdef __cplusplus +} // extern "C" +} // namespace libyuv +#endif + +#endif // INCLUDE_LIBYUV_CONVERT_ARGB_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_from.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_from.h new file mode 100644 index 0000000000..861418d07b --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_from.h @@ -0,0 +1,366 @@ +/* + * Copyright 2011 The LibYuv Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef INCLUDE_LIBYUV_CONVERT_FROM_H_ +#define INCLUDE_LIBYUV_CONVERT_FROM_H_ + +#include "libyuv/basic_types.h" +#include "libyuv/rotate.h" + +#ifdef __cplusplus +namespace libyuv { +extern "C" { +#endif + +// See Also convert.h for conversions from formats to I420. + +// Convert 8 bit YUV to 10 bit. +#define H420ToH010 I420ToI010 +int I420ToI010(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint16_t* dst_y, + int dst_stride_y, + uint16_t* dst_u, + int dst_stride_u, + uint16_t* dst_v, + int dst_stride_v, + int width, + int height); + +LIBYUV_API +int I420ToI422(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +LIBYUV_API +int I420ToI444(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Copy to I400. Source can be I420, I422, I444, I400, NV12 or NV21. +LIBYUV_API +int I400Copy(const uint8_t* src_y, + int src_stride_y, + uint8_t* dst_y, + int dst_stride_y, + int width, + int height); + +LIBYUV_API +int I420ToNV12(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_uv, + int dst_stride_uv, + int width, + int height); + +LIBYUV_API +int I420ToNV21(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_vu, + int dst_stride_vu, + int width, + int height); + +LIBYUV_API +int I420ToYUY2(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_yuy2, + int dst_stride_yuy2, + int width, + int height); + +LIBYUV_API +int I420ToUYVY(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_uyvy, + int dst_stride_uyvy, + int width, + int height); + +LIBYUV_API +int I420ToARGB(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +LIBYUV_API +int I420ToBGRA(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_bgra, + int dst_stride_bgra, + int width, + int height); + +LIBYUV_API +int I420ToABGR(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_abgr, + int dst_stride_abgr, + int width, + int height); + +LIBYUV_API +int I420ToRGBA(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_rgba, + int dst_stride_rgba, + int width, + int height); + +LIBYUV_API +int I420ToRGB24(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_rgb24, + int dst_stride_rgb24, + int width, + int height); + +LIBYUV_API +int I420ToRAW(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_raw, + int dst_stride_raw, + int width, + int height); + +LIBYUV_API +int H420ToRGB24(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_rgb24, + int dst_stride_rgb24, + int width, + int height); + +LIBYUV_API +int H420ToRAW(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_raw, + int dst_stride_raw, + int width, + int height); + +LIBYUV_API +int I420ToRGB565(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_rgb565, + int dst_stride_rgb565, + int width, + int height); + +LIBYUV_API +int J420ToRGB565(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_rgb565, + int dst_stride_rgb565, + int width, + int height); + +LIBYUV_API +int H420ToRGB565(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_rgb565, + int dst_stride_rgb565, + int width, + int height); + +LIBYUV_API +int I422ToRGB565(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_rgb565, + int dst_stride_rgb565, + int width, + int height); + +// Convert I420 To RGB565 with 4x4 dither matrix (16 bytes). +// Values in dither matrix from 0 to 7 recommended. +// The order of the dither matrix is first byte is upper left. + +LIBYUV_API +int I420ToRGB565Dither(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_rgb565, + int dst_stride_rgb565, + const uint8_t* dither4x4, + int width, + int height); + +LIBYUV_API +int I420ToARGB1555(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_argb1555, + int dst_stride_argb1555, + int width, + int height); + +LIBYUV_API +int I420ToARGB4444(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_argb4444, + int dst_stride_argb4444, + int width, + int height); + +// Convert I420 to AR30. +LIBYUV_API +int I420ToAR30(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_ar30, + int dst_stride_ar30, + int width, + int height); + +// Convert H420 to AR30. +LIBYUV_API +int H420ToAR30(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_ar30, + int dst_stride_ar30, + int width, + int height); + +// Convert I420 to specified format. +// "dst_sample_stride" is bytes in a row for the destination. Pass 0 if the +// buffer has contiguous rows. Can be negative. A multiple of 16 is optimal. +LIBYUV_API +int ConvertFromI420(const uint8_t* y, + int y_stride, + const uint8_t* u, + int u_stride, + const uint8_t* v, + int v_stride, + uint8_t* dst_sample, + int dst_sample_stride, + int width, + int height, + uint32_t fourcc); + +#ifdef __cplusplus +} // extern "C" +} // namespace libyuv +#endif + +#endif // INCLUDE_LIBYUV_CONVERT_FROM_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_from_argb.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_from_argb.h new file mode 100644 index 0000000000..cbbef6fe45 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_from_argb.h @@ -0,0 +1,298 @@ +/* + * Copyright 2012 The LibYuv Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef INCLUDE_LIBYUV_CONVERT_FROM_ARGB_H_ +#define INCLUDE_LIBYUV_CONVERT_FROM_ARGB_H_ + +#include "libyuv/basic_types.h" + +#ifdef __cplusplus +namespace libyuv { +extern "C" { +#endif + +// Copy ARGB to ARGB. +#define ARGBToARGB ARGBCopy +LIBYUV_API +int ARGBCopy(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert ARGB To BGRA. +LIBYUV_API +int ARGBToBGRA(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_bgra, + int dst_stride_bgra, + int width, + int height); + +// Convert ARGB To ABGR. +LIBYUV_API +int ARGBToABGR(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_abgr, + int dst_stride_abgr, + int width, + int height); + +// Convert ARGB To RGBA. +LIBYUV_API +int ARGBToRGBA(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_rgba, + int dst_stride_rgba, + int width, + int height); + +// Aliases +#define ARGBToAB30 ABGRToAR30 +#define ABGRToAB30 ARGBToAR30 + +// Convert ABGR To AR30. +LIBYUV_API +int ABGRToAR30(const uint8_t* src_abgr, + int src_stride_abgr, + uint8_t* dst_ar30, + int dst_stride_ar30, + int width, + int height); + +// Convert ARGB To AR30. +LIBYUV_API +int ARGBToAR30(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_ar30, + int dst_stride_ar30, + int width, + int height); + +// Convert ARGB To RGB24. +LIBYUV_API +int ARGBToRGB24(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_rgb24, + int dst_stride_rgb24, + int width, + int height); + +// Convert ARGB To RAW. +LIBYUV_API +int ARGBToRAW(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_raw, + int dst_stride_raw, + int width, + int height); + +// Convert ARGB To RGB565. +LIBYUV_API +int ARGBToRGB565(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_rgb565, + int dst_stride_rgb565, + int width, + int height); + +// Convert ARGB To RGB565 with 4x4 dither matrix (16 bytes). +// Values in dither matrix from 0 to 7 recommended. +// The order of the dither matrix is first byte is upper left. +// TODO(fbarchard): Consider pointer to 2d array for dither4x4. +// const uint8_t(*dither)[4][4]; +LIBYUV_API +int ARGBToRGB565Dither(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_rgb565, + int dst_stride_rgb565, + const uint8_t* dither4x4, + int width, + int height); + +// Convert ARGB To ARGB1555. +LIBYUV_API +int ARGBToARGB1555(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_argb1555, + int dst_stride_argb1555, + int width, + int height); + +// Convert ARGB To ARGB4444. +LIBYUV_API +int ARGBToARGB4444(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_argb4444, + int dst_stride_argb4444, + int width, + int height); + +// Convert ARGB To I444. +LIBYUV_API +int ARGBToI444(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Convert ARGB To I422. +LIBYUV_API +int ARGBToI422(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Convert ARGB To I420. (also in convert.h) +LIBYUV_API +int ARGBToI420(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Convert ARGB to J420. (JPeg full range I420). +LIBYUV_API +int ARGBToJ420(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_yj, + int dst_stride_yj, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Convert ARGB to J422. +LIBYUV_API +int ARGBToJ422(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_yj, + int dst_stride_yj, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Convert ARGB to J400. (JPeg full range). +LIBYUV_API +int ARGBToJ400(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_yj, + int dst_stride_yj, + int width, + int height); + +// Convert ARGB to I400. +LIBYUV_API +int ARGBToI400(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_y, + int dst_stride_y, + int width, + int height); + +// Convert ARGB to G. (Reverse of J400toARGB, which replicates G back to ARGB) +LIBYUV_API +int ARGBToG(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_g, + int dst_stride_g, + int width, + int height); + +// Convert ARGB To NV12. +LIBYUV_API +int ARGBToNV12(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_uv, + int dst_stride_uv, + int width, + int height); + +// Convert ARGB To NV21. +LIBYUV_API +int ARGBToNV21(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_vu, + int dst_stride_vu, + int width, + int height); + +// Convert ARGB To NV21. +LIBYUV_API +int ARGBToNV21(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_vu, + int dst_stride_vu, + int width, + int height); + +// Convert ABGR To NV12. +LIBYUV_API +int ABGRToNV12(const uint8_t* src_abgr, + int src_stride_abgr, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_uv, + int dst_stride_uv, + int width, + int height); + +// Convert ARGB To YUY2. +LIBYUV_API +int ARGBToYUY2(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_yuy2, + int dst_stride_yuy2, + int width, + int height); + +// Convert ARGB To UYVY. +LIBYUV_API +int ARGBToUYVY(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_uyvy, + int dst_stride_uyvy, + int width, + int height); + +#ifdef __cplusplus +} // extern "C" +} // namespace libyuv +#endif + +#endif // INCLUDE_LIBYUV_CONVERT_FROM_ARGB_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/cpu_id.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/cpu_id.h new file mode 100644 index 0000000000..b01cd25c57 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/cpu_id.h @@ -0,0 +1,120 @@ +/* + * Copyright 2011 The LibYuv Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef INCLUDE_LIBYUV_CPU_ID_H_ +#define INCLUDE_LIBYUV_CPU_ID_H_ + +#include "libyuv/basic_types.h" + +#ifdef __cplusplus +namespace libyuv { +extern "C" { +#endif + +// Internal flag to indicate cpuid requires initialization. +static const int kCpuInitialized = 0x1; + +// These flags are only valid on ARM processors. +static const int kCpuHasARM = 0x2; +static const int kCpuHasNEON = 0x4; +// 0x8 reserved for future ARM flag. + +// These flags are only valid on x86 processors. +static const int kCpuHasX86 = 0x10; +static const int kCpuHasSSE2 = 0x20; +static const int kCpuHasSSSE3 = 0x40; +static const int kCpuHasSSE41 = 0x80; +static const int kCpuHasSSE42 = 0x100; // unused at this time. +static const int kCpuHasAVX = 0x200; +static const int kCpuHasAVX2 = 0x400; +static const int kCpuHasERMS = 0x800; +static const int kCpuHasFMA3 = 0x1000; +static const int kCpuHasF16C = 0x2000; +static const int kCpuHasGFNI = 0x4000; +static const int kCpuHasAVX512BW = 0x8000; +static const int kCpuHasAVX512VL = 0x10000; +static const int kCpuHasAVX512VBMI = 0x20000; +static const int kCpuHasAVX512VBMI2 = 0x40000; +static const int kCpuHasAVX512VBITALG = 0x80000; +static const int kCpuHasAVX512VPOPCNTDQ = 0x100000; + +// These flags are only valid on MIPS processors. +static const int kCpuHasMIPS = 0x200000; +static const int kCpuHasMSA = 0x400000; +static const int kCpuHasMMI = 0x800000; + +// Optional init function. TestCpuFlag does an auto-init. +// Returns cpu_info flags. +LIBYUV_API +int InitCpuFlags(void); + +// Detect CPU has SSE2 etc. +// Test_flag parameter should be one of kCpuHas constants above. +// Returns non-zero if instruction set is detected +static __inline int TestCpuFlag(int test_flag) { + LIBYUV_API extern int cpu_info_; +#ifdef __ATOMIC_RELAXED + int cpu_info = __atomic_load_n(&cpu_info_, __ATOMIC_RELAXED); +#else + int cpu_info = cpu_info_; +#endif + return (!cpu_info ? InitCpuFlags() : cpu_info) & test_flag; +} + +// Internal function for parsing /proc/cpuinfo. +LIBYUV_API +int ArmCpuCaps(const char* cpuinfo_name); + +// For testing, allow CPU flags to be disabled. +// ie MaskCpuFlags(~kCpuHasSSSE3) to disable SSSE3. +// MaskCpuFlags(-1) to enable all cpu specific optimizations. +// MaskCpuFlags(1) to disable all cpu specific optimizations. +// MaskCpuFlags(0) to reset state so next call will auto init. +// Returns cpu_info flags. +LIBYUV_API +int MaskCpuFlags(int enable_flags); + +// Sets the CPU flags to |cpu_flags|, bypassing the detection code. |cpu_flags| +// should be a valid combination of the kCpuHas constants above and include +// kCpuInitialized. Use this method when running in a sandboxed process where +// the detection code might fail (as it might access /proc/cpuinfo). In such +// cases the cpu_info can be obtained from a non sandboxed process by calling +// InitCpuFlags() and passed to the sandboxed process (via command line +// parameters, IPC...) which can then call this method to initialize the CPU +// flags. +// Notes: +// - when specifying 0 for |cpu_flags|, the auto initialization is enabled +// again. +// - enabling CPU features that are not supported by the CPU will result in +// undefined behavior. +// TODO(fbarchard): consider writing a helper function that translates from +// other library CPU info to libyuv CPU info and add a .md doc that explains +// CPU detection. +static __inline void SetCpuFlags(int cpu_flags) { + LIBYUV_API extern int cpu_info_; +#ifdef __ATOMIC_RELAXED + __atomic_store_n(&cpu_info_, cpu_flags, __ATOMIC_RELAXED); +#else + cpu_info_ = cpu_flags; +#endif +} + +// Low level cpuid for X86. Returns zeros on other CPUs. +// eax is the info type that you want. +// ecx is typically the cpu number, and should normally be zero. +LIBYUV_API +void CpuId(int info_eax, int info_ecx, int* cpu_info); + +#ifdef __cplusplus +} // extern "C" +} // namespace libyuv +#endif + +#endif // INCLUDE_LIBYUV_CPU_ID_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/macros_msa.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/macros_msa.h new file mode 100644 index 0000000000..29997ce11f --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/macros_msa.h @@ -0,0 +1,233 @@ +/* + * Copyright 2016 The LibYuv Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef INCLUDE_LIBYUV_MACROS_MSA_H_ +#define INCLUDE_LIBYUV_MACROS_MSA_H_ + +#if !defined(LIBYUV_DISABLE_MSA) && defined(__mips_msa) +#include +#include + +#if (__mips_isa_rev >= 6) +#define LW(psrc) \ + ({ \ + const uint8_t* psrc_lw_m = (const uint8_t*)(psrc); \ + uint32_t val_m; \ + asm volatile("lw %[val_m], %[psrc_lw_m] \n" \ + : [val_m] "=r"(val_m) \ + : [psrc_lw_m] "m"(*psrc_lw_m)); \ + val_m; \ + }) + +#if (__mips == 64) +#define LD(psrc) \ + ({ \ + const uint8_t* psrc_ld_m = (const uint8_t*)(psrc); \ + uint64_t val_m = 0; \ + asm volatile("ld %[val_m], %[psrc_ld_m] \n" \ + : [val_m] "=r"(val_m) \ + : [psrc_ld_m] "m"(*psrc_ld_m)); \ + val_m; \ + }) +#else // !(__mips == 64) +#define LD(psrc) \ + ({ \ + const uint8_t* psrc_ld_m = (const uint8_t*)(psrc); \ + uint32_t val0_m, val1_m; \ + uint64_t val_m = 0; \ + val0_m = LW(psrc_ld_m); \ + val1_m = LW(psrc_ld_m + 4); \ + val_m = (uint64_t)(val1_m); /* NOLINT */ \ + val_m = (uint64_t)((val_m << 32) & 0xFFFFFFFF00000000); /* NOLINT */ \ + val_m = (uint64_t)(val_m | (uint64_t)val0_m); /* NOLINT */ \ + val_m; \ + }) +#endif // (__mips == 64) + +#define SW(val, pdst) \ + ({ \ + uint8_t* pdst_sw_m = (uint8_t*)(pdst); /* NOLINT */ \ + uint32_t val_m = (val); \ + asm volatile("sw %[val_m], %[pdst_sw_m] \n" \ + : [pdst_sw_m] "=m"(*pdst_sw_m) \ + : [val_m] "r"(val_m)); \ + }) + +#if (__mips == 64) +#define SD(val, pdst) \ + ({ \ + uint8_t* pdst_sd_m = (uint8_t*)(pdst); /* NOLINT */ \ + uint64_t val_m = (val); \ + asm volatile("sd %[val_m], %[pdst_sd_m] \n" \ + : [pdst_sd_m] "=m"(*pdst_sd_m) \ + : [val_m] "r"(val_m)); \ + }) +#else // !(__mips == 64) +#define SD(val, pdst) \ + ({ \ + uint8_t* pdst_sd_m = (uint8_t*)(pdst); /* NOLINT */ \ + uint32_t val0_m, val1_m; \ + val0_m = (uint32_t)((val)&0x00000000FFFFFFFF); \ + val1_m = (uint32_t)(((val) >> 32) & 0x00000000FFFFFFFF); \ + SW(val0_m, pdst_sd_m); \ + SW(val1_m, pdst_sd_m + 4); \ + }) +#endif // !(__mips == 64) +#else // !(__mips_isa_rev >= 6) +#define LW(psrc) \ + ({ \ + const uint8_t* psrc_lw_m = (const uint8_t*)(psrc); \ + uint32_t val_m; \ + asm volatile("ulw %[val_m], %[psrc_lw_m] \n" \ + : [val_m] "=r"(val_m) \ + : [psrc_lw_m] "m"(*psrc_lw_m)); \ + val_m; \ + }) + +#if (__mips == 64) +#define LD(psrc) \ + ({ \ + const uint8_t* psrc_ld_m = (const uint8_t*)(psrc); \ + uint64_t val_m = 0; \ + asm volatile("uld %[val_m], %[psrc_ld_m] \n" \ + : [val_m] "=r"(val_m) \ + : [psrc_ld_m] "m"(*psrc_ld_m)); \ + val_m; \ + }) +#else // !(__mips == 64) +#define LD(psrc) \ + ({ \ + const uint8_t* psrc_ld_m = (const uint8_t*)(psrc); \ + uint32_t val0_m, val1_m; \ + uint64_t val_m = 0; \ + val0_m = LW(psrc_ld_m); \ + val1_m = LW(psrc_ld_m + 4); \ + val_m = (uint64_t)(val1_m); /* NOLINT */ \ + val_m = (uint64_t)((val_m << 32) & 0xFFFFFFFF00000000); /* NOLINT */ \ + val_m = (uint64_t)(val_m | (uint64_t)val0_m); /* NOLINT */ \ + val_m; \ + }) +#endif // (__mips == 64) + +#define SW(val, pdst) \ + ({ \ + uint8_t* pdst_sw_m = (uint8_t*)(pdst); /* NOLINT */ \ + uint32_t val_m = (val); \ + asm volatile("usw %[val_m], %[pdst_sw_m] \n" \ + : [pdst_sw_m] "=m"(*pdst_sw_m) \ + : [val_m] "r"(val_m)); \ + }) + +#define SD(val, pdst) \ + ({ \ + uint8_t* pdst_sd_m = (uint8_t*)(pdst); /* NOLINT */ \ + uint32_t val0_m, val1_m; \ + val0_m = (uint32_t)((val)&0x00000000FFFFFFFF); \ + val1_m = (uint32_t)(((val) >> 32) & 0x00000000FFFFFFFF); \ + SW(val0_m, pdst_sd_m); \ + SW(val1_m, pdst_sd_m + 4); \ + }) +#endif // (__mips_isa_rev >= 6) + +// TODO(fbarchard): Consider removing __VAR_ARGS versions. +#define LD_B(RTYPE, psrc) *((RTYPE*)(psrc)) /* NOLINT */ +#define LD_UB(...) LD_B(const v16u8, __VA_ARGS__) + +#define ST_B(RTYPE, in, pdst) *((RTYPE*)(pdst)) = (in) /* NOLINT */ +#define ST_UB(...) ST_B(v16u8, __VA_ARGS__) + +#define ST_H(RTYPE, in, pdst) *((RTYPE*)(pdst)) = (in) /* NOLINT */ +#define ST_UH(...) ST_H(v8u16, __VA_ARGS__) + +/* Description : Load two vectors with 16 'byte' sized elements + Arguments : Inputs - psrc, stride + Outputs - out0, out1 + Return Type - as per RTYPE + Details : Load 16 byte elements in 'out0' from (psrc) + Load 16 byte elements in 'out1' from (psrc + stride) +*/ +#define LD_B2(RTYPE, psrc, stride, out0, out1) \ + { \ + out0 = LD_B(RTYPE, (psrc)); \ + out1 = LD_B(RTYPE, (psrc) + stride); \ + } +#define LD_UB2(...) LD_B2(const v16u8, __VA_ARGS__) + +#define LD_B4(RTYPE, psrc, stride, out0, out1, out2, out3) \ + { \ + LD_B2(RTYPE, (psrc), stride, out0, out1); \ + LD_B2(RTYPE, (psrc) + 2 * stride, stride, out2, out3); \ + } +#define LD_UB4(...) LD_B4(const v16u8, __VA_ARGS__) + +/* Description : Store two vectors with stride each having 16 'byte' sized + elements + Arguments : Inputs - in0, in1, pdst, stride + Details : Store 16 byte elements from 'in0' to (pdst) + Store 16 byte elements from 'in1' to (pdst + stride) +*/ +#define ST_B2(RTYPE, in0, in1, pdst, stride) \ + { \ + ST_B(RTYPE, in0, (pdst)); \ + ST_B(RTYPE, in1, (pdst) + stride); \ + } +#define ST_UB2(...) ST_B2(v16u8, __VA_ARGS__) + +#define ST_B4(RTYPE, in0, in1, in2, in3, pdst, stride) \ + { \ + ST_B2(RTYPE, in0, in1, (pdst), stride); \ + ST_B2(RTYPE, in2, in3, (pdst) + 2 * stride, stride); \ + } +#define ST_UB4(...) ST_B4(v16u8, __VA_ARGS__) + +/* Description : Store vectors of 8 halfword elements with stride + Arguments : Inputs - in0, in1, pdst, stride + Details : Store 8 halfword elements from 'in0' to (pdst) + Store 8 halfword elements from 'in1' to (pdst + stride) +*/ +#define ST_H2(RTYPE, in0, in1, pdst, stride) \ + { \ + ST_H(RTYPE, in0, (pdst)); \ + ST_H(RTYPE, in1, (pdst) + stride); \ + } +#define ST_UH2(...) ST_H2(v8u16, __VA_ARGS__) + +// TODO(fbarchard): Consider using __msa_vshf_b and __msa_ilvr_b directly. +/* Description : Shuffle byte vector elements as per mask vector + Arguments : Inputs - in0, in1, in2, in3, mask0, mask1 + Outputs - out0, out1 + Return Type - as per RTYPE + Details : Byte elements from 'in0' & 'in1' are copied selectively to + 'out0' as per control vector 'mask0' +*/ +#define VSHF_B2(RTYPE, in0, in1, in2, in3, mask0, mask1, out0, out1) \ + { \ + out0 = (RTYPE)__msa_vshf_b((v16i8)mask0, (v16i8)in1, (v16i8)in0); \ + out1 = (RTYPE)__msa_vshf_b((v16i8)mask1, (v16i8)in3, (v16i8)in2); \ + } +#define VSHF_B2_UB(...) VSHF_B2(v16u8, __VA_ARGS__) + +/* Description : Interleave both left and right half of input vectors + Arguments : Inputs - in0, in1 + Outputs - out0, out1 + Return Type - as per RTYPE + Details : Right half of byte elements from 'in0' and 'in1' are + interleaved and written to 'out0' +*/ +#define ILVRL_B2(RTYPE, in0, in1, out0, out1) \ + { \ + out0 = (RTYPE)__msa_ilvr_b((v16i8)in0, (v16i8)in1); \ + out1 = (RTYPE)__msa_ilvl_b((v16i8)in0, (v16i8)in1); \ + } +#define ILVRL_B2_UB(...) ILVRL_B2(v16u8, __VA_ARGS__) + +#endif /* !defined(LIBYUV_DISABLE_MSA) && defined(__mips_msa) */ + +#endif // INCLUDE_LIBYUV_MACROS_MSA_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/mjpeg_decoder.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/mjpeg_decoder.h new file mode 100644 index 0000000000..275f8d4c18 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/mjpeg_decoder.h @@ -0,0 +1,195 @@ +/* + * Copyright 2012 The LibYuv Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef INCLUDE_LIBYUV_MJPEG_DECODER_H_ +#define INCLUDE_LIBYUV_MJPEG_DECODER_H_ + +#include "libyuv/basic_types.h" + +#ifdef __cplusplus +// NOTE: For a simplified public API use convert.h MJPGToI420(). + +struct jpeg_common_struct; +struct jpeg_decompress_struct; +struct jpeg_source_mgr; + +namespace libyuv { + +#ifdef __cplusplus +extern "C" { +#endif + +LIBYUV_BOOL ValidateJpeg(const uint8_t* sample, size_t sample_size); + +#ifdef __cplusplus +} // extern "C" +#endif + +static const uint32_t kUnknownDataSize = 0xFFFFFFFF; + +enum JpegSubsamplingType { + kJpegYuv420, + kJpegYuv422, + kJpegYuv444, + kJpegYuv400, + kJpegUnknown +}; + +struct Buffer { + const uint8_t* data; + int len; +}; + +struct BufferVector { + Buffer* buffers; + int len; + int pos; +}; + +struct SetJmpErrorMgr; + +// MJPEG ("Motion JPEG") is a pseudo-standard video codec where the frames are +// simply independent JPEG images with a fixed huffman table (which is omitted). +// It is rarely used in video transmission, but is common as a camera capture +// format, especially in Logitech devices. This class implements a decoder for +// MJPEG frames. +// +// See http://tools.ietf.org/html/rfc2435 +class LIBYUV_API MJpegDecoder { + public: + typedef void (*CallbackFunction)(void* opaque, + const uint8_t* const* data, + const int* strides, + int rows); + + static const int kColorSpaceUnknown; + static const int kColorSpaceGrayscale; + static const int kColorSpaceRgb; + static const int kColorSpaceYCbCr; + static const int kColorSpaceCMYK; + static const int kColorSpaceYCCK; + + MJpegDecoder(); + ~MJpegDecoder(); + + // Loads a new frame, reads its headers, and determines the uncompressed + // image format. + // Returns LIBYUV_TRUE if image looks valid and format is supported. + // If return value is LIBYUV_TRUE, then the values for all the following + // getters are populated. + // src_len is the size of the compressed mjpeg frame in bytes. + LIBYUV_BOOL LoadFrame(const uint8_t* src, size_t src_len); + + // Returns width of the last loaded frame in pixels. + int GetWidth(); + + // Returns height of the last loaded frame in pixels. + int GetHeight(); + + // Returns format of the last loaded frame. The return value is one of the + // kColorSpace* constants. + int GetColorSpace(); + + // Number of color components in the color space. + int GetNumComponents(); + + // Sample factors of the n-th component. + int GetHorizSampFactor(int component); + + int GetVertSampFactor(int component); + + int GetHorizSubSampFactor(int component); + + int GetVertSubSampFactor(int component); + + // Public for testability. + int GetImageScanlinesPerImcuRow(); + + // Public for testability. + int GetComponentScanlinesPerImcuRow(int component); + + // Width of a component in bytes. + int GetComponentWidth(int component); + + // Height of a component. + int GetComponentHeight(int component); + + // Width of a component in bytes with padding for DCTSIZE. Public for testing. + int GetComponentStride(int component); + + // Size of a component in bytes. + int GetComponentSize(int component); + + // Call this after LoadFrame() if you decide you don't want to decode it + // after all. + LIBYUV_BOOL UnloadFrame(); + + // Decodes the entire image into a one-buffer-per-color-component format. + // dst_width must match exactly. dst_height must be <= to image height; if + // less, the image is cropped. "planes" must have size equal to at least + // GetNumComponents() and they must point to non-overlapping buffers of size + // at least GetComponentSize(i). The pointers in planes are incremented + // to point to after the end of the written data. + // TODO(fbarchard): Add dst_x, dst_y to allow specific rect to be decoded. + LIBYUV_BOOL DecodeToBuffers(uint8_t** planes, int dst_width, int dst_height); + + // Decodes the entire image and passes the data via repeated calls to a + // callback function. Each call will get the data for a whole number of + // image scanlines. + // TODO(fbarchard): Add dst_x, dst_y to allow specific rect to be decoded. + LIBYUV_BOOL DecodeToCallback(CallbackFunction fn, + void* opaque, + int dst_width, + int dst_height); + + // The helper function which recognizes the jpeg sub-sampling type. + static JpegSubsamplingType JpegSubsamplingTypeHelper( + int* subsample_x, + int* subsample_y, + int number_of_components); + + private: + void AllocOutputBuffers(int num_outbufs); + void DestroyOutputBuffers(); + + LIBYUV_BOOL StartDecode(); + LIBYUV_BOOL FinishDecode(); + + void SetScanlinePointers(uint8_t** data); + LIBYUV_BOOL DecodeImcuRow(); + + int GetComponentScanlinePadding(int component); + + // A buffer holding the input data for a frame. + Buffer buf_; + BufferVector buf_vec_; + + jpeg_decompress_struct* decompress_struct_; + jpeg_source_mgr* source_mgr_; + SetJmpErrorMgr* error_mgr_; + + // LIBYUV_TRUE iff at least one component has scanline padding. (i.e., + // GetComponentScanlinePadding() != 0.) + LIBYUV_BOOL has_scanline_padding_; + + // Temporaries used to point to scanline outputs. + int num_outbufs_; // Outermost size of all arrays below. + uint8_t*** scanlines_; + int* scanlines_sizes_; + // Temporary buffer used for decoding when we can't decode directly to the + // output buffers. Large enough for just one iMCU row. + uint8_t** databuf_; + int* databuf_strides_; +}; + +} // namespace libyuv + +#endif // __cplusplus +#endif // INCLUDE_LIBYUV_MJPEG_DECODER_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/planar_functions.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/planar_functions.h new file mode 100644 index 0000000000..f6f5b3edd8 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/planar_functions.h @@ -0,0 +1,860 @@ +/* + * Copyright 2011 The LibYuv Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef INCLUDE_LIBYUV_PLANAR_FUNCTIONS_H_ +#define INCLUDE_LIBYUV_PLANAR_FUNCTIONS_H_ + +#include "libyuv/basic_types.h" + +// TODO(fbarchard): Remove the following headers includes. +#include "libyuv/convert.h" +#include "libyuv/convert_argb.h" + +#ifdef __cplusplus +namespace libyuv { +extern "C" { +#endif + +// TODO(fbarchard): Move cpu macros to row.h +#if defined(__pnacl__) || defined(__CLR_VER) || \ + (defined(__native_client__) && defined(__x86_64__)) || \ + (defined(__i386__) && !defined(__SSE__) && !defined(__clang__)) +#define LIBYUV_DISABLE_X86 +#endif +// MemorySanitizer does not support assembly code yet. http://crbug.com/344505 +#if defined(__has_feature) +#if __has_feature(memory_sanitizer) +#define LIBYUV_DISABLE_X86 +#endif +#endif +// The following are available on all x86 platforms: +#if !defined(LIBYUV_DISABLE_X86) && \ + (defined(_M_IX86) || defined(__x86_64__) || defined(__i386__)) +#define HAS_ARGBAFFINEROW_SSE2 +#endif + +// Copy a plane of data. +LIBYUV_API +void CopyPlane(const uint8_t* src_y, + int src_stride_y, + uint8_t* dst_y, + int dst_stride_y, + int width, + int height); + +LIBYUV_API +void CopyPlane_16(const uint16_t* src_y, + int src_stride_y, + uint16_t* dst_y, + int dst_stride_y, + int width, + int height); + +LIBYUV_API +void Convert16To8Plane(const uint16_t* src_y, + int src_stride_y, + uint8_t* dst_y, + int dst_stride_y, + int scale, // 16384 for 10 bits + int width, + int height); + +LIBYUV_API +void Convert8To16Plane(const uint8_t* src_y, + int src_stride_y, + uint16_t* dst_y, + int dst_stride_y, + int scale, // 1024 for 10 bits + int width, + int height); + +// Set a plane of data to a 32 bit value. +LIBYUV_API +void SetPlane(uint8_t* dst_y, + int dst_stride_y, + int width, + int height, + uint32_t value); + +// Split interleaved UV plane into separate U and V planes. +LIBYUV_API +void SplitUVPlane(const uint8_t* src_uv, + int src_stride_uv, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Merge separate U and V planes into one interleaved UV plane. +LIBYUV_API +void MergeUVPlane(const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_uv, + int dst_stride_uv, + int width, + int height); + +// Split interleaved RGB plane into separate R, G and B planes. +LIBYUV_API +void SplitRGBPlane(const uint8_t* src_rgb, + int src_stride_rgb, + uint8_t* dst_r, + int dst_stride_r, + uint8_t* dst_g, + int dst_stride_g, + uint8_t* dst_b, + int dst_stride_b, + int width, + int height); + +// Merge separate R, G and B planes into one interleaved RGB plane. +LIBYUV_API +void MergeRGBPlane(const uint8_t* src_r, + int src_stride_r, + const uint8_t* src_g, + int src_stride_g, + const uint8_t* src_b, + int src_stride_b, + uint8_t* dst_rgb, + int dst_stride_rgb, + int width, + int height); + +// Copy I400. Supports inverting. +LIBYUV_API +int I400ToI400(const uint8_t* src_y, + int src_stride_y, + uint8_t* dst_y, + int dst_stride_y, + int width, + int height); + +#define J400ToJ400 I400ToI400 + +// Copy I422 to I422. +#define I422ToI422 I422Copy +LIBYUV_API +int I422Copy(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Copy I444 to I444. +#define I444ToI444 I444Copy +LIBYUV_API +int I444Copy(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Convert YUY2 to I422. +LIBYUV_API +int YUY2ToI422(const uint8_t* src_yuy2, + int src_stride_yuy2, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Convert UYVY to I422. +LIBYUV_API +int UYVYToI422(const uint8_t* src_uyvy, + int src_stride_uyvy, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +LIBYUV_API +int YUY2ToNV12(const uint8_t* src_yuy2, + int src_stride_yuy2, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_uv, + int dst_stride_uv, + int width, + int height); + +LIBYUV_API +int UYVYToNV12(const uint8_t* src_uyvy, + int src_stride_uyvy, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_uv, + int dst_stride_uv, + int width, + int height); + +// Convert NV21 to NV12. +LIBYUV_API +int NV21ToNV12(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_vu, + int src_stride_vu, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_uv, + int dst_stride_uv, + int width, + int height); + +LIBYUV_API +int YUY2ToY(const uint8_t* src_yuy2, + int src_stride_yuy2, + uint8_t* dst_y, + int dst_stride_y, + int width, + int height); + +// Convert I420 to I400. (calls CopyPlane ignoring u/v). +LIBYUV_API +int I420ToI400(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_y, + int dst_stride_y, + int width, + int height); + +// Alias +#define J420ToJ400 I420ToI400 +#define I420ToI420Mirror I420Mirror + +// I420 mirror. +LIBYUV_API +int I420Mirror(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Alias +#define I400ToI400Mirror I400Mirror + +// I400 mirror. A single plane is mirrored horizontally. +// Pass negative height to achieve 180 degree rotation. +LIBYUV_API +int I400Mirror(const uint8_t* src_y, + int src_stride_y, + uint8_t* dst_y, + int dst_stride_y, + int width, + int height); + +// Alias +#define ARGBToARGBMirror ARGBMirror + +// ARGB mirror. +LIBYUV_API +int ARGBMirror(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert NV12 to RGB565. +LIBYUV_API +int NV12ToRGB565(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_uv, + int src_stride_uv, + uint8_t* dst_rgb565, + int dst_stride_rgb565, + int width, + int height); + +// I422ToARGB is in convert_argb.h +// Convert I422 to BGRA. +LIBYUV_API +int I422ToBGRA(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_bgra, + int dst_stride_bgra, + int width, + int height); + +// Convert I422 to ABGR. +LIBYUV_API +int I422ToABGR(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_abgr, + int dst_stride_abgr, + int width, + int height); + +// Convert I422 to RGBA. +LIBYUV_API +int I422ToRGBA(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_rgba, + int dst_stride_rgba, + int width, + int height); + +// Alias +#define RGB24ToRAW RAWToRGB24 + +LIBYUV_API +int RAWToRGB24(const uint8_t* src_raw, + int src_stride_raw, + uint8_t* dst_rgb24, + int dst_stride_rgb24, + int width, + int height); + +// Draw a rectangle into I420. +LIBYUV_API +int I420Rect(uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int x, + int y, + int width, + int height, + int value_y, + int value_u, + int value_v); + +// Draw a rectangle into ARGB. +LIBYUV_API +int ARGBRect(uint8_t* dst_argb, + int dst_stride_argb, + int dst_x, + int dst_y, + int width, + int height, + uint32_t value); + +// Convert ARGB to gray scale ARGB. +LIBYUV_API +int ARGBGrayTo(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Make a rectangle of ARGB gray scale. +LIBYUV_API +int ARGBGray(uint8_t* dst_argb, + int dst_stride_argb, + int dst_x, + int dst_y, + int width, + int height); + +// Make a rectangle of ARGB Sepia tone. +LIBYUV_API +int ARGBSepia(uint8_t* dst_argb, + int dst_stride_argb, + int dst_x, + int dst_y, + int width, + int height); + +// Apply a matrix rotation to each ARGB pixel. +// matrix_argb is 4 signed ARGB values. -128 to 127 representing -2 to 2. +// The first 4 coefficients apply to B, G, R, A and produce B of the output. +// The next 4 coefficients apply to B, G, R, A and produce G of the output. +// The next 4 coefficients apply to B, G, R, A and produce R of the output. +// The last 4 coefficients apply to B, G, R, A and produce A of the output. +LIBYUV_API +int ARGBColorMatrix(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_argb, + int dst_stride_argb, + const int8_t* matrix_argb, + int width, + int height); + +// Deprecated. Use ARGBColorMatrix instead. +// Apply a matrix rotation to each ARGB pixel. +// matrix_argb is 3 signed ARGB values. -128 to 127 representing -1 to 1. +// The first 4 coefficients apply to B, G, R, A and produce B of the output. +// The next 4 coefficients apply to B, G, R, A and produce G of the output. +// The last 4 coefficients apply to B, G, R, A and produce R of the output. +LIBYUV_API +int RGBColorMatrix(uint8_t* dst_argb, + int dst_stride_argb, + const int8_t* matrix_rgb, + int dst_x, + int dst_y, + int width, + int height); + +// Apply a color table each ARGB pixel. +// Table contains 256 ARGB values. +LIBYUV_API +int ARGBColorTable(uint8_t* dst_argb, + int dst_stride_argb, + const uint8_t* table_argb, + int dst_x, + int dst_y, + int width, + int height); + +// Apply a color table each ARGB pixel but preserve destination alpha. +// Table contains 256 ARGB values. +LIBYUV_API +int RGBColorTable(uint8_t* dst_argb, + int dst_stride_argb, + const uint8_t* table_argb, + int dst_x, + int dst_y, + int width, + int height); + +// Apply a luma/color table each ARGB pixel but preserve destination alpha. +// Table contains 32768 values indexed by [Y][C] where 7 it 7 bit luma from +// RGB (YJ style) and C is an 8 bit color component (R, G or B). +LIBYUV_API +int ARGBLumaColorTable(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_argb, + int dst_stride_argb, + const uint8_t* luma, + int width, + int height); + +// Apply a 3 term polynomial to ARGB values. +// poly points to a 4x4 matrix. The first row is constants. The 2nd row is +// coefficients for b, g, r and a. The 3rd row is coefficients for b squared, +// g squared, r squared and a squared. The 4rd row is coefficients for b to +// the 3, g to the 3, r to the 3 and a to the 3. The values are summed and +// result clamped to 0 to 255. +// A polynomial approximation can be dirived using software such as 'R'. + +LIBYUV_API +int ARGBPolynomial(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_argb, + int dst_stride_argb, + const float* poly, + int width, + int height); + +// Convert plane of 16 bit shorts to half floats. +// Source values are multiplied by scale before storing as half float. +LIBYUV_API +int HalfFloatPlane(const uint16_t* src_y, + int src_stride_y, + uint16_t* dst_y, + int dst_stride_y, + float scale, + int width, + int height); + +// Convert a buffer of bytes to floats, scale the values and store as floats. +LIBYUV_API +int ByteToFloat(const uint8_t* src_y, float* dst_y, float scale, int width); + +// Quantize a rectangle of ARGB. Alpha unaffected. +// scale is a 16 bit fractional fixed point scaler between 0 and 65535. +// interval_size should be a value between 1 and 255. +// interval_offset should be a value between 0 and 255. +LIBYUV_API +int ARGBQuantize(uint8_t* dst_argb, + int dst_stride_argb, + int scale, + int interval_size, + int interval_offset, + int dst_x, + int dst_y, + int width, + int height); + +// Copy ARGB to ARGB. +LIBYUV_API +int ARGBCopy(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Copy Alpha channel of ARGB to alpha of ARGB. +LIBYUV_API +int ARGBCopyAlpha(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Extract the alpha channel from ARGB. +LIBYUV_API +int ARGBExtractAlpha(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_a, + int dst_stride_a, + int width, + int height); + +// Copy Y channel to Alpha of ARGB. +LIBYUV_API +int ARGBCopyYToAlpha(const uint8_t* src_y, + int src_stride_y, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +typedef void (*ARGBBlendRow)(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); + +// Get function to Alpha Blend ARGB pixels and store to destination. +LIBYUV_API +ARGBBlendRow GetARGBBlend(); + +// Alpha Blend ARGB images and store to destination. +// Source is pre-multiplied by alpha using ARGBAttenuate. +// Alpha of destination is set to 255. +LIBYUV_API +int ARGBBlend(const uint8_t* src_argb0, + int src_stride_argb0, + const uint8_t* src_argb1, + int src_stride_argb1, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Alpha Blend plane and store to destination. +// Source is not pre-multiplied by alpha. +LIBYUV_API +int BlendPlane(const uint8_t* src_y0, + int src_stride_y0, + const uint8_t* src_y1, + int src_stride_y1, + const uint8_t* alpha, + int alpha_stride, + uint8_t* dst_y, + int dst_stride_y, + int width, + int height); + +// Alpha Blend YUV images and store to destination. +// Source is not pre-multiplied by alpha. +// Alpha is full width x height and subsampled to half size to apply to UV. +LIBYUV_API +int I420Blend(const uint8_t* src_y0, + int src_stride_y0, + const uint8_t* src_u0, + int src_stride_u0, + const uint8_t* src_v0, + int src_stride_v0, + const uint8_t* src_y1, + int src_stride_y1, + const uint8_t* src_u1, + int src_stride_u1, + const uint8_t* src_v1, + int src_stride_v1, + const uint8_t* alpha, + int alpha_stride, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height); + +// Multiply ARGB image by ARGB image. Shifted down by 8. Saturates to 255. +LIBYUV_API +int ARGBMultiply(const uint8_t* src_argb0, + int src_stride_argb0, + const uint8_t* src_argb1, + int src_stride_argb1, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Add ARGB image with ARGB image. Saturates to 255. +LIBYUV_API +int ARGBAdd(const uint8_t* src_argb0, + int src_stride_argb0, + const uint8_t* src_argb1, + int src_stride_argb1, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Subtract ARGB image (argb1) from ARGB image (argb0). Saturates to 0. +LIBYUV_API +int ARGBSubtract(const uint8_t* src_argb0, + int src_stride_argb0, + const uint8_t* src_argb1, + int src_stride_argb1, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert I422 to YUY2. +LIBYUV_API +int I422ToYUY2(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_yuy2, + int dst_stride_yuy2, + int width, + int height); + +// Convert I422 to UYVY. +LIBYUV_API +int I422ToUYVY(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_uyvy, + int dst_stride_uyvy, + int width, + int height); + +// Convert unattentuated ARGB to preattenuated ARGB. +LIBYUV_API +int ARGBAttenuate(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Convert preattentuated ARGB to unattenuated ARGB. +LIBYUV_API +int ARGBUnattenuate(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Internal function - do not call directly. +// Computes table of cumulative sum for image where the value is the sum +// of all values above and to the left of the entry. Used by ARGBBlur. +LIBYUV_API +int ARGBComputeCumulativeSum(const uint8_t* src_argb, + int src_stride_argb, + int32_t* dst_cumsum, + int dst_stride32_cumsum, + int width, + int height); + +// Blur ARGB image. +// dst_cumsum table of width * (height + 1) * 16 bytes aligned to +// 16 byte boundary. +// dst_stride32_cumsum is number of ints in a row (width * 4). +// radius is number of pixels around the center. e.g. 1 = 3x3. 2=5x5. +// Blur is optimized for radius of 5 (11x11) or less. +LIBYUV_API +int ARGBBlur(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_argb, + int dst_stride_argb, + int32_t* dst_cumsum, + int dst_stride32_cumsum, + int width, + int height, + int radius); + +// Multiply ARGB image by ARGB value. +LIBYUV_API +int ARGBShade(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height, + uint32_t value); + +// Interpolate between two images using specified amount of interpolation +// (0 to 255) and store to destination. +// 'interpolation' is specified as 8 bit fraction where 0 means 100% src0 +// and 255 means 1% src0 and 99% src1. +LIBYUV_API +int InterpolatePlane(const uint8_t* src0, + int src_stride0, + const uint8_t* src1, + int src_stride1, + uint8_t* dst, + int dst_stride, + int width, + int height, + int interpolation); + +// Interpolate between two ARGB images using specified amount of interpolation +// Internally calls InterpolatePlane with width * 4 (bpp). +LIBYUV_API +int ARGBInterpolate(const uint8_t* src_argb0, + int src_stride_argb0, + const uint8_t* src_argb1, + int src_stride_argb1, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height, + int interpolation); + +// Interpolate between two YUV images using specified amount of interpolation +// Internally calls InterpolatePlane on each plane where the U and V planes +// are half width and half height. +LIBYUV_API +int I420Interpolate(const uint8_t* src0_y, + int src0_stride_y, + const uint8_t* src0_u, + int src0_stride_u, + const uint8_t* src0_v, + int src0_stride_v, + const uint8_t* src1_y, + int src1_stride_y, + const uint8_t* src1_u, + int src1_stride_u, + const uint8_t* src1_v, + int src1_stride_v, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height, + int interpolation); + +// Row function for copying pixels from a source with a slope to a row +// of destination. Useful for scaling, rotation, mirror, texture mapping. +LIBYUV_API +void ARGBAffineRow_C(const uint8_t* src_argb, + int src_argb_stride, + uint8_t* dst_argb, + const float* uv_dudv, + int width); +// TODO(fbarchard): Move ARGBAffineRow_SSE2 to row.h +LIBYUV_API +void ARGBAffineRow_SSE2(const uint8_t* src_argb, + int src_argb_stride, + uint8_t* dst_argb, + const float* uv_dudv, + int width); + +// Shuffle ARGB channel order. e.g. BGRA to ARGB. +// shuffler is 16 bytes and must be aligned. +LIBYUV_API +int ARGBShuffle(const uint8_t* src_bgra, + int src_stride_bgra, + uint8_t* dst_argb, + int dst_stride_argb, + const uint8_t* shuffler, + int width, + int height); + +// Sobel ARGB effect with planar output. +LIBYUV_API +int ARGBSobelToPlane(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_y, + int dst_stride_y, + int width, + int height); + +// Sobel ARGB effect. +LIBYUV_API +int ARGBSobel(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +// Sobel ARGB effect w/ Sobel X, Sobel, Sobel Y in ARGB. +LIBYUV_API +int ARGBSobelXY(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_argb, + int dst_stride_argb, + int width, + int height); + +#ifdef __cplusplus +} // extern "C" +} // namespace libyuv +#endif + +#endif // INCLUDE_LIBYUV_PLANAR_FUNCTIONS_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate.h new file mode 100644 index 0000000000..c64e0216d5 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate.h @@ -0,0 +1,182 @@ +/* + * Copyright 2011 The LibYuv Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef INCLUDE_LIBYUV_ROTATE_H_ +#define INCLUDE_LIBYUV_ROTATE_H_ + +#include "libyuv/basic_types.h" + +#ifdef __cplusplus +namespace libyuv { +extern "C" { +#endif + +// Supported rotation. +typedef enum RotationMode { + kRotate0 = 0, // No rotation. + kRotate90 = 90, // Rotate 90 degrees clockwise. + kRotate180 = 180, // Rotate 180 degrees. + kRotate270 = 270, // Rotate 270 degrees clockwise. + + // Deprecated. + kRotateNone = 0, + kRotateClockwise = 90, + kRotateCounterClockwise = 270, +} RotationModeEnum; + +// Rotate I420 frame. +LIBYUV_API +int I420Rotate(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height, + enum RotationMode mode); + +// Rotate I444 frame. +LIBYUV_API +int I444Rotate(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height, + enum RotationMode mode); + +// Rotate NV12 input and store in I420. +LIBYUV_API +int NV12ToI420Rotate(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_uv, + int src_stride_uv, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int width, + int height, + enum RotationMode mode); + +// Rotate a plane by 0, 90, 180, or 270. +LIBYUV_API +int RotatePlane(const uint8_t* src, + int src_stride, + uint8_t* dst, + int dst_stride, + int width, + int height, + enum RotationMode mode); + +// Rotate planes by 90, 180, 270. Deprecated. +LIBYUV_API +void RotatePlane90(const uint8_t* src, + int src_stride, + uint8_t* dst, + int dst_stride, + int width, + int height); + +LIBYUV_API +void RotatePlane180(const uint8_t* src, + int src_stride, + uint8_t* dst, + int dst_stride, + int width, + int height); + +LIBYUV_API +void RotatePlane270(const uint8_t* src, + int src_stride, + uint8_t* dst, + int dst_stride, + int width, + int height); + +LIBYUV_API +void RotateUV90(const uint8_t* src, + int src_stride, + uint8_t* dst_a, + int dst_stride_a, + uint8_t* dst_b, + int dst_stride_b, + int width, + int height); + +// Rotations for when U and V are interleaved. +// These functions take one input pointer and +// split the data into two buffers while +// rotating them. Deprecated. +LIBYUV_API +void RotateUV180(const uint8_t* src, + int src_stride, + uint8_t* dst_a, + int dst_stride_a, + uint8_t* dst_b, + int dst_stride_b, + int width, + int height); + +LIBYUV_API +void RotateUV270(const uint8_t* src, + int src_stride, + uint8_t* dst_a, + int dst_stride_a, + uint8_t* dst_b, + int dst_stride_b, + int width, + int height); + +// The 90 and 270 functions are based on transposes. +// Doing a transpose with reversing the read/write +// order will result in a rotation by +- 90 degrees. +// Deprecated. +LIBYUV_API +void TransposePlane(const uint8_t* src, + int src_stride, + uint8_t* dst, + int dst_stride, + int width, + int height); + +LIBYUV_API +void TransposeUV(const uint8_t* src, + int src_stride, + uint8_t* dst_a, + int dst_stride_a, + uint8_t* dst_b, + int dst_stride_b, + int width, + int height); + +#ifdef __cplusplus +} // extern "C" +} // namespace libyuv +#endif + +#endif // INCLUDE_LIBYUV_ROTATE_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate_argb.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate_argb.h new file mode 100644 index 0000000000..20432949ab --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate_argb.h @@ -0,0 +1,37 @@ +/* + * Copyright 2012 The LibYuv Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef INCLUDE_LIBYUV_ROTATE_ARGB_H_ +#define INCLUDE_LIBYUV_ROTATE_ARGB_H_ + +#include "libyuv/basic_types.h" +#include "libyuv/rotate.h" // For RotationMode. + +#ifdef __cplusplus +namespace libyuv { +extern "C" { +#endif + +// Rotate ARGB frame +LIBYUV_API +int ARGBRotate(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_argb, + int dst_stride_argb, + int src_width, + int src_height, + enum RotationMode mode); + +#ifdef __cplusplus +} // extern "C" +} // namespace libyuv +#endif + +#endif // INCLUDE_LIBYUV_ROTATE_ARGB_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate_row.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate_row.h new file mode 100644 index 0000000000..022293eef2 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate_row.h @@ -0,0 +1,223 @@ +/* + * Copyright 2013 The LibYuv Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef INCLUDE_LIBYUV_ROTATE_ROW_H_ +#define INCLUDE_LIBYUV_ROTATE_ROW_H_ + +#include "libyuv/basic_types.h" + +#ifdef __cplusplus +namespace libyuv { +extern "C" { +#endif + +#if defined(__pnacl__) || defined(__CLR_VER) || \ + (defined(__native_client__) && defined(__x86_64__)) || \ + (defined(__i386__) && !defined(__SSE__) && !defined(__clang__)) +#define LIBYUV_DISABLE_X86 +#endif +#if defined(__native_client__) +#define LIBYUV_DISABLE_NEON +#endif +// MemorySanitizer does not support assembly code yet. http://crbug.com/344505 +#if defined(__has_feature) +#if __has_feature(memory_sanitizer) +#define LIBYUV_DISABLE_X86 +#endif +#endif +// The following are available for Visual C and clangcl 32 bit: +#if !defined(LIBYUV_DISABLE_X86) && defined(_M_IX86) && defined(_MSC_VER) +#define HAS_TRANSPOSEWX8_SSSE3 +#define HAS_TRANSPOSEUVWX8_SSE2 +#endif + +// The following are available for GCC 32 or 64 bit: +#if !defined(LIBYUV_DISABLE_X86) && (defined(__i386__) || defined(__x86_64__)) +#define HAS_TRANSPOSEWX8_SSSE3 +#endif + +// The following are available for 64 bit GCC: +#if !defined(LIBYUV_DISABLE_X86) && defined(__x86_64__) +#define HAS_TRANSPOSEWX8_FAST_SSSE3 +#define HAS_TRANSPOSEUVWX8_SSE2 +#endif + +#if !defined(LIBYUV_DISABLE_NEON) && \ + (defined(__ARM_NEON__) || defined(LIBYUV_NEON) || defined(__aarch64__)) +#define HAS_TRANSPOSEWX8_NEON +#define HAS_TRANSPOSEUVWX8_NEON +#endif + +#if !defined(LIBYUV_DISABLE_MSA) && defined(__mips_msa) +#define HAS_TRANSPOSEWX16_MSA +#define HAS_TRANSPOSEUVWX16_MSA +#endif + +#if !defined(LIBYUV_DISABLE_MMI) && defined(_MIPS_ARCH_LOONGSON3A) +#define HAS_TRANSPOSEWX8_MMI +#define HAS_TRANSPOSEUVWX8_MMI +#endif + +void TransposeWxH_C(const uint8_t* src, + int src_stride, + uint8_t* dst, + int dst_stride, + int width, + int height); + +void TransposeWx8_C(const uint8_t* src, + int src_stride, + uint8_t* dst, + int dst_stride, + int width); +void TransposeWx16_C(const uint8_t* src, + int src_stride, + uint8_t* dst, + int dst_stride, + int width); +void TransposeWx8_NEON(const uint8_t* src, + int src_stride, + uint8_t* dst, + int dst_stride, + int width); +void TransposeWx8_SSSE3(const uint8_t* src, + int src_stride, + uint8_t* dst, + int dst_stride, + int width); +void TransposeWx8_MMI(const uint8_t* src, + int src_stride, + uint8_t* dst, + int dst_stride, + int width); +void TransposeWx8_Fast_SSSE3(const uint8_t* src, + int src_stride, + uint8_t* dst, + int dst_stride, + int width); +void TransposeWx16_MSA(const uint8_t* src, + int src_stride, + uint8_t* dst, + int dst_stride, + int width); + +void TransposeWx8_Any_NEON(const uint8_t* src, + int src_stride, + uint8_t* dst, + int dst_stride, + int width); +void TransposeWx8_Any_SSSE3(const uint8_t* src, + int src_stride, + uint8_t* dst, + int dst_stride, + int width); +void TransposeWx8_Any_MMI(const uint8_t* src, + int src_stride, + uint8_t* dst, + int dst_stride, + int width); +void TransposeWx8_Fast_Any_SSSE3(const uint8_t* src, + int src_stride, + uint8_t* dst, + int dst_stride, + int width); +void TransposeWx16_Any_MSA(const uint8_t* src, + int src_stride, + uint8_t* dst, + int dst_stride, + int width); + +void TransposeUVWxH_C(const uint8_t* src, + int src_stride, + uint8_t* dst_a, + int dst_stride_a, + uint8_t* dst_b, + int dst_stride_b, + int width, + int height); + +void TransposeUVWx8_C(const uint8_t* src, + int src_stride, + uint8_t* dst_a, + int dst_stride_a, + uint8_t* dst_b, + int dst_stride_b, + int width); +void TransposeUVWx16_C(const uint8_t* src, + int src_stride, + uint8_t* dst_a, + int dst_stride_a, + uint8_t* dst_b, + int dst_stride_b, + int width); +void TransposeUVWx8_SSE2(const uint8_t* src, + int src_stride, + uint8_t* dst_a, + int dst_stride_a, + uint8_t* dst_b, + int dst_stride_b, + int width); +void TransposeUVWx8_NEON(const uint8_t* src, + int src_stride, + uint8_t* dst_a, + int dst_stride_a, + uint8_t* dst_b, + int dst_stride_b, + int width); +void TransposeUVWx8_MMI(const uint8_t* src, + int src_stride, + uint8_t* dst_a, + int dst_stride_a, + uint8_t* dst_b, + int dst_stride_b, + int width); +void TransposeUVWx16_MSA(const uint8_t* src, + int src_stride, + uint8_t* dst_a, + int dst_stride_a, + uint8_t* dst_b, + int dst_stride_b, + int width); + +void TransposeUVWx8_Any_SSE2(const uint8_t* src, + int src_stride, + uint8_t* dst_a, + int dst_stride_a, + uint8_t* dst_b, + int dst_stride_b, + int width); +void TransposeUVWx8_Any_NEON(const uint8_t* src, + int src_stride, + uint8_t* dst_a, + int dst_stride_a, + uint8_t* dst_b, + int dst_stride_b, + int width); +void TransposeUVWx8_Any_MMI(const uint8_t* src, + int src_stride, + uint8_t* dst_a, + int dst_stride_a, + uint8_t* dst_b, + int dst_stride_b, + int width); +void TransposeUVWx16_Any_MSA(const uint8_t* src, + int src_stride, + uint8_t* dst_a, + int dst_stride_a, + uint8_t* dst_b, + int dst_stride_b, + int width); + +#ifdef __cplusplus +} // extern "C" +} // namespace libyuv +#endif + +#endif // INCLUDE_LIBYUV_ROTATE_ROW_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/row.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/row.h new file mode 100644 index 0000000000..9bb4885065 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/row.h @@ -0,0 +1,4037 @@ +/* + * Copyright 2011 The LibYuv Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef INCLUDE_LIBYUV_ROW_H_ +#define INCLUDE_LIBYUV_ROW_H_ + +#include // For malloc. + +#include "libyuv/basic_types.h" + +#ifdef __cplusplus +namespace libyuv { +extern "C" { +#endif + +#if defined(__pnacl__) || defined(__CLR_VER) || \ + (defined(__native_client__) && defined(__x86_64__)) || \ + (defined(__i386__) && !defined(__SSE__) && !defined(__clang__)) +#define LIBYUV_DISABLE_X86 +#endif +#if defined(__native_client__) +#define LIBYUV_DISABLE_NEON +#endif +// MemorySanitizer does not support assembly code yet. http://crbug.com/344505 +#if defined(__has_feature) +#if __has_feature(memory_sanitizer) +#define LIBYUV_DISABLE_X86 +#endif +#endif +// clang >= 3.5.0 required for Arm64. +#if defined(__clang__) && defined(__aarch64__) && !defined(LIBYUV_DISABLE_NEON) +#if (__clang_major__ < 3) || (__clang_major__ == 3 && (__clang_minor__ < 5)) +#define LIBYUV_DISABLE_NEON +#endif // clang >= 3.5 +#endif // __clang__ + +// GCC >= 4.7.0 required for AVX2. +#if defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__)) +#if (__GNUC__ > 4) || (__GNUC__ == 4 && (__GNUC_MINOR__ >= 7)) +#define GCC_HAS_AVX2 1 +#endif // GNUC >= 4.7 +#endif // __GNUC__ + +// clang >= 3.4.0 required for AVX2. +#if defined(__clang__) && (defined(__x86_64__) || defined(__i386__)) +#if (__clang_major__ > 3) || (__clang_major__ == 3 && (__clang_minor__ >= 4)) +#define CLANG_HAS_AVX2 1 +#endif // clang >= 3.4 +#endif // __clang__ + +// clang >= 6.0.0 required for AVX512. +#if defined(__clang__) && (defined(__x86_64__) || defined(__i386__)) +// clang in xcode follows a different versioning scheme. +// TODO(fbarchard): fix xcode 9 ios b/789. +#if (__clang_major__ >= 7) && !defined(__APPLE__) +#define CLANG_HAS_AVX512 1 +#endif // clang >= 7 +#endif // __clang__ + +// Visual C 2012 required for AVX2. +#if defined(_M_IX86) && !defined(__clang__) && defined(_MSC_VER) && \ + _MSC_VER >= 1700 +#define VISUALC_HAS_AVX2 1 +#endif // VisualStudio >= 2012 + +// The following are available on all x86 platforms: +#if !defined(LIBYUV_DISABLE_X86) && \ + (defined(_M_IX86) || defined(__x86_64__) || defined(__i386__)) +// Conversions: +#define HAS_ABGRTOUVROW_SSSE3 +#define HAS_ABGRTOYROW_SSSE3 +#define HAS_ARGB1555TOARGBROW_SSE2 +#define HAS_ARGB4444TOARGBROW_SSE2 +#define HAS_ARGBEXTRACTALPHAROW_SSE2 +#define HAS_ARGBSETROW_X86 +#define HAS_ARGBSHUFFLEROW_SSSE3 +#define HAS_ARGBTOARGB1555ROW_SSE2 +#define HAS_ARGBTOARGB4444ROW_SSE2 +#define HAS_ARGBTORAWROW_SSSE3 +#define HAS_ARGBTORGB24ROW_SSSE3 +#define HAS_ARGBTORGB565DITHERROW_SSE2 +#define HAS_ARGBTORGB565ROW_SSE2 +#define HAS_ARGBTOUV444ROW_SSSE3 +#define HAS_ARGBTOUVJROW_SSSE3 +#define HAS_ARGBTOUVROW_SSSE3 +#define HAS_ARGBTOYJROW_SSSE3 +#define HAS_ARGBTOYROW_SSSE3 +#define HAS_BGRATOUVROW_SSSE3 +#define HAS_BGRATOYROW_SSSE3 +#define HAS_COPYROW_ERMS +#define HAS_COPYROW_SSE2 +#define HAS_H422TOARGBROW_SSSE3 +#define HAS_HALFFLOATROW_SSE2 +#define HAS_I400TOARGBROW_SSE2 +#define HAS_I422TOARGB1555ROW_SSSE3 +#define HAS_I422TOARGB4444ROW_SSSE3 +#define HAS_I422TOARGBROW_SSSE3 +#define HAS_I422TORGB24ROW_SSSE3 +#define HAS_I422TORGB565ROW_SSSE3 +#define HAS_I422TORGBAROW_SSSE3 +#define HAS_I422TOUYVYROW_SSE2 +#define HAS_I422TOYUY2ROW_SSE2 +#define HAS_I444TOARGBROW_SSSE3 +#define HAS_J400TOARGBROW_SSE2 +#define HAS_J422TOARGBROW_SSSE3 +#define HAS_MERGEUVROW_SSE2 +#define HAS_MIRRORROW_SSSE3 +#define HAS_MIRRORUVROW_SSSE3 +#define HAS_NV12TOARGBROW_SSSE3 +#define HAS_NV12TORGB24ROW_SSSE3 +#define HAS_NV12TORGB565ROW_SSSE3 +#define HAS_NV21TOARGBROW_SSSE3 +#define HAS_NV21TORGB24ROW_SSSE3 +#define HAS_RAWTOARGBROW_SSSE3 +#define HAS_RAWTORGB24ROW_SSSE3 +#define HAS_RAWTOYROW_SSSE3 +#define HAS_RGB24TOARGBROW_SSSE3 +#define HAS_RGB24TOYROW_SSSE3 +#define HAS_RGB565TOARGBROW_SSE2 +#define HAS_RGBATOUVROW_SSSE3 +#define HAS_RGBATOYROW_SSSE3 +#define HAS_SETROW_ERMS +#define HAS_SETROW_X86 +#define HAS_SPLITUVROW_SSE2 +#define HAS_UYVYTOARGBROW_SSSE3 +#define HAS_UYVYTOUV422ROW_SSE2 +#define HAS_UYVYTOUVROW_SSE2 +#define HAS_UYVYTOYROW_SSE2 +#define HAS_YUY2TOARGBROW_SSSE3 +#define HAS_YUY2TOUV422ROW_SSE2 +#define HAS_YUY2TOUVROW_SSE2 +#define HAS_YUY2TOYROW_SSE2 + +// Effects: +#define HAS_ARGBADDROW_SSE2 +#define HAS_ARGBAFFINEROW_SSE2 +#define HAS_ARGBATTENUATEROW_SSSE3 +#define HAS_ARGBBLENDROW_SSSE3 +#define HAS_ARGBCOLORMATRIXROW_SSSE3 +#define HAS_ARGBCOLORTABLEROW_X86 +#define HAS_ARGBCOPYALPHAROW_SSE2 +#define HAS_ARGBCOPYYTOALPHAROW_SSE2 +#define HAS_ARGBGRAYROW_SSSE3 +#define HAS_ARGBLUMACOLORTABLEROW_SSSE3 +#define HAS_ARGBMIRRORROW_SSE2 +#define HAS_ARGBMULTIPLYROW_SSE2 +#define HAS_ARGBPOLYNOMIALROW_SSE2 +#define HAS_ARGBQUANTIZEROW_SSE2 +#define HAS_ARGBSEPIAROW_SSSE3 +#define HAS_ARGBSHADEROW_SSE2 +#define HAS_ARGBSUBTRACTROW_SSE2 +#define HAS_ARGBUNATTENUATEROW_SSE2 +#define HAS_BLENDPLANEROW_SSSE3 +#define HAS_COMPUTECUMULATIVESUMROW_SSE2 +#define HAS_CUMULATIVESUMTOAVERAGEROW_SSE2 +#define HAS_INTERPOLATEROW_SSSE3 +#define HAS_RGBCOLORTABLEROW_X86 +#define HAS_SOBELROW_SSE2 +#define HAS_SOBELTOPLANEROW_SSE2 +#define HAS_SOBELXROW_SSE2 +#define HAS_SOBELXYROW_SSE2 +#define HAS_SOBELYROW_SSE2 + +// The following functions fail on gcc/clang 32 bit with fpic and framepointer. +// caveat: clangcl uses row_win.cc which works. +#if defined(__x86_64__) || !defined(__pic__) || defined(__clang__) || \ + defined(_MSC_VER) +// TODO(fbarchard): fix build error on android_full_debug=1 +// https://code.google.com/p/libyuv/issues/detail?id=517 +#define HAS_I422ALPHATOARGBROW_SSSE3 +#endif +#endif + +// The following are available on all x86 platforms, but +// require VS2012, clang 3.4 or gcc 4.7. +#if !defined(LIBYUV_DISABLE_X86) && \ + (defined(VISUALC_HAS_AVX2) || defined(CLANG_HAS_AVX2) || \ + defined(GCC_HAS_AVX2)) +#define HAS_ARGBCOPYALPHAROW_AVX2 +#define HAS_ARGBCOPYYTOALPHAROW_AVX2 +#define HAS_ARGBEXTRACTALPHAROW_AVX2 +#define HAS_ARGBMIRRORROW_AVX2 +#define HAS_ARGBPOLYNOMIALROW_AVX2 +#define HAS_ARGBSHUFFLEROW_AVX2 +#define HAS_ARGBTORGB565DITHERROW_AVX2 +#define HAS_ARGBTOUVJROW_AVX2 +#define HAS_ARGBTOUVROW_AVX2 +#define HAS_ARGBTOYJROW_AVX2 +#define HAS_ARGBTOYROW_AVX2 +#define HAS_COPYROW_AVX +#define HAS_H422TOARGBROW_AVX2 +#define HAS_HALFFLOATROW_AVX2 +// #define HAS_HALFFLOATROW_F16C // Enable to test halffloat cast +#define HAS_I400TOARGBROW_AVX2 +#define HAS_I422TOARGB1555ROW_AVX2 +#define HAS_I422TOARGB4444ROW_AVX2 +#define HAS_I422TOARGBROW_AVX2 +#define HAS_I422TORGB24ROW_AVX2 +#define HAS_I422TORGB565ROW_AVX2 +#define HAS_I422TORGBAROW_AVX2 +#define HAS_I444TOARGBROW_AVX2 +#define HAS_INTERPOLATEROW_AVX2 +#define HAS_J422TOARGBROW_AVX2 +#define HAS_MERGEUVROW_AVX2 +#define HAS_MIRRORROW_AVX2 +#define HAS_NV12TOARGBROW_AVX2 +#define HAS_NV12TORGB24ROW_AVX2 +#define HAS_NV12TORGB565ROW_AVX2 +#define HAS_NV21TOARGBROW_AVX2 +#define HAS_NV21TORGB24ROW_AVX2 +#define HAS_SPLITUVROW_AVX2 +#define HAS_UYVYTOARGBROW_AVX2 +#define HAS_UYVYTOUV422ROW_AVX2 +#define HAS_UYVYTOUVROW_AVX2 +#define HAS_UYVYTOYROW_AVX2 +#define HAS_YUY2TOARGBROW_AVX2 +#define HAS_YUY2TOUV422ROW_AVX2 +#define HAS_YUY2TOUVROW_AVX2 +#define HAS_YUY2TOYROW_AVX2 + +// Effects: +#define HAS_ARGBADDROW_AVX2 +#define HAS_ARGBATTENUATEROW_AVX2 +#define HAS_ARGBMULTIPLYROW_AVX2 +#define HAS_ARGBSUBTRACTROW_AVX2 +#define HAS_ARGBUNATTENUATEROW_AVX2 +#define HAS_BLENDPLANEROW_AVX2 + +#if defined(__x86_64__) || !defined(__pic__) || defined(__clang__) || \ + defined(_MSC_VER) +// TODO(fbarchard): fix build error on android_full_debug=1 +// https://code.google.com/p/libyuv/issues/detail?id=517 +#define HAS_I422ALPHATOARGBROW_AVX2 +#endif +#endif + +// The following are available for AVX2 Visual C and clangcl 32 bit: +// TODO(fbarchard): Port to gcc. +#if !defined(LIBYUV_DISABLE_X86) && defined(_M_IX86) && defined(_MSC_VER) && \ + (defined(VISUALC_HAS_AVX2) || defined(CLANG_HAS_AVX2)) +#define HAS_ARGB1555TOARGBROW_AVX2 +#define HAS_ARGB4444TOARGBROW_AVX2 +#define HAS_ARGBTOARGB1555ROW_AVX2 +#define HAS_ARGBTOARGB4444ROW_AVX2 +#define HAS_ARGBTORGB565ROW_AVX2 +#define HAS_J400TOARGBROW_AVX2 +#define HAS_RGB565TOARGBROW_AVX2 +#endif + +// The following are also available on x64 Visual C. +#if !defined(LIBYUV_DISABLE_X86) && defined(_MSC_VER) && defined(_M_X64) && \ + (!defined(__clang__) || defined(__SSSE3__)) +#define HAS_I422ALPHATOARGBROW_SSSE3 +#define HAS_I422TOARGBROW_SSSE3 +#endif + +// The following are available for gcc/clang x86 platforms: +// TODO(fbarchard): Port to Visual C +#if !defined(LIBYUV_DISABLE_X86) && \ + (defined(__x86_64__) || (defined(__i386__) && !defined(_MSC_VER))) +#define HAS_ABGRTOAR30ROW_SSSE3 +#define HAS_ARGBTOAR30ROW_SSSE3 +#define HAS_CONVERT16TO8ROW_SSSE3 +#define HAS_CONVERT8TO16ROW_SSE2 +// I210 is for H010. 2 = 422. I for 601 vs H for 709. +#define HAS_I210TOAR30ROW_SSSE3 +#define HAS_I210TOARGBROW_SSSE3 +#define HAS_I422TOAR30ROW_SSSE3 +#define HAS_MERGERGBROW_SSSE3 +#define HAS_SPLITRGBROW_SSSE3 +#endif + +// The following are available for AVX2 gcc/clang x86 platforms: +// TODO(fbarchard): Port to Visual C +#if !defined(LIBYUV_DISABLE_X86) && \ + (defined(__x86_64__) || (defined(__i386__) && !defined(_MSC_VER))) && \ + (defined(CLANG_HAS_AVX2) || defined(GCC_HAS_AVX2)) +#define HAS_ABGRTOAR30ROW_AVX2 +#define HAS_ARGBTOAR30ROW_AVX2 +#define HAS_ARGBTORAWROW_AVX2 +#define HAS_ARGBTORGB24ROW_AVX2 +#define HAS_CONVERT16TO8ROW_AVX2 +#define HAS_CONVERT8TO16ROW_AVX2 +#define HAS_I210TOAR30ROW_AVX2 +#define HAS_I210TOARGBROW_AVX2 +#define HAS_I422TOAR30ROW_AVX2 +#define HAS_I422TOUYVYROW_AVX2 +#define HAS_I422TOYUY2ROW_AVX2 +#define HAS_MERGEUVROW_16_AVX2 +#define HAS_MULTIPLYROW_16_AVX2 +// TODO(fbarchard): Fix AVX2 version of YUV24 +// #define HAS_NV21TOYUV24ROW_AVX2 +#endif + +// The following are available for AVX512 clang x86 platforms: +// TODO(fbarchard): Port to GCC and Visual C +// TODO(fbarchard): re-enable HAS_ARGBTORGB24ROW_AVX512VBMI. Issue libyuv:789 +#if !defined(LIBYUV_DISABLE_X86) && \ + (defined(__x86_64__) || (defined(__i386__) && !defined(_MSC_VER))) && \ + (defined(CLANG_HAS_AVX512)) +#define HAS_ARGBTORGB24ROW_AVX512VBMI +#endif + +// The following are available on Neon platforms: +#if !defined(LIBYUV_DISABLE_NEON) && \ + (defined(__aarch64__) || defined(__ARM_NEON__) || defined(LIBYUV_NEON)) +#define HAS_ABGRTOUVROW_NEON +#define HAS_ABGRTOYROW_NEON +#define HAS_ARGB1555TOARGBROW_NEON +#define HAS_ARGB1555TOUVROW_NEON +#define HAS_ARGB1555TOYROW_NEON +#define HAS_ARGB4444TOARGBROW_NEON +#define HAS_ARGB4444TOUVROW_NEON +#define HAS_ARGB4444TOYROW_NEON +#define HAS_ARGBEXTRACTALPHAROW_NEON +#define HAS_ARGBSETROW_NEON +#define HAS_ARGBTOARGB1555ROW_NEON +#define HAS_ARGBTOARGB4444ROW_NEON +#define HAS_ARGBTORAWROW_NEON +#define HAS_ARGBTORGB24ROW_NEON +#define HAS_ARGBTORGB565DITHERROW_NEON +#define HAS_ARGBTORGB565ROW_NEON +#define HAS_ARGBTOUV444ROW_NEON +#define HAS_ARGBTOUVJROW_NEON +#define HAS_ARGBTOUVROW_NEON +#define HAS_ARGBTOYJROW_NEON +#define HAS_ARGBTOYROW_NEON +#define HAS_AYUVTOUVROW_NEON +#define HAS_AYUVTOVUROW_NEON +#define HAS_AYUVTOYROW_NEON +#define HAS_BGRATOUVROW_NEON +#define HAS_BGRATOYROW_NEON +#define HAS_BYTETOFLOATROW_NEON +#define HAS_COPYROW_NEON +#define HAS_HALFFLOATROW_NEON +#define HAS_I400TOARGBROW_NEON +#define HAS_I422ALPHATOARGBROW_NEON +#define HAS_I422TOARGB1555ROW_NEON +#define HAS_I422TOARGB4444ROW_NEON +#define HAS_I422TOARGBROW_NEON +#define HAS_I422TORGB24ROW_NEON +#define HAS_I422TORGB565ROW_NEON +#define HAS_I422TORGBAROW_NEON +#define HAS_I422TOUYVYROW_NEON +#define HAS_I422TOYUY2ROW_NEON +#define HAS_I444TOARGBROW_NEON +#define HAS_J400TOARGBROW_NEON +#define HAS_MERGEUVROW_NEON +#define HAS_MIRRORROW_NEON +#define HAS_MIRRORUVROW_NEON +#define HAS_NV12TOARGBROW_NEON +#define HAS_NV12TORGB24ROW_NEON +#define HAS_NV12TORGB565ROW_NEON +#define HAS_NV21TOARGBROW_NEON +#define HAS_NV21TORGB24ROW_NEON +#define HAS_NV21TOYUV24ROW_NEON +#define HAS_RAWTOARGBROW_NEON +#define HAS_RAWTORGB24ROW_NEON +#define HAS_RAWTOUVROW_NEON +#define HAS_RAWTOYROW_NEON +#define HAS_RGB24TOARGBROW_NEON +#define HAS_RGB24TOUVROW_NEON +#define HAS_RGB24TOYROW_NEON +#define HAS_RGB565TOARGBROW_NEON +#define HAS_RGB565TOUVROW_NEON +#define HAS_RGB565TOYROW_NEON +#define HAS_RGBATOUVROW_NEON +#define HAS_RGBATOYROW_NEON +#define HAS_SETROW_NEON +#define HAS_SPLITRGBROW_NEON +#define HAS_SPLITUVROW_NEON +#define HAS_UVToVUROW_NEON +#define HAS_UYVYTOARGBROW_NEON +#define HAS_UYVYTOUV422ROW_NEON +#define HAS_UYVYTOUVROW_NEON +#define HAS_UYVYTOYROW_NEON +#define HAS_YUY2TOARGBROW_NEON +#define HAS_YUY2TOUV422ROW_NEON +#define HAS_YUY2TOUVROW_NEON +#define HAS_YUY2TOYROW_NEON + +// Effects: +#define HAS_ARGBADDROW_NEON +#define HAS_ARGBATTENUATEROW_NEON +#define HAS_ARGBBLENDROW_NEON +#define HAS_ARGBCOLORMATRIXROW_NEON +#define HAS_ARGBGRAYROW_NEON +#define HAS_ARGBMIRRORROW_NEON +#define HAS_ARGBMULTIPLYROW_NEON +#define HAS_ARGBQUANTIZEROW_NEON +#define HAS_ARGBSEPIAROW_NEON +#define HAS_ARGBSHADEROW_NEON +#define HAS_ARGBSHUFFLEROW_NEON +#define HAS_ARGBSUBTRACTROW_NEON +#define HAS_INTERPOLATEROW_NEON +#define HAS_SOBELROW_NEON +#define HAS_SOBELTOPLANEROW_NEON +#define HAS_SOBELXROW_NEON +#define HAS_SOBELXYROW_NEON +#define HAS_SOBELYROW_NEON +#endif + +// The following are available on AArch64 platforms: +#if !defined(LIBYUV_DISABLE_NEON) && defined(__aarch64__) +#define HAS_FLOATDIVTOBYTEROW_NEON +#define HAS_SCALESUMSAMPLES_NEON +#endif +#if !defined(LIBYUV_DISABLE_MSA) && defined(__mips_msa) +#define HAS_ABGRTOUVROW_MSA +#define HAS_ABGRTOYROW_MSA +#define HAS_ARGB1555TOARGBROW_MSA +#define HAS_ARGB1555TOUVROW_MSA +#define HAS_ARGB1555TOYROW_MSA +#define HAS_ARGB4444TOARGBROW_MSA +#define HAS_ARGBADDROW_MSA +#define HAS_ARGBATTENUATEROW_MSA +#define HAS_ARGBBLENDROW_MSA +#define HAS_ARGBCOLORMATRIXROW_MSA +#define HAS_ARGBEXTRACTALPHAROW_MSA +#define HAS_ARGBGRAYROW_MSA +#define HAS_ARGBMIRRORROW_MSA +#define HAS_ARGBMULTIPLYROW_MSA +#define HAS_ARGBQUANTIZEROW_MSA +#define HAS_ARGBSEPIAROW_MSA +#define HAS_ARGBSETROW_MSA +#define HAS_ARGBSHADEROW_MSA +#define HAS_ARGBSHUFFLEROW_MSA +#define HAS_ARGBSUBTRACTROW_MSA +#define HAS_ARGBTOARGB1555ROW_MSA +#define HAS_ARGBTOARGB4444ROW_MSA +#define HAS_ARGBTORAWROW_MSA +#define HAS_ARGBTORGB24ROW_MSA +#define HAS_ARGBTORGB565DITHERROW_MSA +#define HAS_ARGBTORGB565ROW_MSA +#define HAS_ARGBTOUV444ROW_MSA +#define HAS_ARGBTOUVJROW_MSA +#define HAS_ARGBTOUVROW_MSA +#define HAS_ARGBTOYJROW_MSA +#define HAS_ARGBTOYROW_MSA +#define HAS_BGRATOUVROW_MSA +#define HAS_BGRATOYROW_MSA +#define HAS_HALFFLOATROW_MSA +#define HAS_I400TOARGBROW_MSA +#define HAS_I422ALPHATOARGBROW_MSA +#define HAS_I422TOARGBROW_MSA +#define HAS_I422TORGB24ROW_MSA +#define HAS_I422TORGBAROW_MSA +#define HAS_I422TOUYVYROW_MSA +#define HAS_I422TOYUY2ROW_MSA +#define HAS_I444TOARGBROW_MSA +#define HAS_INTERPOLATEROW_MSA +#define HAS_J400TOARGBROW_MSA +#define HAS_MERGEUVROW_MSA +#define HAS_MIRRORROW_MSA +#define HAS_MIRRORUVROW_MSA +#define HAS_NV12TOARGBROW_MSA +#define HAS_NV12TORGB565ROW_MSA +#define HAS_NV21TOARGBROW_MSA +#define HAS_RAWTOARGBROW_MSA +#define HAS_RAWTORGB24ROW_MSA +#define HAS_RAWTOUVROW_MSA +#define HAS_RAWTOYROW_MSA +#define HAS_RGB24TOARGBROW_MSA +#define HAS_RGB24TOUVROW_MSA +#define HAS_RGB24TOYROW_MSA +#define HAS_RGB565TOARGBROW_MSA +#define HAS_RGB565TOUVROW_MSA +#define HAS_RGB565TOYROW_MSA +#define HAS_RGBATOUVROW_MSA +#define HAS_RGBATOYROW_MSA +#define HAS_SETROW_MSA +#define HAS_SOBELROW_MSA +#define HAS_SOBELTOPLANEROW_MSA +#define HAS_SOBELXROW_MSA +#define HAS_SOBELXYROW_MSA +#define HAS_SOBELYROW_MSA +#define HAS_SPLITUVROW_MSA +#define HAS_UYVYTOARGBROW_MSA +#define HAS_UYVYTOUVROW_MSA +#define HAS_UYVYTOYROW_MSA +#define HAS_YUY2TOARGBROW_MSA +#define HAS_YUY2TOUV422ROW_MSA +#define HAS_YUY2TOUVROW_MSA +#define HAS_YUY2TOYROW_MSA +#endif + +#if !defined(LIBYUV_DISABLE_MMI) && defined(_MIPS_ARCH_LOONGSON3A) +#define HAS_ABGRTOUVROW_MMI +#define HAS_ABGRTOYROW_MMI +#define HAS_ARGB1555TOARGBROW_MMI +#define HAS_ARGB1555TOUVROW_MMI +#define HAS_ARGB1555TOYROW_MMI +#define HAS_ARGB4444TOARGBROW_MMI +#define HAS_ARGB4444TOUVROW_MMI +#define HAS_ARGB4444TOYROW_MMI +#define HAS_ARGBADDROW_MMI +#define HAS_ARGBATTENUATEROW_MMI +#define HAS_ARGBBLENDROW_MMI +#define HAS_ARGBCOLORMATRIXROW_MMI +#define HAS_ARGBCOPYALPHAROW_MMI +#define HAS_ARGBCOPYYTOALPHAROW_MMI +#define HAS_ARGBEXTRACTALPHAROW_MMI +#define HAS_ARGBGRAYROW_MMI +#define HAS_ARGBMIRRORROW_MMI +#define HAS_ARGBMULTIPLYROW_MMI +#define HAS_ARGBSEPIAROW_MMI +#define HAS_ARGBSHADEROW_MMI +#define HAS_ARGBSHUFFLEROW_MMI +#define HAS_ARGBSUBTRACTROW_MMI +#define HAS_ARGBTOARGB1555ROW_MMI +#define HAS_ARGBTOARGB4444ROW_MMI +#define HAS_ARGBTORAWROW_MMI +#define HAS_ARGBTORGB24ROW_MMI +#define HAS_ARGBTORGB565DITHERROW_MMI +#define HAS_ARGBTORGB565ROW_MMI +#define HAS_ARGBTOUV444ROW_MMI +#define HAS_ARGBTOUVJROW_MMI +#define HAS_ARGBTOUVROW_MMI +#define HAS_ARGBTOYJROW_MMI +#define HAS_ARGBTOYROW_MMI +#define HAS_BGRATOUVROW_MMI +#define HAS_BGRATOYROW_MMI +#define HAS_BLENDPLANEROW_MMI +#define HAS_COMPUTECUMULATIVESUMROW_MMI +#define HAS_CUMULATIVESUMTOAVERAGEROW_MMI +#define HAS_HALFFLOATROW_MMI +#define HAS_I400TOARGBROW_MMI +#define HAS_I422TOUYVYROW_MMI +#define HAS_I422TOYUY2ROW_MMI +#define HAS_INTERPOLATEROW_MMI +#define HAS_J400TOARGBROW_MMI +#define HAS_MERGERGBROW_MMI +#define HAS_MERGEUVROW_MMI +#define HAS_MIRRORROW_MMI +#define HAS_MIRRORUVROW_MMI +#define HAS_RAWTOARGBROW_MMI +#define HAS_RAWTORGB24ROW_MMI +#define HAS_RAWTOUVROW_MMI +#define HAS_RAWTOYROW_MMI +#define HAS_RGB24TOARGBROW_MMI +#define HAS_RGB24TOUVROW_MMI +#define HAS_RGB24TOYROW_MMI +#define HAS_RGB565TOARGBROW_MMI +#define HAS_RGB565TOUVROW_MMI +#define HAS_RGB565TOYROW_MMI +#define HAS_RGBATOUVROW_MMI +#define HAS_RGBATOYROW_MMI +#define HAS_SOBELROW_MMI +#define HAS_SOBELTOPLANEROW_MMI +#define HAS_SOBELXROW_MMI +#define HAS_SOBELXYROW_MMI +#define HAS_SOBELYROW_MMI +#define HAS_SPLITRGBROW_MMI +#define HAS_SPLITUVROW_MMI +#define HAS_UYVYTOUVROW_MMI +#define HAS_UYVYTOYROW_MMI +#define HAS_YUY2TOUV422ROW_MMI +#define HAS_YUY2TOUVROW_MMI +#define HAS_YUY2TOYROW_MMI +#endif + +#if defined(_MSC_VER) && !defined(__CLR_VER) && !defined(__clang__) +#if defined(VISUALC_HAS_AVX2) +#define SIMD_ALIGNED(var) __declspec(align(32)) var +#else +#define SIMD_ALIGNED(var) __declspec(align(16)) var +#endif +typedef __declspec(align(16)) int16_t vec16[8]; +typedef __declspec(align(16)) int32_t vec32[4]; +typedef __declspec(align(16)) int8_t vec8[16]; +typedef __declspec(align(16)) uint16_t uvec16[8]; +typedef __declspec(align(16)) uint32_t uvec32[4]; +typedef __declspec(align(16)) uint8_t uvec8[16]; +typedef __declspec(align(32)) int16_t lvec16[16]; +typedef __declspec(align(32)) int32_t lvec32[8]; +typedef __declspec(align(32)) int8_t lvec8[32]; +typedef __declspec(align(32)) uint16_t ulvec16[16]; +typedef __declspec(align(32)) uint32_t ulvec32[8]; +typedef __declspec(align(32)) uint8_t ulvec8[32]; +#elif !defined(__pnacl__) && (defined(__GNUC__) || defined(__clang__)) +// Caveat GCC 4.2 to 4.7 have a known issue using vectors with const. +#if defined(CLANG_HAS_AVX2) || defined(GCC_HAS_AVX2) +#define SIMD_ALIGNED(var) var __attribute__((aligned(32))) +#else +#define SIMD_ALIGNED(var) var __attribute__((aligned(16))) +#endif +typedef int16_t __attribute__((vector_size(16))) vec16; +typedef int32_t __attribute__((vector_size(16))) vec32; +typedef int8_t __attribute__((vector_size(16))) vec8; +typedef uint16_t __attribute__((vector_size(16))) uvec16; +typedef uint32_t __attribute__((vector_size(16))) uvec32; +typedef uint8_t __attribute__((vector_size(16))) uvec8; +typedef int16_t __attribute__((vector_size(32))) lvec16; +typedef int32_t __attribute__((vector_size(32))) lvec32; +typedef int8_t __attribute__((vector_size(32))) lvec8; +typedef uint16_t __attribute__((vector_size(32))) ulvec16; +typedef uint32_t __attribute__((vector_size(32))) ulvec32; +typedef uint8_t __attribute__((vector_size(32))) ulvec8; +#else +#define SIMD_ALIGNED(var) var +typedef int16_t vec16[8]; +typedef int32_t vec32[4]; +typedef int8_t vec8[16]; +typedef uint16_t uvec16[8]; +typedef uint32_t uvec32[4]; +typedef uint8_t uvec8[16]; +typedef int16_t lvec16[16]; +typedef int32_t lvec32[8]; +typedef int8_t lvec8[32]; +typedef uint16_t ulvec16[16]; +typedef uint32_t ulvec32[8]; +typedef uint8_t ulvec8[32]; +#endif + +#if defined(__aarch64__) +// This struct is for Arm64 color conversion. +struct YuvConstants { + uvec16 kUVToRB; + uvec16 kUVToRB2; + uvec16 kUVToG; + uvec16 kUVToG2; + vec16 kUVBiasBGR; + vec32 kYToRgb; +}; +#elif defined(__arm__) +// This struct is for ArmV7 color conversion. +struct YuvConstants { + uvec8 kUVToRB; + uvec8 kUVToG; + vec16 kUVBiasBGR; + vec32 kYToRgb; +}; +#else +// This struct is for Intel color conversion. +struct YuvConstants { + int8_t kUVToB[32]; + int8_t kUVToG[32]; + int8_t kUVToR[32]; + int16_t kUVBiasB[16]; + int16_t kUVBiasG[16]; + int16_t kUVBiasR[16]; + int16_t kYToRgb[16]; +}; + +// Offsets into YuvConstants structure +#define KUVTOB 0 +#define KUVTOG 32 +#define KUVTOR 64 +#define KUVBIASB 96 +#define KUVBIASG 128 +#define KUVBIASR 160 +#define KYTORGB 192 +#endif + +// Conversion matrix for YUV to RGB +extern const struct YuvConstants SIMD_ALIGNED(kYuvI601Constants); // BT.601 +extern const struct YuvConstants SIMD_ALIGNED(kYuvJPEGConstants); // JPeg +extern const struct YuvConstants SIMD_ALIGNED(kYuvH709Constants); // BT.709 + +// Conversion matrix for YVU to BGR +extern const struct YuvConstants SIMD_ALIGNED(kYvuI601Constants); // BT.601 +extern const struct YuvConstants SIMD_ALIGNED(kYvuJPEGConstants); // JPeg +extern const struct YuvConstants SIMD_ALIGNED(kYvuH709Constants); // BT.709 + +#define IS_ALIGNED(p, a) (!((uintptr_t)(p) & ((a)-1))) + +#define align_buffer_64(var, size) \ + uint8_t* var##_mem = (uint8_t*)(malloc((size) + 63)); /* NOLINT */ \ + uint8_t* var = (uint8_t*)(((intptr_t)(var##_mem) + 63) & ~63) /* NOLINT */ + +#define free_aligned_buffer_64(var) \ + free(var##_mem); \ + var = 0 + +#if defined(__APPLE__) || defined(__x86_64__) || defined(__llvm__) +#define OMITFP +#else +#define OMITFP __attribute__((optimize("omit-frame-pointer"))) +#endif + +// NaCL macros for GCC x86 and x64. +#if defined(__native_client__) +#define LABELALIGN ".p2align 5\n" +#else +#define LABELALIGN +#endif + +// Intel Code Analizer markers. Insert IACA_START IACA_END around code to be +// measured and then run with iaca -64 libyuv_unittest. +// IACA_ASM_START amd IACA_ASM_END are equivalents that can be used within +// inline assembly blocks. +// example of iaca: +// ~/iaca-lin64/bin/iaca.sh -64 -analysis LATENCY out/Release/libyuv_unittest + +#if defined(__x86_64__) || defined(__i386__) + +#define IACA_ASM_START \ + ".byte 0x0F, 0x0B\n" \ + " movl $111, %%ebx\n" \ + ".byte 0x64, 0x67, 0x90\n" + +#define IACA_ASM_END \ + " movl $222, %%ebx\n" \ + ".byte 0x64, 0x67, 0x90\n" \ + ".byte 0x0F, 0x0B\n" + +#define IACA_SSC_MARK(MARK_ID) \ + __asm__ __volatile__("\n\t movl $" #MARK_ID \ + ", %%ebx" \ + "\n\t .byte 0x64, 0x67, 0x90" \ + : \ + : \ + : "memory"); + +#define IACA_UD_BYTES __asm__ __volatile__("\n\t .byte 0x0F, 0x0B"); + +#else /* Visual C */ +#define IACA_UD_BYTES \ + { __asm _emit 0x0F __asm _emit 0x0B } + +#define IACA_SSC_MARK(x) \ + { __asm mov ebx, x __asm _emit 0x64 __asm _emit 0x67 __asm _emit 0x90 } + +#define IACA_VC64_START __writegsbyte(111, 111); +#define IACA_VC64_END __writegsbyte(222, 222); +#endif + +#define IACA_START \ + { \ + IACA_UD_BYTES \ + IACA_SSC_MARK(111) \ + } +#define IACA_END \ + { \ + IACA_SSC_MARK(222) \ + IACA_UD_BYTES \ + } + +void I444ToARGBRow_NEON(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGBRow_NEON(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void I422AlphaToARGBRow_NEON(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + const uint8_t* src_a, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGBRow_NEON(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGBARow_NEON(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_rgba, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGB24Row_NEON(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_rgb24, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGB565Row_NEON(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_rgb565, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGB1555Row_NEON(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_argb1555, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGB4444Row_NEON(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_argb4444, + const struct YuvConstants* yuvconstants, + int width); +void NV12ToARGBRow_NEON(const uint8_t* src_y, + const uint8_t* src_uv, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void NV12ToRGB565Row_NEON(const uint8_t* src_y, + const uint8_t* src_uv, + uint8_t* dst_rgb565, + const struct YuvConstants* yuvconstants, + int width); +void NV21ToARGBRow_NEON(const uint8_t* src_y, + const uint8_t* src_vu, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void NV12ToRGB24Row_NEON(const uint8_t* src_y, + const uint8_t* src_uv, + uint8_t* dst_rgb24, + const struct YuvConstants* yuvconstants, + int width); +void NV21ToRGB24Row_NEON(const uint8_t* src_y, + const uint8_t* src_vu, + uint8_t* dst_rgb24, + const struct YuvConstants* yuvconstants, + int width); +void NV21ToYUV24Row_NEON(const uint8_t* src_y, + const uint8_t* src_vu, + uint8_t* dst_yuv24, + int width); +void YUY2ToARGBRow_NEON(const uint8_t* src_yuy2, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void UYVYToARGBRow_NEON(const uint8_t* src_uyvy, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void I444ToARGBRow_MSA(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); + +void I422ToARGBRow_MSA(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGBARow_MSA(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void I422AlphaToARGBRow_MSA(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + const uint8_t* src_a, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGB24Row_MSA(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGB565Row_MSA(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_rgb565, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGB4444Row_MSA(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_argb4444, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGB1555Row_MSA(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_argb1555, + const struct YuvConstants* yuvconstants, + int width); +void NV12ToARGBRow_MSA(const uint8_t* src_y, + const uint8_t* src_uv, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void NV12ToRGB565Row_MSA(const uint8_t* src_y, + const uint8_t* src_uv, + uint8_t* dst_rgb565, + const struct YuvConstants* yuvconstants, + int width); +void NV21ToARGBRow_MSA(const uint8_t* src_y, + const uint8_t* src_vu, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void YUY2ToARGBRow_MSA(const uint8_t* src_yuy2, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void UYVYToARGBRow_MSA(const uint8_t* src_uyvy, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); + +void ARGBToYRow_AVX2(const uint8_t* src_argb, uint8_t* dst_y, int width); +void ARGBToYRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void ARGBToYRow_SSSE3(const uint8_t* src_argb, uint8_t* dst_y, int width); +void ARGBToYJRow_AVX2(const uint8_t* src_argb, uint8_t* dst_y, int width); +void ARGBToYJRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void ARGBToYJRow_SSSE3(const uint8_t* src_argb, uint8_t* dst_y, int width); +void BGRAToYRow_SSSE3(const uint8_t* src_bgra, uint8_t* dst_y, int width); +void ABGRToYRow_SSSE3(const uint8_t* src_abgr, uint8_t* dst_y, int width); +void RGBAToYRow_SSSE3(const uint8_t* src_rgba, uint8_t* dst_y, int width); +void RGB24ToYRow_SSSE3(const uint8_t* src_rgb24, uint8_t* dst_y, int width); +void RAWToYRow_SSSE3(const uint8_t* src_raw, uint8_t* dst_y, int width); +void ARGBToYRow_NEON(const uint8_t* src_argb, uint8_t* dst_y, int width); +void ARGBToYJRow_NEON(const uint8_t* src_argb, uint8_t* dst_y, int width); +void ARGBToYRow_MSA(const uint8_t* src_argb0, uint8_t* dst_y, int width); +void ARGBToYJRow_MSA(const uint8_t* src_argb0, uint8_t* dst_y, int width); +void ARGBToYRow_MMI(const uint8_t* src_argb0, uint8_t* dst_y, int width); +void ARGBToYJRow_MMI(const uint8_t* src_argb0, uint8_t* dst_y, int width); +void ARGBToUV444Row_NEON(const uint8_t* src_argb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVRow_NEON(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUV444Row_MSA(const uint8_t* src_argb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVRow_MSA(const uint8_t* src_argb0, + int src_stride_argb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUV444Row_MMI(const uint8_t* src_argb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVRow_MMI(const uint8_t* src_argb0, + int src_stride_argb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVJRow_NEON(const uint8_t* src_argb, + int src_stride_argb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void BGRAToUVRow_NEON(const uint8_t* src_bgra, + int src_stride_bgra, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ABGRToUVRow_NEON(const uint8_t* src_abgr, + int src_stride_abgr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGBAToUVRow_NEON(const uint8_t* src_rgba, + int src_stride_rgba, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGB24ToUVRow_NEON(const uint8_t* src_rgb24, + int src_stride_rgb24, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RAWToUVRow_NEON(const uint8_t* src_raw, + int src_stride_raw, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGB565ToUVRow_NEON(const uint8_t* src_rgb565, + int src_stride_rgb565, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGB1555ToUVRow_NEON(const uint8_t* src_argb1555, + int src_stride_argb1555, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGB4444ToUVRow_NEON(const uint8_t* src_argb4444, + int src_stride_argb4444, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVJRow_MSA(const uint8_t* src_rgb0, + int src_stride_rgb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void BGRAToUVRow_MSA(const uint8_t* src_rgb0, + int src_stride_rgb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ABGRToUVRow_MSA(const uint8_t* src_rgb0, + int src_stride_rgb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGBAToUVRow_MSA(const uint8_t* src_rgb0, + int src_stride_rgb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGB24ToUVRow_MSA(const uint8_t* src_rgb0, + int src_stride_rgb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RAWToUVRow_MSA(const uint8_t* src_rgb0, + int src_stride_rgb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGB565ToUVRow_MSA(const uint8_t* src_rgb565, + int src_stride_rgb565, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGB1555ToUVRow_MSA(const uint8_t* src_argb1555, + int src_stride_argb1555, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVJRow_MMI(const uint8_t* src_rgb0, + int src_stride_rgb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void BGRAToUVRow_MMI(const uint8_t* src_rgb0, + int src_stride_rgb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ABGRToUVRow_MMI(const uint8_t* src_rgb0, + int src_stride_rgb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGBAToUVRow_MMI(const uint8_t* src_rgb0, + int src_stride_rgb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGB24ToUVRow_MMI(const uint8_t* src_rgb0, + int src_stride_rgb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RAWToUVRow_MMI(const uint8_t* src_rgb0, + int src_stride_rgb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGB565ToUVRow_MMI(const uint8_t* src_rgb565, + int src_stride_rgb565, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGB1555ToUVRow_MMI(const uint8_t* src_argb1555, + int src_stride_argb1555, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGB4444ToUVRow_MMI(const uint8_t* src_argb4444, + int src_stride_argb4444, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void BGRAToYRow_NEON(const uint8_t* src_bgra, uint8_t* dst_y, int width); +void ABGRToYRow_NEON(const uint8_t* src_abgr, uint8_t* dst_y, int width); +void RGBAToYRow_NEON(const uint8_t* src_rgba, uint8_t* dst_y, int width); +void RGB24ToYRow_NEON(const uint8_t* src_rgb24, uint8_t* dst_y, int width); +void RAWToYRow_NEON(const uint8_t* src_raw, uint8_t* dst_y, int width); +void RGB565ToYRow_NEON(const uint8_t* src_rgb565, uint8_t* dst_y, int width); +void ARGB1555ToYRow_NEON(const uint8_t* src_argb1555, + uint8_t* dst_y, + int width); +void ARGB4444ToYRow_NEON(const uint8_t* src_argb4444, + uint8_t* dst_y, + int width); +void BGRAToYRow_MSA(const uint8_t* src_argb0, uint8_t* dst_y, int width); +void ABGRToYRow_MSA(const uint8_t* src_argb0, uint8_t* dst_y, int width); +void RGBAToYRow_MSA(const uint8_t* src_argb0, uint8_t* dst_y, int width); +void RGB24ToYRow_MSA(const uint8_t* src_argb0, uint8_t* dst_y, int width); +void RAWToYRow_MSA(const uint8_t* src_argb0, uint8_t* dst_y, int width); +void RGB565ToYRow_MSA(const uint8_t* src_rgb565, uint8_t* dst_y, int width); +void ARGB1555ToYRow_MSA(const uint8_t* src_argb1555, uint8_t* dst_y, int width); +void BGRAToYRow_MMI(const uint8_t* src_argb0, uint8_t* dst_y, int width); +void ABGRToYRow_MMI(const uint8_t* src_argb0, uint8_t* dst_y, int width); +void RGBAToYRow_MMI(const uint8_t* src_argb0, uint8_t* dst_y, int width); +void RGB24ToYRow_MMI(const uint8_t* src_argb0, uint8_t* dst_y, int width); +void RAWToYRow_MMI(const uint8_t* src_argb0, uint8_t* dst_y, int width); +void RGB565ToYRow_MMI(const uint8_t* src_rgb565, uint8_t* dst_y, int width); +void ARGB1555ToYRow_MMI(const uint8_t* src_argb1555, uint8_t* dst_y, int width); +void ARGB4444ToYRow_MMI(const uint8_t* src_argb4444, uint8_t* dst_y, int width); + +void ARGBToYRow_C(const uint8_t* src_argb0, uint8_t* dst_y, int width); +void ARGBToYJRow_C(const uint8_t* src_argb0, uint8_t* dst_y, int width); +void BGRAToYRow_C(const uint8_t* src_argb0, uint8_t* dst_y, int width); +void ABGRToYRow_C(const uint8_t* src_argb0, uint8_t* dst_y, int width); +void RGBAToYRow_C(const uint8_t* src_argb0, uint8_t* dst_y, int width); +void RGB24ToYRow_C(const uint8_t* src_argb0, uint8_t* dst_y, int width); +void RAWToYRow_C(const uint8_t* src_argb0, uint8_t* dst_y, int width); +void RGB565ToYRow_C(const uint8_t* src_rgb565, uint8_t* dst_y, int width); +void ARGB1555ToYRow_C(const uint8_t* src_argb1555, uint8_t* dst_y, int width); +void ARGB4444ToYRow_C(const uint8_t* src_argb4444, uint8_t* dst_y, int width); +void ARGBToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void ARGBToYJRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void BGRAToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void ABGRToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void RGBAToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void RGB24ToYRow_Any_SSSE3(const uint8_t* src_rgb24, uint8_t* dst_y, int width); +void RAWToYRow_Any_SSSE3(const uint8_t* src_raw, uint8_t* dst_y, int width); +void ARGBToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void ARGBToYJRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void BGRAToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void ABGRToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void RGBAToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void RGB24ToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void RAWToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void RGB565ToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void ARGB1555ToYRow_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGB4444ToYRow_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void BGRAToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void ABGRToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void RGBAToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void ARGBToYJRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void ARGBToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void RGB24ToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void RAWToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void RGB565ToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void ARGB1555ToYRow_Any_MSA(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void BGRAToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void ABGRToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void RGBAToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void ARGBToYJRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void ARGBToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void RGB24ToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void RAWToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void RGB565ToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void ARGB1555ToYRow_Any_MMI(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGB4444ToYRow_Any_MMI(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); + +void ARGBToUVRow_AVX2(const uint8_t* src_argb0, + int src_stride_argb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVJRow_AVX2(const uint8_t* src_argb0, + int src_stride_argb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVRow_SSSE3(const uint8_t* src_argb0, + int src_stride_argb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVJRow_SSSE3(const uint8_t* src_argb0, + int src_stride_argb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void BGRAToUVRow_SSSE3(const uint8_t* src_bgra0, + int src_stride_bgra, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ABGRToUVRow_SSSE3(const uint8_t* src_abgr0, + int src_stride_abgr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGBAToUVRow_SSSE3(const uint8_t* src_rgba0, + int src_stride_rgba, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVRow_Any_AVX2(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVJRow_Any_AVX2(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVRow_Any_SSSE3(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVJRow_Any_SSSE3(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void BGRAToUVRow_Any_SSSE3(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ABGRToUVRow_Any_SSSE3(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGBAToUVRow_Any_SSSE3(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUV444Row_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVRow_Any_NEON(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUV444Row_Any_MSA(const uint8_t* src_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVRow_Any_MSA(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUV444Row_Any_MMI(const uint8_t* src_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVRow_Any_MMI(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVJRow_Any_NEON(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void BGRAToUVRow_Any_NEON(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ABGRToUVRow_Any_NEON(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGBAToUVRow_Any_NEON(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGB24ToUVRow_Any_NEON(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RAWToUVRow_Any_NEON(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGB565ToUVRow_Any_NEON(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGB1555ToUVRow_Any_NEON(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGB4444ToUVRow_Any_NEON(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVJRow_Any_MSA(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void BGRAToUVRow_Any_MSA(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ABGRToUVRow_Any_MSA(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGBAToUVRow_Any_MSA(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGB24ToUVRow_Any_MSA(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RAWToUVRow_Any_MSA(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGB565ToUVRow_Any_MSA(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGB1555ToUVRow_Any_MSA(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVJRow_Any_MMI(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void BGRAToUVRow_Any_MMI(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ABGRToUVRow_Any_MMI(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGBAToUVRow_Any_MMI(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGB24ToUVRow_Any_MMI(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RAWToUVRow_Any_MMI(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGB565ToUVRow_Any_MMI(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGB1555ToUVRow_Any_MMI(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGB4444ToUVRow_Any_MMI(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVRow_C(const uint8_t* src_rgb0, + int src_stride_rgb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVJRow_C(const uint8_t* src_rgb0, + int src_stride_rgb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVRow_C(const uint8_t* src_rgb0, + int src_stride_rgb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUVJRow_C(const uint8_t* src_rgb0, + int src_stride_rgb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void BGRAToUVRow_C(const uint8_t* src_rgb0, + int src_stride_rgb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ABGRToUVRow_C(const uint8_t* src_rgb0, + int src_stride_rgb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGBAToUVRow_C(const uint8_t* src_rgb0, + int src_stride_rgb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGB24ToUVRow_C(const uint8_t* src_rgb0, + int src_stride_rgb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RAWToUVRow_C(const uint8_t* src_rgb0, + int src_stride_rgb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void RGB565ToUVRow_C(const uint8_t* src_rgb565, + int src_stride_rgb565, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGB1555ToUVRow_C(const uint8_t* src_argb1555, + int src_stride_argb1555, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGB4444ToUVRow_C(const uint8_t* src_argb4444, + int src_stride_argb4444, + uint8_t* dst_u, + uint8_t* dst_v, + int width); + +void ARGBToUV444Row_SSSE3(const uint8_t* src_argb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void ARGBToUV444Row_Any_SSSE3(const uint8_t* src_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); + +void ARGBToUV444Row_C(const uint8_t* src_argb, + uint8_t* dst_u, + uint8_t* dst_v, + int width); + +void MirrorRow_AVX2(const uint8_t* src, uint8_t* dst, int width); +void MirrorRow_SSSE3(const uint8_t* src, uint8_t* dst, int width); +void MirrorRow_NEON(const uint8_t* src, uint8_t* dst, int width); +void MirrorRow_MSA(const uint8_t* src, uint8_t* dst, int width); +void MirrorRow_MMI(const uint8_t* src, uint8_t* dst, int width); +void MirrorRow_C(const uint8_t* src, uint8_t* dst, int width); +void MirrorRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void MirrorRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void MirrorRow_Any_SSE2(const uint8_t* src, uint8_t* dst, int width); +void MirrorRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void MirrorRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void MirrorRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); + +void MirrorUVRow_SSSE3(const uint8_t* src, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void MirrorUVRow_NEON(const uint8_t* src_uv, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void MirrorUVRow_MSA(const uint8_t* src_uv, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void MirrorUVRow_MMI(const uint8_t* src_uv, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void MirrorUVRow_C(const uint8_t* src_uv, + uint8_t* dst_u, + uint8_t* dst_v, + int width); + +void ARGBMirrorRow_AVX2(const uint8_t* src, uint8_t* dst, int width); +void ARGBMirrorRow_SSE2(const uint8_t* src, uint8_t* dst, int width); +void ARGBMirrorRow_NEON(const uint8_t* src, uint8_t* dst, int width); +void ARGBMirrorRow_MSA(const uint8_t* src, uint8_t* dst, int width); +void ARGBMirrorRow_MMI(const uint8_t* src, uint8_t* dst, int width); +void ARGBMirrorRow_C(const uint8_t* src, uint8_t* dst, int width); +void ARGBMirrorRow_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBMirrorRow_Any_SSE2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBMirrorRow_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBMirrorRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void ARGBMirrorRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); + +void SplitUVRow_C(const uint8_t* src_uv, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void SplitUVRow_SSE2(const uint8_t* src_uv, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void SplitUVRow_AVX2(const uint8_t* src_uv, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void SplitUVRow_NEON(const uint8_t* src_uv, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void SplitUVRow_MSA(const uint8_t* src_uv, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void SplitUVRow_MMI(const uint8_t* src_uv, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void SplitUVRow_Any_SSE2(const uint8_t* src_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void SplitUVRow_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void SplitUVRow_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void SplitUVRow_Any_MSA(const uint8_t* src_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void SplitUVRow_Any_MMI(const uint8_t* src_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); + +void MergeUVRow_C(const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_uv, + int width); +void MergeUVRow_SSE2(const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_uv, + int width); +void MergeUVRow_AVX2(const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_uv, + int width); +void MergeUVRow_NEON(const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_uv, + int width); +void MergeUVRow_MSA(const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_uv, + int width); +void MergeUVRow_MMI(const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_uv, + int width); +void MergeUVRow_Any_SSE2(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void MergeUVRow_Any_AVX2(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void MergeUVRow_Any_NEON(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void MergeUVRow_Any_MSA(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void MergeUVRow_Any_MMI(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); + +void SplitRGBRow_C(const uint8_t* src_rgb, + uint8_t* dst_r, + uint8_t* dst_g, + uint8_t* dst_b, + int width); +void SplitRGBRow_SSSE3(const uint8_t* src_rgb, + uint8_t* dst_r, + uint8_t* dst_g, + uint8_t* dst_b, + int width); +void SplitRGBRow_NEON(const uint8_t* src_rgb, + uint8_t* dst_r, + uint8_t* dst_g, + uint8_t* dst_b, + int width); +void SplitRGBRow_MMI(const uint8_t* src_rgb, + uint8_t* dst_r, + uint8_t* dst_g, + uint8_t* dst_b, + int width); +void SplitRGBRow_Any_SSSE3(const uint8_t* src_ptr, + uint8_t* dst_r, + uint8_t* dst_g, + uint8_t* dst_b, + int width); +void SplitRGBRow_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_r, + uint8_t* dst_g, + uint8_t* dst_b, + int width); +void SplitRGBRow_Any_MMI(const uint8_t* src_ptr, + uint8_t* dst_r, + uint8_t* dst_g, + uint8_t* dst_b, + int width); + +void MergeRGBRow_C(const uint8_t* src_r, + const uint8_t* src_g, + const uint8_t* src_b, + uint8_t* dst_rgb, + int width); +void MergeRGBRow_SSSE3(const uint8_t* src_r, + const uint8_t* src_g, + const uint8_t* src_b, + uint8_t* dst_rgb, + int width); +void MergeRGBRow_NEON(const uint8_t* src_r, + const uint8_t* src_g, + const uint8_t* src_b, + uint8_t* dst_rgb, + int width); +void MergeRGBRow_MMI(const uint8_t* src_r, + const uint8_t* src_g, + const uint8_t* src_b, + uint8_t* dst_rgb, + int width); +void MergeRGBRow_Any_SSSE3(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + int width); +void MergeRGBRow_Any_NEON(const uint8_t* src_r, + const uint8_t* src_g, + const uint8_t* src_b, + uint8_t* dst_rgb, + int width); +void MergeRGBRow_Any_MMI(const uint8_t* src_r, + const uint8_t* src_g, + const uint8_t* src_b, + uint8_t* dst_rgb, + int width); + +void MergeUVRow_16_C(const uint16_t* src_u, + const uint16_t* src_v, + uint16_t* dst_uv, + int scale, /* 64 for 10 bit */ + int width); +void MergeUVRow_16_AVX2(const uint16_t* src_u, + const uint16_t* src_v, + uint16_t* dst_uv, + int scale, + int width); + +void MultiplyRow_16_AVX2(const uint16_t* src_y, + uint16_t* dst_y, + int scale, + int width); +void MultiplyRow_16_C(const uint16_t* src_y, + uint16_t* dst_y, + int scale, + int width); + +void Convert8To16Row_C(const uint8_t* src_y, + uint16_t* dst_y, + int scale, + int width); +void Convert8To16Row_SSE2(const uint8_t* src_y, + uint16_t* dst_y, + int scale, + int width); +void Convert8To16Row_AVX2(const uint8_t* src_y, + uint16_t* dst_y, + int scale, + int width); +void Convert8To16Row_Any_SSE2(const uint8_t* src_ptr, + uint16_t* dst_ptr, + int scale, + int width); +void Convert8To16Row_Any_AVX2(const uint8_t* src_ptr, + uint16_t* dst_ptr, + int scale, + int width); + +void Convert16To8Row_C(const uint16_t* src_y, + uint8_t* dst_y, + int scale, + int width); +void Convert16To8Row_SSSE3(const uint16_t* src_y, + uint8_t* dst_y, + int scale, + int width); +void Convert16To8Row_AVX2(const uint16_t* src_y, + uint8_t* dst_y, + int scale, + int width); +void Convert16To8Row_Any_SSSE3(const uint16_t* src_ptr, + uint8_t* dst_ptr, + int scale, + int width); +void Convert16To8Row_Any_AVX2(const uint16_t* src_ptr, + uint8_t* dst_ptr, + int scale, + int width); + +void CopyRow_SSE2(const uint8_t* src, uint8_t* dst, int width); +void CopyRow_AVX(const uint8_t* src, uint8_t* dst, int width); +void CopyRow_ERMS(const uint8_t* src, uint8_t* dst, int width); +void CopyRow_NEON(const uint8_t* src, uint8_t* dst, int width); +void CopyRow_MIPS(const uint8_t* src, uint8_t* dst, int count); +void CopyRow_C(const uint8_t* src, uint8_t* dst, int count); +void CopyRow_Any_SSE2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void CopyRow_Any_AVX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void CopyRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); + +void CopyRow_16_C(const uint16_t* src, uint16_t* dst, int count); + +void ARGBCopyAlphaRow_C(const uint8_t* src, uint8_t* dst, int width); +void ARGBCopyAlphaRow_SSE2(const uint8_t* src, uint8_t* dst, int width); +void ARGBCopyAlphaRow_AVX2(const uint8_t* src, uint8_t* dst, int width); +void ARGBCopyAlphaRow_MMI(const uint8_t* src, uint8_t* dst, int width); +void ARGBCopyAlphaRow_Any_SSE2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBCopyAlphaRow_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBCopyAlphaRow_Any_MMI(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); + +void ARGBExtractAlphaRow_C(const uint8_t* src_argb, uint8_t* dst_a, int width); +void ARGBExtractAlphaRow_SSE2(const uint8_t* src_argb, + uint8_t* dst_a, + int width); +void ARGBExtractAlphaRow_AVX2(const uint8_t* src_argb, + uint8_t* dst_a, + int width); +void ARGBExtractAlphaRow_NEON(const uint8_t* src_argb, + uint8_t* dst_a, + int width); +void ARGBExtractAlphaRow_MSA(const uint8_t* src_argb, + uint8_t* dst_a, + int width); +void ARGBExtractAlphaRow_MMI(const uint8_t* src_argb, + uint8_t* dst_a, + int width); +void ARGBExtractAlphaRow_Any_SSE2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBExtractAlphaRow_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBExtractAlphaRow_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBExtractAlphaRow_Any_MSA(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBExtractAlphaRow_Any_MMI(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); + +void ARGBCopyYToAlphaRow_C(const uint8_t* src, uint8_t* dst, int width); +void ARGBCopyYToAlphaRow_SSE2(const uint8_t* src, uint8_t* dst, int width); +void ARGBCopyYToAlphaRow_AVX2(const uint8_t* src, uint8_t* dst, int width); +void ARGBCopyYToAlphaRow_MMI(const uint8_t* src, uint8_t* dst, int width); +void ARGBCopyYToAlphaRow_Any_SSE2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBCopyYToAlphaRow_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBCopyYToAlphaRow_Any_MMI(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); + +void SetRow_C(uint8_t* dst, uint8_t v8, int width); +void SetRow_MSA(uint8_t* dst, uint8_t v8, int width); +void SetRow_X86(uint8_t* dst, uint8_t v8, int width); +void SetRow_ERMS(uint8_t* dst, uint8_t v8, int width); +void SetRow_NEON(uint8_t* dst, uint8_t v8, int width); +void SetRow_Any_X86(uint8_t* dst_ptr, uint8_t v32, int width); +void SetRow_Any_NEON(uint8_t* dst_ptr, uint8_t v32, int width); + +void ARGBSetRow_C(uint8_t* dst_argb, uint32_t v32, int width); +void ARGBSetRow_X86(uint8_t* dst_argb, uint32_t v32, int width); +void ARGBSetRow_NEON(uint8_t* dst, uint32_t v32, int width); +void ARGBSetRow_Any_NEON(uint8_t* dst_ptr, uint32_t v32, int width); +void ARGBSetRow_MSA(uint8_t* dst_argb, uint32_t v32, int width); +void ARGBSetRow_Any_MSA(uint8_t* dst_ptr, uint32_t v32, int width); + +// ARGBShufflers for BGRAToARGB etc. +void ARGBShuffleRow_C(const uint8_t* src_argb, + uint8_t* dst_argb, + const uint8_t* shuffler, + int width); +void ARGBShuffleRow_SSSE3(const uint8_t* src_argb, + uint8_t* dst_argb, + const uint8_t* shuffler, + int width); +void ARGBShuffleRow_AVX2(const uint8_t* src_argb, + uint8_t* dst_argb, + const uint8_t* shuffler, + int width); +void ARGBShuffleRow_NEON(const uint8_t* src_argb, + uint8_t* dst_argb, + const uint8_t* shuffler, + int width); +void ARGBShuffleRow_MSA(const uint8_t* src_argb, + uint8_t* dst_argb, + const uint8_t* shuffler, + int width); +void ARGBShuffleRow_MMI(const uint8_t* src_argb, + uint8_t* dst_argb, + const uint8_t* shuffler, + int width); +void ARGBShuffleRow_Any_SSSE3(const uint8_t* src_ptr, + uint8_t* dst_ptr, + const uint8_t* param, + int width); +void ARGBShuffleRow_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + const uint8_t* param, + int width); +void ARGBShuffleRow_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_ptr, + const uint8_t* param, + int width); +void ARGBShuffleRow_Any_MSA(const uint8_t* src_ptr, + uint8_t* dst_ptr, + const uint8_t* param, + int width); +void ARGBShuffleRow_Any_MMI(const uint8_t* src_ptr, + uint8_t* dst_ptr, + const uint8_t* param, + int width); + +void RGB24ToARGBRow_SSSE3(const uint8_t* src_rgb24, + uint8_t* dst_argb, + int width); +void RAWToARGBRow_SSSE3(const uint8_t* src_raw, uint8_t* dst_argb, int width); +void RAWToRGB24Row_SSSE3(const uint8_t* src_raw, uint8_t* dst_rgb24, int width); +void RGB565ToARGBRow_SSE2(const uint8_t* src, uint8_t* dst, int width); +void ARGB1555ToARGBRow_SSE2(const uint8_t* src, uint8_t* dst, int width); +void ARGB4444ToARGBRow_SSE2(const uint8_t* src, uint8_t* dst, int width); +void RGB565ToARGBRow_AVX2(const uint8_t* src_rgb565, + uint8_t* dst_argb, + int width); +void ARGB1555ToARGBRow_AVX2(const uint8_t* src_argb1555, + uint8_t* dst_argb, + int width); +void ARGB4444ToARGBRow_AVX2(const uint8_t* src_argb4444, + uint8_t* dst_argb, + int width); + +void RGB24ToARGBRow_NEON(const uint8_t* src_rgb24, + uint8_t* dst_argb, + int width); +void RGB24ToARGBRow_MSA(const uint8_t* src_rgb24, uint8_t* dst_argb, int width); +void RGB24ToARGBRow_MMI(const uint8_t* src_rgb24, uint8_t* dst_argb, int width); +void RAWToARGBRow_NEON(const uint8_t* src_raw, uint8_t* dst_argb, int width); +void RAWToARGBRow_MSA(const uint8_t* src_raw, uint8_t* dst_argb, int width); +void RAWToARGBRow_MMI(const uint8_t* src_raw, uint8_t* dst_argb, int width); +void RAWToRGB24Row_NEON(const uint8_t* src_raw, uint8_t* dst_rgb24, int width); +void RAWToRGB24Row_MSA(const uint8_t* src_raw, uint8_t* dst_rgb24, int width); +void RAWToRGB24Row_MMI(const uint8_t* src_raw, uint8_t* dst_rgb24, int width); +void RGB565ToARGBRow_NEON(const uint8_t* src_rgb565, + uint8_t* dst_argb, + int width); +void RGB565ToARGBRow_MSA(const uint8_t* src_rgb565, + uint8_t* dst_argb, + int width); +void RGB565ToARGBRow_MMI(const uint8_t* src_rgb565, + uint8_t* dst_argb, + int width); +void ARGB1555ToARGBRow_NEON(const uint8_t* src_argb1555, + uint8_t* dst_argb, + int width); +void ARGB1555ToARGBRow_MSA(const uint8_t* src_argb1555, + uint8_t* dst_argb, + int width); +void ARGB1555ToARGBRow_MMI(const uint8_t* src_argb1555, + uint8_t* dst_argb, + int width); +void ARGB4444ToARGBRow_NEON(const uint8_t* src_argb4444, + uint8_t* dst_argb, + int width); +void ARGB4444ToARGBRow_MSA(const uint8_t* src_argb4444, + uint8_t* dst_argb, + int width); +void ARGB4444ToARGBRow_MMI(const uint8_t* src_argb4444, + uint8_t* dst_argb, + int width); +void RGB24ToARGBRow_C(const uint8_t* src_rgb24, uint8_t* dst_argb, int width); +void RAWToARGBRow_C(const uint8_t* src_raw, uint8_t* dst_argb, int width); +void RAWToRGB24Row_C(const uint8_t* src_raw, uint8_t* dst_rgb24, int width); +void RGB565ToARGBRow_C(const uint8_t* src_rgb565, uint8_t* dst_argb, int width); +void ARGB1555ToARGBRow_C(const uint8_t* src_argb1555, + uint8_t* dst_argb, + int width); +void ARGB4444ToARGBRow_C(const uint8_t* src_argb4444, + uint8_t* dst_argb, + int width); +void AR30ToARGBRow_C(const uint8_t* src_ar30, uint8_t* dst_argb, int width); +void AR30ToABGRRow_C(const uint8_t* src_ar30, uint8_t* dst_abgr, int width); +void ARGBToAR30Row_C(const uint8_t* src_argb, uint8_t* dst_ar30, int width); +void AR30ToAB30Row_C(const uint8_t* src_ar30, uint8_t* dst_ab30, int width); + +void RGB24ToARGBRow_Any_SSSE3(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void RAWToARGBRow_Any_SSSE3(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void RAWToRGB24Row_Any_SSSE3(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); + +void RGB565ToARGBRow_Any_SSE2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGB1555ToARGBRow_Any_SSE2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGB4444ToARGBRow_Any_SSE2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void RGB565ToARGBRow_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGB1555ToARGBRow_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGB4444ToARGBRow_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); + +void RGB24ToARGBRow_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void RGB24ToARGBRow_Any_MSA(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void RGB24ToARGBRow_Any_MMI(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void RAWToARGBRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void RAWToARGBRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void RAWToARGBRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void RAWToRGB24Row_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void RAWToRGB24Row_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void RAWToRGB24Row_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void RGB565ToARGBRow_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void RGB565ToARGBRow_Any_MSA(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void RGB565ToARGBRow_Any_MMI(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGB1555ToARGBRow_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGB1555ToARGBRow_Any_MSA(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGB1555ToARGBRow_Any_MMI(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGB4444ToARGBRow_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); + +void ARGB4444ToARGBRow_Any_MSA(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGB4444ToARGBRow_Any_MMI(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); + +void ARGBToRGB24Row_SSSE3(const uint8_t* src, uint8_t* dst, int width); +void ARGBToRAWRow_SSSE3(const uint8_t* src, uint8_t* dst, int width); +void ARGBToRGB565Row_SSE2(const uint8_t* src, uint8_t* dst, int width); +void ARGBToARGB1555Row_SSE2(const uint8_t* src, uint8_t* dst, int width); +void ARGBToARGB4444Row_SSE2(const uint8_t* src, uint8_t* dst, int width); +void ABGRToAR30Row_SSSE3(const uint8_t* src, uint8_t* dst, int width); +void ARGBToAR30Row_SSSE3(const uint8_t* src, uint8_t* dst, int width); + +void ARGBToRAWRow_AVX2(const uint8_t* src, uint8_t* dst, int width); +void ARGBToRGB24Row_AVX2(const uint8_t* src, uint8_t* dst, int width); + +void ARGBToRGB24Row_AVX512VBMI(const uint8_t* src, uint8_t* dst, int width); + +void ARGBToRGB565DitherRow_C(const uint8_t* src_argb, + uint8_t* dst_rgb, + const uint32_t dither4, + int width); +void ARGBToRGB565DitherRow_SSE2(const uint8_t* src, + uint8_t* dst, + const uint32_t dither4, + int width); +void ARGBToRGB565DitherRow_AVX2(const uint8_t* src, + uint8_t* dst, + const uint32_t dither4, + int width); + +void ARGBToRGB565Row_AVX2(const uint8_t* src_argb, uint8_t* dst_rgb, int width); +void ARGBToARGB1555Row_AVX2(const uint8_t* src_argb, + uint8_t* dst_rgb, + int width); +void ARGBToARGB4444Row_AVX2(const uint8_t* src_argb, + uint8_t* dst_rgb, + int width); +void ABGRToAR30Row_AVX2(const uint8_t* src, uint8_t* dst, int width); +void ARGBToAR30Row_AVX2(const uint8_t* src, uint8_t* dst, int width); + +void ARGBToRGB24Row_NEON(const uint8_t* src_argb, + uint8_t* dst_rgb24, + int width); +void ARGBToRAWRow_NEON(const uint8_t* src_argb, uint8_t* dst_raw, int width); +void ARGBToRGB565Row_NEON(const uint8_t* src_argb, + uint8_t* dst_rgb565, + int width); +void ARGBToARGB1555Row_NEON(const uint8_t* src_argb, + uint8_t* dst_argb1555, + int width); +void ARGBToARGB4444Row_NEON(const uint8_t* src_argb, + uint8_t* dst_argb4444, + int width); +void ARGBToRGB565DitherRow_NEON(const uint8_t* src_argb, + uint8_t* dst_rgb, + const uint32_t dither4, + int width); +void ARGBToRGB24Row_MSA(const uint8_t* src_argb, uint8_t* dst_rgb, int width); +void ARGBToRAWRow_MSA(const uint8_t* src_argb, uint8_t* dst_rgb, int width); +void ARGBToRGB565Row_MSA(const uint8_t* src_argb, uint8_t* dst_rgb, int width); +void ARGBToARGB1555Row_MSA(const uint8_t* src_argb, + uint8_t* dst_rgb, + int width); +void ARGBToARGB4444Row_MSA(const uint8_t* src_argb, + uint8_t* dst_rgb, + int width); +void ARGBToRGB565DitherRow_MSA(const uint8_t* src_argb, + uint8_t* dst_rgb, + const uint32_t dither4, + int width); + +void ARGBToRGB24Row_MMI(const uint8_t* src_argb, uint8_t* dst_rgb, int width); +void ARGBToRAWRow_MMI(const uint8_t* src_argb, uint8_t* dst_rgb, int width); +void ARGBToRGB565Row_MMI(const uint8_t* src_argb, uint8_t* dst_rgb, int width); +void ARGBToARGB1555Row_MMI(const uint8_t* src_argb, + uint8_t* dst_rgb, + int width); +void ARGBToARGB4444Row_MMI(const uint8_t* src_argb, + uint8_t* dst_rgb, + int width); +void ARGBToRGB565DitherRow_MMI(const uint8_t* src_argb, + uint8_t* dst_rgb, + const uint32_t dither4, + int width); + +void ARGBToRGBARow_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width); +void ARGBToRGB24Row_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width); +void ARGBToRAWRow_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width); +void ARGBToRGB565Row_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width); +void ARGBToARGB1555Row_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width); +void ARGBToARGB4444Row_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width); +void ABGRToAR30Row_C(const uint8_t* src_abgr, uint8_t* dst_ar30, int width); +void ARGBToAR30Row_C(const uint8_t* src_argb, uint8_t* dst_ar30, int width); + +void J400ToARGBRow_SSE2(const uint8_t* src_y, uint8_t* dst_argb, int width); +void J400ToARGBRow_AVX2(const uint8_t* src_y, uint8_t* dst_argb, int width); +void J400ToARGBRow_NEON(const uint8_t* src_y, uint8_t* dst_argb, int width); +void J400ToARGBRow_MSA(const uint8_t* src_y, uint8_t* dst_argb, int width); +void J400ToARGBRow_MMI(const uint8_t* src_y, uint8_t* dst_argb, int width); +void J400ToARGBRow_C(const uint8_t* src_y, uint8_t* dst_argb, int width); +void J400ToARGBRow_Any_SSE2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void J400ToARGBRow_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void J400ToARGBRow_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void J400ToARGBRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void J400ToARGBRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); + +void I444ToARGBRow_C(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* rgb_buf, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGBRow_C(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* rgb_buf, + const struct YuvConstants* yuvconstants, + int width); +void I422ToAR30Row_C(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* rgb_buf, + const struct YuvConstants* yuvconstants, + int width); +void I210ToAR30Row_C(const uint16_t* src_y, + const uint16_t* src_u, + const uint16_t* src_v, + uint8_t* rgb_buf, + const struct YuvConstants* yuvconstants, + int width); +void I210ToARGBRow_C(const uint16_t* src_y, + const uint16_t* src_u, + const uint16_t* src_v, + uint8_t* rgb_buf, + const struct YuvConstants* yuvconstants, + int width); +void I422AlphaToARGBRow_C(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + const uint8_t* src_a, + uint8_t* rgb_buf, + const struct YuvConstants* yuvconstants, + int width); +void NV12ToARGBRow_C(const uint8_t* src_y, + const uint8_t* src_uv, + uint8_t* rgb_buf, + const struct YuvConstants* yuvconstants, + int width); +void NV12ToRGB565Row_C(const uint8_t* src_y, + const uint8_t* src_uv, + uint8_t* dst_rgb565, + const struct YuvConstants* yuvconstants, + int width); +void NV21ToARGBRow_C(const uint8_t* src_y, + const uint8_t* src_vu, + uint8_t* rgb_buf, + const struct YuvConstants* yuvconstants, + int width); +void NV12ToRGB24Row_C(const uint8_t* src_y, + const uint8_t* src_uv, + uint8_t* rgb_buf, + const struct YuvConstants* yuvconstants, + int width); +void NV21ToRGB24Row_C(const uint8_t* src_y, + const uint8_t* src_vu, + uint8_t* rgb_buf, + const struct YuvConstants* yuvconstants, + int width); +void NV21ToYUV24Row_C(const uint8_t* src_y, + const uint8_t* src_vu, + uint8_t* dst_yuv24, + int width); +void YUY2ToARGBRow_C(const uint8_t* src_yuy2, + uint8_t* rgb_buf, + const struct YuvConstants* yuvconstants, + int width); +void UYVYToARGBRow_C(const uint8_t* src_uyvy, + uint8_t* rgb_buf, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGBARow_C(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* rgb_buf, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGB24Row_C(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* rgb_buf, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGB4444Row_C(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_argb4444, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGB1555Row_C(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_argb1555, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGB565Row_C(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_rgb565, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGBRow_AVX2(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGBARow_AVX2(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void I444ToARGBRow_SSSE3(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void I444ToARGBRow_AVX2(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void I444ToARGBRow_SSSE3(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void I444ToARGBRow_AVX2(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGBRow_SSSE3(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); + +void I422ToAR30Row_SSSE3(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ar30, + const struct YuvConstants* yuvconstants, + int width); +void I210ToAR30Row_SSSE3(const uint16_t* y_buf, + const uint16_t* u_buf, + const uint16_t* v_buf, + uint8_t* dst_ar30, + const struct YuvConstants* yuvconstants, + int width); +void I210ToARGBRow_SSSE3(const uint16_t* y_buf, + const uint16_t* u_buf, + const uint16_t* v_buf, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void I422ToAR30Row_AVX2(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ar30, + const struct YuvConstants* yuvconstants, + int width); +void I210ToARGBRow_AVX2(const uint16_t* y_buf, + const uint16_t* u_buf, + const uint16_t* v_buf, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void I210ToAR30Row_AVX2(const uint16_t* y_buf, + const uint16_t* u_buf, + const uint16_t* v_buf, + uint8_t* dst_ar30, + const struct YuvConstants* yuvconstants, + int width); +void I422AlphaToARGBRow_SSSE3(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + const uint8_t* a_buf, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void I422AlphaToARGBRow_AVX2(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + const uint8_t* a_buf, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void NV12ToARGBRow_SSSE3(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void NV12ToARGBRow_AVX2(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void NV12ToRGB24Row_SSSE3(const uint8_t* src_y, + const uint8_t* src_uv, + uint8_t* dst_rgb24, + const struct YuvConstants* yuvconstants, + int width); +void NV21ToRGB24Row_SSSE3(const uint8_t* src_y, + const uint8_t* src_vu, + uint8_t* dst_rgb24, + const struct YuvConstants* yuvconstants, + int width); +void NV12ToRGB565Row_SSSE3(const uint8_t* src_y, + const uint8_t* src_uv, + uint8_t* dst_rgb565, + const struct YuvConstants* yuvconstants, + int width); +void NV12ToRGB24Row_AVX2(const uint8_t* src_y, + const uint8_t* src_uv, + uint8_t* dst_rgb24, + const struct YuvConstants* yuvconstants, + int width); +void NV21ToRGB24Row_AVX2(const uint8_t* src_y, + const uint8_t* src_vu, + uint8_t* dst_rgb24, + const struct YuvConstants* yuvconstants, + int width); +void NV21ToYUV24Row_AVX2(const uint8_t* src_y, + const uint8_t* src_vu, + uint8_t* dst_yuv24, + int width); +void NV12ToRGB565Row_AVX2(const uint8_t* src_y, + const uint8_t* src_uv, + uint8_t* dst_rgb565, + const struct YuvConstants* yuvconstants, + int width); +void NV21ToARGBRow_SSSE3(const uint8_t* y_buf, + const uint8_t* vu_buf, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void NV21ToARGBRow_AVX2(const uint8_t* y_buf, + const uint8_t* vu_buf, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void YUY2ToARGBRow_SSSE3(const uint8_t* yuy2_buf, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void UYVYToARGBRow_SSSE3(const uint8_t* uyvy_buf, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void YUY2ToARGBRow_AVX2(const uint8_t* yuy2_buf, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void UYVYToARGBRow_AVX2(const uint8_t* uyvy_buf, + uint8_t* dst_argb, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGBARow_SSSE3(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_rgba, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGB4444Row_SSSE3(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_argb4444, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGB4444Row_AVX2(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_argb4444, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGB1555Row_SSSE3(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_argb1555, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGB1555Row_AVX2(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_argb1555, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGB565Row_SSSE3(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_rgb565, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGB565Row_AVX2(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_rgb565, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGB24Row_SSSE3(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_rgb24, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGB24Row_AVX2(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_rgb24, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGBRow_Any_AVX2(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGBARow_Any_AVX2(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I444ToARGBRow_Any_SSSE3(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I444ToARGBRow_Any_AVX2(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGBRow_Any_SSSE3(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToAR30Row_Any_SSSE3(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I210ToAR30Row_Any_SSSE3(const uint16_t* y_buf, + const uint16_t* u_buf, + const uint16_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I210ToARGBRow_Any_SSSE3(const uint16_t* y_buf, + const uint16_t* u_buf, + const uint16_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToAR30Row_Any_AVX2(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I210ToARGBRow_Any_AVX2(const uint16_t* y_buf, + const uint16_t* u_buf, + const uint16_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I210ToAR30Row_Any_AVX2(const uint16_t* y_buf, + const uint16_t* u_buf, + const uint16_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422AlphaToARGBRow_Any_SSSE3(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + const uint8_t* a_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422AlphaToARGBRow_Any_AVX2(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + const uint8_t* a_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void NV12ToARGBRow_Any_SSSE3(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void NV12ToARGBRow_Any_AVX2(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void NV21ToARGBRow_Any_SSSE3(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void NV21ToARGBRow_Any_AVX2(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void NV12ToRGB24Row_Any_SSSE3(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void NV21ToRGB24Row_Any_SSSE3(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void NV12ToRGB24Row_Any_AVX2(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void NV21ToRGB24Row_Any_AVX2(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void NV21ToYUV24Row_Any_AVX2(const uint8_t* src_y, + const uint8_t* src_vu, + uint8_t* dst_yuv24, + int width); +void NV12ToRGB565Row_Any_SSSE3(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void NV12ToRGB565Row_Any_AVX2(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void YUY2ToARGBRow_Any_SSSE3(const uint8_t* src_ptr, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void UYVYToARGBRow_Any_SSSE3(const uint8_t* src_ptr, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void YUY2ToARGBRow_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void UYVYToARGBRow_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGBARow_Any_SSSE3(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGB4444Row_Any_SSSE3(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGB4444Row_Any_AVX2(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGB1555Row_Any_SSSE3(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGB1555Row_Any_AVX2(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGB565Row_Any_SSSE3(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGB565Row_Any_AVX2(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGB24Row_Any_SSSE3(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGB24Row_Any_AVX2(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); + +void I400ToARGBRow_C(const uint8_t* src_y, uint8_t* rgb_buf, int width); +void I400ToARGBRow_SSE2(const uint8_t* y_buf, uint8_t* dst_argb, int width); +void I400ToARGBRow_AVX2(const uint8_t* y_buf, uint8_t* dst_argb, int width); +void I400ToARGBRow_NEON(const uint8_t* src_y, uint8_t* dst_argb, int width); +void I400ToARGBRow_MSA(const uint8_t* src_y, uint8_t* dst_argb, int width); +void I400ToARGBRow_MMI(const uint8_t* src_y, uint8_t* dst_argb, int width); +void I400ToARGBRow_Any_SSE2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void I400ToARGBRow_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void I400ToARGBRow_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void I400ToARGBRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void I400ToARGBRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); + +// ARGB preattenuated alpha blend. +void ARGBBlendRow_SSSE3(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); +void ARGBBlendRow_NEON(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); +void ARGBBlendRow_MSA(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); +void ARGBBlendRow_MMI(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); +void ARGBBlendRow_C(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); + +// Unattenuated planar alpha blend. +void BlendPlaneRow_SSSE3(const uint8_t* src0, + const uint8_t* src1, + const uint8_t* alpha, + uint8_t* dst, + int width); +void BlendPlaneRow_Any_SSSE3(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + int width); +void BlendPlaneRow_AVX2(const uint8_t* src0, + const uint8_t* src1, + const uint8_t* alpha, + uint8_t* dst, + int width); +void BlendPlaneRow_Any_AVX2(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + int width); +void BlendPlaneRow_MMI(const uint8_t* src0, + const uint8_t* src1, + const uint8_t* alpha, + uint8_t* dst, + int width); +void BlendPlaneRow_Any_MMI(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + int width); +void BlendPlaneRow_C(const uint8_t* src0, + const uint8_t* src1, + const uint8_t* alpha, + uint8_t* dst, + int width); + +// ARGB multiply images. Same API as Blend, but these require +// pointer and width alignment for SSE2. +void ARGBMultiplyRow_C(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); +void ARGBMultiplyRow_SSE2(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); +void ARGBMultiplyRow_Any_SSE2(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void ARGBMultiplyRow_AVX2(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); +void ARGBMultiplyRow_Any_AVX2(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void ARGBMultiplyRow_NEON(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); +void ARGBMultiplyRow_Any_NEON(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void ARGBMultiplyRow_MSA(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); +void ARGBMultiplyRow_Any_MSA(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void ARGBMultiplyRow_MMI(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); +void ARGBMultiplyRow_Any_MMI(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); + +// ARGB add images. +void ARGBAddRow_C(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); +void ARGBAddRow_SSE2(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); +void ARGBAddRow_Any_SSE2(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void ARGBAddRow_AVX2(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); +void ARGBAddRow_Any_AVX2(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void ARGBAddRow_NEON(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); +void ARGBAddRow_Any_NEON(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void ARGBAddRow_MSA(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); +void ARGBAddRow_Any_MSA(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void ARGBAddRow_MMI(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); +void ARGBAddRow_Any_MMI(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); + +// ARGB subtract images. Same API as Blend, but these require +// pointer and width alignment for SSE2. +void ARGBSubtractRow_C(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); +void ARGBSubtractRow_SSE2(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); +void ARGBSubtractRow_Any_SSE2(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void ARGBSubtractRow_AVX2(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); +void ARGBSubtractRow_Any_AVX2(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void ARGBSubtractRow_NEON(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); +void ARGBSubtractRow_Any_NEON(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void ARGBSubtractRow_MSA(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); +void ARGBSubtractRow_Any_MSA(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void ARGBSubtractRow_MMI(const uint8_t* src_argb0, + const uint8_t* src_argb1, + uint8_t* dst_argb, + int width); +void ARGBSubtractRow_Any_MMI(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); + +void ARGBToRGB24Row_Any_SSSE3(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToRAWRow_Any_SSSE3(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToRGB565Row_Any_SSE2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToARGB1555Row_Any_SSE2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToARGB4444Row_Any_SSE2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ABGRToAR30Row_Any_SSSE3(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToAR30Row_Any_SSSE3(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToRAWRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void ARGBToRGB24Row_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToRGB24Row_Any_AVX512VBMI(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToRGB565DitherRow_Any_SSE2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + const uint32_t param, + int width); +void ARGBToRGB565DitherRow_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + const uint32_t param, + int width); + +void ARGBToRGB565Row_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToARGB1555Row_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToARGB4444Row_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ABGRToAR30Row_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToAR30Row_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); + +void ARGBToRGB24Row_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToRAWRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void ARGBToRGB565Row_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToARGB1555Row_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToARGB4444Row_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToRGB565DitherRow_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_ptr, + const uint32_t param, + int width); +void ARGBToRGB24Row_Any_MSA(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToRAWRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void ARGBToRGB565Row_Any_MSA(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToARGB1555Row_Any_MSA(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToARGB4444Row_Any_MSA(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToRGB565DitherRow_Any_MSA(const uint8_t* src_ptr, + uint8_t* dst_ptr, + const uint32_t param, + int width); + +void ARGBToRGB24Row_Any_MMI(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToRAWRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void ARGBToRGB565Row_Any_MMI(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToARGB1555Row_Any_MMI(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToARGB4444Row_Any_MMI(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBToRGB565DitherRow_Any_MMI(const uint8_t* src_ptr, + uint8_t* dst_ptr, + const uint32_t param, + int width); + +void I444ToARGBRow_Any_NEON(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGBRow_Any_NEON(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422AlphaToARGBRow_Any_NEON(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + const uint8_t* a_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGBARow_Any_NEON(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGB24Row_Any_NEON(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGB4444Row_Any_NEON(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGB1555Row_Any_NEON(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGB565Row_Any_NEON(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void NV12ToARGBRow_Any_NEON(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void NV21ToARGBRow_Any_NEON(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void NV12ToRGB24Row_Any_NEON(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void NV21ToRGB24Row_Any_NEON(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void NV21ToYUV24Row_Any_NEON(const uint8_t* src_y, + const uint8_t* src_vu, + uint8_t* dst_yuv24, + int width); +void NV12ToRGB565Row_Any_NEON(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void YUY2ToARGBRow_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void UYVYToARGBRow_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I444ToARGBRow_Any_MSA(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGBRow_Any_MSA(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGBARow_Any_MSA(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422AlphaToARGBRow_Any_MSA(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + const uint8_t* a_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGB24Row_Any_MSA(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToRGB565Row_Any_MSA(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGB4444Row_Any_MSA(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void I422ToARGB1555Row_Any_MSA(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void NV12ToARGBRow_Any_MSA(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void NV12ToRGB565Row_Any_MSA(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void NV21ToARGBRow_Any_MSA(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void YUY2ToARGBRow_Any_MSA(const uint8_t* src_ptr, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); +void UYVYToARGBRow_Any_MSA(const uint8_t* src_ptr, + uint8_t* dst_ptr, + const struct YuvConstants* yuvconstants, + int width); + +void YUY2ToYRow_AVX2(const uint8_t* src_yuy2, uint8_t* dst_y, int width); +void YUY2ToUVRow_AVX2(const uint8_t* src_yuy2, + int stride_yuy2, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void YUY2ToUV422Row_AVX2(const uint8_t* src_yuy2, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void YUY2ToYRow_SSE2(const uint8_t* src_yuy2, uint8_t* dst_y, int width); +void YUY2ToUVRow_SSE2(const uint8_t* src_yuy2, + int stride_yuy2, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void YUY2ToUV422Row_SSE2(const uint8_t* src_yuy2, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void YUY2ToYRow_NEON(const uint8_t* src_yuy2, uint8_t* dst_y, int width); +void YUY2ToUVRow_NEON(const uint8_t* src_yuy2, + int stride_yuy2, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void YUY2ToUV422Row_NEON(const uint8_t* src_yuy2, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void YUY2ToYRow_MSA(const uint8_t* src_yuy2, uint8_t* dst_y, int width); +void YUY2ToYRow_MMI(const uint8_t* src_yuy2, uint8_t* dst_y, int width); +void YUY2ToUVRow_MSA(const uint8_t* src_yuy2, + int src_stride_yuy2, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void YUY2ToUVRow_MMI(const uint8_t* src_yuy2, + int src_stride_yuy2, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void YUY2ToUV422Row_MSA(const uint8_t* src_yuy2, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void YUY2ToUV422Row_MMI(const uint8_t* src_yuy2, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void YUY2ToYRow_C(const uint8_t* src_yuy2, uint8_t* dst_y, int width); +void YUY2ToUVRow_C(const uint8_t* src_yuy2, + int src_stride_yuy2, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void YUY2ToUV422Row_C(const uint8_t* src_yuy2, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void YUY2ToYRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void YUY2ToUVRow_Any_AVX2(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void YUY2ToUV422Row_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void YUY2ToYRow_Any_SSE2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void YUY2ToUVRow_Any_SSE2(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void YUY2ToUV422Row_Any_SSE2(const uint8_t* src_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void YUY2ToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void YUY2ToUVRow_Any_NEON(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void YUY2ToUV422Row_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void YUY2ToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void YUY2ToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void YUY2ToUVRow_Any_MSA(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void YUY2ToUVRow_Any_MMI(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void YUY2ToUV422Row_Any_MSA(const uint8_t* src_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void YUY2ToUV422Row_Any_MMI(const uint8_t* src_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToYRow_AVX2(const uint8_t* src_uyvy, uint8_t* dst_y, int width); +void UYVYToUVRow_AVX2(const uint8_t* src_uyvy, + int stride_uyvy, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToUV422Row_AVX2(const uint8_t* src_uyvy, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToYRow_SSE2(const uint8_t* src_uyvy, uint8_t* dst_y, int width); +void UYVYToUVRow_SSE2(const uint8_t* src_uyvy, + int stride_uyvy, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToUV422Row_SSE2(const uint8_t* src_uyvy, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToYRow_AVX2(const uint8_t* src_uyvy, uint8_t* dst_y, int width); +void UYVYToUVRow_AVX2(const uint8_t* src_uyvy, + int stride_uyvy, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToUV422Row_AVX2(const uint8_t* src_uyvy, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToYRow_NEON(const uint8_t* src_uyvy, uint8_t* dst_y, int width); +void UYVYToUVRow_NEON(const uint8_t* src_uyvy, + int stride_uyvy, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToUV422Row_NEON(const uint8_t* src_uyvy, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToYRow_MSA(const uint8_t* src_uyvy, uint8_t* dst_y, int width); +void UYVYToYRow_MMI(const uint8_t* src_uyvy, uint8_t* dst_y, int width); +void UYVYToUVRow_MSA(const uint8_t* src_uyvy, + int src_stride_uyvy, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToUVRow_MMI(const uint8_t* src_uyvy, + int src_stride_uyvy, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToUV422Row_MSA(const uint8_t* src_uyvy, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToUV422Row_MMI(const uint8_t* src_uyvy, + uint8_t* dst_u, + uint8_t* dst_v, + int width); + +void UYVYToYRow_C(const uint8_t* src_uyvy, uint8_t* dst_y, int width); +void UYVYToUVRow_C(const uint8_t* src_uyvy, + int src_stride_uyvy, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToUV422Row_C(const uint8_t* src_uyvy, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToYRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void UYVYToUVRow_Any_AVX2(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToUV422Row_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToYRow_Any_SSE2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void UYVYToUVRow_Any_SSE2(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToUV422Row_Any_SSE2(const uint8_t* src_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void UYVYToUVRow_Any_NEON(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToUV422Row_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void UYVYToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); +void UYVYToUVRow_Any_MSA(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToUVRow_Any_MMI(const uint8_t* src_ptr, + int src_stride_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToUV422Row_Any_MSA(const uint8_t* src_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UYVYToUV422Row_Any_MMI(const uint8_t* src_ptr, + uint8_t* dst_u, + uint8_t* dst_v, + int width); +void UVToVURow_C(const uint8_t* src_uv, uint8_t* dst_vu, int width); +void UVToVURow_NEON(const uint8_t* src_uv, uint8_t* dst_vu, int width); +void UVToVURow_Any_NEON(const uint8_t* src_uv, uint8_t* dst_vu, int width); +void AYUVToYRow_C(const uint8_t* src_ayuv, uint8_t* dst_y, int width); +void AYUVToUVRow_C(const uint8_t* src_ayuv, + int stride_ayuv, + uint8_t* dst_uv, + int width); +void AYUVToVURow_C(const uint8_t* src_ayuv, + int stride_ayuv, + uint8_t* dst_vu, + int width); +void AYUVToYRow_NEON(const uint8_t* src_ayuv, uint8_t* dst_y, int width); +void AYUVToUVRow_NEON(const uint8_t* src_ayuv, + int stride_ayuv, + uint8_t* dst_uv, + int width); +void AYUVToVURow_NEON(const uint8_t* src_ayuv, + int stride_ayuv, + uint8_t* dst_vu, + int width); +void AYUVToYRow_Any_NEON(const uint8_t* src_ayuv, uint8_t* dst_y, int width); +void AYUVToUVRow_Any_NEON(const uint8_t* src_ayuv, + int stride_ayuv, + uint8_t* dst_uv, + int width); +void AYUVToVURow_Any_NEON(const uint8_t* src_ayuv, + int stride_ayuv, + uint8_t* dst_vu, + int width); + +void I422ToYUY2Row_C(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_frame, + int width); +void I422ToUYVYRow_C(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_frame, + int width); +void I422ToYUY2Row_SSE2(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_yuy2, + int width); +void I422ToUYVYRow_SSE2(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_uyvy, + int width); +void I422ToYUY2Row_Any_SSE2(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + int width); +void I422ToUYVYRow_Any_SSE2(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + int width); +void I422ToYUY2Row_AVX2(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_yuy2, + int width); +void I422ToUYVYRow_AVX2(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_uyvy, + int width); +void I422ToYUY2Row_Any_AVX2(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + int width); +void I422ToUYVYRow_Any_AVX2(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + int width); +void I422ToYUY2Row_NEON(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_yuy2, + int width); +void I422ToUYVYRow_NEON(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_uyvy, + int width); +void I422ToYUY2Row_Any_NEON(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + int width); +void I422ToUYVYRow_Any_NEON(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + int width); +void I422ToYUY2Row_MSA(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_yuy2, + int width); +void I422ToYUY2Row_MMI(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_yuy2, + int width); +void I422ToUYVYRow_MSA(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_uyvy, + int width); +void I422ToUYVYRow_MMI(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + uint8_t* dst_uyvy, + int width); +void I422ToYUY2Row_Any_MSA(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + int width); +void I422ToYUY2Row_Any_MMI(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + int width); +void I422ToUYVYRow_Any_MSA(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + int width); +void I422ToUYVYRow_Any_MMI(const uint8_t* y_buf, + const uint8_t* u_buf, + const uint8_t* v_buf, + uint8_t* dst_ptr, + int width); + +// Effects related row functions. +void ARGBAttenuateRow_C(const uint8_t* src_argb, uint8_t* dst_argb, int width); +void ARGBAttenuateRow_SSSE3(const uint8_t* src_argb, + uint8_t* dst_argb, + int width); +void ARGBAttenuateRow_AVX2(const uint8_t* src_argb, + uint8_t* dst_argb, + int width); +void ARGBAttenuateRow_NEON(const uint8_t* src_argb, + uint8_t* dst_argb, + int width); +void ARGBAttenuateRow_MSA(const uint8_t* src_argb, + uint8_t* dst_argb, + int width); +void ARGBAttenuateRow_MMI(const uint8_t* src_argb, + uint8_t* dst_argb, + int width); +void ARGBAttenuateRow_Any_SSSE3(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBAttenuateRow_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBAttenuateRow_Any_NEON(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBAttenuateRow_Any_MSA(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBAttenuateRow_Any_MMI(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); + +// Inverse table for unattenuate, shared by C and SSE2. +extern const uint32_t fixed_invtbl8[256]; +void ARGBUnattenuateRow_C(const uint8_t* src_argb, + uint8_t* dst_argb, + int width); +void ARGBUnattenuateRow_SSE2(const uint8_t* src_argb, + uint8_t* dst_argb, + int width); +void ARGBUnattenuateRow_AVX2(const uint8_t* src_argb, + uint8_t* dst_argb, + int width); +void ARGBUnattenuateRow_Any_SSE2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); +void ARGBUnattenuateRow_Any_AVX2(const uint8_t* src_ptr, + uint8_t* dst_ptr, + int width); + +void ARGBGrayRow_C(const uint8_t* src_argb, uint8_t* dst_argb, int width); +void ARGBGrayRow_SSSE3(const uint8_t* src_argb, uint8_t* dst_argb, int width); +void ARGBGrayRow_NEON(const uint8_t* src_argb, uint8_t* dst_argb, int width); +void ARGBGrayRow_MSA(const uint8_t* src_argb, uint8_t* dst_argb, int width); +void ARGBGrayRow_MMI(const uint8_t* src_argb, uint8_t* dst_argb, int width); + +void ARGBSepiaRow_C(uint8_t* dst_argb, int width); +void ARGBSepiaRow_SSSE3(uint8_t* dst_argb, int width); +void ARGBSepiaRow_NEON(uint8_t* dst_argb, int width); +void ARGBSepiaRow_MSA(uint8_t* dst_argb, int width); +void ARGBSepiaRow_MMI(uint8_t* dst_argb, int width); + +void ARGBColorMatrixRow_C(const uint8_t* src_argb, + uint8_t* dst_argb, + const int8_t* matrix_argb, + int width); +void ARGBColorMatrixRow_SSSE3(const uint8_t* src_argb, + uint8_t* dst_argb, + const int8_t* matrix_argb, + int width); +void ARGBColorMatrixRow_NEON(const uint8_t* src_argb, + uint8_t* dst_argb, + const int8_t* matrix_argb, + int width); +void ARGBColorMatrixRow_MSA(const uint8_t* src_argb, + uint8_t* dst_argb, + const int8_t* matrix_argb, + int width); +void ARGBColorMatrixRow_MMI(const uint8_t* src_argb, + uint8_t* dst_argb, + const int8_t* matrix_argb, + int width); + +void ARGBColorTableRow_C(uint8_t* dst_argb, + const uint8_t* table_argb, + int width); +void ARGBColorTableRow_X86(uint8_t* dst_argb, + const uint8_t* table_argb, + int width); + +void RGBColorTableRow_C(uint8_t* dst_argb, + const uint8_t* table_argb, + int width); +void RGBColorTableRow_X86(uint8_t* dst_argb, + const uint8_t* table_argb, + int width); + +void ARGBQuantizeRow_C(uint8_t* dst_argb, + int scale, + int interval_size, + int interval_offset, + int width); +void ARGBQuantizeRow_SSE2(uint8_t* dst_argb, + int scale, + int interval_size, + int interval_offset, + int width); +void ARGBQuantizeRow_NEON(uint8_t* dst_argb, + int scale, + int interval_size, + int interval_offset, + int width); +void ARGBQuantizeRow_MSA(uint8_t* dst_argb, + int scale, + int interval_size, + int interval_offset, + int width); + +void ARGBShadeRow_C(const uint8_t* src_argb, + uint8_t* dst_argb, + int width, + uint32_t value); +void ARGBShadeRow_SSE2(const uint8_t* src_argb, + uint8_t* dst_argb, + int width, + uint32_t value); +void ARGBShadeRow_NEON(const uint8_t* src_argb, + uint8_t* dst_argb, + int width, + uint32_t value); +void ARGBShadeRow_MSA(const uint8_t* src_argb, + uint8_t* dst_argb, + int width, + uint32_t value); +void ARGBShadeRow_MMI(const uint8_t* src_argb, + uint8_t* dst_argb, + int width, + uint32_t value); + +// Used for blur. +void CumulativeSumToAverageRow_SSE2(const int32_t* topleft, + const int32_t* botleft, + int width, + int area, + uint8_t* dst, + int count); +void ComputeCumulativeSumRow_SSE2(const uint8_t* row, + int32_t* cumsum, + const int32_t* previous_cumsum, + int width); + +void ComputeCumulativeSumRow_MMI(const uint8_t* row, + int32_t* cumsum, + const int32_t* previous_cumsum, + int width); + +void CumulativeSumToAverageRow_C(const int32_t* tl, + const int32_t* bl, + int w, + int area, + uint8_t* dst, + int count); +void ComputeCumulativeSumRow_C(const uint8_t* row, + int32_t* cumsum, + const int32_t* previous_cumsum, + int width); + +LIBYUV_API +void ARGBAffineRow_C(const uint8_t* src_argb, + int src_argb_stride, + uint8_t* dst_argb, + const float* uv_dudv, + int width); +LIBYUV_API +void ARGBAffineRow_SSE2(const uint8_t* src_argb, + int src_argb_stride, + uint8_t* dst_argb, + const float* src_dudv, + int width); + +// Used for I420Scale, ARGBScale, and ARGBInterpolate. +void InterpolateRow_C(uint8_t* dst_ptr, + const uint8_t* src_ptr, + ptrdiff_t src_stride, + int width, + int source_y_fraction); +void InterpolateRow_SSSE3(uint8_t* dst_ptr, + const uint8_t* src_ptr, + ptrdiff_t src_stride, + int dst_width, + int source_y_fraction); +void InterpolateRow_AVX2(uint8_t* dst_ptr, + const uint8_t* src_ptr, + ptrdiff_t src_stride, + int dst_width, + int source_y_fraction); +void InterpolateRow_NEON(uint8_t* dst_ptr, + const uint8_t* src_ptr, + ptrdiff_t src_stride, + int dst_width, + int source_y_fraction); +void InterpolateRow_MSA(uint8_t* dst_ptr, + const uint8_t* src_ptr, + ptrdiff_t src_stride, + int width, + int source_y_fraction); +void InterpolateRow_MMI(uint8_t* dst_ptr, + const uint8_t* src_ptr, + ptrdiff_t src_stride, + int width, + int source_y_fraction); +void InterpolateRow_Any_NEON(uint8_t* dst_ptr, + const uint8_t* src_ptr, + ptrdiff_t src_stride_ptr, + int width, + int source_y_fraction); +void InterpolateRow_Any_SSSE3(uint8_t* dst_ptr, + const uint8_t* src_ptr, + ptrdiff_t src_stride_ptr, + int width, + int source_y_fraction); +void InterpolateRow_Any_AVX2(uint8_t* dst_ptr, + const uint8_t* src_ptr, + ptrdiff_t src_stride_ptr, + int width, + int source_y_fraction); +void InterpolateRow_Any_MSA(uint8_t* dst_ptr, + const uint8_t* src_ptr, + ptrdiff_t src_stride_ptr, + int width, + int source_y_fraction); +void InterpolateRow_Any_MMI(uint8_t* dst_ptr, + const uint8_t* src_ptr, + ptrdiff_t src_stride_ptr, + int width, + int source_y_fraction); + +void InterpolateRow_16_C(uint16_t* dst_ptr, + const uint16_t* src_ptr, + ptrdiff_t src_stride, + int width, + int source_y_fraction); + +// Sobel images. +void SobelXRow_C(const uint8_t* src_y0, + const uint8_t* src_y1, + const uint8_t* src_y2, + uint8_t* dst_sobelx, + int width); +void SobelXRow_SSE2(const uint8_t* src_y0, + const uint8_t* src_y1, + const uint8_t* src_y2, + uint8_t* dst_sobelx, + int width); +void SobelXRow_NEON(const uint8_t* src_y0, + const uint8_t* src_y1, + const uint8_t* src_y2, + uint8_t* dst_sobelx, + int width); +void SobelXRow_MSA(const uint8_t* src_y0, + const uint8_t* src_y1, + const uint8_t* src_y2, + uint8_t* dst_sobelx, + int width); +void SobelXRow_MMI(const uint8_t* src_y0, + const uint8_t* src_y1, + const uint8_t* src_y2, + uint8_t* dst_sobelx, + int width); +void SobelYRow_C(const uint8_t* src_y0, + const uint8_t* src_y1, + uint8_t* dst_sobely, + int width); +void SobelYRow_SSE2(const uint8_t* src_y0, + const uint8_t* src_y1, + uint8_t* dst_sobely, + int width); +void SobelYRow_NEON(const uint8_t* src_y0, + const uint8_t* src_y1, + uint8_t* dst_sobely, + int width); +void SobelYRow_MSA(const uint8_t* src_y0, + const uint8_t* src_y1, + uint8_t* dst_sobely, + int width); +void SobelYRow_MMI(const uint8_t* src_y0, + const uint8_t* src_y1, + uint8_t* dst_sobely, + int width); +void SobelRow_C(const uint8_t* src_sobelx, + const uint8_t* src_sobely, + uint8_t* dst_argb, + int width); +void SobelRow_SSE2(const uint8_t* src_sobelx, + const uint8_t* src_sobely, + uint8_t* dst_argb, + int width); +void SobelRow_NEON(const uint8_t* src_sobelx, + const uint8_t* src_sobely, + uint8_t* dst_argb, + int width); +void SobelRow_MSA(const uint8_t* src_sobelx, + const uint8_t* src_sobely, + uint8_t* dst_argb, + int width); +void SobelRow_MMI(const uint8_t* src_sobelx, + const uint8_t* src_sobely, + uint8_t* dst_argb, + int width); +void SobelToPlaneRow_C(const uint8_t* src_sobelx, + const uint8_t* src_sobely, + uint8_t* dst_y, + int width); +void SobelToPlaneRow_SSE2(const uint8_t* src_sobelx, + const uint8_t* src_sobely, + uint8_t* dst_y, + int width); +void SobelToPlaneRow_NEON(const uint8_t* src_sobelx, + const uint8_t* src_sobely, + uint8_t* dst_y, + int width); +void SobelToPlaneRow_MSA(const uint8_t* src_sobelx, + const uint8_t* src_sobely, + uint8_t* dst_y, + int width); +void SobelToPlaneRow_MMI(const uint8_t* src_sobelx, + const uint8_t* src_sobely, + uint8_t* dst_y, + int width); +void SobelXYRow_C(const uint8_t* src_sobelx, + const uint8_t* src_sobely, + uint8_t* dst_argb, + int width); +void SobelXYRow_SSE2(const uint8_t* src_sobelx, + const uint8_t* src_sobely, + uint8_t* dst_argb, + int width); +void SobelXYRow_NEON(const uint8_t* src_sobelx, + const uint8_t* src_sobely, + uint8_t* dst_argb, + int width); +void SobelXYRow_MSA(const uint8_t* src_sobelx, + const uint8_t* src_sobely, + uint8_t* dst_argb, + int width); +void SobelXYRow_MMI(const uint8_t* src_sobelx, + const uint8_t* src_sobely, + uint8_t* dst_argb, + int width); +void SobelRow_Any_SSE2(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void SobelRow_Any_NEON(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void SobelRow_Any_MSA(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void SobelRow_Any_MMI(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void SobelToPlaneRow_Any_SSE2(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void SobelToPlaneRow_Any_NEON(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void SobelToPlaneRow_Any_MSA(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void SobelToPlaneRow_Any_MMI(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void SobelXYRow_Any_SSE2(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void SobelXYRow_Any_NEON(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void SobelXYRow_Any_MSA(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); +void SobelXYRow_Any_MMI(const uint8_t* y_buf, + const uint8_t* uv_buf, + uint8_t* dst_ptr, + int width); + +void ARGBPolynomialRow_C(const uint8_t* src_argb, + uint8_t* dst_argb, + const float* poly, + int width); +void ARGBPolynomialRow_SSE2(const uint8_t* src_argb, + uint8_t* dst_argb, + const float* poly, + int width); +void ARGBPolynomialRow_AVX2(const uint8_t* src_argb, + uint8_t* dst_argb, + const float* poly, + int width); + +// Scale and convert to half float. +void HalfFloatRow_C(const uint16_t* src, uint16_t* dst, float scale, int width); +void HalfFloatRow_SSE2(const uint16_t* src, + uint16_t* dst, + float scale, + int width); +void HalfFloatRow_Any_SSE2(const uint16_t* src_ptr, + uint16_t* dst_ptr, + float param, + int width); +void HalfFloatRow_AVX2(const uint16_t* src, + uint16_t* dst, + float scale, + int width); +void HalfFloatRow_Any_AVX2(const uint16_t* src_ptr, + uint16_t* dst_ptr, + float param, + int width); +void HalfFloatRow_F16C(const uint16_t* src, + uint16_t* dst, + float scale, + int width); +void HalfFloatRow_Any_F16C(const uint16_t* src, + uint16_t* dst, + float scale, + int width); +void HalfFloat1Row_F16C(const uint16_t* src, + uint16_t* dst, + float scale, + int width); +void HalfFloat1Row_Any_F16C(const uint16_t* src, + uint16_t* dst, + float scale, + int width); +void HalfFloatRow_NEON(const uint16_t* src, + uint16_t* dst, + float scale, + int width); +void HalfFloatRow_Any_NEON(const uint16_t* src_ptr, + uint16_t* dst_ptr, + float param, + int width); +void HalfFloat1Row_NEON(const uint16_t* src, + uint16_t* dst, + float scale, + int width); +void HalfFloat1Row_Any_NEON(const uint16_t* src_ptr, + uint16_t* dst_ptr, + float param, + int width); +void HalfFloatRow_MSA(const uint16_t* src, + uint16_t* dst, + float scale, + int width); +void HalfFloatRow_Any_MSA(const uint16_t* src_ptr, + uint16_t* dst_ptr, + float param, + int width); +void ByteToFloatRow_C(const uint8_t* src, float* dst, float scale, int width); +void ByteToFloatRow_NEON(const uint8_t* src, + float* dst, + float scale, + int width); +void ByteToFloatRow_Any_NEON(const uint8_t* src_ptr, + float* dst_ptr, + float param, + int width); + +void ARGBLumaColorTableRow_C(const uint8_t* src_argb, + uint8_t* dst_argb, + int width, + const uint8_t* luma, + uint32_t lumacoeff); +void ARGBLumaColorTableRow_SSSE3(const uint8_t* src_argb, + uint8_t* dst_argb, + int width, + const uint8_t* luma, + uint32_t lumacoeff); + +float ScaleMaxSamples_C(const float* src, float* dst, float scale, int width); +float ScaleMaxSamples_NEON(const float* src, + float* dst, + float scale, + int width); +float ScaleSumSamples_C(const float* src, float* dst, float scale, int width); +float ScaleSumSamples_NEON(const float* src, + float* dst, + float scale, + int width); +void ScaleSamples_C(const float* src, float* dst, float scale, int width); +void ScaleSamples_NEON(const float* src, float* dst, float scale, int width); + +void FloatDivToByteRow_C(const float* src_weights, + const float* src_values, + uint8_t* dst_out, + uint8_t* dst_mask, + int width); +void FloatDivToByteRow_NEON(const float* src_weights, + const float* src_values, + uint8_t* dst_out, + uint8_t* dst_mask, + int width); + +#ifdef __cplusplus +} // extern "C" +} // namespace libyuv +#endif + +#endif // INCLUDE_LIBYUV_ROW_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale.h new file mode 100644 index 0000000000..23ba1634f7 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale.h @@ -0,0 +1,179 @@ +/* + * Copyright 2011 The LibYuv Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef INCLUDE_LIBYUV_SCALE_H_ +#define INCLUDE_LIBYUV_SCALE_H_ + +#include "libyuv/basic_types.h" + +#ifdef __cplusplus +namespace libyuv { +extern "C" { +#endif + +// Supported filtering. +typedef enum FilterMode { + kFilterNone = 0, // Point sample; Fastest. + kFilterLinear = 1, // Filter horizontally only. + kFilterBilinear = 2, // Faster than box, but lower quality scaling down. + kFilterBox = 3 // Highest quality. +} FilterModeEnum; + +// Scale a YUV plane. +LIBYUV_API +void ScalePlane(const uint8_t* src, + int src_stride, + int src_width, + int src_height, + uint8_t* dst, + int dst_stride, + int dst_width, + int dst_height, + enum FilterMode filtering); + +LIBYUV_API +void ScalePlane_16(const uint16_t* src, + int src_stride, + int src_width, + int src_height, + uint16_t* dst, + int dst_stride, + int dst_width, + int dst_height, + enum FilterMode filtering); + +// Scales a YUV 4:2:0 image from the src width and height to the +// dst width and height. +// If filtering is kFilterNone, a simple nearest-neighbor algorithm is +// used. This produces basic (blocky) quality at the fastest speed. +// If filtering is kFilterBilinear, interpolation is used to produce a better +// quality image, at the expense of speed. +// If filtering is kFilterBox, averaging is used to produce ever better +// quality image, at further expense of speed. +// Returns 0 if successful. + +LIBYUV_API +int I420Scale(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + int src_width, + int src_height, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int dst_width, + int dst_height, + enum FilterMode filtering); + +LIBYUV_API +int I420Scale_16(const uint16_t* src_y, + int src_stride_y, + const uint16_t* src_u, + int src_stride_u, + const uint16_t* src_v, + int src_stride_v, + int src_width, + int src_height, + uint16_t* dst_y, + int dst_stride_y, + uint16_t* dst_u, + int dst_stride_u, + uint16_t* dst_v, + int dst_stride_v, + int dst_width, + int dst_height, + enum FilterMode filtering); + +// Scales a YUV 4:4:4 image from the src width and height to the +// dst width and height. +// If filtering is kFilterNone, a simple nearest-neighbor algorithm is +// used. This produces basic (blocky) quality at the fastest speed. +// If filtering is kFilterBilinear, interpolation is used to produce a better +// quality image, at the expense of speed. +// If filtering is kFilterBox, averaging is used to produce ever better +// quality image, at further expense of speed. +// Returns 0 if successful. + +LIBYUV_API +int I444Scale(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + int src_width, + int src_height, + uint8_t* dst_y, + int dst_stride_y, + uint8_t* dst_u, + int dst_stride_u, + uint8_t* dst_v, + int dst_stride_v, + int dst_width, + int dst_height, + enum FilterMode filtering); + +LIBYUV_API +int I444Scale_16(const uint16_t* src_y, + int src_stride_y, + const uint16_t* src_u, + int src_stride_u, + const uint16_t* src_v, + int src_stride_v, + int src_width, + int src_height, + uint16_t* dst_y, + int dst_stride_y, + uint16_t* dst_u, + int dst_stride_u, + uint16_t* dst_v, + int dst_stride_v, + int dst_width, + int dst_height, + enum FilterMode filtering); + +#ifdef __cplusplus +// Legacy API. Deprecated. +LIBYUV_API +int Scale(const uint8_t* src_y, + const uint8_t* src_u, + const uint8_t* src_v, + int src_stride_y, + int src_stride_u, + int src_stride_v, + int src_width, + int src_height, + uint8_t* dst_y, + uint8_t* dst_u, + uint8_t* dst_v, + int dst_stride_y, + int dst_stride_u, + int dst_stride_v, + int dst_width, + int dst_height, + LIBYUV_BOOL interpolate); + +// For testing, allow disabling of specialized scalers. +LIBYUV_API +void SetUseReferenceImpl(LIBYUV_BOOL use); +#endif // __cplusplus + +#ifdef __cplusplus +} // extern "C" +} // namespace libyuv +#endif + +#endif // INCLUDE_LIBYUV_SCALE_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale_argb.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale_argb.h new file mode 100644 index 0000000000..7641f18e34 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale_argb.h @@ -0,0 +1,76 @@ +/* + * Copyright 2012 The LibYuv Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef INCLUDE_LIBYUV_SCALE_ARGB_H_ +#define INCLUDE_LIBYUV_SCALE_ARGB_H_ + +#include "libyuv/basic_types.h" +#include "libyuv/scale.h" // For FilterMode + +#ifdef __cplusplus +namespace libyuv { +extern "C" { +#endif + +LIBYUV_API +int ARGBScale(const uint8_t* src_argb, + int src_stride_argb, + int src_width, + int src_height, + uint8_t* dst_argb, + int dst_stride_argb, + int dst_width, + int dst_height, + enum FilterMode filtering); + +// Clipped scale takes destination rectangle coordinates for clip values. +LIBYUV_API +int ARGBScaleClip(const uint8_t* src_argb, + int src_stride_argb, + int src_width, + int src_height, + uint8_t* dst_argb, + int dst_stride_argb, + int dst_width, + int dst_height, + int clip_x, + int clip_y, + int clip_width, + int clip_height, + enum FilterMode filtering); + +// Scale with YUV conversion to ARGB and clipping. +LIBYUV_API +int YUVToARGBScaleClip(const uint8_t* src_y, + int src_stride_y, + const uint8_t* src_u, + int src_stride_u, + const uint8_t* src_v, + int src_stride_v, + uint32_t src_fourcc, + int src_width, + int src_height, + uint8_t* dst_argb, + int dst_stride_argb, + uint32_t dst_fourcc, + int dst_width, + int dst_height, + int clip_x, + int clip_y, + int clip_width, + int clip_height, + enum FilterMode filtering); + +#ifdef __cplusplus +} // extern "C" +} // namespace libyuv +#endif + +#endif // INCLUDE_LIBYUV_SCALE_ARGB_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale_row.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale_row.h new file mode 100644 index 0000000000..6e207a9c64 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale_row.h @@ -0,0 +1,1107 @@ +/* + * Copyright 2013 The LibYuv Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef INCLUDE_LIBYUV_SCALE_ROW_H_ +#define INCLUDE_LIBYUV_SCALE_ROW_H_ + +#include "libyuv/basic_types.h" +#include "libyuv/scale.h" + +#ifdef __cplusplus +namespace libyuv { +extern "C" { +#endif + +#if defined(__pnacl__) || defined(__CLR_VER) || \ + (defined(__native_client__) && defined(__x86_64__)) || \ + (defined(__i386__) && !defined(__SSE__) && !defined(__clang__)) +#define LIBYUV_DISABLE_X86 +#endif +#if defined(__native_client__) +#define LIBYUV_DISABLE_NEON +#endif +// MemorySanitizer does not support assembly code yet. http://crbug.com/344505 +#if defined(__has_feature) +#if __has_feature(memory_sanitizer) +#define LIBYUV_DISABLE_X86 +#endif +#endif +// GCC >= 4.7.0 required for AVX2. +#if defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__)) +#if (__GNUC__ > 4) || (__GNUC__ == 4 && (__GNUC_MINOR__ >= 7)) +#define GCC_HAS_AVX2 1 +#endif // GNUC >= 4.7 +#endif // __GNUC__ + +// clang >= 3.4.0 required for AVX2. +#if defined(__clang__) && (defined(__x86_64__) || defined(__i386__)) +#if (__clang_major__ > 3) || (__clang_major__ == 3 && (__clang_minor__ >= 4)) +#define CLANG_HAS_AVX2 1 +#endif // clang >= 3.4 +#endif // __clang__ + +// Visual C 2012 required for AVX2. +#if defined(_M_IX86) && !defined(__clang__) && defined(_MSC_VER) && \ + _MSC_VER >= 1700 +#define VISUALC_HAS_AVX2 1 +#endif // VisualStudio >= 2012 + +// The following are available on all x86 platforms: +#if !defined(LIBYUV_DISABLE_X86) && \ + (defined(_M_IX86) || defined(__x86_64__) || defined(__i386__)) +#define HAS_FIXEDDIV1_X86 +#define HAS_FIXEDDIV_X86 +#define HAS_SCALEADDROW_SSE2 +#define HAS_SCALEARGBCOLS_SSE2 +#define HAS_SCALEARGBCOLSUP2_SSE2 +#define HAS_SCALEARGBFILTERCOLS_SSSE3 +#define HAS_SCALEARGBROWDOWN2_SSE2 +#define HAS_SCALEARGBROWDOWNEVEN_SSE2 +#define HAS_SCALECOLSUP2_SSE2 +#define HAS_SCALEFILTERCOLS_SSSE3 +#define HAS_SCALEROWDOWN2_SSSE3 +#define HAS_SCALEROWDOWN34_SSSE3 +#define HAS_SCALEROWDOWN38_SSSE3 +#define HAS_SCALEROWDOWN4_SSSE3 +#endif + +// The following are available on all x86 platforms, but +// require VS2012, clang 3.4 or gcc 4.7. +// The code supports NaCL but requires a new compiler and validator. +#if !defined(LIBYUV_DISABLE_X86) && \ + (defined(VISUALC_HAS_AVX2) || defined(CLANG_HAS_AVX2) || \ + defined(GCC_HAS_AVX2)) +#define HAS_SCALEADDROW_AVX2 +#define HAS_SCALEROWDOWN2_AVX2 +#define HAS_SCALEROWDOWN4_AVX2 +#endif + +// The following are available on Neon platforms: +#if !defined(LIBYUV_DISABLE_NEON) && \ + (defined(__ARM_NEON__) || defined(LIBYUV_NEON) || defined(__aarch64__)) +#define HAS_SCALEADDROW_NEON +#define HAS_SCALEARGBCOLS_NEON +#define HAS_SCALEARGBFILTERCOLS_NEON +#define HAS_SCALEARGBROWDOWN2_NEON +#define HAS_SCALEARGBROWDOWNEVEN_NEON +#define HAS_SCALEFILTERCOLS_NEON +#define HAS_SCALEROWDOWN2_NEON +#define HAS_SCALEROWDOWN34_NEON +#define HAS_SCALEROWDOWN38_NEON +#define HAS_SCALEROWDOWN4_NEON +#endif + +#if !defined(LIBYUV_DISABLE_MSA) && defined(__mips_msa) +#define HAS_SCALEADDROW_MSA +#define HAS_SCALEARGBCOLS_MSA +#define HAS_SCALEARGBFILTERCOLS_MSA +#define HAS_SCALEARGBROWDOWN2_MSA +#define HAS_SCALEARGBROWDOWNEVEN_MSA +#define HAS_SCALEFILTERCOLS_MSA +#define HAS_SCALEROWDOWN2_MSA +#define HAS_SCALEROWDOWN34_MSA +#define HAS_SCALEROWDOWN38_MSA +#define HAS_SCALEROWDOWN4_MSA +#endif + +#if !defined(LIBYUV_DISABLE_MMI) && defined(_MIPS_ARCH_LOONGSON3A) +#define HAS_FIXEDDIV1_MIPS +#define HAS_FIXEDDIV_MIPS +#define HAS_SCALEADDROW_16_MMI +#define HAS_SCALEADDROW_MMI +#define HAS_SCALEARGBCOLS_MMI +#define HAS_SCALEARGBCOLSUP2_MMI +#define HAS_SCALEARGBROWDOWN2_MMI +#define HAS_SCALEARGBROWDOWNEVEN_MMI +#define HAS_SCALECOLS_16_MMI +#define HAS_SCALECOLS_MMI +#define HAS_SCALEROWDOWN2_16_MMI +#define HAS_SCALEROWDOWN2_MMI +#define HAS_SCALEROWDOWN4_16_MMI +#define HAS_SCALEROWDOWN4_MMI +#endif + +// Scale ARGB vertically with bilinear interpolation. +void ScalePlaneVertical(int src_height, + int dst_width, + int dst_height, + int src_stride, + int dst_stride, + const uint8_t* src_argb, + uint8_t* dst_argb, + int x, + int y, + int dy, + int bpp, + enum FilterMode filtering); + +void ScalePlaneVertical_16(int src_height, + int dst_width, + int dst_height, + int src_stride, + int dst_stride, + const uint16_t* src_argb, + uint16_t* dst_argb, + int x, + int y, + int dy, + int wpp, + enum FilterMode filtering); + +// Simplify the filtering based on scale factors. +enum FilterMode ScaleFilterReduce(int src_width, + int src_height, + int dst_width, + int dst_height, + enum FilterMode filtering); + +// Divide num by div and return as 16.16 fixed point result. +int FixedDiv_C(int num, int div); +int FixedDiv_X86(int num, int div); +int FixedDiv_MIPS(int num, int div); +// Divide num - 1 by div - 1 and return as 16.16 fixed point result. +int FixedDiv1_C(int num, int div); +int FixedDiv1_X86(int num, int div); +int FixedDiv1_MIPS(int num, int div); +#ifdef HAS_FIXEDDIV_X86 +#define FixedDiv FixedDiv_X86 +#define FixedDiv1 FixedDiv1_X86 +#elif defined HAS_FIXEDDIV_MIPS +#define FixedDiv FixedDiv_MIPS +#define FixedDiv1 FixedDiv1_MIPS +#else +#define FixedDiv FixedDiv_C +#define FixedDiv1 FixedDiv1_C +#endif + +// Compute slope values for stepping. +void ScaleSlope(int src_width, + int src_height, + int dst_width, + int dst_height, + enum FilterMode filtering, + int* x, + int* y, + int* dx, + int* dy); + +void ScaleRowDown2_C(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown2_16_C(const uint16_t* src_ptr, + ptrdiff_t src_stride, + uint16_t* dst, + int dst_width); +void ScaleRowDown2Linear_C(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown2Linear_16_C(const uint16_t* src_ptr, + ptrdiff_t src_stride, + uint16_t* dst, + int dst_width); +void ScaleRowDown2Box_C(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown2Box_Odd_C(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown2Box_16_C(const uint16_t* src_ptr, + ptrdiff_t src_stride, + uint16_t* dst, + int dst_width); +void ScaleRowDown4_C(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown4_16_C(const uint16_t* src_ptr, + ptrdiff_t src_stride, + uint16_t* dst, + int dst_width); +void ScaleRowDown4Box_C(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown4Box_16_C(const uint16_t* src_ptr, + ptrdiff_t src_stride, + uint16_t* dst, + int dst_width); +void ScaleRowDown34_C(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown34_16_C(const uint16_t* src_ptr, + ptrdiff_t src_stride, + uint16_t* dst, + int dst_width); +void ScaleRowDown34_0_Box_C(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* d, + int dst_width); +void ScaleRowDown34_0_Box_16_C(const uint16_t* src_ptr, + ptrdiff_t src_stride, + uint16_t* d, + int dst_width); +void ScaleRowDown34_1_Box_C(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* d, + int dst_width); +void ScaleRowDown34_1_Box_16_C(const uint16_t* src_ptr, + ptrdiff_t src_stride, + uint16_t* d, + int dst_width); +void ScaleCols_C(uint8_t* dst_ptr, + const uint8_t* src_ptr, + int dst_width, + int x, + int dx); +void ScaleCols_16_C(uint16_t* dst_ptr, + const uint16_t* src_ptr, + int dst_width, + int x, + int dx); +void ScaleColsUp2_C(uint8_t* dst_ptr, + const uint8_t* src_ptr, + int dst_width, + int, + int); +void ScaleColsUp2_16_C(uint16_t* dst_ptr, + const uint16_t* src_ptr, + int dst_width, + int, + int); +void ScaleFilterCols_C(uint8_t* dst_ptr, + const uint8_t* src_ptr, + int dst_width, + int x, + int dx); +void ScaleFilterCols_16_C(uint16_t* dst_ptr, + const uint16_t* src_ptr, + int dst_width, + int x, + int dx); +void ScaleFilterCols64_C(uint8_t* dst_ptr, + const uint8_t* src_ptr, + int dst_width, + int x32, + int dx); +void ScaleFilterCols64_16_C(uint16_t* dst_ptr, + const uint16_t* src_ptr, + int dst_width, + int x32, + int dx); +void ScaleRowDown38_C(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown38_16_C(const uint16_t* src_ptr, + ptrdiff_t src_stride, + uint16_t* dst, + int dst_width); +void ScaleRowDown38_3_Box_C(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown38_3_Box_16_C(const uint16_t* src_ptr, + ptrdiff_t src_stride, + uint16_t* dst_ptr, + int dst_width); +void ScaleRowDown38_2_Box_C(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown38_2_Box_16_C(const uint16_t* src_ptr, + ptrdiff_t src_stride, + uint16_t* dst_ptr, + int dst_width); +void ScaleAddRow_C(const uint8_t* src_ptr, uint16_t* dst_ptr, int src_width); +void ScaleAddRow_16_C(const uint16_t* src_ptr, + uint32_t* dst_ptr, + int src_width); +void ScaleARGBRowDown2_C(const uint8_t* src_argb, + ptrdiff_t src_stride, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBRowDown2Linear_C(const uint8_t* src_argb, + ptrdiff_t src_stride, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBRowDown2Box_C(const uint8_t* src_argb, + ptrdiff_t src_stride, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBRowDownEven_C(const uint8_t* src_argb, + ptrdiff_t src_stride, + int src_stepx, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBRowDownEvenBox_C(const uint8_t* src_argb, + ptrdiff_t src_stride, + int src_stepx, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBCols_C(uint8_t* dst_argb, + const uint8_t* src_argb, + int dst_width, + int x, + int dx); +void ScaleARGBCols64_C(uint8_t* dst_argb, + const uint8_t* src_argb, + int dst_width, + int x32, + int dx); +void ScaleARGBColsUp2_C(uint8_t* dst_argb, + const uint8_t* src_argb, + int dst_width, + int, + int); +void ScaleARGBFilterCols_C(uint8_t* dst_argb, + const uint8_t* src_argb, + int dst_width, + int x, + int dx); +void ScaleARGBFilterCols64_C(uint8_t* dst_argb, + const uint8_t* src_argb, + int dst_width, + int x32, + int dx); + +// Specialized scalers for x86. +void ScaleRowDown2_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown2Linear_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown2Box_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown2_AVX2(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown2Linear_AVX2(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown2Box_AVX2(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown4_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown4Box_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown4_AVX2(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown4Box_AVX2(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); + +void ScaleRowDown34_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown34_1_Box_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown34_0_Box_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown38_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown38_3_Box_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown38_2_Box_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown2_Any_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown2Linear_Any_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown2Box_Any_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown2Box_Odd_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown2_Any_AVX2(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown2Linear_Any_AVX2(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown2Box_Any_AVX2(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown2Box_Odd_AVX2(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown4_Any_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown4Box_Any_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown4_Any_AVX2(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown4Box_Any_AVX2(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); + +void ScaleRowDown34_Any_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown34_1_Box_Any_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown34_0_Box_Any_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown38_Any_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown38_3_Box_Any_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown38_2_Box_Any_SSSE3(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); + +void ScaleAddRow_SSE2(const uint8_t* src_ptr, uint16_t* dst_ptr, int src_width); +void ScaleAddRow_AVX2(const uint8_t* src_ptr, uint16_t* dst_ptr, int src_width); +void ScaleAddRow_Any_SSE2(const uint8_t* src_ptr, + uint16_t* dst_ptr, + int src_width); +void ScaleAddRow_Any_AVX2(const uint8_t* src_ptr, + uint16_t* dst_ptr, + int src_width); + +void ScaleFilterCols_SSSE3(uint8_t* dst_ptr, + const uint8_t* src_ptr, + int dst_width, + int x, + int dx); +void ScaleColsUp2_SSE2(uint8_t* dst_ptr, + const uint8_t* src_ptr, + int dst_width, + int x, + int dx); + +// ARGB Column functions +void ScaleARGBCols_SSE2(uint8_t* dst_argb, + const uint8_t* src_argb, + int dst_width, + int x, + int dx); +void ScaleARGBFilterCols_SSSE3(uint8_t* dst_argb, + const uint8_t* src_argb, + int dst_width, + int x, + int dx); +void ScaleARGBColsUp2_SSE2(uint8_t* dst_argb, + const uint8_t* src_argb, + int dst_width, + int x, + int dx); +void ScaleARGBFilterCols_NEON(uint8_t* dst_argb, + const uint8_t* src_argb, + int dst_width, + int x, + int dx); +void ScaleARGBCols_NEON(uint8_t* dst_argb, + const uint8_t* src_argb, + int dst_width, + int x, + int dx); +void ScaleARGBFilterCols_Any_NEON(uint8_t* dst_ptr, + const uint8_t* src_ptr, + int dst_width, + int x, + int dx); +void ScaleARGBCols_Any_NEON(uint8_t* dst_ptr, + const uint8_t* src_ptr, + int dst_width, + int x, + int dx); +void ScaleARGBFilterCols_MSA(uint8_t* dst_argb, + const uint8_t* src_argb, + int dst_width, + int x, + int dx); +void ScaleARGBCols_MSA(uint8_t* dst_argb, + const uint8_t* src_argb, + int dst_width, + int x, + int dx); +void ScaleARGBFilterCols_Any_MSA(uint8_t* dst_ptr, + const uint8_t* src_ptr, + int dst_width, + int x, + int dx); +void ScaleARGBCols_Any_MSA(uint8_t* dst_ptr, + const uint8_t* src_ptr, + int dst_width, + int x, + int dx); +void ScaleARGBCols_MMI(uint8_t* dst_argb, + const uint8_t* src_argb, + int dst_width, + int x, + int dx); +void ScaleARGBCols_Any_MMI(uint8_t* dst_ptr, + const uint8_t* src_ptr, + int dst_width, + int x, + int dx); + +// ARGB Row functions +void ScaleARGBRowDown2_SSE2(const uint8_t* src_argb, + ptrdiff_t src_stride, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBRowDown2Linear_SSE2(const uint8_t* src_argb, + ptrdiff_t src_stride, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBRowDown2Box_SSE2(const uint8_t* src_argb, + ptrdiff_t src_stride, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBRowDown2_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleARGBRowDown2Linear_NEON(const uint8_t* src_argb, + ptrdiff_t src_stride, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBRowDown2Box_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleARGBRowDown2_MSA(const uint8_t* src_argb, + ptrdiff_t src_stride, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBRowDown2Linear_MSA(const uint8_t* src_argb, + ptrdiff_t src_stride, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBRowDown2Box_MSA(const uint8_t* src_argb, + ptrdiff_t src_stride, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBRowDown2_MMI(const uint8_t* src_argb, + ptrdiff_t src_stride, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBRowDown2Linear_MMI(const uint8_t* src_argb, + ptrdiff_t src_stride, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBRowDown2Box_MMI(const uint8_t* src_argb, + ptrdiff_t src_stride, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBRowDown2_Any_SSE2(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleARGBRowDown2Linear_Any_SSE2(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleARGBRowDown2Box_Any_SSE2(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleARGBRowDown2_Any_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleARGBRowDown2Linear_Any_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleARGBRowDown2Box_Any_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleARGBRowDown2_Any_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleARGBRowDown2Linear_Any_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleARGBRowDown2Box_Any_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleARGBRowDown2_Any_MMI(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleARGBRowDown2Linear_Any_MMI(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleARGBRowDown2Box_Any_MMI(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleARGBRowDownEven_SSE2(const uint8_t* src_argb, + ptrdiff_t src_stride, + int src_stepx, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBRowDownEvenBox_SSE2(const uint8_t* src_argb, + ptrdiff_t src_stride, + int src_stepx, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBRowDownEven_NEON(const uint8_t* src_argb, + ptrdiff_t src_stride, + int src_stepx, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBRowDownEvenBox_NEON(const uint8_t* src_argb, + ptrdiff_t src_stride, + int src_stepx, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBRowDownEven_MSA(const uint8_t* src_argb, + ptrdiff_t src_stride, + int32_t src_stepx, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBRowDownEvenBox_MSA(const uint8_t* src_argb, + ptrdiff_t src_stride, + int src_stepx, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBRowDownEven_MMI(const uint8_t* src_argb, + ptrdiff_t src_stride, + int32_t src_stepx, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBRowDownEvenBox_MMI(const uint8_t* src_argb, + ptrdiff_t src_stride, + int src_stepx, + uint8_t* dst_argb, + int dst_width); +void ScaleARGBRowDownEven_Any_SSE2(const uint8_t* src_ptr, + ptrdiff_t src_stride, + int src_stepx, + uint8_t* dst_ptr, + int dst_width); +void ScaleARGBRowDownEvenBox_Any_SSE2(const uint8_t* src_ptr, + ptrdiff_t src_stride, + int src_stepx, + uint8_t* dst_ptr, + int dst_width); +void ScaleARGBRowDownEven_Any_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + int src_stepx, + uint8_t* dst_ptr, + int dst_width); +void ScaleARGBRowDownEvenBox_Any_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + int src_stepx, + uint8_t* dst_ptr, + int dst_width); +void ScaleARGBRowDownEven_Any_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + int32_t src_stepx, + uint8_t* dst_ptr, + int dst_width); +void ScaleARGBRowDownEvenBox_Any_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + int src_stepx, + uint8_t* dst_ptr, + int dst_width); +void ScaleARGBRowDownEven_Any_MMI(const uint8_t* src_ptr, + ptrdiff_t src_stride, + int32_t src_stepx, + uint8_t* dst_ptr, + int dst_width); +void ScaleARGBRowDownEvenBox_Any_MMI(const uint8_t* src_ptr, + ptrdiff_t src_stride, + int src_stepx, + uint8_t* dst_ptr, + int dst_width); + +// ScaleRowDown2Box also used by planar functions +// NEON downscalers with interpolation. + +// Note - not static due to reuse in convert for 444 to 420. +void ScaleRowDown2_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown2Linear_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown2Box_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); + +void ScaleRowDown4_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown4Box_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); + +// Down scale from 4 to 3 pixels. Use the neon multilane read/write +// to load up the every 4th pixel into a 4 different registers. +// Point samples 32 pixels to 24 pixels. +void ScaleRowDown34_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown34_0_Box_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown34_1_Box_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); + +// 32 -> 12 +void ScaleRowDown38_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +// 32x3 -> 12x1 +void ScaleRowDown38_3_Box_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +// 32x2 -> 12x1 +void ScaleRowDown38_2_Box_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); + +void ScaleRowDown2_Any_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown2Linear_Any_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown2Box_Any_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown2Box_Odd_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown4_Any_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown4Box_Any_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown34_Any_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown34_0_Box_Any_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown34_1_Box_Any_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +// 32 -> 12 +void ScaleRowDown38_Any_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +// 32x3 -> 12x1 +void ScaleRowDown38_3_Box_Any_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +// 32x2 -> 12x1 +void ScaleRowDown38_2_Box_Any_NEON(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); + +void ScaleAddRow_NEON(const uint8_t* src_ptr, uint16_t* dst_ptr, int src_width); +void ScaleAddRow_Any_NEON(const uint8_t* src_ptr, + uint16_t* dst_ptr, + int src_width); + +void ScaleFilterCols_NEON(uint8_t* dst_ptr, + const uint8_t* src_ptr, + int dst_width, + int x, + int dx); + +void ScaleFilterCols_Any_NEON(uint8_t* dst_ptr, + const uint8_t* src_ptr, + int dst_width, + int x, + int dx); + +void ScaleRowDown2_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown2Linear_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown2Box_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown4_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown4Box_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown38_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown38_2_Box_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown38_3_Box_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleAddRow_MSA(const uint8_t* src_ptr, uint16_t* dst_ptr, int src_width); +void ScaleFilterCols_MSA(uint8_t* dst_ptr, + const uint8_t* src_ptr, + int dst_width, + int x, + int dx); +void ScaleRowDown34_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown34_0_Box_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* d, + int dst_width); +void ScaleRowDown34_1_Box_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* d, + int dst_width); + +void ScaleRowDown2_Any_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown2Linear_Any_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown2Box_Any_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown4_Any_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown4Box_Any_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown38_Any_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown38_2_Box_Any_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown38_3_Box_Any_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleAddRow_Any_MSA(const uint8_t* src_ptr, + uint16_t* dst_ptr, + int src_width); +void ScaleFilterCols_Any_MSA(uint8_t* dst_ptr, + const uint8_t* src_ptr, + int dst_width, + int x, + int dx); +void ScaleRowDown34_Any_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown34_0_Box_Any_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown34_1_Box_Any_MSA(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); + +void ScaleRowDown2_MMI(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown2_16_MMI(const uint16_t* src_ptr, + ptrdiff_t src_stride, + uint16_t* dst, + int dst_width); +void ScaleRowDown2Linear_MMI(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown2Linear_16_MMI(const uint16_t* src_ptr, + ptrdiff_t src_stride, + uint16_t* dst, + int dst_width); +void ScaleRowDown2Box_MMI(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown2Box_16_MMI(const uint16_t* src_ptr, + ptrdiff_t src_stride, + uint16_t* dst, + int dst_width); +void ScaleRowDown2Box_Odd_MMI(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown4_MMI(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown4_16_MMI(const uint16_t* src_ptr, + ptrdiff_t src_stride, + uint16_t* dst, + int dst_width); +void ScaleRowDown4Box_MMI(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst, + int dst_width); +void ScaleRowDown4Box_16_MMI(const uint16_t* src_ptr, + ptrdiff_t src_stride, + uint16_t* dst, + int dst_width); +void ScaleAddRow_MMI(const uint8_t* src_ptr, uint16_t* dst_ptr, int src_width); +void ScaleAddRow_16_MMI(const uint16_t* src_ptr, + uint32_t* dst_ptr, + int src_width); +void ScaleColsUp2_MMI(uint8_t* dst_ptr, + const uint8_t* src_ptr, + int dst_width, + int x, + int dx); +void ScaleColsUp2_16_MMI(uint16_t* dst_ptr, + const uint16_t* src_ptr, + int dst_width, + int x, + int dx); +void ScaleARGBColsUp2_MMI(uint8_t* dst_argb, + const uint8_t* src_argb, + int dst_width, + int x, + int dx); + +void ScaleRowDown2_Any_MMI(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown2Linear_Any_MMI(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown2Box_Any_MMI(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown4_Any_MMI(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleRowDown4Box_Any_MMI(const uint8_t* src_ptr, + ptrdiff_t src_stride, + uint8_t* dst_ptr, + int dst_width); +void ScaleAddRow_Any_MMI(const uint8_t* src_ptr, + uint16_t* dst_ptr, + int src_width); +#ifdef __cplusplus +} // extern "C" +} // namespace libyuv +#endif + +#endif // INCLUDE_LIBYUV_SCALE_ROW_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/version.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/version.h new file mode 100644 index 0000000000..741ef34df4 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/version.h @@ -0,0 +1,16 @@ +/* + * Copyright 2012 The LibYuv Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef INCLUDE_LIBYUV_VERSION_H_ +#define INCLUDE_LIBYUV_VERSION_H_ + +#define LIBYUV_VERSION 1732 + +#endif // INCLUDE_LIBYUV_VERSION_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/video_common.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/video_common.h new file mode 100644 index 0000000000..ffcbdbf1b0 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/video_common.h @@ -0,0 +1,191 @@ +/* + * Copyright 2011 The LibYuv Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +// Common definitions for video, including fourcc and VideoFormat. + +#ifndef INCLUDE_LIBYUV_VIDEO_COMMON_H_ +#define INCLUDE_LIBYUV_VIDEO_COMMON_H_ + +#include "libyuv/basic_types.h" + +#ifdef __cplusplus +namespace libyuv { +extern "C" { +#endif + +////////////////////////////////////////////////////////////////////////////// +// Definition of FourCC codes +////////////////////////////////////////////////////////////////////////////// + +// Convert four characters to a FourCC code. +// Needs to be a macro otherwise the OS X compiler complains when the kFormat* +// constants are used in a switch. +#ifdef __cplusplus +#define FOURCC(a, b, c, d) \ + ((static_cast(a)) | (static_cast(b) << 8) | \ + (static_cast(c) << 16) | /* NOLINT */ \ + (static_cast(d) << 24)) /* NOLINT */ +#else +#define FOURCC(a, b, c, d) \ + (((uint32_t)(a)) | ((uint32_t)(b) << 8) | /* NOLINT */ \ + ((uint32_t)(c) << 16) | ((uint32_t)(d) << 24)) /* NOLINT */ +#endif + +// Some pages discussing FourCC codes: +// http://www.fourcc.org/yuv.php +// http://v4l2spec.bytesex.org/spec/book1.htm +// http://developer.apple.com/quicktime/icefloe/dispatch020.html +// http://msdn.microsoft.com/library/windows/desktop/dd206750.aspx#nv12 +// http://people.xiph.org/~xiphmont/containers/nut/nut4cc.txt + +// FourCC codes grouped according to implementation efficiency. +// Primary formats should convert in 1 efficient step. +// Secondary formats are converted in 2 steps. +// Auxilliary formats call primary converters. +enum FourCC { + // 9 Primary YUV formats: 5 planar, 2 biplanar, 2 packed. + FOURCC_I420 = FOURCC('I', '4', '2', '0'), + FOURCC_I422 = FOURCC('I', '4', '2', '2'), + FOURCC_I444 = FOURCC('I', '4', '4', '4'), + FOURCC_I400 = FOURCC('I', '4', '0', '0'), + FOURCC_NV21 = FOURCC('N', 'V', '2', '1'), + FOURCC_NV12 = FOURCC('N', 'V', '1', '2'), + FOURCC_YUY2 = FOURCC('Y', 'U', 'Y', '2'), + FOURCC_UYVY = FOURCC('U', 'Y', 'V', 'Y'), + FOURCC_H010 = FOURCC('H', '0', '1', '0'), // unofficial fourcc. 10 bit lsb + + // 1 Secondary YUV format: row biplanar. + FOURCC_M420 = FOURCC('M', '4', '2', '0'), + + // 11 Primary RGB formats: 4 32 bpp, 2 24 bpp, 3 16 bpp, 1 10 bpc + FOURCC_ARGB = FOURCC('A', 'R', 'G', 'B'), + FOURCC_BGRA = FOURCC('B', 'G', 'R', 'A'), + FOURCC_ABGR = FOURCC('A', 'B', 'G', 'R'), + FOURCC_AR30 = FOURCC('A', 'R', '3', '0'), // 10 bit per channel. 2101010. + FOURCC_AB30 = FOURCC('A', 'B', '3', '0'), // ABGR version of 10 bit + FOURCC_24BG = FOURCC('2', '4', 'B', 'G'), + FOURCC_RAW = FOURCC('r', 'a', 'w', ' '), + FOURCC_RGBA = FOURCC('R', 'G', 'B', 'A'), + FOURCC_RGBP = FOURCC('R', 'G', 'B', 'P'), // rgb565 LE. + FOURCC_RGBO = FOURCC('R', 'G', 'B', 'O'), // argb1555 LE. + FOURCC_R444 = FOURCC('R', '4', '4', '4'), // argb4444 LE. + + // 1 Primary Compressed YUV format. + FOURCC_MJPG = FOURCC('M', 'J', 'P', 'G'), + + // 8 Auxiliary YUV variations: 3 with U and V planes are swapped, 1 Alias. + FOURCC_YV12 = FOURCC('Y', 'V', '1', '2'), + FOURCC_YV16 = FOURCC('Y', 'V', '1', '6'), + FOURCC_YV24 = FOURCC('Y', 'V', '2', '4'), + FOURCC_YU12 = FOURCC('Y', 'U', '1', '2'), // Linux version of I420. + FOURCC_J420 = FOURCC('J', '4', '2', '0'), + FOURCC_J400 = FOURCC('J', '4', '0', '0'), // unofficial fourcc + FOURCC_H420 = FOURCC('H', '4', '2', '0'), // unofficial fourcc + FOURCC_H422 = FOURCC('H', '4', '2', '2'), // unofficial fourcc + + // 14 Auxiliary aliases. CanonicalFourCC() maps these to canonical fourcc. + FOURCC_IYUV = FOURCC('I', 'Y', 'U', 'V'), // Alias for I420. + FOURCC_YU16 = FOURCC('Y', 'U', '1', '6'), // Alias for I422. + FOURCC_YU24 = FOURCC('Y', 'U', '2', '4'), // Alias for I444. + FOURCC_YUYV = FOURCC('Y', 'U', 'Y', 'V'), // Alias for YUY2. + FOURCC_YUVS = FOURCC('y', 'u', 'v', 's'), // Alias for YUY2 on Mac. + FOURCC_HDYC = FOURCC('H', 'D', 'Y', 'C'), // Alias for UYVY. + FOURCC_2VUY = FOURCC('2', 'v', 'u', 'y'), // Alias for UYVY on Mac. + FOURCC_JPEG = FOURCC('J', 'P', 'E', 'G'), // Alias for MJPG. + FOURCC_DMB1 = FOURCC('d', 'm', 'b', '1'), // Alias for MJPG on Mac. + FOURCC_BA81 = FOURCC('B', 'A', '8', '1'), // Alias for BGGR. + FOURCC_RGB3 = FOURCC('R', 'G', 'B', '3'), // Alias for RAW. + FOURCC_BGR3 = FOURCC('B', 'G', 'R', '3'), // Alias for 24BG. + FOURCC_CM32 = FOURCC(0, 0, 0, 32), // Alias for BGRA kCMPixelFormat_32ARGB + FOURCC_CM24 = FOURCC(0, 0, 0, 24), // Alias for RAW kCMPixelFormat_24RGB + FOURCC_L555 = FOURCC('L', '5', '5', '5'), // Alias for RGBO. + FOURCC_L565 = FOURCC('L', '5', '6', '5'), // Alias for RGBP. + FOURCC_5551 = FOURCC('5', '5', '5', '1'), // Alias for RGBO. + + // deprecated formats. Not supported, but defined for backward compatibility. + FOURCC_I411 = FOURCC('I', '4', '1', '1'), + FOURCC_Q420 = FOURCC('Q', '4', '2', '0'), + FOURCC_RGGB = FOURCC('R', 'G', 'G', 'B'), + FOURCC_BGGR = FOURCC('B', 'G', 'G', 'R'), + FOURCC_GRBG = FOURCC('G', 'R', 'B', 'G'), + FOURCC_GBRG = FOURCC('G', 'B', 'R', 'G'), + FOURCC_H264 = FOURCC('H', '2', '6', '4'), + + // Match any fourcc. + FOURCC_ANY = -1, +}; + +enum FourCCBpp { + // Canonical fourcc codes used in our code. + FOURCC_BPP_I420 = 12, + FOURCC_BPP_I422 = 16, + FOURCC_BPP_I444 = 24, + FOURCC_BPP_I411 = 12, + FOURCC_BPP_I400 = 8, + FOURCC_BPP_NV21 = 12, + FOURCC_BPP_NV12 = 12, + FOURCC_BPP_YUY2 = 16, + FOURCC_BPP_UYVY = 16, + FOURCC_BPP_M420 = 12, + FOURCC_BPP_Q420 = 12, + FOURCC_BPP_ARGB = 32, + FOURCC_BPP_BGRA = 32, + FOURCC_BPP_ABGR = 32, + FOURCC_BPP_RGBA = 32, + FOURCC_BPP_AR30 = 32, + FOURCC_BPP_AB30 = 32, + FOURCC_BPP_24BG = 24, + FOURCC_BPP_RAW = 24, + FOURCC_BPP_RGBP = 16, + FOURCC_BPP_RGBO = 16, + FOURCC_BPP_R444 = 16, + FOURCC_BPP_RGGB = 8, + FOURCC_BPP_BGGR = 8, + FOURCC_BPP_GRBG = 8, + FOURCC_BPP_GBRG = 8, + FOURCC_BPP_YV12 = 12, + FOURCC_BPP_YV16 = 16, + FOURCC_BPP_YV24 = 24, + FOURCC_BPP_YU12 = 12, + FOURCC_BPP_J420 = 12, + FOURCC_BPP_J400 = 8, + FOURCC_BPP_H420 = 12, + FOURCC_BPP_H422 = 16, + FOURCC_BPP_H010 = 24, + FOURCC_BPP_MJPG = 0, // 0 means unknown. + FOURCC_BPP_H264 = 0, + FOURCC_BPP_IYUV = 12, + FOURCC_BPP_YU16 = 16, + FOURCC_BPP_YU24 = 24, + FOURCC_BPP_YUYV = 16, + FOURCC_BPP_YUVS = 16, + FOURCC_BPP_HDYC = 16, + FOURCC_BPP_2VUY = 16, + FOURCC_BPP_JPEG = 1, + FOURCC_BPP_DMB1 = 1, + FOURCC_BPP_BA81 = 8, + FOURCC_BPP_RGB3 = 24, + FOURCC_BPP_BGR3 = 24, + FOURCC_BPP_CM32 = 32, + FOURCC_BPP_CM24 = 24, + + // Match any fourcc. + FOURCC_BPP_ANY = 0, // 0 means unknown. +}; + +// Converts fourcc aliases into canonical ones. +LIBYUV_API uint32_t CanonicalFourCC(uint32_t fourcc); + +#ifdef __cplusplus +} // extern "C" +} // namespace libyuv +#endif + +#endif // INCLUDE_LIBYUV_VIDEO_COMMON_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/main.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/main.h new file mode 100644 index 0000000000..51dd272c29 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/main.h @@ -0,0 +1,56 @@ +// +// Created on 2024/4/11. +// +// Node APIs are not fully supported. To solve the compilation error of the interface cannot be found, +// please include "napi/native_api.h". + +#ifndef AVSCREENCAPTURENDKDEMO_MAIN_H +#define AVSCREENCAPTURENDKDEMO_MAIN_H +#endif //AVSCREENCAPTURENDKDEMO_MAIN_H + +#include "napi/native_api.h" +#include +#include +#include +#include +#include +#include +#include "hilog/log.h" +#include +#include "multimedia/player_framework/native_avcodec_videodecoder.h" +#include "multimedia/player_framework/native_avcodec_videoencoder.h" +#include +#include "native_window/external_window.h" +#include "libyuv.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "sample_callback.h" + +static struct OH_AVScreenCapture *g_avCapture = {}; +static FILE *micFile_ = nullptr; +static FILE *vFile_ = nullptr; +static FILE *innerFile_ = nullptr; + +static char filename[100] = {0}; +bool m_isRunning = false; +bool m_scSaveFileIsRunning = false; +bool m_scSurfaceIsRunning = false; +OH_AVCodec *g_videoEnc; + +constexpr uint32_t DEFAULT_WIDTH = 720; +// 配置视频帧高度(必须) +constexpr uint32_t DEFAULT_HEIGHT = 1280; +// 配置视频颜色格式(必须) +constexpr OH_AVPixelFormat DEFAULT_PIXELFORMAT = AV_PIXEL_FORMAT_NV12; \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp index e63b315eac..6f5417d504 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp @@ -92,12 +92,12 @@ void OnError(OH_AVScreenCapture *capture, int32_t errorCode, void *userData) { void OnStateChange(struct OH_AVScreenCapture *capture, OH_AVScreenCaptureStateCode stateCode, void *userData) { if (stateCode == OH_SCREEN_CAPTURE_STATE_STARTED) { OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture OnStateChange started"); - // ״̬ - // ѡ ¼ת + // 处理状态变更 + // 可选 配置录屏旋转 int32_t retRotation = OH_AVScreenCapture_SetCanvasRotation(capture, true); } if (stateCode == OH_SCREEN_CAPTURE_STATE_INTERRUPTED_BY_OTHER) { - // ״̬ + // 处理状态变更 } (void)userData; } @@ -108,7 +108,7 @@ void OnBufferAvailable(OH_AVScreenCapture *capture, OH_AVBuffer *buffer, OH_AVSc if (m_isRunning) { OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture OnBufferAvailable bufferType is %{public}d", bufferType); if (bufferType == OH_SCREEN_CAPTURE_BUFFERTYPE_VIDEO) { - // Ƶbuffer + // 处理视频buffer OH_NativeBuffer *nativebuffer = OH_AVBuffer_GetNativeBuffer(buffer); if (nativebuffer != nullptr) { int bufferLen = OH_AVBuffer_GetCapacity(buffer); @@ -132,7 +132,7 @@ void OnBufferAvailable(OH_AVScreenCapture *capture, OH_AVBuffer *buffer, OH_AVSc OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture OnBufferAvailable inner audio"); } } else if (bufferType == OH_SCREEN_CAPTURE_BUFFERTYPE_AUDIO_INNER) { - // ¼buffer + // 处理内录buffer int bufferLen = OH_AVBuffer_GetCapacity(buffer); uint8_t *buf = OH_AVBuffer_GetAddr(buffer); if (buf != nullptr) { @@ -140,7 +140,7 @@ void OnBufferAvailable(OH_AVScreenCapture *capture, OH_AVBuffer *buffer, OH_AVSc fwrite(buf, 1, bufferLen, innerFile_); } } else if (bufferType == OH_SCREEN_CAPTURE_BUFFERTYPE_AUDIO_MIC) { - // ˷buffer + // 处理麦克风buffer int bufferLen = OH_AVBuffer_GetCapacity(buffer); uint8_t *buf = OH_AVBuffer_GetAddr(buffer); if (buf != nullptr) { @@ -152,7 +152,7 @@ void OnBufferAvailable(OH_AVScreenCapture *capture, OH_AVBuffer *buffer, OH_AVSc return; } -// ʼ¼ԭʼ +// 开始录屏原始码流 static napi_value StartScreenCapture_01(napi_env env, napi_callback_info info) { g_avCapture = OH_AVScreenCapture_Create(); if (g_avCapture == nullptr) { @@ -186,7 +186,7 @@ static napi_value StartScreenCapture_01(napi_env env, napi_callback_info info) { return res; } -// ʼ¼ļ +// 开始录屏存文件 static napi_value StartScreenCapture_02(napi_env env, napi_callback_info info) { g_avCapture = OH_AVScreenCapture_Create(); if (g_avCapture == nullptr) { @@ -229,7 +229,7 @@ static napi_value StartScreenCapture_02(napi_env env, napi_callback_info info) { return res; } -// ʼ¼ԭʼSurfaceMode +// 开始录屏原始码流SurfaceMode static napi_value StartScreenCapture_03(napi_env env, napi_callback_info info) { g_avCapture = OH_AVScreenCapture_Create(); if (g_avCapture == nullptr) { @@ -249,39 +249,39 @@ static napi_value StartScreenCapture_03(napi_env env, napi_callback_info info) { } OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture OH_AVScreenCapture_Init %{public}d", result); - // ȡҪSurfaceԽб + // 获取需要输入的Surface,以进行编码 OH_AVCapability *capability = OH_AVCodec_GetCapability(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true); const char *name = OH_AVCapability_GetName(capability); g_videoEnc = OH_VideoEncoder_CreateByName(name); auto sampleInfo = new SampleInfo; auto codecUserData = new CodecUserData; codecUserData->sampleInfo = sampleInfo; - // 첽ص OH_VideoEncoder_SetCallback ӿ + // 配置异步回调,调用 OH_VideoEncoder_SetCallback 接口 int32_t ret = OH_VideoEncoder_RegisterCallback(g_videoEnc, {SampleCallback::OnError, SampleCallback::OnStreamChanged, SampleCallback::OnNeedInputBuffer, SampleCallback::OnNewOutputBuffer}, codecUserData); OH_AVFormat *format = OH_AVFormat_Create(); - // Ƶ֡ + // 配置视频帧速率 double frameRate = 30.0; - // ƵYUVֵΧ־ + // 配置视频YUV值范围标志 bool rangeFlag = false; - // Ƶԭɫ + // 配置视频原色 int32_t primary = static_cast(OH_ColorPrimary::COLOR_PRIMARY_BT709); - // ô + // 配置传输特性 int32_t transfer = static_cast(OH_TransferCharacteristic::TRANSFER_CHARACTERISTIC_BT709); - // ϵ + // 配置最大矩阵系数 int32_t matrix = static_cast(OH_MatrixCoefficient::MATRIX_COEFFICIENT_IDENTITY); - // ñProfile + // 配置编码Profile int32_t profile = static_cast(OH_AVCProfile::AVC_PROFILE_BASELINE); - // ñģʽ + // 配置编码比特率模式 int32_t rateMode = static_cast(OH_VideoEncodeBitrateMode::CBR); - // ùؼ֡ļλΪ + // 配置关键帧的间隔,单位为毫秒 int32_t iFrameInterval = 23000; - // ıֻں㶨ģʽõıִ֧ + // 配置所需的编码质量。只有在恒定质量模式下配置的编码器才支持此配置 int32_t quality = 0; - // ñ + // 配置比特率 int64_t bitRate = 3000000; OH_AVFormat_SetIntValue(format, OH_MD_KEY_WIDTH, DEFAULT_WIDTH); OH_AVFormat_SetIntValue(format, OH_MD_KEY_HEIGHT, DEFAULT_HEIGHT); @@ -300,7 +300,7 @@ static napi_value StartScreenCapture_03(napi_env env, napi_callback_info info) { OH_LOG_INFO(LOG_APP, "==DEMO== OH_VideoEncoder_Configure ret=%{public}d", result); OH_AVFormat_Destroy(format); - // ƵȡSurface + // 从视频编码器获取输入Surface OHNativeWindow *nativeWindow; result = OH_VideoEncoder_GetSurface(g_videoEnc, &nativeWindow); if (result != AV_ERR_OK) { @@ -311,9 +311,9 @@ static napi_value StartScreenCapture_03(napi_env env, napi_callback_info info) { std::unique_ptr outputFile = std::make_unique(); outputFile->open(outputFilePath.data(), std::ios::out | std::ios::binary | std::ios::ate); - // + // 启动编码器 int32_t retEnc = OH_VideoEncoder_Start(g_videoEnc); - // ָsurfaceʼ¼ + // 指定surface开始录屏 result = OH_AVScreenCapture_StartScreenCaptureWithSurface(g_avCapture, nativeWindow); if (result != AV_SCREEN_CAPTURE_ERR_OK) { OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture Started failed %{public}d", result); @@ -327,7 +327,7 @@ static napi_value StartScreenCapture_03(napi_env env, napi_callback_info info) { return res; } -// ֹͣ +// 停止 static napi_value StopScreenCapture(napi_env env, napi_callback_info info) { OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture Stop"); OH_AVSCREEN_CAPTURE_ErrCode result = AV_SCREEN_CAPTURE_ERR_OPERATE_NOT_PERMIT; @@ -335,16 +335,16 @@ static napi_value StopScreenCapture(napi_env env, napi_callback_info info) { if (m_scSurfaceIsRunning) { int32_t ret = OH_VideoEncoder_NotifyEndOfStream(g_videoEnc); if (ret != AV_ERR_OK) { - // 쳣 + // 异常处理 } ret = OH_VideoEncoder_Stop(g_videoEnc); if (ret != AV_ERR_OK) { - // 쳣 + // 异常处理 } ret = OH_VideoEncoder_Destroy(g_videoEnc); g_videoEnc = nullptr; if (ret != AV_ERR_OK) { - // 쳣 + // 异常处理 } } diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.cpp b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.cpp new file mode 100644 index 0000000000..3cfa87cbab --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.cpp @@ -0,0 +1,63 @@ +#include "sample_callback.h" +#include "hilog/log.h" + +namespace { +constexpr int LIMIT_LOGD_FREQUENCY = 50; +} + +// 设置 OnError 回调函数 +void SampleCallback::OnError(OH_AVCodec *codec, int32_t errorCode, void *userData) { + // 回调的错误码由用户判断处理 + (void)codec; + (void)errorCode; + (void)userData; + OH_LOG_ERROR(LOG_APP, "On error, error code: %{public}d", errorCode); +} + +// 设置 OnStreamChanged 回调函数 +void SampleCallback::OnStreamChanged(OH_AVCodec *codec, OH_AVFormat *format, void *userData) { +// surface模式下,该回调函数无作用 +(void)codec; +(void)format; +(void)userData; +} + +// 设置 OH_AVCodecOnNeedInputBuffer 回调函数,编码输入帧送入数据队列 +void SampleCallback::OnNeedInputBuffer(OH_AVCodec *codec, uint32_t index, OH_AVBuffer *buffer, void *userData) { +// surface模式下,该回调函数无作用,用户通过获取的surface输入数据 + (void)userData; + (void)index; + (void)buffer; + if (userData == nullptr) { + return; + } + (void)codec; + CodecUserData *codecUserData = static_cast(userData); + std::unique_lock lock(codecUserData->inputMutex_); +// codecUserData->inputBufferInfoQueue_.emplace(index, buffer); +// codecUserData->inputCond_.notify_all(); +} + +// 设置 OH_AVCodecOnNewOutputBuffer 回调函数,编码完成帧送入输出队列 +void SampleCallback::OnNewOutputBuffer(OH_AVCodec *codec, uint32_t index, OH_AVBuffer *buffer, void *userData) { + // 完成帧buffer对应的index,送入outIndexQueue队列 + // 完成帧的数据buffer送入outBufferQueue队列 + // 数据处理,请参考: + // - 释放编码帧 + if (userData == nullptr) { + return; + } + (void)codec; + OH_AVCodecBufferAttr info; + int32_t ret = OH_AVBuffer_GetBufferAttr(buffer, &info); + + CodecUserData *codecUserData = static_cast(userData); + std::unique_lock lock(codecUserData->outputMutex_); +// codecUserData->outputBufferInfoQueue_.emplace(index, buffer); +// codecUserData->outputCond_.notify_all(); + + ret = OH_VideoEncoder_FreeOutputBuffer(codec, index); + if (ret != AV_ERR_OK) { + // 异常处理 + } +} \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.h new file mode 100644 index 0000000000..2c5fcf1884 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.h @@ -0,0 +1,13 @@ +#ifndef AVCODEC_SAMPLE_CALLBACK_H +#define AVCODEC_SAMPLE_CALLBACK_H + +#include "sample_info.h" +class SampleCallback { +public: + static void OnError(OH_AVCodec *codec, int32_t errorCode, void *userData); + static void OnStreamChanged(OH_AVCodec *codec, OH_AVFormat *format, void *userData); + static void OnNeedInputBuffer(OH_AVCodec *codec, uint32_t index, OH_AVBuffer *buffer, void *userData); + static void OnNewOutputBuffer(OH_AVCodec *codec, uint32_t index, OH_AVBuffer *buffer, void *userData); +}; + +#endif //AVCODEC_SAMPLE_CALLBACK_H diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_info.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_info.h new file mode 100644 index 0000000000..0b34df72ab --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_info.h @@ -0,0 +1,106 @@ +#ifndef AVCODEC_SAMPLE_INFO_H +#define AVCODEC_SAMPLE_INFO_H +#include +#include +#include +#include +#include +#include +#include +#include +#include "multimedia/player_framework/native_avcodec_base.h" +#include "multimedia/player_framework/native_avbuffer.h" + +#define ANNEXB_INPUT_ONLY 1 + +const std::string_view MIME_VIDEO_AVC = "video/avc"; +const std::string_view MIME_VIDEO_HEVC = "video/hevc"; + +constexpr int32_t BITRATE_10M = 10 * 1024 * 1024; // 10Mbps +constexpr int32_t BITRATE_20M = 20 * 1024 * 1024; // 20Mbps +constexpr int32_t BITRATE_30M = 30 * 1024 * 1024; // 30Mbps + +struct SampleInfo { + int32_t sampleId = 0; + int32_t inputFd = -1; + int32_t outFd = -1; + int64_t inputFileOffset = 0; + int64_t inputFileSize = 0; + std::string inputFilePath; + std::string outputFilePath; + std::string codecMime = MIME_VIDEO_AVC.data(); + int32_t videoWidth = 0; + int32_t videoHeight = 0; + double frameRate = 0.0; + int64_t bitrate = 10 * 1024 * 1024; // 10Mbps; + + int64_t frameInterval = 0; + int32_t perfmode = 0; + int64_t durationTime = 0; + uint32_t maxFrames = UINT32_MAX; + int32_t isHDRVivid = 0; + uint32_t repeatTimes = 1; + OH_AVPixelFormat pixelFormat = AV_PIXEL_FORMAT_NV12; + bool needDumpOutput = false; + uint32_t bitrateMode = CBR; + int32_t hevcProfile = HEVC_PROFILE_MAIN; + int32_t rotation = 0; + OHNativeWindow *window = nullptr; + + uint32_t bufferSize = 0; + double readTime = 0; + double memcpyTime = 0; + double writeTime = 0; + + void (*PlayDoneCallback)(void *context) = nullptr; + void *playDoneCallbackData = nullptr; +}; + +struct CodecBufferInfo { + uint32_t bufferIndex = 0; + uintptr_t *buffer = nullptr; + uint8_t *bufferAddr = nullptr; + OH_AVCodecBufferAttr attr = {0, 0, 0, AVCODEC_BUFFER_FLAGS_NONE}; + + CodecBufferInfo(uint8_t *addr) : bufferAddr(addr){}; + CodecBufferInfo(uint8_t *addr, int32_t bufferSize) + : bufferAddr(addr), attr({0, bufferSize, 0, AVCODEC_BUFFER_FLAGS_NONE}){}; + CodecBufferInfo(uint32_t argBufferIndex, OH_AVMemory *argBuffer, OH_AVCodecBufferAttr argAttr) + : bufferIndex(argBufferIndex), buffer(reinterpret_cast(argBuffer)), attr(argAttr){}; + CodecBufferInfo(uint32_t argBufferIndex, OH_AVMemory *argBuffer) + : bufferIndex(argBufferIndex), buffer(reinterpret_cast(argBuffer)){}; + CodecBufferInfo(uint32_t argBufferIndex, OH_AVBuffer *argBuffer) + : bufferIndex(argBufferIndex), buffer(reinterpret_cast(argBuffer)) { + OH_AVBuffer_GetBufferAttr(argBuffer, &attr); + }; +}; + +class CodecUserData { +public: + SampleInfo *sampleInfo = nullptr; + + uint32_t inputFrameCount_ = 0; + std::mutex inputMutex_; + std::condition_variable inputCond_; + std::queue inputBufferInfoQueue_; + + uint32_t outputFrameCount_ = 0; + std::mutex outputMutex_; + std::condition_variable outputCond_; + std::queue outputBufferInfoQueue_; + + void ClearQueue() { + { + std::unique_lock lock(inputMutex_); + auto emptyQueue = std::queue(); + inputBufferInfoQueue_.swap(emptyQueue); + } + { + std::unique_lock lock(outputMutex_); + auto emptyQueue = std::queue(); + outputBufferInfoQueue_.swap(emptyQueue); + } + } +}; + +#endif // AVCODEC_SAMPLE_INFO_H \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/types/libentry/Index.d.ts b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/types/libentry/Index.d.ts index e44f3615a4..df26ed321f 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/types/libentry/Index.d.ts +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/types/libentry/Index.d.ts @@ -1 +1,5 @@ -export const add: (a: number, b: number) => number; \ No newline at end of file +export const add: (a: number, b: number) => number; +export const startScreenCapture: () => number; +export const stopScreenCapture: () => number; +export const startCaptureAsFile: () => number; +export const startScreenCaptureWithSurface: () => number; -- Gitee From b8fbfd8524d0bffef3b0e7b0ba57fb8d2684c55a Mon Sep 17 00:00:00 2001 From: xuzhangchi Date: Wed, 21 May 2025 15:31:25 +0800 Subject: [PATCH 04/20] =?UTF-8?q?=E5=BD=95=E5=B1=8Fsample?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: xuzhangchi --- .../entry/src/main/cpp/CMakeLists.txt | 2 +- .../entry/src/main/cpp/napi_init.cpp | 100 +++++++++++++++++- .../main/ets/entryability/EntryAbility.ets | 28 +---- .../entry/src/main/ets/pages/Index.ets | 21 ++-- .../entry/src/main/ets/pages/Scene1.ets | 2 +- .../entry/src/main/ets/pages/Scene2.ets | 2 +- .../entry/src/main/ets/pages/Scene3.ets | 2 +- .../entry/src/main/ets/pages/Scene4.ets | 2 +- 8 files changed, 111 insertions(+), 48 deletions(-) diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/CMakeLists.txt b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/CMakeLists.txt index 081c7be3af..45e830cd4c 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/CMakeLists.txt +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/CMakeLists.txt @@ -17,4 +17,4 @@ add_library(entry SHARED napi_init.cpp sample_callback.cpp) target_link_libraries(entry PUBLIC libace_napi.z.so libnative_buffer.so libhilog_ndk.z.so librawfile.z.so libnative_avscreen_capture.so libace_ndk.z.so libnative_media_codecbase.so libnative_media_core.so libnative_media_venc.so libnative_window.so libnative_media_avdemuxer.so libnative_media_avsource.so libnative_image.so librawfile.z.so libnative_media_avmuxer.so libnative_media_adec.so libnative_media_aenc.so - libnative_media_vdec.so ${CMAKE_CURRENT_SOURCE_DIR}/libyuv.a) \ No newline at end of file + libnative_media_vdec.so) \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp index 6f5417d504..8b0876f677 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp @@ -94,7 +94,13 @@ void OnStateChange(struct OH_AVScreenCapture *capture, OH_AVScreenCaptureStateCo OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture OnStateChange started"); // 处理状态变更 // 可选 配置录屏旋转 - int32_t retRotation = OH_AVScreenCapture_SetCanvasRotation(capture, true); + int32_t ret = OH_AVScreenCapture_SetCanvasRotation(capture, true); + // 可选 修改Canvas分辨率 + ret = OH_AVScreenCapture_ResizeCanvas(g_avCapture, 768, 1280); + // 可选 设置是否显示光标 + ret = OH_AVScreenCapture_ShowCursor(g_avCapture, true); + // 可选 设置视频最大帧率0000 + ret = OH_AVScreenCapture_SetMaxVideoFrameRate(g_avCapture, 30); } if (stateCode == OH_SCREEN_CAPTURE_STATE_INTERRUPTED_BY_OTHER) { // 处理状态变更 @@ -102,7 +108,6 @@ void OnStateChange(struct OH_AVScreenCapture *capture, OH_AVScreenCaptureStateCo (void)userData; } - void OnBufferAvailable(OH_AVScreenCapture *capture, OH_AVBuffer *buffer, OH_AVScreenCaptureBufferType bufferType, int64_t timestamp, void *userData) { if (m_isRunning) { @@ -152,6 +157,13 @@ void OnBufferAvailable(OH_AVScreenCapture *capture, OH_AVBuffer *buffer, OH_AVSc return; } +void OnDisplaySelected(struct OH_AVScreenCapture *capture, uint64_t displayId, void *userData) +{ + (void)capture; + OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture OnError errorCode is %{public}uld", displayId); + (void)userData; +} + // 开始录屏原始码流 static napi_value StartScreenCapture_01(napi_env env, napi_callback_info info) { g_avCapture = OH_AVScreenCapture_Create(); @@ -166,6 +178,18 @@ static napi_value StartScreenCapture_01(napi_env env, napi_callback_info info) { OH_AVScreenCapture_SetErrorCallback(g_avCapture, OnError, nullptr); OH_AVScreenCapture_SetStateCallback(g_avCapture, OnStateChange, nullptr); OH_AVScreenCapture_SetDataCallback(g_avCapture, OnBufferAvailable, nullptr); + OH_AVScreenCapture_SetDisplayCallback(g_avCapture, OnDisplaySelected, nullptr); + // 可选,排除指定窗口/指定音频类型 start + struct OH_AVScreenCapture_ContentFilter *contentFilter = OH_AVScreenCapture_CreateContentFilter(); + OH_AVScreenCapture_ContentFilter_AddAudioContent(contentFilter, OH_SCREEN_CAPTURE_NOTIFICATION_AUDIO); + vector windowIdsExclude = { -111 }; + OH_AVScreenCapture_ContentFilter_AddWindowContent(contentFilter, + &windowIdsExclude[0], static_cast(windowIdsExclude.size())); + OH_AVScreenCapture_ExcludeContent(g_avCapture, contentFilter); + OH_AVScreenCapture_SkipPrivacyMode(g_avCapture, + &windowIdsExclude[0], static_cast(windowIdsExclude.size())); + OH_AVScreenCapture_ReleaseContentFilter(contentFilter); + // 可选,排除指定窗口/指定音频类型 end int result = OH_AVScreenCapture_Init(g_avCapture, config_); if (result != AV_SCREEN_CAPTURE_ERR_OK) { OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture OH_AVScreenCapture_Init failed %{public}d", result); @@ -209,7 +233,7 @@ static napi_value StartScreenCapture_02(napi_env env, napi_callback_info info) { bool isMicrophone = true; OH_AVScreenCapture_SetMicrophoneEnabled(g_avCapture, isMicrophone); OH_AVScreenCapture_SetStateCallback(g_avCapture, OnStateChange, nullptr); - + OH_AVScreenCapture_SetDisplayCallback(g_avCapture, OnDisplaySelected, nullptr); OH_AVSCREEN_CAPTURE_ErrCode result = OH_AVScreenCapture_Init(g_avCapture, config_); if (result != AV_SCREEN_CAPTURE_ERR_OK) { OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture OH_AVScreenCapture_Init failed %{public}d", result); @@ -243,6 +267,7 @@ static napi_value StartScreenCapture_03(napi_env env, napi_callback_info info) { OH_AVScreenCapture_SetErrorCallback(g_avCapture, OnError, nullptr); OH_AVScreenCapture_SetStateCallback(g_avCapture, OnStateChange, nullptr); OH_AVScreenCapture_SetDataCallback(g_avCapture, OnBufferAvailable, nullptr); + OH_AVScreenCapture_SetDisplayCallback(g_avCapture, OnDisplaySelected, nullptr); int result = OH_AVScreenCapture_Init(g_avCapture, config_); if (result != AV_SCREEN_CAPTURE_ERR_OK) { OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture OH_AVScreenCapture_Init failed %{public}d", result); @@ -386,6 +411,75 @@ static napi_value StopScreenCapture(napi_env env, napi_callback_info info) { return res; } + +// 调用老接口,仅提供代码实现,不建议使用 +void MockOnAudioBufferAvailable(OH_AVScreenCapture *screenCapture, bool isReady, OH_AudioCaptureSourceType type) +{ + if (isReady == true) { + OH_AudioBuffer *audioBuffer = (OH_AudioBuffer *)malloc(sizeof(OH_AudioBuffer)); + if (audioBuffer == nullptr) { + OH_LOG_INFO(LOG_APP, "audio buffer is nullptr"); + return; + } + if (OH_AVScreenCapture_AcquireAudioBuffer(screenCapture, &audioBuffer, type) == AV_SCREEN_CAPTURE_ERR_OK) { + if ((micFile_ != nullptr) && (audioBuffer->buf != nullptr) && (type == OH_MIC)) { + int32_t ret = fwrite(audioBuffer->buf, 1, audioBuffer->size, micFile_); + free(audioBuffer->buf); + audioBuffer->buf = nullptr; + } else if ((innerFile_ != nullptr) && (audioBuffer->buf != nullptr) && (type == OH_ALL_PLAYBACK)) { + int32_t ret = fwrite(audioBuffer->buf, 1, audioBuffer->size, innerFile_); + free(audioBuffer->buf); + audioBuffer->buf = nullptr; + } + free(audioBuffer); + audioBuffer = nullptr; + } + // do something + OH_AVScreenCapture_ReleaseAudioBuffer(screenCapture, type); + } else { + OH_LOG_INFO(LOG_APP, "AcquireAudioBuffer failed"); + } +} + +// 调用老接口,仅提供代码实现,不建议使用 +void MockOnVideoBufferAvailable(OH_AVScreenCapture *screenCapture, bool isReady) +{ + if (isReady == true) { + int32_t fence = 0; + int64_t timestamp = 0; + int32_t size = 4; + OH_Rect damage; + OH_NativeBuffer_Config config; + OH_NativeBuffer *nativeBuffer = + OH_AVScreenCapture_AcquireVideoBuffer(screenCapture, &fence, ×tamp, &damage); + if (nativeBuffer != nullptr) { + OH_NativeBuffer_GetConfig(nativeBuffer, &config); + int32_t length = config.height * config.width * size; + OH_NativeBuffer_Unreference(nativeBuffer); + } else { + OH_LOG_INFO(LOG_APP, "AcquireVideoBuffer failed"); + } + // do something + OH_AVScreenCapture_ReleaseVideoBuffer(screenCapture); + } +} + +// 调用老接口,仅提供代码实现,不建议使用 +void MockOnError(OH_AVScreenCapture *screenCapture, int32_t errorCode) +{ + // 错误处理 +} + +// 调用老接口,仅提供代码实现,不建议使用 +void SetScreenCaptureCallback() +{ + struct OH_AVScreenCaptureCallback callback; + callback.onAudioBufferAvailable = MockOnAudioBufferAvailable; + callback.onVideoBufferAvailable = MockOnVideoBufferAvailable; + callback.onError = MockOnError; + OH_AVScreenCapture_SetCallback(g_avCapture, callback); +} + EXTERN_C_START static napi_value Init(napi_env env, napi_value exports) { napi_property_descriptor desc[] = { diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets index c7993b3890..508880af8c 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets @@ -1,32 +1,8 @@ -import { abilityAccessCtrl, AbilityConstant, common, Permissions, UIAbility, Want } from '@kit.AbilityKit'; +import { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit'; import { hilog } from '@kit.PerformanceAnalysisKit'; import { window } from '@kit.ArkUI'; -import { BusinessError } from '@kit.BasicServicesKit'; - -const permissions: Array = ['ohos.permission.MICROPHONE', - 'ohos.permission.READ_MEDIA', - 'ohos.permission.WRITE_MEDIA']; - -function reqPermissionsFromUser(permissions: Array, context: common.UIAbilityContext): void { - let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); - // requestPermissionsFromUserжȨ޵Ȩ״̬Ƿ𵯴 - atManager.requestPermissionsFromUser(context, permissions).then((data) => { - let grantStatus: Array = data.authResults; - let length: number = grantStatus.length; - for (let i = 0; i < length; i++) { - if (grantStatus[i] === 0) { - // ûȨԼĿ - } else { - // ûܾȨʾûȨܷʵǰҳĹܣûϵͳдӦȨ - return; - } - } - // Ȩɹ - }).catch((err: BusinessError) => { - console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`); - }) -} +const DOMAIN = 0x0000; export default class EntryAbility extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Index.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Index.ets index 6b7d1b6697..abc8323312 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Index.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Index.ets @@ -43,45 +43,38 @@ struct Index { Navigation(this.pageInfos) { List({ space: 12 }) { ListItem() { - Text('Av Screen Capture ¼DEMO') + Text('Av Screen Capture 录屏DEMO') .fontSize(18) } ListItem() { - Text('¼ļ') + Text('录屏存文件') .fontSize(20) } ListItem() { - Button('¼ļ') + Button('录屏存文件') .width('80%') .onClick(() => { this.pageInfos.pushPathByName('Scene1', ''); }) } ListItem() { - Text('¼ȡ') + Text('录屏取码流') .fontSize(20) } ListItem() { - Button('¼ȡ',{ type: ButtonType.Capsule, stateEffect: true }) + Button('录屏取码流',{ type: ButtonType.Capsule, stateEffect: true }) .width('80%') .onClick(() => { this.pageInfos.pushPathByName('Scene2', ''); }) } ListItem() { - Button('¼ȡSurfaceMode') + Button('录屏取码流SurfaceMode') .width('80%') .onClick(() => { this.pageInfos.pushPathByName('Scene3', ''); }) } - ListItem() { - Text('') - .fontSize(20) - } - ListItem() { - - } } .width("100%") .margin({ top: 12 }) @@ -90,7 +83,7 @@ struct Index { } .mode(NavigationMode.Stack) - .title("¼ӦDEMO") + .title("录屏应用 DEMO") .titleMode(NavigationTitleMode.Full) .navDestination(this.PagesMap) diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene1.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene1.ets index ead8af0539..5699c1ec08 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene1.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene1.ets @@ -1,5 +1,5 @@ import { hilog } from '@kit.PerformanceAnalysisKit'; -import testNapi from 'libscreencapture.so'; +import testNapi from 'libentry.so'; @Entry({ routeName : 'Scene1' }) @Component diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene2.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene2.ets index af47631070..90098242ab 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene2.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene2.ets @@ -1,5 +1,5 @@ import { hilog } from '@kit.PerformanceAnalysisKit'; -import testNapi from 'libscreencapture.so'; +import testNapi from 'libentry.so'; @Entry({ routeName : 'Scene2' }) @Component diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene3.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene3.ets index 1b9d1adbb0..bfaaf52a7c 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene3.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene3.ets @@ -1,5 +1,5 @@ import { hilog } from '@kit.PerformanceAnalysisKit'; -import testNapi from 'libscreencapture.so'; +import testNapi from 'libentry.so'; @Entry({ routeName : 'Scene3' }) @Component diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene4.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene4.ets index 31c1f1d650..cde2fce477 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene4.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene4.ets @@ -1,5 +1,5 @@ import { hilog } from '@kit.PerformanceAnalysisKit'; -import testNapi from 'libscreencapture.so'; +import testNapi from 'libentry.so'; import {MenuSCComponent} from './Menu'; @Entry({ routeName : 'Scene4' }) -- Gitee From f9e69458fb105ece399a523a72af4078be9031d1 Mon Sep 17 00:00:00 2001 From: xzcbob Date: Wed, 21 May 2025 11:50:07 +0000 Subject: [PATCH 05/20] =?UTF-8?q?=E5=BD=95=E5=B1=8F=20sample?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: xzcbob --- .../main/ets/entryability/EntryAbility.ets | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets index 508880af8c..1cbd2a84f8 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets @@ -1,9 +1,37 @@ import { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit'; import { hilog } from '@kit.PerformanceAnalysisKit'; import { window } from '@kit.ArkUI'; +import common from '@ohos.app.ability.common'; +import { Permissions } from '@ohos.abilityAccessCtrl'; const DOMAIN = 0x0000; +const permissions: Array = [ + 'ohos.permission.MICROPHONE', + 'ohos.permission.READ_MEDIA', + 'ohos.permission.WRITE_MEDIA', +]; + +function reqPermissionsFromUser(permissions: Array, context: common.UIAbilityContext): void { + let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); + // requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗 + atManager.requestPermissionsFromUser(context, permissions).then((data) => { + let grantStatus: Array = data.authResults; + let length: number = grantStatus.length; + for (let i = 0; i < length; i++) { + if (grantStatus[i] === 0) { + // 用户授权,可以继续访问目标操作 + } else { + // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限 + return; + } + } + // 授权成功 + }).catch((err: BusinessError) => { + console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`); + }) +} + export default class EntryAbility extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET); @@ -17,7 +45,7 @@ export default class EntryAbility extends UIAbility { onWindowStageCreate(windowStage: window.WindowStage): void { // Main window is created, set main page for this ability hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); - + reqPermissionsFromUser(permissions, this.context); windowStage.loadContent('pages/Index', (err) => { if (err.code) { hilog.error(DOMAIN, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err)); -- Gitee From 87ec2c58d9d7d5a816bf4ee0d6958d0e3f29bd30 Mon Sep 17 00:00:00 2001 From: xuzhangchi Date: Thu, 22 May 2025 16:56:34 +0800 Subject: [PATCH 06/20] =?UTF-8?q?=E5=BD=95=E5=B1=8F=20sample?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: xuzhangchi --- .../ScreenCaptureSample/README_zh.md | 56 ++++++++++++++++++ .../entry/src/main/cpp/main.h | 1 - .../entry/src/main/cpp/napi_init.cpp | 2 +- .../main/ets/entryability/EntryAbility.ets | 31 +++++++++- .../entry/src/main/module.json5 | 13 ++++ .../ScreenCapture/ScreenCaptureSample/log.txt | 1 + .../ScreenCaptureSample/pic1.jpg | Bin 0 -> 330008 bytes .../ScreenCaptureSample/pic2.jpg | Bin 0 -> 251779 bytes .../ScreenCaptureSample/pic3.jpg | Bin 0 -> 325803 bytes .../ScreenCaptureSample/pic4.jpg | Bin 0 -> 175408 bytes 10 files changed, 100 insertions(+), 4 deletions(-) create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/README_zh.md create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/log.txt create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/pic1.jpg create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/pic2.jpg create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/pic3.jpg create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/pic4.jpg diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/README_zh.md b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/README_zh.md new file mode 100644 index 0000000000..18a5ca3b5f --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/README_zh.md @@ -0,0 +1,56 @@ +# 录屏 Sample + +- [介绍] +- [效果预览] +- [工程目录] +- [约束和限制] + +## 介绍 +录屏 Sample 调用了媒体 AVScreenCapture 组件提供的接口能力,提供屏幕捕获的功能,包含: +- 录屏存文件 +- 录屏取原始码流 +- 录屏取原始码流 Surface 模式 + +## 效果预览 +| 获取录音权限 | 应用主界面 | 隐私弹窗 | 录制过程界面 | +|----------------------|----------------------|----------------------|----------------------| +| ![image](./pic1.jpg) | ![image](./pic2.jpg) | ![image](./pic3.jpg) | ![image](./pic4.jpg) | + +使用说明 + +1. 启动应用,首次启动需要用户授予访问麦克风的权限。 +2. 选择对应的功能页签,点击 Start 按钮,启动屏幕录制。 +3. 启动录制后会弹出隐私弹窗,告知用户将被录屏。 +4. 选择允许后,启动录制后会弹出录制悬浮胶囊,并显示录制时间计时,此时可以操作屏幕,屏幕上的操作过程会被录制下来。 +5. 需要停止录屏时,点击应用停止按钮或点击悬浮半透明的红色按钮,屏幕录制停止。 +6. 录屏存储的文件保存在沙箱目录。 + +## 工程目录 + +仓目录结构如下: + +``` +entry/src/main # 录屏demo业务代码 +│ module.json5 # 编译相关文件 +├─cpp # ndk相关文件 +│ │ CMakeLists.txt +│ │ main.h +│ │ napi_init.cpp +│ │ sample_callback.cpp +│ │ sample_callback.h +│ │ sample_info.h +│ └─types # 映射文件 +│ +├─ets # 页面相关实现 +│ ├─entryability +│ ├─entrybackupability +│ └─pages # ets 页面实现 +│ Index.ets # 首页 +│ Menu.ets # 列表文件 +│ Scene1.ets # 录屏存文件场景 +│ Scene2.ets # 录屏取码流场景 +│ Scene3.ets # 录屏取码流Surface场景 +│ Scene4.ets # 其他场景 +│ +└─resources # 资源文件 +``` \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/main.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/main.h index 51dd272c29..86e4a2f858 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/main.h +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/main.h @@ -21,7 +21,6 @@ #include "multimedia/player_framework/native_avcodec_videoencoder.h" #include #include "native_window/external_window.h" -#include "libyuv.h" #include #include #include diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp index 8b0876f677..ade4c20180 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp @@ -99,7 +99,7 @@ void OnStateChange(struct OH_AVScreenCapture *capture, OH_AVScreenCaptureStateCo ret = OH_AVScreenCapture_ResizeCanvas(g_avCapture, 768, 1280); // 可选 设置是否显示光标 ret = OH_AVScreenCapture_ShowCursor(g_avCapture, true); - // 可选 设置视频最大帧率0000 + // 可选 设置视频最大帧率 ret = OH_AVScreenCapture_SetMaxVideoFrameRate(g_avCapture, 30); } if (stateCode == OH_SCREEN_CAPTURE_STATE_INTERRUPTED_BY_OTHER) { diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets index 508880af8c..07363759b8 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets @@ -1,9 +1,36 @@ import { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit'; import { hilog } from '@kit.PerformanceAnalysisKit'; import { window } from '@kit.ArkUI'; +import common from '@ohos.app.ability.common'; +import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl'; +import { BusinessError } from '@ohos.base'; const DOMAIN = 0x0000; +const permissions: Array = [ + 'ohos.permission.MICROPHONE', +]; + +function reqPermissionsFromUser(permissions: Array, context: common.UIAbilityContext): void { + let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); + // requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗 + atManager.requestPermissionsFromUser(context, permissions).then((data) => { + let grantStatus: Array = data.authResults; + let length: number = grantStatus.length; + for (let i = 0; i < length; i++) { + if (grantStatus[i] === 0) { + // 用户授权,可以继续访问目标操作 + } else { + // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限 + return; + } + } + // 授权成功 + }).catch((err: BusinessError) => { + console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`); + }) +} + export default class EntryAbility extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET); @@ -17,7 +44,7 @@ export default class EntryAbility extends UIAbility { onWindowStageCreate(windowStage: window.WindowStage): void { // Main window is created, set main page for this ability hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onWindowStageCreate'); - + reqPermissionsFromUser(permissions, this.context); windowStage.loadContent('pages/Index', (err) => { if (err.code) { hilog.error(DOMAIN, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err)); @@ -41,4 +68,4 @@ export default class EntryAbility extends UIAbility { // Ability has back to background hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onBackground'); } -} \ No newline at end of file +} diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/module.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/module.json5 index a1cea8b6a4..bed65274d0 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/module.json5 +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/module.json5 @@ -47,6 +47,19 @@ } ], } + ], + + "requestPermissions": [ + { + "name": "ohos.permission.MICROPHONE", + "reason": "$string:EntryAbility_desc", + "usedScene": { + "abilities": [ + "EntryAbility" + ], + "when": "always" + } + } ] } } \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/log.txt b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/log.txt new file mode 100644 index 0000000000..ee6425484e --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/log.txt @@ -0,0 +1 @@ +11:42:14:524 log timer task size: 1 diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/pic1.jpg b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/pic1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0f81da1361eb0a4ab40b23c15a0c8953fc2eb099 GIT binary patch literal 330008 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 tp3)M3HEok;B!E1^3agHIeP(29}<>#t9F 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

;to79WeXEkT)N>$1T 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

~z1x zI{!tXWm_9R9hiS$zh7+g8Z)&896Lb0u+myLR836qzErP092}cBi_O+Yv#r`W%1A1H z-Hk87=G1C_Xw|?4k&h+>D^h^^DrC&VF9#Ex_LYuL4y(Mi5mOmb4BqBQ2&P9A$?BtT zRkU;#!vAq7_mQH)lE-p{f2h#1_u5J?URLBrutvZe)3?&@3!v|udiBYDpnn|gihT%& zCZ3MX#njz9Md{BvgUZI+igUGQYbF%F{xJFCgypzFrMEcb4Xe~juMLHNqr!!QH{q0DwCn0_qAl+`*lsW&iy&qqM3-vbxvG<8cyyHqBy9WFi#J|^!+5NSDf zzD3S7@*JB@h#$^I)5Y>-bnozWv1pv(a4}QORHXQTNjR&Qui74)rL(P)Nq8^1RbBBU zW<)qQ3k`);WZsosoqYOhtH-)Hl2l4JW29?2wU@W`aFOMFTKH0%?sd(d8-RLl9CeHM zj%20(H4B+Ht?{_DB`&yVx_|Iob0oT=jul2Q|d1@M>v62gg9rcuAS5UmE%uCFPXP<}jE-AG{$#?HxK8x#cR3^1W zIQHN1Q1KJ(LbFOU#5%=`C%h+5Xk@0iCZ`J9_UYJfJv&G3hBT{(We?*H1&cO;-#_OJ zu~(k1YOOJ#7VuCtm1jTnR^0o;^fZ(6Z0+@Eg*vk^(ez;)+u9_497Tk?@h!MDvPHoU z!EA`G_>o7Do(x-$cr*%>tU!Mh7nQmvRn8$njbW(_9F&Krb^1KJ)fYD<>i`%qI3O+# z5Q+8ioXZ6bRmpFZ-R=EQfkgMTa04G97$lnFz6n?KOP` zs}biBOgHV8K5#R){QHh7HAuRW@UO3wF(ddTc;+_~2IHPTq4Z2loUU-pbPPew?lBED zq3FYr?DZGQJ)t!PFrLN>NjI%y_c7dP`FRa1jnprzQ5L7D_s*Ea$_ZSN`__hgC9Nhu z96@c9l^Xm>X`-jr_L_*Hq1gLY6J0m{NgbusJ-r(saWi^25F0E+IzW7teiQ()AJnar zQ0Ql6aT@{^+gL6621%iZN6;eB3NSK)3kj0O#E#QGg7nz>hp-dT8 zjc85BM@^~~S3pDID*dK8$GCSbluj!hv; z&tt%THT_6Q%u~^RW)@wLv(nD@lh@gU&)r}Y-k#?6KQ70q{&%~BZp_%e(8<5QE>E1> zRb-6pmP*B2tr-9kTX1nykN0sBM$ywrehxMw8xAZ%wt-_yGuUpa`3FS`O>kHpepFHd zKW>^f0U?`CxEX7T=$WpWrWC6`ym|W&H;FNVms4A1A(iw_OK9NgFJwzodEg4=_6ZHu*pjPb&?lZ<~xdjkOHjDkG z_^S}nKuT5hltfwQ1b$H760S0ig?!1+CHnclUgX`t z+_!p6rH32sIJvvTR65MN--@G#IV-(u92Cc<6qdI1h&tp}>mn?g)m@VJB)L(U;Je*; z1Q9fMg8*lOH+MVGE^NmP;mvcU#%lK%GJB=X_4Z+fM$7Gj+u$xpUc@lUS=ch02{2R8l$Cu0xarSdBs z#a~~eS%wr$r0fu&D7Kd33b~*eCK|cyWE;G$w4%X#zYCCYuUwl5jAt*aG5hF^KrZ6V`}q3=s|lWhW=+=FUVUU6A(1PFVCKPmFp#4A5#ij6Xr_(TP3+` z!NX|0Tua7C^t1ED_;APOHpm}_*=Vy{)$y{-IAHN%6c`IemybkG$lq1|vGAlS{jWrP z=iA=URO@tsl_pwjEon>611RoNi}4B4f=sDrg!IOdKwG%<@}j+`tRM;bE8lQx!#YzQ znbIrAFc)?bIp-~^%-AEy1@JZk?8M|`*WP;5t$qc6i&#vq-?T#{hY+giq?7z=s=Wt^ z@rH1MP?lE)=~?h4CtYr{IO>EDl15vH6;tD8S_e~~)^fhPz;1ZXJ*S6Q_|uVa-dO~8 zNs;4KlUQH1fu`*;mm7C#v>})s>wKGQDZ{j40-(v<_cl{YR0kivgH~}9VNIVm$ZE*U z(3ByxJW+a~*nepVvP>Qug;S3CGd6nRMs!U^$PAO~T0M?v8sLeT5ZbH9RK7!M3O?TX zlQ}C-Q!wG3AB@-VJP9)Fg%N?5iyws&befK^evRNuSad0u1@pgAQkmh@7><9od|H zseQ0u$L{?sO~8sdU&KO=Wicp?YOCH?YtQ8y*OrhyD%HEkxnl@R_bi2Os3k%9Q-Rtt zTH_G+XNq*D(fDye2_D-ADv4y#Btvk?=c~zvJpf=vIs)3focNkk7ZWluKEdru6#zx{+S^NNeeIXd`CZ~tNVSkt>^ zz$zb2Mm{EJ6;mz$&GSN6gTrP$vo*Fw4$|Kw&O7&zAe>s9sxO^$N5Si^vF^HIEmU1P zDqbGn;t&Ry_rmX_3dJxL71Vg{Gg!YJbcnI88=mYow)m%u6XB&FmF<&!6*-uwEDJFh zxc&S)c9iSIvp3M$P3wq}oz^Y4p|7V}Rx_O0i)jj@XwGIo^&wmR#BI%a-osp#Afbca zg#{S;K752?N24OxZGHD=~1(iO^4%H3rD4cRja>xj1Dj|nFgObr@ZxT z;BG&!4JQe|GWNM5bA6k@sw6cOML^B-*^~idj_G6Nq^DjO#%y<#-?@H1mYpCo59qq~O>?tV^B|b6$O$L5>GurQsCl3*mI8;CatxwI^kyff( zS{2nL2A2$}_TyAdtV_}kN+`8j1hsX=S~7vzRbZ9IRYfS4(4EyBqnr;A_B|z9ktJRF z3HT~$^M?|iOr0ZCy9mSu$#YVZY<%8;qmU7pC^Mh$#PF{G9LUnya};5{bY+|_^;&BV zG9(D8%MduCiH0lKSJ1*}UvnsL+_|TBtLqpJ)N#Cfl-dGUsAQC+cMgcedZ)X(!@`5A z9&KVRS*rVT+l)k?*VE26VzPn9GD_;25|#)8O)8&1xpjs>Rgtl5c;wag@2WI+vMT zX}F_WUa!8#t+29C|GxHY^i8|_4G46jO**ufQy=7HY|TeswxMb@9*5ZUg~i*A6ST0(`VatGpFp2nDIQ@ui_dP{R0nU1t;Lkj*X1L%G9ShPHjM zjW`r}u7+tMo&R~7Hd{IgS8X`-=(yM#|E6P(+5R#kkLAtmD5B0jjhb3#?VMRDJMp~N zs>g{V9F97uVV1OwV*%ExLwzx#-2-A-hrX^wEnZ6H-{ylVg@^ab@06Nw2EEnqg=n#3 z2GCiZ{1sSLS+BHwr3hCfYQ$n$47Aq@){sU~U_Bta*aK zjZY}r;^*>|MJKL}S(QAPHVGjJQ3C{|ZIkqF3a={|JBVk)?S!#*k|ORrA&f zH+YERR|-{C+j3T|^sH#z{mlMcF=eglUGQ-SR@`_t?1Q6E{KwGS$AKyuv-dt+-hZ>$ zsypAD-fMmJCmZYHQRp4KPc*7`}d9~0x|Nqb@3Kd<@2K26uFb;@0!lE{KNkcF({?(E= zjiR4NL&ovDypHJDxyQuf+6fbM+ zl!H{N{$ERq@&RdfvWQn?=B!B3lHa?fgT@AM*i{AgCH zlDqu1$m~_a>-qb+5@NNGeUVjzmq#{6X{ur_vi6u5T5->m;}ju?-)&eQyuQ(>j8O;a zj>kgzEXPwd%)#<3VX`1;lymJ<@CKX~uxS<@o2+TiVqUpW^+({hLJkH*XIvahVVb;! z*k=;p8pFou|KEVDvG9ksysB8Ays-NO$WR=4=%h&AnzlAf6!conv5|CKOB=4+mK;}M z_xk-T$nB+ra+P1pRO8qc%{YIan025ykGct5v*PRZmi5vDwxsjr#nNS1hPO8-7Vq3| zOsOht(TAS6J-;_A74u2z>z@08Fho7keFo^v9{18*w>l%p3N^5Pd1#r>G~SZpV`Ao= zeM!djT*Yu$T&X65R3%7sInDl4=)Rnw@oxp#efx3I{ID;-oW!fX`5%Gh|8_v@$RZZz zjxMfIvIbW}NHIeCPwA z5+ZdHH&McVEL@5e`>mlaL653W8kO0&Xqz(FD$B2sSf4$1sEH%UaM$^XmAelU{%k}X z2np*geyJRIW#D)c@bF^8DaJWdN2|&E>zN`8Kz>{ejN6=2uv0m8xB7$9BIsUKGO^J( ze(D0gUxVoawU`IFw<%^CsN20i%~ z!G_)Fh0?i4Cw0dYG}=hN;WCs|CLj7K4O#)=ksYkAc=1;+=*LeYP974HS44RF77 zl-`p;f~FRdFxE4m)cH3iUcn#M@3&GR)W(+Ha%kDH>W z_SoSI?1W5qc1kKt-=i3QH#M$N^Y_#mDrOs|v~wp(o69F8&KB%-r^-ZMtn>y~?Mg^4 z$klaIyU?decMx_9bE*>NVhK}Ka5*SX@O^}#)rub!lVmESYHdpBKd)7Ezu+9A$8e~c zJWM`><-`9h#etM#20;6GRYOB-lD^q=PnY(-YSDb_O-CnhETtsKG5w#Wi|D~1E~ZVb z#Ys?*>Mv93?!KS7U!{FxIIfM-Y-y9E2Nk-`Z#w(@QH4_-D~R<;yY5!cXs?&7w5B$6u*drkdwGQ-3to zA+l!HJX#!b*GB1~eO)=vG&c-99GE_*z!;FIl#i(ilzuC{lRs>`i{8uJ!r^L(6gUVD zBw#NFs`0(GEiNSrzvRUL)-W2iYC`u^5g9oY&3aD_SfLDy>J&r3sQO3z#HGNXk(CGvm;H& zn2*FY;b>X1Ni=m|)h&B3!)|Z7)7}(JuJLG=zON!{yzOZLlo2!yv~c}wy6tKeq_=5o zs>2p<2>(`~w~``j;+e&aC83uJV$*s*3;bvS=A^*}bxdEVyn1t2_Oig%G~6S+H<+!K zv7fe4-vTi_=o4=ZMy*+3>#!rMNJm0Gh zC3s2NV$QiY{_i)hP>_(|Mc=0TVd)DgAhApxY16vmX$^MLtC%S3t(k|YfX1GQ82~m< z=sV2Q)B3vL*AK2i#=|P_@8Fq)i}wOOZ+cbRl!`aTE8C6TGEd7r7M+A;`Ry_qdi?Q@ zhb!<<5TH{KjQm(<>+fd-&rwKps8fBxhINHCwuB56KtF1D+n^Xbz*>dpF)27!jvA6s4BaS72 z=pm#>?Ok-6$Zn~k9YmMDu#eLRlveo8uQGB`mOa2hR+VP~IBGAhqd&+}o1J<`L}`E8 zX>35(7bCzlfJNszIFC&s9}iSa4C9*!VWPz*1$sapROog$fp-MzRgO;Y25)@o&aVSr z=ZXUAZdB}Mh`P>uX1-APgo-PX$QpD@()gqqtsmfM$^e-rR<%+e)|47vsyD9sb>wz* zx7s>w71WAX3MncMy#8!xCxT#(b*xxOZik<#rXy;#>HGWm=O?U45Rf43ll&xu5;Tcn zU5r~njQCbk6gxBR5bJ*a)lyzwR~+7R}Q_lHJM z1?MiJ>~yS8+(yb%qq;5^P#*k9_y7Bh-S6w2=&?V2x}gZ653AAuM# zB%Rg2%DM|cOWIHCwVId2pxsf+YQ-yz%sp|>VIlkVB1KQAhzRp};Wk!dL;Pp#gT-+i z3%2@xJFmj*E8BLT%3uv`o(`y7(G{g5B*R=|EQdd30)p9W|9a*4X{& z-MN*er)`hM7>5I%@7E{pM}n&-1Ac5Q9FlllUJ_F_&+4J(DR46{G{?ncNAav$z7w>MzJ=4+;|O)_13V8U|Rpdy_s<_q`G4@ zLveTW&BJb5Yy*<@?%t!gPA^+Jd6>c`+2i?OcTAiNWM{NttAdg37q#&XFukLRlHvo* zjewP!^ODKeS2(IO85i1i0B@1x-0{WSZ20P$A8^>nIJ7=qGoj;0Ue!-4r z9@5?A0tG2aH6PY9EHC#Z1E9iiPtC`4k41bl*A!cWJa@xF-86+pz&Aj%oKF`kpG5e? z_RV?A$`K2^*ZP`494h@E4(78(61wpC=cEI0ZKDb#nk?BvjncFg_g8ke0o$7}c zp&hjAA8YQfpRnkhcfp`Q4h90d?0k*lc{%)J9jBs2x6KjDgx+5-DfK)KO6v^6q4(r_ zXT9wO7l%(CJ~c_u9PAC*8o%{oR=MoN1t#be+;SP3yxeMi!aR9mGm?Z@CLJ%|9K#(= z=$x&wj>MOy3n;avt>vkE4f2lKJa-Jbn-E2IlEdeU2-k5koBpOMw5*h(iqHXPieG z$A|x&Z43OAnbz_54|O^)v#m%zRD-`x*tt6SjVzUyfWZR2dIQt-?V?rXxI3dEx$Fvf zy~@chVypZ`?nHizHhvS7hRJTX!jvSX9y)Xx96ynFtV>;9sa7Adgr@HFcY342#^cZ< zb(QZNbYfh#ZTk`jShms6yruHjgNd}ya8BZUu(pGhkFcI}XrXeH)B#xAJ!k>wbaCgo zEMMTzxLCavCc55!WW$A|as4cA+%P;_IAekrKNfIpbT-r03r&2>AQfLUFvz_a{N8OI zA0TA#HMPeiuqF76;giWd_K(fKk*H1eKI8Sba-%oGX|50ki$5LAz8qP2AcrISE{j5F zO_3??RJ5phrewU5?qm7O0l+ zr2)l99knVir<0AlT?V%aAGu4%Zgv5n z9H8NQ>yAwOecR7sgO|7%7L5z-F+AzCZklgit7Ci9?LYOSRhU8+n-%8qvdVQ!X`kr~ z@&iv|lsIJjkxH{zsih*-0rttuF+5pHacKma<{`+gS&npEl}$``dCnQ|X_P-c$FnnK zDCY)o=MD|=%lm3ZWm|DES3{<%2eqxaYQs^nT2K2HC-m0}knT}h8h23Szb@&`;p{3g z)&l;YMt@6dy#2aQZ_Bp8FDY^9VxF}$RG zgRe{&m{{}VF6%MiZu0@+3u3YTwgyUJHHsd=>XH$RL24v{yASR{C6GNZpg31$rcG8> zh0HwKtR?B43RAAvsn>8p5tXyoyZ>_=_(_vC{jk4g4EfoXT7Muv?&XA1wFW&l#aU># z@!rz>CM~PeYuayL@fknzj_}g40E=j3k>#=%KAbke%G!O-Tg-mfd4?%Wa5j_4oXdQn zElr^<4CJAM3j-c^>ENwJfF5E#`h3BuC=;E(Qi2eeY`pI8=Nm1iiRz+_-#`eRVqfj4 zaHVK#ERs`}Hkr~v(YzJPPfOkHl(o$GxIQ=hb{7BTE8QM*SZ60};V|`SOV?jzGUh8V zM3&Td#yqWbfHMJ(wd$bld}Cw&elkn?hxg`3` zo&Iz~HFh31|E9A)Xk!`B`3*Oii=F}a7WNs(oA8Y0Wqn}2!=vtu5!89zBg?dhP{@9# zg!|wJoI;1ZuUF6K;dC(=>n~or^cbo4)x7~X1Nl?8Z89#A5}7c<03fq&p>;nH)&H#s z0D|^2N{RgoZ>?pEn3W8k{r^cXd8|gBDNkF zI#t!^OEjjL|A4Ysk+v3Zf4WuH6n>D$iCwQKCRbp|i-T1F0HC$rzTm3zd9WrppeU4Po3=U2Du z1{QC?11l|PtBA#)*KVBnb)*`VQ-z)yE{rrrOU*ZxyC0F<6aN=`ZynWE`~3^jw=O_i z3KS`{I0Px~P{Rup3y>f!4k5vVLxl| z*cFMSf$usaZ zz}9)KLvM;rAGc8L0+NY9AZJ;W@o8!{lg$Az{uuQiU~Ug) z$HjPCkCn$c#Z@^qhEO9X1Z$a=0(8dmN7^5%s!a1gRDp8dCvoLn{aZQ5ymb%G*v<(l zcRt3@+uH>&?lES~$~QCG*9G2~NL7ALth#q(NrR0tev(}0VIm;y?xHnPxj|a<>`lpy z3y-dcmT%TZOYseqYWN$ix;U6j#Zmh82ZsSyTwa+DyUnkig*SI#2+uhc=k;QE>;@7T64v3J2>cyJnKg02D zZj6EA9XI(~6~piR{8h1A+`J};rzmI3NhbL5()RqsL294(i53cRQQKVse{s)i-dsd9gT0LknvJ=jeXq%&rI);y#&3zYK$Wp zK%c0^f3!mmuale|UDPax2G-5H4tEV^hhDV}Q|kJHOyxS8_VoHJ2`YwhQqmD|fNE+w zkW@+Ht$F9P8lD|zAI~78HH$$`$1?NaAQGjR;h2g&)w=r0-yiGW{G#zced9CN#Oga+ zd%r5GF7rV(34-1D2-Vz4E&lmh_PmjCIpC+evcnz|#!U^M+kLSF-;Q!-=Uxx4bTP6KqqgJ-4_2O|tGHBLS#TTp7|}B}j;=8w z#PhruiIr|hr8GtqERo;gM**uYZ^l8B_%x}!LCMzx*nCE1gmuA2b@uy6RYM~+oVZMU zUbN>4u!W4aC}XZ0;hGv*o7geKia0R&nBJ|VPfdNf@MvjjU_4-35lWtiAVAMIkBy zX6`VzIpV^Ad$hUC-4A=6^!!Biz;tzTTkn}i8XjN(s9g^)d>LVnUAfpG*XK}v$R?dI z#KP*P4{ZqW&S^8Vxue3W-tC!h6H`&q6=emJPL~?0UdU`lWj3#X$0*Ns+8OfTMk)xX zY=3z7UR8EG~}fKGgkRDSQxI))sP6(XZzjBP_*SOVlE!F#02D zScm1CL+17I^ypSSa~6sbw-Dx77(;dh1-{azftZa-_NqyCAU({!AU%wv0cPPidU|@j z^VcH>auF+Q)DiUJJ9*N@2bx}Kud>qSPH~Nr zXXEDPWC&T^-0!m3vfB|#%JL)sF5E%Iby#$DjuEn{>3kuEajH`VbCyOy#;)6@q;YR^ zZQ?fbiXA(^CF&Weyt8!Mf<%zFuioyaNsYvX#OlACpW+tvG@BcGMU(jK7#iVJpTMRs z`6FimZd=*=G~YBwoSFBf`CyE>Sv+&#n3JegiH*6Fe_4}$`t4SFEi}019P^5IHt6QA zhsCOS4xiE~s{x&yVMc^;SxObt=kEzNo!n&FIw8YPa;r#*EyeZJD?e|EqM3{~E6SS@ zPM&-R^%vVRwVWFPF05)nWa9{c%q8Wk45hAsQmg_pk;lS+Z_3G@3@ zQ^u^B`xMgRvH@&()yij4>h_+JGZOAf4Z;yx!I%Be3jr*@e9u0$SFMR=wcFRVX{Xh7 z*tv(A7+3U(nTg-~Y4rL7gJ{%kbB02z!bWXd2Ay37pJHiKXsBu6z(d-`x?jxC9ZeV= zGh9A~E57#{_q}SpQ0bS$Fn^uFDQ?F(usBirC&y+?k@R!--OP4glf&gzjkLj(d)*s;M*U8+;b7kVOH-%KS+3)s89966o)gFZ5N5&soO3@U8Jy z@@}zMZ8DuGhOnUAPA>MQc`z^D14SE{N;Eak+!|$Q5y&w2Z6}>Q-!MAk>^N~r6q;uf zqNcqPXKfFX!Z+nqGi^);dLxEn9R*Bh2ANb#<@~^j?su*KP^pS-yKcE5Co843wW4BI zJassob6;AsWJMV)J{p2cM0nR?{qTBqMVnJXdVV|_(a%jWevTt}viI{#FP8+-5(2RR9m7x_7kOZky5PwEqqcH&|YA zqs5xC{J3jGpuuTNOT7ZN)spDNdIk?bDf` z>{5e{VMmq+w35ff+^kSy%n6WD6UsoM?6=UEJ^~oWXw|%G;K1yCtyex|cvN)EXTr9^ z==}`^2mML3?wi-u+{Tmd2DK&7IkV;M73;>T3&O;O?67lxTS?$bF>;?TJIvf`h3{Wh z`+DPX3ApTE8x(d0PyUzB4PUK9MVHFK0edkSihrTg%EI-P{&hCe`S{TrMTlVF;GJHy0`z`6g)7tCf8NeG zTP~}!&)dBuX^^q3VQ>0r%u|z<$eazn`k}U6l4hbg2ve8IavdV$HC2UacJ%7oL{bXF z^CP46Ck$17dKnl2mbFS7CyF%VgxW0X&BlIps(oJ^+&Dorr;Nw4J*`s6@0qH9aV+or z25r?~Hc{XN%t%t|NwrHFoIqh(Rw-!AvknP!@5%>RP2Rc7cu%GtVCL`1&fsPtyJ zSV&wbu}W|#Xf@4)R~gM0m|AOM-WWP-BaEz!MQ2!*a(Z8TB<%7CY?Bwrx{ApzjRJcl zEe7jE{`mlJj*3hD32|MKrrB|*T|bx~XWZB!EoN;dZN?Qg@mr`BHo?LoJjQ4Z>;l5Z znCA^#cmQ-7VeKt=od~D(&ZVP@m|cPH-&b)WhG*NfI|#G={Fu@fCRw#4?iWux|2 zWdqzvUk&muc@_U0un(xz`1Lh3Vku68t88vF*MGWrzID7>aRLYf1*=rTe32$eVQroo zi!p;;XIxMlD6wN-KCG=8F;jj?e~cFh~4(Km@2PWWj#49^T-raRZeOiv5-LXhbpY{!j-&_1XTFY_$Y9d_ReQe zYLnT|u(D#Y?wBr}6q)jBt2~6$t4g@Dt#A_ZmRm{1&I%SL!seB*vMB6yR@_J0kU59X zY-xuK_1E!mWN8i~oRm)bGslt1Uu}zy1j{^XOfzll&IBFWvN@=(>_EQ%_e|7(d+z3e z=SyPPNx<(Qsw0@v0#oEhOfYtfD@pVC!NZ??&aIzr4U!Y`N`0H~)>(PU{={abDQ$AcHnAROT#MzC3~Q5e>V1ACL#sjxH*gKyP8AA`KY zc=D3WtE$)~$2gI4U$)(W)b3d3N}(Zte->!mZ$d<1Pp&Co zEUrz*02{8R-Q1X0Q$nwJW2+^XgPUcjUEJrr_a0w@k%|`QkIx}&;1AQktom{UNfMvj zqOB$KZ(Oa3@@6KmE{RE`aHi2NM@YnK*nPA z(q}hz`syPN5r&&OPFxAjvV~>KfL?2>a)jD>ATUE3YgFmjOgH83gJJOkJHl_No<`1x z8q>ywV%}>dC3`>ZjColU@Z)@Qlfe(G1uR0?T$l&P@v0BNOL04TK+xTNy=f_=b;~LJ z@&n8K-G%g4rz!5FqV%D|Vq{HJ$51e{?ETf%0R4&%0tAEvSX#`>-wGSi672@{=xMWz zO;>oByv)z&GW%&)q#f1yD&b8f5WeQYngPc}ssOcal>$32ZOU%+)1?UN2Dm`tsidAW z{KvZdPuf3KmywM~g|V}=TeEBTlkUcBM7s_k5`4LZLiQ6Mo$mH7|hMfb?P}@5fx=MB5AG|usc{J zQ@OXUe+)$q%01bMP>blb^5yL~u#1wt$k$dfdta;MmEX|IHg#!an1a8T zK#8|Jhf4Nn4IInJ_er4DmdI3E8dpI6c4_qwl?(RyYi8lL>|r`J4_UY@d0AWNUa#Hr zSER9)xoV`2IN54Nc2g^%6BkY|!#YOPSU1Vj>G@n4m~OWhlM%&;K>V`)?dfhOwvI3d zv*`7ai_1*WlPS!5LxrQ9i!tP-9=h zt+VV7t>_LDLtxveB6Ek+NT?a9Oci1GToYkeX9`Nc{iJoS?Xv?m_+rG+eKYt)T62JP zMM4Uw%CXL@aB3~qG4o5t-PTaELyBf$WTG!u%#=4D74x^`|Cv^!@Q2D_1?hp^a9o8{ zZ!9TnU+zpD$;C@YOH@xV0`+kuW6c#KX+bWg5-qcK&2|)CM|9j#Aqq|y)DW^&shjx4 z;;=H$EyYgD+O;M~lT_!o5A5WdSj&sZ&Z!pBZj?h-!TOaW?C?876%tGB0E%iNFN<9D zidVUpX6NYAJ;Brtudd*-7B92l)R7D(nGfj0dUmJZ6vqK;riA{ zzJ)};9?)8p*IJKf=75tF>n=BRiPO{5Ln5KvW|=by(PGopj`or1LV++jsnl!!V;%F} zFLZzgui{K5OAc7WIP|Z$^Y>EbALS>@hbJK5Nw)W#&SbaL73}8a@bS2-*Yc4WRqNpA z+cb$M;j_F9vSxjx8ca%yhpZNeuQ$^iV)S}DdALloB`)XI;01>s1XtQYm7z*38ldJq zpc7VUBxfZ54d8wtmFnkazs1ZMyvTgE3sC`CPuye=9}~T9X|WzyY;cFhl>kRT4n{PL z9dzWhFo`ApS>(PkDUY+9`uoGx)ZVb4}ze?aDF&TvP18ews@r8mO>dvn{62dyP`jmY-5t+FbqRhVOD(VMy23W zU`U`mt{Sh9l=Tfe&=mlcEbu-h_3&LobTwT+LW8zX0) z+HIV0A1K?KwEvo5>t`9bLmxw`RuaGd#`|m@nVQA^rtE+wlzl@zbFT{%7wM5^|9r)E zPIyrX#WQsfx9_qv%vpK2pjoZhJ?7PQs+eW)u$*uWXfZVH4QOIwV#CwM69*t{!9wHw z&pFFaRA8%T)^r|2;hDVv5TJ$TnI&PVEY9g9Z&i7^j!D9=)~yNU^#RyL)mvY2`W6> z&kH!m1y(PuM%SFstFh`QoMWAjl3W4liDwop?wL(%=b-57vOiQLQLRV_JhXEE4;2yR z>Ctqs;tXgkDRvuuxuUw~dFG}dleWA&Dk;MPwz#?-mUY_JQ1XY$KMD+MIud1$YIvTm zl;2Qtq_EmQdvRvu;?sR-Zjk$%#&Mrh@UX>(U85FmiCX^({&eB8^sUiOZ`_6AC*w1J6Wjm1{dssaAy_S=?&P83D+zY^ zxY{BQ%WBT9i=O|F)I;I@uafF4;J=9}ZJfCtrEZliZPzG=TrIxxVQoVFg!D78DhRnE z;v;U!J-u_K=prQOZ(`Hzee4DnMyG7>#f`VSPkseXII^cFyI`Wu5ghARAf)=~w<8as zE`Jj{{(1Ow1=7`&(>Hl`o2`(UwjRp49Y?)4a8y%>``sImm1CGT+(LcTDpMmawo5B8> zi~gC5{xKK+pEDQw|BJa;dZYk7Hy0Omu55=jhPjR=D6emBJD>AK2)PNo`ac5fbFo21Q@Nm$ciPW3)G`QW$MI`bs~*xn&RyNIKx^ymu8u|ql|>t*9t5whl^7IUI4 z>?9K$($Q{kdeotZ6#7FoSMppwbou7+CnwB!e^?z_vZ=Ci)^YO2U-7Gl#yayAc*5!Q zDU@>N!DR0&&y^cSK4%B+Rjomj+aYdGmLNzktY&+@w;ncON3 zYrJHu=0Yj3#;7jwxG*kp58FSi6VUt(+P+q;v+j42<75?yR80y3mB5&ZLI#_`1U;^i z`okj4(O)n)dcz4bu}cuDt>Z2ewM)n=Ry4w^%^5#5yErKc~zpG5!@ zM%`)MNK<3u9yTNfk*g@t5(v>LZ!1M^b@=H}{8CufE*mwI?+8TGC%Jod-4go!;1AWW zocGK|Kz#xb5aZI5fW)ofCiFWM+J!ubQ2k=*ADesSwcDR|(Bs^Ym!YhYee+$wU6DpI z4E_4+@7J4OKHWc)q^65{(kfk@YsSUuA(Q+Cj{%<5ONx6)b-N6ozz! z0zmOI5aku~0>_c+h_UI!`s7X=SD2!1$+uJX&&9=Ih)S)ipr2c&O6biT=;1~Y%K$17 z_lYyxlbGWpV6&LY;?lQeqp*OG3Mr&TlW8|dzH4D!Rg11hkt3&| zT|I;L$BI;6o{_GrOEu`5)}F)(=$h(mu|Qu-t_j(PUc|#$0D|-n8R^I@UFY`cJHlvB zS~JoRjS|1p6nahnl8hXZq{kVfJoa}P;46}`X4t*W*YCpS!!nr5F#^d)k4w_a2lFn` z=Xgx-wM50Nd7WdWU9RSdy3SUeNi~W;xUw&Gjk%r_GZC{rma=kKIu_^dwwS5G?JkKl z-UJOlp&E+#{XgSp`TwrW6?u_cM=HJHm}ED$j4z-BJ*{?cSmOwNWASKfo$B;1eg>Mb zim9fcvk)M-epbRlL(QW2%yi&E?~lcZqVY}Mv>4j(uZTWl0eL^v?&N*}WS=vJuHv|1 zqC84+zDYLoYi#+P{^3*Jh!6 z*SC(YMGho9)R1$i#K^1IS$}QY0=%8FzOHnlFq(L>;D6lT#8k^_OZwNHC_Mk?Pyf;B zKTYbN9`(qOeg=$rvDfd|9`Qi+Sh-!VG-Jp2kL-F?nx7Y#X>~+&Iv7l zfUSa6w=uf<#6@Me02<7@omEcDGU7LLMmqoK-l23@TgUXOOsDO;cqE~}WPCKzX@)nQ zPQ1PNWB30KJO9FLdMF7MJqNGyt(Co=S&2WI3aNU@(vY#E^IT$z$#i55datk4%_p=I zvgU(J;&low$K50AY;|$F5UKo=Ie0fVcanBn+Jfy_Dk;B$*py<=YLojZM0j8-l~(!x z;4~+liC5C{x4JzZ#-iOUez%j7*A#^?5xSplZ3k=HT+Zn>*SEu6_nb3y}W9i`K!HqkeuE%o-K92<~8EIS~8{`1Jo!-gE^7E^g9| zd_kGC)Lw?^yh+*X?WK=XV{EaS-L@-Rp#KyS+d-nh8c-taY#E?u&pXxm=V|ZcbxP>B zko`t^GJdPeT!KK^%FU&AFh6@FRe#M(afdn!{^hkMnM4#3g+{LqbCJBxgeZP%RvR?~ z9!Eay$z*6#yle&lnL0(W zNj)1MtyXa^$c-)kuZ?a4TGtgM=5Sp-S$nl3gC%dlJ{bVGN>{ztcD;;i!TPqFhf1zh z@_gk0P44~dm5DTg)ojhLY2h%{dA>XVR3UC7c4vKebGB&^qVAC{*Oy}gkm&1c^L+VKV0d{6@jW2 z3h!nMlvqXH!E8wJUDWpt?qid3HMri2xymg*;aVCj*301<5Y!eEwYXr}scxyl-tp}s zO?Z*_ZIcFD`jk#ms<@l_!u8xR_4>q^FA*^pq3^!DHa(-Q+MxKqfjHMZ=-V(uOELvO zgj=}@I>hZ5l)OV)EkS)g$zfjjv?jM899WZ$b*cdkk7~SF?fy=6Z+`kg;Gu83Qc=;8 zh01Ta^V~XaB_^w%@3VEZY}U5>vOQHqp+lfrj1y%0xG$yxyF8EMZiB^ml<&W9iHZA^ z9epv;LNUEO z(72PJd2FadF2yF45&mn1{pWr=sY&^~DVAN$wyE95a*KZnU^C`y7xNbJqBJP*XgEg- zukBZKW}kVpb#bmbWEY#OInL1e6`K-XB&x2rp(Zlzu@$8`5<~tFnjfSh>Qvj*eucJ* z>*2W%S|;e@b>;>ud`=PuE0#;o#3F1nB)m+oXb7w(+}%p-oJPaJuK>H7CVuWg(RGkx zO+34m^<4Q5>GYBN=w3ppQcFkG$<;vLKse`FazNra2G*MvWwG^=K_ioKHs<&hBS`~H(cS|Ys>^;SJnN*N=ZOtzna?*m>L#zsEJLPF zlHG%6iTc6Iom7u3b1a`Xa(P{wJvu)2T4a6KzAb^lL*Ikhkz%L8*AXYQk*Y+Ru`-~k zFtUfMgd@9Br*PRxYXF;Q^6{<%0?+S`#%&rMd7UN5emqt^_XofJ=<4U`8Mbn{S4mlZ zO5qJjs%iu@clsgLD$=bX3kHig58c$g_~1f7IyQRz4;6U+u~YVZ+(CX}lfJ?1Ws3Ej znUo4cZ%NPuWjbU^&$IE4G8)tWDpLxQewESQWBH{1@w^(>*RMpDLEP|C{o;}BJ(T-A zXp9if<&@KT)rq4w+?ys*gXMd2a9G(;*-lZ9$hcJ2@g;V8%L2<~gJjDpsPf*mXCe=d zM0Yvn;l=N!{4N&4-;QA?I6*480VggTb!MH0SuOQ?5%FeK3XP#rY3~zlu%5-69-=*# zpeegDzK=cA66P*02Uwi7qNiuUpmIFB)!Xxi@^>xx$mx-NgrsMwUdw%E@Zj5K8VUF~ zpIOsx-Y4U<0v%?cMeUV3i3}{)V-P+UBfuRhut2nJDPa<U!{@ zu-JLdUGny1c9xY!TBAzKy>r z=lxcu-CVM}@>;3mN~B=>MlwIZ*f|8z$2^_>v1q_%wb~{Dy)u|7KG*hX@g!E3bL22D}7iJHb>Q+D9RP3RuNaQn! zqxMG*yzNfr51E31N?Tm4qZk2b`DpO^X zr^SW=SInVi`s0HW&S>)6Z4uE1-m=W?%DqpYH%0R&veF(n$V^n4I%%(V1_8+#5wp2m z)yd9#?LoQNn7BTpXWXr?B4Yxw;HrCM&=gC2c9;IR`CO4z=v1(Fhp)roQgU5K5`RNj zYNV~u{Y`b&RQp!H&dPpI z(Wym?DDJ^t|H7a*H%AnG-_n*Neo?2~jP1qi{wzBu^IDpPNM>Z&}C> zF<2-1TcLRRSGpAuwn<`m>L2`Y*soi-H^ymYWh}k4<;C*^(XpEVtx}{J$&`A)^(AGU zKzz{g%|57aKj^JHdBp7clz&$GUDnIrc_k^0zaz%d zg;xQr%~|bELaEK?)GF^sffRimrB*gxTkhjIl-K=JzD?S_xEiHq?T`&qPqVfjQWMW1 zBGqKh$c*!z?v>E=XkDDCVtB3ny-s&RV#(k*IH1%*IYJPx8IP>eM)_qpWlZbYc3M37 z3wvtfr}R6${rzCtXAciLra6pITQ4so3QhUI@xxl|rC6hwHln7#!}gG-7hn3-#GG&b zK7Kf8d_@Ka-=9X`K&lRhO&R@eaS&R)am+dR0O++xY|mlW7uNJPTDc|u=DC{2j?Wo$EQNnK4bJ7UgDKvKiN}Mun-}t=MFD3VKOEE9(AW1f)F{NdEMyp=9 zEFKnc*KrGY6wK1z@uIb|p>t*XOpq%KM-BznxB7r^q4joE#q4pHL z_13UocdapB@q(;EW>UAP#><=wJ-o4?(ky5Z%PX#s^$j;nk>kmHJ{Ni}YQz)5zszKfq+h4l?lmUvIsA3H8HH{5bWWbduZgclI%?`?RPWsWL)CxwwO+SyZ=e;v zH;4B#zSh6lqoKfLsx2P5aB%8g3mnwR{YL3xnLoa%m>Uwpu_Y#yJtJBQNv-e)il73f z;*BB%(`K*i26#xU1Q$r(T{PEH@5JQ;I&Tqg>lveFaGp3O^RJ@x!~myt^Lo!bgp}>( z)Gh;%EICzE;#U`8&SmgTL>+j-fX8oL^?!;nP6UH4NF+pfTj>CDHe>}JZuKxBcGd|n zN6EPfxv{&2QD!TXEkzlvqJ;AK6kkeIXU!+^WWNsMcTVe%g--aAM18`Z~>a z*0W!8`Y5z_1Dwpj*=4O;rwgVh)Bp(WZn|fV$!kw8Tvw8fh^}ayBb+m>?qJlWZ3&guw9KeI6~U} z{?A=W{g?cCC08#>MY81Xp^TB=K+V`r*6zizy_p?zJ|b1jt!d zc`Qnd#}r^XRUQ92mT{)mEr6D}u4>5Ns|^6*26j-A6P#0-K3YxIr@KT-TJYzK$}&Z3 zE5H2- zMC94z+?T@H47eGUF5A+UZ)lwSCGFH=dqD1mh=gMLh}-qHDcoVT&C@Rkax?s;<14v8 z?gPG+VRR0;M>UEC>-!k=Bq)vKCkrZ)*GFK%$sOCpYUdz|rr<|aU*TKs8g9Dwc@YNu zZKIL;LN|!O*)uH@f0ov&*Oj^~^8iWAuCV|7=*TR9{crUU7+E$2g)57|1$EB@|1|9x zUt<=2Rg}S{Docsb4~^nWho8Evf60wU$E!WE{-D-hihvIc;{E zYUTP9L{ChHdJfNtIqt=f-rukHm!eD8oDi5U89Y9_p&1CTnWEX3)MW37>$M=lxg%sd zSL2%4s@2PQT+3NxFU=Bb)xF*MN0_ea>8-JIyBj}p*JX4FLmAYa8=McA$8e()hNu%8 zvd;W;s$tno$XuS_a@f)MnUVKGp3cnPQs%3&oIg~dI!){F#QOl3SuJf|rlHR_qp(MM zFQXFV2D#TSc z)*sD-l|tg;qP!OZS!yNoeai;4t`30@BQ?nvI(?}t_COj|m0d*rFfFUYi#=9~P8wWO zy(3WDo*5oA8vu*M6DGU_vI^Sd@^?6XtI_$~>9BaVe2{_awkDed2tQ}?P(-upyfCS1 z>us(`xoN2)6Q<4UD0D~qAp$eTQ90tkP-V=$mqsB?L!Cf+}sx&M%z(VKcp zi#N4P5OWzrnsnwblolpHa8am@C9`K1TDLna#IlST}&8o84o=#OPgP(iZJj z5}%sfyY{K3+C(IIV2IP5((7MXeYW0dyWN|YW;MQjGt8|3-UGVpYhf?b{-8Zsh?nM9pvJ9+3FIE0PGWEe+ZO7>XauORx5B74#QgS5RoIfR# zu-hhm;E&(ij3!fGnoaqG#5>ppu-7m?QV#X0?{sdo03s-$4n)vTz_*YVL&Sbl(|7+PNx*_UdT4X=Bal;gEGc!YneBl_Pg zwY8||&zIdvf2d-KB7dlEr3Rm1b}oVy*n-$LIX!ns?c0d)$7_VQ}?PTViQx|L*an2N_MH-!xX++1gmn2W8Th&SbSQjt+tPg<$_awYYfFg#p z6GKnNu!?mdMbhPa`!Z!!zDK!OmD?SudrHr4{Fb-FY?V_b@^%$+_qkX@;s7_U@ z5zJLYD(LS$%ps?75plMs-EYzBAFg`)=Q~v$vWAZ1|4{v;`!KV#*EG8-Dc{^SSlqW1 zB;0OE`q1(mg+B6oXl+HrrC}X_i5t052wVES?5b13YVq_LYC(2;w{IvaD9R zxjMC$DzdyK%UOLsK|?SXEzc`taW7V7#4>zM_TBgMHx}w&$hq6nV`7JiwN7Dy`zSbD z9ehHjWp2!z0LmqDMZd4Pr>AL9*|BKO>pjQsdNpyUe?C(*$us)bWNf$1u~juY3n|69 zpi9Ws;$aQTx4g|;jZaSvvGE#{;bzwZJ{*;~kGzV5Ep+K!9zr_R|0cdRy~-n(w<>I~ zpuOfpHn(B{!+Nyv6N#!*S@jF)R=pFGc{@mlst93lMb=m3?m9k3bF{L_Vz*-E+fkAY z);OP5NQUOU{z&{Z3p;gO^TID|BPYvGu`7GL4Rcch$elVYopZUF+~o+6Mqyg+w)2nO zVdqN!cn>J;72PnH=jSUt`}t~&{EfrUKrj^Fn@BWk^D^ijY&K6#$-Eh z=WJfg<_KOU|1wv8(+KFD<`{Bd+15Sonpx?JcD%OqdNRfATQ*~1Sf|BRis$J{+Azzf zBOL?1O%bCvhf-9F3aQ@3GOYp_(bXk z#M>6|X@S2X8n_#8G!vPVYUb@Fm@F@^%4 z^CsAhKa~)%D{0fGjs?x9%2p_||Hu2{j4Jv=^^Ec%|1;YrZeO<3M5yYM7RGH#f0O}% zr`=e*-jLPm5l|dElHiqYqfr>ATC0@{vxVGr0WHD-YS+g<;`y$=IH9wKOyxxtBtlr% zsmI2O`_e1acz%fayli4OA_JDv+8ld`>$#lqp65L572W=3BZeZ_#1h*CB;ONdqsX^@ z)+rq}X(fmb;<$ADP0$)p;~w*%G;mFpW!aBxnyS+NC{Q#4`_ykl)Be}Xc-(Pyx@FSy zKH+8lFIlfQ+`pb(UzYxswJ+c3X?xu0fg=!z3R$iTCZoYMhsO%jn}JPdw3UaUT~yh+ zsx$_>fH_(zx5yNE785&D4C_{)&t!p~Gb2PI_?u{p5cZji({I^?J&g)znMpf-dHp?e zUEGh#G}ap38>X2WanbD81vz}d_Ltn0r8nLp@P|5RDljK%h;;GVIUD4}7^VLTw z`zgV@#KmN9t46FYMW=ZVWm3r5^PoBx2xf}WEulfa^OAvB+-D+zX=WvTQ~S|w$c5r*g_P$kn%bFMwb6``yO z%sMx94HG`9UpkqV#i3hz245~qf0UXGB=KJiv>l-68smDafymngj;!3 z;zC88r|m2C<^A$RAjvoh<>%8U_Aq*0DGQra9jnveKKTa_w`SBz|8aoCFGp-S0Ma@o*6cjC(RlHGip zPqLkaYd&9`nWed!$HXcvt>uXPU!raHQVdaQEPQ8_`bTdwyy@kdW0M

  • 3V(j5>xU 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 z�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 literal 0 HcmV?d00001 diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/pic3.jpg b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/pic3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..635ff4f70f818a2441d17a3fcdc02c0989147e8d GIT binary patch literal 325803 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%0A?t8Mc@mHVke;|Y7eBRGfd)s!Q1Iqr9bzW)F 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 z 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 literal 0 HcmV?d00001 diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/pic4.jpg b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/pic4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..330f8bc6e522d31a3a2aca747b7583386e9a7416 GIT binary patch literal 175408 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 z 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 J_bN@$%XbiYu@F6R9jw-Ed!? zd$N9qw-2Vhp3wB+X`>U5EKhfrh#Dp0Z4e{hdN(aSD&-? z3jeXPhD`ygvug~qAg^K0cc>FRo=_p{0t^jW+7T>awW^)+i>Yxx?ibUyl=|a%4dfqm zlaFWpW4_n3o~w{EWXuHrNQ+pe>sn9siEgl2Fm@N=xGGwKPHS#QWHZ>QMJNVGWctao zP`YtUysi$~v)r5ACO&B1ePCz~OVoB?Wm~EJUdLm88(|vZbM=U;f)UPD&dS;S7ik=) zszh{-n1(Ua70mr$k1Q4{s|`m_bext3krPH!{?dNkqepK$&{f}_wJ1jVwOkuR!k<2G zd0tl7tWQe;xOSy4;BoI#8k?7&`UMDUnBSG*MiMiPi8bar%q-IO&;Ob@I;~w7YJD6u zlm1ro+WT948LIGqgsde8ggdS>@6p zL+fBx7lkOqxD;3Sm3UJG5zT3&1N&|I(pQ+ZW#9WlO*`Q{x`sC1BM^;2BJXJz?4<56 zYdCUXJ58~zt<<#2>-LL-X{lExysB?ZdOsf_fq0zw$bK}Dha(?Zc+SRyA6bz}RwtR3 zIY;)UI^Ihwk_lalhDD9xJ5fP+z27*bGc?-Zy(S3jh zZ%m&BUt{BMH2J>lHLzeI(O2dyG!L;C+MqQ1i|OmpXHFApUm{9H%t@a^g(`AK7*Ut_ z55!V)&c4c~b;@G=cTUGuPIj5~hCPT#6^h2{I>YyI*7C7&T{~CX^Lk`5V(rR^@(KC) zWfRh(=}@*oWv6GIC#-Z|dP?l%s6TX`Wg_$SA4^K?ZdZ=n0rGcWoh2=0>2GmMA^B0>|eb3C3|-1iDI5e^E4?5yHJHFaTwbWV?~VPr<+RL{ zI*n4xs_j$N=O?x0y}&}C3OhH_pIx5>)~TXv(cE}s2gx)oA`l87{Fz5iSwYk)AUvw$ zZ8qY5-%hVi>FaAZdt%|T+TXRn)@k(MEIzQnOK!W5c+1YPV5>r7_j;fb8yn#0ZS4IF zelg2^udQY8;I+K3V=Zo|<=JSU{$;;X;>6BiKT4+(lVoOQ=UrPkn%cME8R_`wa2NwR zRTY-W!fKftTRyKrd=FA>(H{i2Pbq%sEeU={qw1MK-_~VJL1s6D;{G4+*5@DT`mhm zU#a7ASIqsYjAgYF)e9Rs%GabLL#e!%CV_eDUwYa%<(*0WvzC?-*EC8v9HfOUkew8Z4i<=WN{feqwUBsyw^tgt_uM z&u0ZmP1$!jo%uIMF9f`oDzdvU&T_9TZaVKlJLtQeyfV65C--_lYL8D0A1YU5C>fcj zMfxCbRVwLzpyLTsFilGfC&td1n`%RjubJQ2Zf&#Bwqffx`%4B%gVZA?HfVkKn%<$N zTV8Za#_~bHf5mRV$|P&J*x2AAsn7CN`ab@6^~#!yc>98NtFW+Cgpuk`;I*<==DRwe z2!K1*yS+&(_T|H~f^;bb4$++P!oW)`Y{Y$6yW6N&BHqm%keNwx#)g&JIEQnleHnvz ze^Khvx^WEO-!7KmJUw+d7iUC`wv}{!Ev2yTvNvI~VAoifZul-k$E6j3mUBotAvxsj zg9&J^Sqfuvfe2i|u3sZx(SF-i%l${|OyNEaZ<(H@EvORxn^Ly8`j;F$QH5%ptX!{O3T$22wmYaQdsL%7Rddi8!TnG7F#mThh?gan zy=VNsg~IB6o`F2i9pY-GUYOBP+h=4aPG`zuXlgXm0cSvGhT7*{TS%hoU-zv>%J?X! z)kQ@jPkZg9jNuTQ>^89D_Q}_F=r1PA(mSZ?x(4S!(6{Lqlefu<^_Ndc>(U;{lMRJs z1{!E=`g(ISe4ZfFA~u($IW$ov+b@1>dzmwueNc8B{B9Mr#<^BfQs^Q&t&?jf%Ra8h zU&`Snkz}TzA)DHOqF+z*xhtB~uKuhZMQewl_fziGqG`HQk~9_^Sfrwa@M-CM&O2qr zY*4;mhY0Z_{Pc?L>#(^xs zWdC7ty6|S*e$!yxPUzO3qX7MCENUq?*Gu_Etx$YflD+;Dm8RIuAPd2lh$IB+^r zE^(;}tt~XtE`BzGkF5kQqXZI58d#O9#9?~i5Ef4dWpRDQkTP~GE_^qr3 z9cqgvadWu&YG@Br%{f?IXHjb9l_gpaHgZcc{&^~_-I>?0tJ9{goL+p5>xuiq+EOf^ zNWC$ofah!G^mxMQbr~jlntqz;nGZK4ElgEq~4fZq_8Yt|Ti`H{y zah~zTqM6UY(+e&>ZbNIOVMQh1JQNn2rc$!*tvk_AhWzbZ7O#+Hz}@G&ezmm(R2tv=sfi$X%jaqSuCX84GO|lv;B6wOIytWu0>^CFy5@ z_=YuCYaas?pQI~Le(lr!G~er27<=BfhcVA<&@HLLcQRj0)>bC9Cwkd8to-XEifz$l6I}aRkgy3gU*olqN3YNd0HfooP_F2x-*zm` zG50*b_pZv+m8H;qUk9e6q`aNu&1W;@pvtPQ6_kZq9J#!@)WK!XXpqxNAYCy~AhzOQ z*cx=9Y`4?9k2S@zUF+jL@bLYyNQCu3I8OzmxuhzVJ(lq`MfBoP){8De&`EMQn{YihSsKK(B zz*#BJ&IZ17F9FFcRF&!=5%n%EX?#U#!EE$sp6kMM$)l2SZQfH;yqlSK7n}1% zk&G`@J1nQFe*gzTFn3gF#-r)*I1_8-2JO!)yp4N_of%@)2%HxA6JOWS%jY&JAO1Q#Ha^O4gN@~+{f~Ha@X!j&0R2TU4{7jN`rr33Kjv@M z>=F|Y?s%-(*RPK<6>huoOJ1(O5M&fQJ{GxbQtoPVPaaXojUMwJulK#Rup_0jH6=y& zT>N5wsTy(pVRXG58tpWR2`7t4_r#v%+q15AaqDDQpGvuO(_>cCF~&Ar_; z>9i1_%s}jFSQsbLl*Ca(%U>667K^x+^e8QuGFxr#b{b&@oBQr{PSjI;lcX_8wegq~ zC3LIZ-Ly^%Losfhe1^{7_W&2hrX7pX$=Trc`5@W)7gIZsFX^J0rN9vQx7@r3eUjP^ z8(%h(N)ckCHo; zlK$Qxa9oGo&e!TOwmyAypTe+wKAa`2_$AH!`KFd;1CIwdq;QAZmfd=!;%E?j!!oW! zZspOi7bEoJ2t#w_@-L?Kzx0kKR;gdd+OZ5wwl3uz?Kf6jE0ynb+`a4@ zFLIR_?F@3j*}}4GDp6_*nw4YPBIAxJobfg+mL-xh*N#Ao1aKAY;uyJuO;*VSwoR2-l6Y-$WE-hpGA@*{9B7 z`d*ym{b53yVXef*dcGmss|$oKA;LWM_O%JW15pmf{o>Ux5^bQ{O&4GfebAc^nGA=T zquz)r(Lo9T3`WToz>HhhI#Y+!gysPZj4X%=aDKb1>cPa&fg@rzkG}T{85B_rzeo47 zhy8O=1lqz!<><4Gp^l3M_LdiXOq}d8 zSs#<`EL00IieCPvZNe!e0@lKhPD}vK+PA&BJlxZe`523Q%13=PYE8ccX`h++2ZCc0%>-}jMPirVf1B6YFS74 z$N)Qs`l7x0!i#m46rr?yU&a@c@Cht?`mJ%bX`M9-6B$4!--#?2$4wMJ+3FVg-fi!c zW?hqj4|c3IdEjuxVVwH8${2b(__i>ZdL>_o0vWkLln^9$4X2Tq6KOJE#M?sHz|w8( zQQ^{}ASpGxj74E_++Bm3A*sH1u>zDwls19^P>Z1POakkEBWB|=qJF-SPBh@p76>NP zihzXjK^+euLdlD@10J{;wbB5%bXF8rUmVW`Buen0Ho>QcT#nJ0rIH#PuaF6-jSW*n z7{(N(y)^3d$Y+a!En>BXh$pFTC^q;$;YSU_2&$Fulx)<-${JYSR}2Ifz+r&IUEc(h z?+&xg)`lkr@RbaJV1gfl8nu8d-Xs}~0aTj4nsv1=1Oaa-4*f%`s42u$#2^Yo zbcO+e4DeJMh@FBH!U>7lydvXXVTvK_HKbPjeSNe(`bTs*h*K-yi)bh`7@2JJd)zHJ z83*ueb)rX$GnO)jYX+GC=Rpf-3QL%+b=4w>Hv5pEZ9>HrK=g8aOpAbLUNwM^qS}lp zIJ}RRbru?6@m-L>```qQMS!%2tpyMSg4~u^BV8%h!S>(Mp?i|9B=Z?T3Ny=ztY8bO z2Scs@N}j@jXm26)CMVHLw~Ijd{ujS{Y4O#S@gkrfL(;4a5}#{{s7#QYp@&HjfQ084 zUjm@LA8~r>Vc9xWG)47-4P)0wFDU1LD^aq(HVRb>>vLoJO`?~nzPH-bW?p7{9(!%f zU$~SVbSXzU_+60V(b(GWe~7tmX$;Y)n*d+&9~~MHmVOPmZ2HY^#Ko&SoN9rIwa^(& z+$7bQ>*Qc193hM2PA!b=_J~_D*w1K{Oh(a*dhVirF=bZ_9_xM^KK`_MsKH!TuWpmo zro+3w_W(aYZUKbEyRmU_)DptDklYv{Pb;)59^_Db4-bDY8=& z(W7+a!xz3vb}p#YfSGRgsh2ApX!=s*_quEBek~E9EbFRav;s$>QZ6iK*?ExopFTca zgK91QKYjdiiSmA2cJ7UxVuz~>bJbhIV67M&%+xNzGloFq%ik)YBCt_GgI_ZIRSbgk zr-u5K*CN)0+S{wlgMmp?cZwT`e7>$DCsO`~_u+=^_?JL`XDPZ%ux5dqQ~axtq@@~6 z@TXb5N>THziQ#bhcAfvJxsQDBO})t1=#tz|lRv#D5i}hCpPKsuWvdpZd#K9mAHC^N@_EnD!(%+u}St@u*@An2?*C)r=%MpSq)pN z5(8u{)nj}UoY~@XQDHsma)>shF(!H(Tqd4^@&8g>~O#!}Tvpdv+0(@8(5&?pxGrK~v+f z5ivwgL>`jWKyhv3HGqZ_R^U7w=}0*G`F32fA2^1@D7Fj)1 z?{2|FUj7>$A^GgDtu{D*F->#shjxcPv3oANB}bt4rzZRmXwt0ezi*ayI{Ua=HT1gl zFDCXrk8^Cl!%Dt`nA*>#_y?{2EAj6D-UX4W;YZT;=>uEx1|Fn$Xy)WNZjLM3y&bDw z)prD)&lI2JT9zKU+99&okFRvuaJN0PFk*ItOUFtk9CU5rNl?REBjM@eH8s95n}|7l zI?&h**0P(C zR{)8)<(cybEXfpcpL^Zel;CMJJ5tPE9?M0{BcJ%QnO}UBS3aQ2oBL^uEE{%zN*LGO z1)AeYm(5gn0;l=9Z$M$*EBXHcrA$amRhLdt(IWsrqs$EkgY=fZX`#b1Y_Me>fI9r57Lw&&n9|nC*z>>MbgL zlOziuH;`43l(Y{inBXooUe2!oa-(4}xBvh`n3%k4(%KW#ns$?8ZeFC5Ht*MdbsbKt zdJHHvVVj7E-*Hnv0lWqSX;bLSx4cj&r1?6GC=tgvB?Sss6O zbn;kxCh88dSX0S+f}}-C2vPXz_cg*JAg98fJ8#^-ayg`SnLbA2)o{tR&Q|?OiZhX^ z7i=}}aH8jgOjUd*bhnWA^Nh`+{hy>g80H3^E4L<&ZhN|dPu~ztR|0cQ$;@a;2bI%! z8hhYmZLhmF$DmcY>#|iIqHwCm@7rcjHT#|x@S#w%kg>e=t#}UOPanvA|KWSsxz2do zzo}vmw;QXO$T`qlb3M@X5f$U#1F z`$emf&|A_zK1)+uXLoOwm!~LsSOv1fEQdf=H67d`94+BnK_O}GthyFOZb+!9{S7HQ|`jAtNEq`wc1fIVagERJn`Dyn+ zN+Clc|MmFy%utSC%U0pcPKEO@G4r3@s|WY(rZlJb9qhO*kEdjiX(Zz8^^46{b$iQRa zdWtccW!~pwZTbn-wak5EU|toPh6(c*B(E!+o5u3p(6#zU4{*&ny-)PRP@xD;TW6u- zNvqg5yaM|jpyo7(IK-VaN5^Hy!bhXN5-$_pZ(7@YvVkiEU%z?%1_Q3*!L~5Rq7X21 zf*<$Zr#aHD-$CLz5qM4``E&Ew;l;!fpXzpUtk zVR7L)zUA!JsYL0CDwh?@fV-(N-HVVXeltCGEf6;lT$)xLQ}0b@211KiYdlORR&o#u z0%Ht{$hb+pfztx5ohRP@EP+S72S4FmgTI(qsw0{vx+5NL^z;V$Z}(4kxbBmK9aarL zZ*m1(>S&Ce10opyaFuqpbYWo;Hqem2hv(Up5Bw9m`KBTt&f90Ty>k!=&t^$ z7h398x_zo_m54mN7co*Dnln;eur$5P_{C&zMIxaHq#kg`>ffc+(ttgRM?v!JPkt+@ zu-om8{dpKA1k^9shmN@(5jQP1v!ar^bkWuLwQ3rX18-HV@@Zu)tcb7Etu)EdfhdU9?R zah9`xj5wagwyb_!^B`4>P)96k7J=`U?sdi@jdV9Go;5-q)jAmUrwp;aQO=2X-MvZQ z-CR?7w5c*1m@{)4*iSnO4Fr#f?&nK%HHYI`ip+cqFEfHd4xgZgV#tM}Uxq@n7>QqjjX;B$}-lHG9dXt37@T?7BW# zwyCwLsn#QU6e2|7d^*zGyTfDXl@Bs>BnJZOuB5wXzUKrXiJbBSf2t*v?&6-vw@6`~ zm`Frwsjw=SE%rrJJtKvZRgUDn<4kz>#+URRJ4O8&5iJ$a66G5BE$fe_p%3_`APx!l z<0E9!`^g3r#0yi&o)yHN14-Xi_2(t0A9^4gPSl`c-6^^1k zS413}YIE=>sHs*&#;Ep8JgYeHxYH$Jte;j?IXe1I6{)YkCRjq#qG?ZLjWOUb(y{g4 ztEg%rdal+Wjwp`5)&EA|Nj}sdjbsXm6>x@jVWDb-is+0@EfY==wpzmNfMk-qAvYL= zmj@gX8jeIH(5~WJ0kVm#Kb7s!Xs->Ibrb{97@Spdghor*<;X(DcIT@s0JFtDWyg+E zipHzlT8ob|t)EL&O7Alm62e&&7codX+8b%CET|_w@jx;tDg$qIggTRGT|8Feg3(?~w z#4HHvL4Y$>9#&s}gsO(scxmx6+S8BAA&ywJ?`{x4?=VPxb>eo=O_Tz%SUY=_TIhBB z>A($^aK~>=do>onhi>!v04a5x*yw}sXsvt?K+@*%)3SBXVKl!Xy01}35LIW@V{sm^ zLBNB3_>`Q`$ZWIPrpb7xlltD2dJn{Mk>$EnL`t`V{`=It1}nR>_aT-$CLKoGF}6 z#en}V*CBC5*h1Q_w$&SQiz|py8+|iU@Wb807j34uza_A!R-EoerKII8++4@;doaMCZ zxnde?ku~7Y4fMMxH`yyFyB`RVXI(_D)!yC*m67RLpOQOgepo4lSL~#}6|-!Lx1OW; z@NB>HTL^Es2gN#`P;s@PE03r`gpm3v0Y=L4Kp+#1rEda(8#L5$-m6_U*O9Aa{~ZO` zeUW1JypW?*3H<}*ZcAzNWuz^)ZPkQID2L5N zhr8|hz{aFA^Z2xw<)k8gu1i!&RM)cny_Shc$+c%Q@3;2=iG(9OP$!-dQXCm&U4{b- z5-g>ys#Z@6hm??NmY1=TdX_>pKmL5ZC!b|5!c3m01l-kQT(CP>XY{x{8;d9>l(fia zw3+RZ4`gZ0HBb|Augg98gJTLWW`7%h-qv?^y98Bj;OG!@xTJ0Tez>k}?Cz!9v&oJ& zZ3fG(Vyr7ot$VsexUE=VR*2p3vcsoYGZfu@17$ZWu_qnafufout|(eiPIR93^1>;* zlN;@i>-*9&E3jsAG3t$Fy9%t#N|A4kE#=YY?PEVr92_|U&ccwfj(`2Dyrv!&jmz-Ak;_w;2;8zk#_kBV@VPeSOeb0G5y1b8$Rr&#v#zfYdpSu~7yIq#+7RzAm(C(!E+#1Swmb z22r%m1IPui)O&^fxCZ^4O6@%Yj__~{{*HhX;w48NP}GbZ%rZzX2v`e!rp~=ajb}Z3 zO7DAKW#|5UeDb|)pe#O}AbG$k)DP>};K7N2Smz32WU*QUdCJ4zeleYC1w0O|$BqFT zy33l|*R_+Y*tI_qGZMe}WJf%zU;9J&ok_1GeOmqBN;Cn~VM-US=ysDYfUH$@3+L)U ziAKY!%2WT>k9l!V9VjX?4In=MVj2k>y#9;n5;5Z3+M1 zz2mLAr$7&QAD|cX2;Z-!0?YXq-2mkwAh7KhQ^M}Qit~ z{a=TMqnZ;klgg37E{T0(DRVY(8RwGv4ZAp4qTJu!F||=Xe~?xv-ZN=o7{6UcX}NAj z{~@I8-p{bk&`TZC%dlTehB`p#r0K)q`9G7LH8&osjn!3sJM{3~5EByOk=_0<8vST> zy1iNI_f}zemGAw3ZHCmIO9)52OR2ohs${RUmV(%NUnWdNCBKXCoZ+TA=mCr6z^7(U zR1ekZAF^^!Y~|b!Oaf#{&>JnTC3(2};aMG~oi2tc8EWK86A@wIvt4}C2g#Ar{GQS# z{dicSE8b1S=Sgz!gUwmK87>{fK*h*_XW?>`T_5PXx74Uf0^3URU02+~_J(Od>ECmo zEEOW(MIz{jEI^x6L;%Zh(>VKgz+8<*P$bV~Y+=^YWws6W_5b1QO{3Y`-@pH!p7yj= z+Nz?II;E7Tc^-ROa|8_{L{LKzF%L0Sd)iY|6s1B?v_X(a6p48_=8~dj5<^kc5UQq@ z^1b)>x7PoEuiw-A!QLy$qpa+#&)(N{y+5xPI;JwGU3tF#Y$h&8$JAa1DH|ZRr&3>j z+4}p)0Bq4}p`a;7?wNh0SJBaeVAT2kC2iH+aD=G1FJq>AmLGuHOaCl7G5GEJ^qJXV z75Umt+IJ}EpX>*wD`|nlQ`hRhK(UW@pVa)i?BmVi6^pwWeM+4vpG^8ry7ZQDHQS1tZUy)4b8S{zejcZ{xOVi= zigQ|aThMXh+RMX&Xbq#`fPjDpyLTmLO}@taZan6%rhljC@%y;@JziG7djGO=qMPWK zVJZIOF)*@I>jjDtwKvk6agnF0UqEvB@$I!s@nVM+BX*28ReFY?-)^D zx#}Gg+;&0qmypCa(WcDO@XGfH;t+XWXsDuyJTK4K4R2AYyGYNq^s^1A#eL`BD=R=A zHxdSr%rOU7y^XBasPx|G7)R2A>z{c>t=NwcgD-l2lE0KTMZag`4&bVgwVa3awN{En zc*JmRq;OKE*s==H;TXBSfjD^9t~%N*D;wN=C;W1hz*OA<7V%-mFkjw(n#SY4IP}p2 z#_5|b*A>1*kMkHyP>Sr>qG4)p&m_?viC~ZF-|!{&VCH9q*2vx zj^f--nVZ6xh_3QdM2^aeYM|Fgiq_ccVtf8Ams+Y~?hikhX@0MK)Yy9CRwx`AS!3Ke zkXQW8fW@q@9w&_(PH9*n%tGtEY_dIur5xPG>VA?T;;2`fi$yksMC1fDTHfDtwICz3 zw>kMzz`6S$axuZ<@@pPg+B72RhUdGtlIozI4+>m87VkVQ{UG};%3+|a`W$oUbd`ai z!c(QVsH(CzccW_nmC`$@ONaliG{}YKe(ep@)|*kAW}n;N7Z|Z;OJ2D3rv9HQNYDKu zk86hJJi4(jgH%VKav!rQugo)0S*4uyyRE_Vhq}StmkWbuOe<6@juo~pF>3|B53o(O z#){I_#4djgqB1?lPlT0u++1O`Eh#^d&8VAN69E)-SlBq;r8(4PD02msqm6v2R#A_k z5?EQaUhc~RIOXtgJFs@(VTi`-2mPM(lV_-OdVW!G4ggRd>y|jln1Wa+g&I!x56&8Wn1!&m{fQjE zjbW}mG4r>c*zpdBXdA_U{`UMZMacL&_GNzGBGL8pR6=6Rl~)7Kit}Rk9v?t&>iUst zmWp(@yYlL8Y!w*RywrLWo*2RQx!Y3-{+n8L?DHUbQ*A=+?T05!GrRrjw&my(I2bs%sF7_30WVP zhBdt>?;JaJPp-SpH3HkfN3>Z~kOKGD#i5gVPD|W`0h&|XJ0n^_uhz)=XAA$1AsFE9 zwbL8_&N+sj)pi)l!bl~hCheM@H?_a+-*RgOdV%LM_d1lB<*Tx7oGyBuPba@_y{qYK zo+Q*F*!Bi#q&2|A=d>V9r{WBbCAjSG4zhYOpE<_stJt%P#uV%M|8;7 zsqDGqen5wAwF!;Xs_N9eKu@ zlF)s7eH@qO%jFHW^6FnUkBo}x0)MQ~syeM&CdVI~n`^ukJ`V1;IOdYNiLF$8^3x1; z1=^Byg_bA#<4GeqiZ(;(7Pb>2_3T3bbIN)-xnS#TNb6x^b==>(<6rj(-eVzmosmu_ zEZIKn=ER30$W(80R*Y;Ms-CVoWc{eqor%#y#eXaBQ0HV?{|2iOYjUSzaSiOlA)_J- zK~+EUQee2&e@;;vHS-(%oPWuH_6f3#xH|KqxQK;M4V4!aJ%{V6UZt#XwR$Lj&3>*0_idA) zuWP@s4WOVh8SCRts;_&}_8m=_m05R+`Z-SZbiO+8JASam0Myl0zx-#$Q&x$qP`moY zQf!XZ5^nWSkup|;#WxQtSUFZRb{d--MR`ASsB`wES$3X1tnT8P?3$AALb|dE*DvHS zF6hU{!4g83gioxOMlPf)X8dkH0Xa` ze%$U;T^9J!-QBR{u-`B06=)@_E%OdL-n(#mx_@UvdGBvGDLKN@v*5kOQuxCGcaoKu zo2pi;h3v-h*VT)WaM{3DwS_uOLPvZ$J@{%Fy6ia*&z&R#^vbvQugW_tZ;3yej27hA zjrY9jHXUlM{VX)O6}!z`CPwpFTHK-!G$o~Zew@osRy?qAb!H2lac9~t!_n8#QlDP! z*ewl@Jr&hTei84f;&24s-ib9HYd2^_XAS0+idi`Mx|qilSHVNjcfX9U&HEpIa$w%l zebug+>Ev5^Yr}WkK_M02QJ-0#{=RBA8~ZGg#{|b)g50VpQjCbLIzT$ z&9aTkTQY&tJ>OJF|%Rok&AP2dV%h)3^)GE!oyX++c?kfsB0~$zn$OvWq4!h ziLt*V{&8xHiLhKnaeu)!WjzKEuudkuI%B%#Bbovqur@x5gCDo`kp;tWx!NvsmJ4bftQ5j40^uq&HJPqE&9?)u%&O$;48-@1)`XD(U2F)mz!#U`NQFYLq? zF%SyK;)9rs>D{y0!^U4YzX#kPI5n?K$y(egaIg=3!t7qEIx^9~w>JZmP3I=FYllK# zq63hMqmm`*CVH`Pgr2zLP>p6iq0RI)`D)`My`tjjSy(B)djOEkCmQTarrD*q`}k!X z4n25q-z+CNyD9WIuH>cpRQT%F*wKfuCpgZ{!jkCAYL^Qo7k8bVMV6T?Ssr(P*6Nlq zOz{~3d>hL;+x42RJhc=5Qtgk?lmLE_nY=v1L+huCN}!z1o@Qfv^lpRDqW6;exBnm6 z^1oi3ky&XJ^S{jx+_@1R89n{V)LWH?#etgxiLC&9%dq`#M>16Bb#)bgwOOIZoJ06++#ug z;UybS5y2^!l6tU(q)glwU?tK;x2ko?zL!IQ$87ZKsk}Pm3?cw)w8)0ZsN%AVmB_G= zE?Gz^4&R;qLlE32f6<~0k6DMoI&`;tJZ*(LxC3q5yvvMWM$CD6nOGRqrwjr*OMw|O zx#1#N+9RSr_Fcj97tI3M1wLa?L6Hd`@*@h4YF!%3G%aOJlQVkJFr;)Y+(%MSm}F`l zkwLq`2OR9AV^Qfud2pueV*Av_qi#0e2Hjxhy$SZp+va={28ZcSLg5gsK% zlsfKSq&1SN(}%KTxE_U}@r7`^FN5p{CYjm70LT$q zfbtyb&FCx5z@uAlAFd`_Cspghq^aVkoCqZT9{-CtPQL)7N0Kz`qUGMJ9#CwJm$2RH z;TfGI3M;52?cg0o&T zW#@?9jvFF5y4Jt|OLrQ8B(z2I3nVRu7f}p;ZpPPsU!I%!q8eJY#+l}D${JTYE3*ci z?2pVZU+e7C?=81UeRlc;Ccsu2kHq`+wZ5j*+)7*T^$4+SejOgIpFfRVgjnXcCMCbu zHkyeoZbxh}hgTfzPI3`5bvP$?Cd(vy` zO;h{fdQnhV_+>vIR-Klfj^!YKt$zNxo4D>|g?Fmzqe)zsa%2qJXQ7`L-Nm14u#v|R z`Vg%ZfltaCjMtF)G-DPoc5dSMUMlnTe^uexJs*5NGnM|iBisI^H_HoL|Clk=mKFW7 z1_`Lbv$ubV4fU6BXMvMyUQ}o1qb~5osDm7Nczl-pYSu)LiO=Iv32?gxM{ZoZe)#o~ zy9}+cKeoy;KZ+^$RbJ*1Jk!4McH1ZhE?XpMy#LDj2Lb&ev_{@hpq z-!#gD919qLciw+S(67-^zRQn_YdOr*g3Rt`G;h22|LfV4mAF)iVY>(*+0v)3GM(Q3 z&+_*h^+{TurbmP94BhEXHJ_$t?rKf?SAwIgtZNDM^2WwB1D+0j#)ve^Zirc@o{KKi zDeZ}Y^gUW4L8lE>Z)3RW3#&qne*8t%ItpImOXI_bZjV@QaFi?YdcyPSiUm=HLI^eF zt0&ushn?X!?O3K`p+$haS(A`^U|^^uJou&&U+?s1gQ@CsLTBekcalMs?4 zk<)J8^Heqw6FjQTZuVl{2y#*Fv>-MxlDr0ejAR8Sv#PwRJS)^F`u8G^H5+vP9Z2bN ze!^H;_cISGX81uG#%L{w==I&DooKT2Zr9`K6JJ7I{vCm?8s()9_KYy=Pb+$RYf0_1 zh`^x{bISYIJ?f-yUVO$b`eD9uw+(GVG%rf7Dy(%zuhJcPj9F69l77wCh27%Nk={2K zt@P3wupDNsKeEx43D~AXS4T)fSk6eTZz13m$F?go0r?`Zh3CIVLP7>u)FANS#-q^C z#)}$Zf&q8UV)Cosk49eEzV73$lcR6!m~BYt^;Htu|?C>i@m^D<2v1u6=m#O;g-Bw~eOK_c!AZ`~7g)q~A0KO8IjtGltN%vt@ujTi zz0o=QRpAf3RtDc#5?&Y@p|8>{LcuE*9>vk#=j2}W>P)cWp4?ajra|W>NvHX4Z@Ksg z{qPk=-7EgD2;~12?wM7Q{do2X4VBy3R%CI~b-L|;Ko~C*+60?57f{YpG37f3*N;I= zTUJ8L#ndyu|IUZAVHCdXCdH5^Ds8@MLBK#<`hwu|68a*voGSdEQ*rqhZMQqQlar!4 z6iEL3Pcxf6`FFU7$+T(470v?b;%n$7n_8zUD|@zNnl}KV0vJkTI)Z0VARP79m>u@c zkQYq|O%ifbihu7%f&Ca1Lhb5s4_PNSB?d3Cyqv;NSIM}%5||P2Oi}Dp|2cc2=S&y6 z=>j7&Db|}#6}(1UTgD}1OlE_mLSUdV{-80ccb)i16f9`wxm3h8GGPbcx4~SbybtBze%-bC> z8E218f4os;CGO^S!*4wZs5Zi(0svIiN*GO=tGxrSu*-Ar9?C?&S8Xqd>Qg}m1HTFk zV^^om(MrKBi!C{@qh5@Uz7vSLv{*PrfudnrRkwOt7qAP## z$NP}i%`o=uFmwg>dpKp?PR=HySAQ>W*YMp}BVibr2$Gcr9C*w##4k8X6`m%Y(JxMw zlKGb9CJFN?%Mm9szTpE0&vbUF`~WPa>N{Un2lVCco$v&&oBYc2t)rY={JrzYD;oNZ zAmL)(ol?=8qGM=v=XJ`8@_wpm>eGJjV4-6PU^o!Da{SjtvE+dX4dul8%tO9da-k)8#AHkj zDO2e~ppDKlh<^Qc8D!9KhFUdoqbmsFojs06Yybwz($WM7j$sIv5{fvkLfR2uo1@o7x9)$q`uAT<=Pr8efPB4rFyx> z0SlTzI(x9Wu{u3Q>gRqV!W_e5yXJbLDvR}4vKh_;VCUe??0kb3~FUYp*+Qk?C_%1X~QkstB4}!I+kcpBZ;I%Ss zRSII{tP#SGcAdtV`=bu^%s&YkEuENR+g{el?a&njM7AYt+k(M%Niz&t!`?S(@Vkn( zf7Kb+x&vS30Iok>iMUhYq$hR27uE1!S}m>oGW zpXt4DNn=Rd0ey7oSm3I=sMjQ2-E-JX?q2hN>%5dzQKgO68I0m5@8b=dhu{3))sB?| z7|cbabxt4Mk_DpelBH}v;-b>9HYgaD%E#Yx*-1SPr(nEzXha{W5_q<^4=$gXaBx(R z%C+*f7@UgeHLL;6us@(5+vMu5X_X#X=$Kx|y5){0rq&4La0&Cou?}c9mnsK619JsF z{jnBs`U~9&=nrQ~z;Dy^2d0jos zH(l-bA~+qB=j*Vf_hyqe=6$QLJ$X1Y$CM%-OEJaK=G<;PcteAvi=xBLR6?{JZM)+C ziP(!>pNiNYY-@^#8SUD8$3@kIV0plCbV$9OL|zP9|+Ej`SQ3W$(Wm zTg0bk^cb{6pVh=u4!FBIbWuB5?|05?p8pU~47CZz$}$AGDKiW^@{6?zicffWu?-_y z8T{;BwBXs{HX^dDf64*F=cPbyGZWgqct?!)t6hW3Z*t*q|63@ld8%l7&8Mp?+!8ge zlH+kgw@?Gwo&reD^bPu>jrGEz3CpCzR?4}j+Azdq68V+WN3W78Ca=exhr?w>wmLoE zwxQPNg<>+Yd+J{I-r2e(V!)bY-`B>`L(FXAgR%3uaX!Kzhx)$P;v0srz0ICWpxo$f zqsz}4%>2PSTSq1Y*^8l>UK>@T4NVv|{Ycq^wL#M`l=Z4pVO$b!cimk5wRu)qj2KtX z!;fyAP4I?+H#N-5!tSfo8|8U#-y`lJixU{>dl{@GiLmjT0|+6n;`=5?b6T&brb4;9 zFOQ(oc&mQUP=-a;_g-#&{B8N7 zK{9A-(NL$Jt`Vs)WIgRzqH^SS!$Se7*Aq-* z0a{j0q93clFf_S#uXc@szIqFH~tU1HAIwBhK>77czaY$7;M7k=`3=FcPf?_S6( zjc@c#&K6NFYbJiREfMj%l|R7%IlA9sPlvF2lrfS z6{c0otAKO~iUj9Y`rQPfiAHMzF(rX^4QVUzW;hP?>OUrbur9AA`YuFCe?qQ}O7!4XnHII&6)>g+B@5B7NTw0URXLvYwZsvN@UZ`!3i+@h4Uj9$aznGd zW?Eev7?|LB^4Iu@H~)xx9x0oY zUVDjClwj&-TnycQ<%cmK?*YiF(&56tFm8uYj`Cy+A+5&s@&<}u)P7rC>5=lGgEvZU zD)IN#c>6;~ez~VIN%7f;`oi&>RePNtX~((v+N%kp!d(r1HDluq8>z4jWLzOAeCFr_&8 z5K{n7zfskgBzrF((Wv&Q{4s765%Hrwk4R6?)sT5sU?s6QD?2%vU9^0Yce+pQi}^Ty zeakc1vfZP|7eUJ6w zltaSxUfI$t%ON3q0>#GtonOo|W0tG-#KUjj6IBp71G8Ge<+Wqsa>Jnw$gySCy5ysR znV5AmIVT1^*ilY8==4G#>w>k#O7--FsElRD6L8x5G~x>Ka@okk?dkjNg%Ya)L{j!*g_1!qO*S_)NHX^mnF>%4TK_zuS0; zljp*qC8k_s?aG9%bP@-uI5qcjke2TFVM<_y+LO9Z3twHPos;2K;Yyo&!Z8Zfz7`w< z(q!R^UH&NWkZ87XV?RqUxo>ef6~(PS#*h3<%L|q%go=v>vu9AOS(~Zfk78Um#>$hb zsuP5c-@MH0dne&uRPEsFq5D|XwnnW+K>ljlLz*xyF7zkC;h!1-VZBaU6)Tb2N#PHK zO@w5)BwSYq8op=?7B79AT(SesxiNQuO0cy$nZidM!L=(c=g}pbv*mh1JtuX>>A__i zn+9(46{k_^nNuZKctdL6TW!(CnFTG+;&UJ(Tu=06o&EzY_tKr5l=ab7#Q5K?db>0lS?ZD`d*bp;A*2wI>O}8TO`zMQmpxi$ zPQ_mp*q|h7+zRu&S)ULW=_P8mH1Or}t%cde_X*iIT7!!6~tRWyDHsX{vJg@-9RbbRaLI6g;0xG zAWlJr>cI#;HzO{gE|-*LNxk$cbJ^jtLWXu`U*Viim10d==I5oI2yFxU=*fr?rF*hk zxy+oGHvLh^w7$9r&9wkmoszgZg{go2v!nj;?|cyilPkO`#qKcvN0r5 z@E>taQ%uwva;1NqV=iay3k-RteMyy1YG;=Im=NH7^i5hh3uIp#j zP>6j0Id$-{Qulfuc5}+&$7kPdVJFJm6x+&A!xv_xIYX_)D$n%^46>OLo^s`hrCGd` z+l(q9r@{<1K_1$xZH#>0{qFmBA=3Mtd+Q0neDx>K7<6_5{6M*bhDW0pd*nS8t(*+CQnLCb(|E6J2Y%Zz zgLDgAMJYT!5s>NN4W!wL3*YLiSy}=1rxaH?__kO`W!(qg{+@8%%!3TO`y&2XCR6hL zCDHc(lI;{zW(@A%zyF{ijOW4y?xm3g?{LfMdTd9H5K38ij|vNh>|?(Twv-|NF>$)3 zeG355dZ&49?6uF>Jo(k!d~|zsAwVv(hm{+o@gfA}H=^Luzha@C@eipGQQh`V@10`UlOB!cji&2oJ%-ip%B7oj;;M#2ai&GD%!hA@Lw7GD(#{_^ ziAl^YCG0r5%-e2;2Jm;+*@RP}>SG%73C7hOo*!ij{8`25zf_@bn{%rbcBfZQnX<(s z3$&{D8@6MXGxT1A7Y^h713ZVz6AED0s zJlyhaPShT3#V+Mw%6-#wt(>QvF}~J48OfhlBXFoJ@9N7rQzcYubJ6IAsPa>dq=ale zzja7+B(DlCAvvnNs$KQ~K#qWKv4neV+0Oky({8Er^2?iFWeST+qQmxE#+@Fg{PF#+ zgn&4j_g=L{Q<|Da{uDg8E_0IpD!pa~ET^k$8`_)&tyun~6jXU7VI&JWK=8xtC(u6X z8bL8rg#R_j{as+4$ZO~vtD+<2DmOVFD5dY*F+0EKT*tL4FqK=Czqrz(}ovLxL zlmoL)GD8d#h+aT<0C_-kXH#rRvVp^>6xNXU8+9^`C5Nf!GDm>?j5d2QHLWFq0#tFb zM+U6tc8`cOod#wgSF1{)XhpD;Y}`z)G=p5sj|Hs*o)URSqaJlUzcT6Kk?=SLMwM>V z_*~2nfd(-z^?Aja!ALFwiC}rIYy3)1WPDo?=^72hK)wd8JeRvdDyQl|0qlYMb5g_? zAOo;vXoSGP5x@*r+`4Wdp-#%&f{j6*@S2f{C>RXJ^x3clgT#sA`$S14$OAmzS<)C4 zo#P9Pv=f`*XCJ&at)oH}CxPTCjJyQKx&ieuqq4mYG>iviircmw!BMLW-mAHxP86^j z(5{^Mrp=J+c;&WWi-bI&<)Z8~Y2pT=Es;P8 z1UdD!MFdp24U>3wvzsxCD_e)~`V5|db)E+e!T2@CWGm5zy*6A@x(RZ@Q_p`gg+cI6 z91Wf44Y)MRoPZrwO>rMXNJ1#Ya#DT-=oGuv^JL9+e)r1!in#2`*W(+S66}fCTL51hMAAdeUyeZzV$b`?~c2}mb+s&X`*@}Ig;N@4W^|8)6pVaGs8Bcz$LoaG+ z<#nFIp<2L-!PJJu{N%Zj#_+JimJ-%y>_hi)SUSDL-B!^$+fdUnO75Mr0!3q03J0yDu_2XDtXpV-Ms!q#j6LaSr_RjAA2STeqqUt z;)a#kXjpK%Lt)@{>a5byJwvx!nOOSc^`Z$w|Ca~5)7_u!f85EE2yln(?7gwCyL0(2 z-51jtG2D_nnK^f#iO)*ST^FmBz`bgXVo`c3oayAGLgxI}rz7I4g+zB>-xPRsy0lm7 z%?FnL`#v3I6V~nIdLMCSe-1Dk?^f>?J9cNeD;}eNDSHr-?TLwdb5CpJDEel7jb@H#FS@|#Wle`~Aw-qwONI%f zphdPDwq(AWQg1{58JRQQpXv1!s5!o?LQrqWx{8VZ4Sn-3gQ~4d#7lon-fxWyUOZcP z#aEHzLsdz+gJEhrsj~6ft|NARA5HckMA;B?KG5Ush9|uXjcdFxER7s4GOe%nP4(za z7H|JouL|$pr0LJhYqjG#bL!2<_r|--3apG}KAa?_3aX2%A4+rvT#V{S=vS{PxaDkx zU!+zhwazq+xV&6e6Zhj=zaG9berIG*KYd>W%=XnmA^b@8D5d{8nha;jbvJdFW8`!E z`kiz``>U$2h+;qq)3naMH%)G>RoDvcU4Yg>Ztk(^L7ywBN#|)wXL7=Rva^(u!;}Ds z)9+}}fA67|MGbv=TJ%${^LcI!H?{2``# zEYYm8;X*$+8IXmTd|GTZ>PZ3s1~CB(8nMk{9rJ{mxm&sgav#`#C|Id20MBb#j^bzdLfQwoFX*Ix^&5-s%Ak#MAuLM zPI2WWCakSkRi@YrQatZ0o1L68vave^7bPVD1UH-%&R#E@0!*X29N94rG zDx<9g6Od1nX{jf^L}sK`@6$2KXrsHsn5`v3`}zf{AX+P^*(5|!@QN|_N!IfL5Vi<{ zrL$30-xwjXqG>Z<v@2p)&n=KoeKILmKNW>Amb->AyAwF_CBgMe|03zFb5vIyJHC-e z^zNA|&L*+{!PL5*f?@QPZC^>3VwsI%*ZR*?z0?7Knde`=@8AZY|962y`Xw-Mx20W=7}C{i z46NDNQc@&67eo!y zS;Zu!r$Ar#RmWh(T92oujOefZNYV|xR}zbHzpw`=r#NrQhrq)hsrru(&g?LGe)1kF zFD?bKWBRSJ3O1uA`5}3QO+Ne=a%-g|70~ zCd&&++$GO9Wanv}&iLE{%8xNYv7{@EUYn>UE2fGynrfI1LvQ%VMPEQGI>Ra)|A(02Ao?pK3z=Lfq^@>Hh#xqoRtmWt+u zMU)KZzg4DTu@jSJyMn--%YAM)(-Kf0?^DeW(A&|Jg*T%YYyYpb!rW8Y`9G)hhgaXc zu0NHwJm``yNkQXCFe@KVXZ3<}^_bll;DhwTrtRNvvOHQUbRp5pfwm{vIY;`hrMC5z z{k!y9+Pl{5n#*iEe0+DBF5SD*?|=l+U9JHaCg^K72DXXm_)Ly)3(neb8@AydX$+v{ zkNkdh>ns`Nlq-04@6O*M%D0>~BRWz$ z@td|T6(T{lJ;I9?6#W{^bDHe)<$?<^J3#GJtke}`Y@P5T(TK#7=Vhf=*k6j3JQyRrJ%t? z@egHS&?Zq*v4@N73kmAr`JyApC1;}xN}wcTUGa(*edK3)a7GZTtUNJU28o@R7Z=|| ze)xj7H6pqqmT-Ve>wIE8{PGKeo6UH!cOx7mA6>~tjQETx8uF7iM)(Z}&lHGpwj$ zB;`glCI@N@IMLZie6%u6&6X@@M<)`W>DQJ8Lu7y`MkiC)I$NFrgQ7)!{5u#*gWN*4 zh6vJm9HSqbF=R8E4I&TMZB3TN*`w-ITIwQ5Yn)=~41}a~-JkqW@;n#=#cXGZSl7vc z5=#5|(a0bpqZ~RJM3#fYeQ2Ee5n&JqOe`}Kbd$SE0pwU#F9_o9EC%f&WZB4tpC|_n zoOwQEotQqvf3-9Le>#d3QEZ)IYfJS`Ac#wPC&hvKXoi90B?zC$fd>QDFN<)sh?PY1 zsglClRNC=OxSCTg6pAoA+Lkyhw_~v?u*klxVR>Q$;8j(3}8Ch ztJqzJBUkt=P_Dr`R1u_Ia7nNy5IL>M1@RA&m#XdZepusant(WAZm z@G3l!dWD!&UY1iV7$cpODcT#$D+6m&G+h^`N!OD!#{}J|Fg{_})y6TUs~94@yKpuhy*?j@#NIJS?a)Fr*+zKD3Kh zx(w;lm|5H)hpxmzp+G$&uL&YA#_|gCBY8ci8ihZP!4+PV8Irmz0MN*9fys|rF92(& zUHzC%O=($6Su>VT!WPElNA6`K*YjaW0ZL}5^(@_p$`9u!yAkBDpb_E4bP!bb`2db$ zOO}KQ)Vt@9$9Qc-n#i$zs*Lsmt^$7RmL^4*kr5dv3yaN$ikx<*QZTk8HR6O<@FF<# z!?<^@P|ukk^bWP+@Oh&yrFS}VzmPSb@m)4yd|Y;Q!=)6bzmekm3j|KZ^Dl|jc&>yx zqAzK*uPj*xA~>3hwSC(k2p-{2FAAE zJE_s%Cs)ac=xLcBt)pMyeDOiL9Eh>Ky+Ci1eO?i%Egv}_H@4NLyf>y|_%GL2V2`56 zh-jmYi2A%C2lg+yZ!!K;T@3Jpg7E*oCCpFNvh#(+U8{Akkds{WMWkC=t z{Ke`ExH`|$B*2?#)(5HZ6wSuKfQ%AYep=;U^8eKLr@81>`hk1lZ?C{$?F4rm3Ge|C zeSsSLnHjusG-=~7ku^=p>_bfx#EaG4E!Lnu*;oZUE77SAMYu{YvuG(MW8on9+1_yC zLJ_W|LTyh{c?ul0Kyg0#0`{G8*7Tapm}u1_cxJHb>cm9^t*bwzB$+QD%D_P;PPDXna%ryCXG;dO1(v_QHJ86R=X}u!&(9a5GD)#* zV-iv6VGBA5|N6|W2B2yt<`7WnK)p;#r!(WVYBrd zYWOSIOg+Yy#n_@$6F<)gmFZX_$A$Lm;rhZj1>c)51tv^U3GeLHlmmaM6>_ zekfLa;UR65Bux2_xtJVg=*)Ul2O>phaS?6Q zW{X(61Bv;nKy1X1_JpzdU`+UPzTOy-d}LSWcW1mot5Fusn-^XxDn#>>$Qo%5E^_i*k1Gh%F zE{1+F*>@cY1?6IG}o$Oyp2C5=`Y!Jh3D9)Ecxk1y9|j6JiG7WN1gK1opV2}FN&hx$wBkvmc(Ed~F%1qP zyF*S<%Ntjne<@Q{*wvE6FILnJE|LsBd@OJf?Vk*jjf3q)1U&Hhwo|?P3_*FmK>`*? zg|XU3#`$%r-R0)oUrMyIHysss*iG<(8)c1^dN2#dX$EF0S!t^zU>uY^!E>bh9g#t4 z6+@JSp)1wJ&%l^bTNMET+?X8szwFMc!TRVkwzkEBTpL}oNSSBCi!Rp7x$g~O#Ubqg zp}OuZ-*fPh;29$b)`L=Sb7`zg$#eqrxomAJQ%6uF7zX)%`jL4#!A5xEHk%QxzIDr% z3d;VRJ)g35ZO{#>cskIO8eoV#@FXnZNH^(7#gEBBJyirxO59pWa>(T0kPDbpl;F)# z1c+v4$j)*VCUOP{t_I8C;pNK`R>UnGV6-U*81URI5VTt$1So9IiWBG=5AV z68GJ!8_KeL7BaYaq+qm*Gx^tCO4Ouj{Ku*t+A%^K*7J{bls6A`;Pj#ie;s8ATzdDWh1=fk@?AON>*ih~&A0R`rclHsl%_4w21ED zaSFItxTA$G187unxzHd4?E<(Wis%aK53|_QquHcz2 zfh4edtxvJw6Lc+Ctl9u$1_Gt-mSALa#Ay+PAPvo0u0N z#eBC(*XKKg$z$Qexnr|=_41mq@PG>J7|~Yp^SSWwL@_PjJ=^oVlT9bdjk41(PMvD; zK6P4V4)RNvrdkomJZp8Wr{L3H=koF&AMmc^1b2*Oj?Nhc?!<>j?fZAa{WqGhUY&oO zm@VlU>i*o>J*{^Xet1%#MT{*+UK45ScsTUw)zJHXV&R8~+Dk;FIxdHt-0--=pJilZ zYikETOPt^qo#~NSNia zc*~O%+bOHdmVPlYxSv=>*Fl%v5H}J)aR^)Y#v%jMJ_b(R(conUBkj-}m8|4B)=;mC zm`v{4QWu)DySE$KnPnn+)0ge5S6#~!qI@m|&(H3ao3Kx`@n=DxPPM;F1deberB{`f z){Sx|O{F!@aU1;gz~H`t4p`~(`T0?mxc`ET;w|l6*?^QH!#L2;B18W1&z+{!xR|l6 z&AEJiZtcUvz3=OvJD#_Go$rFcPS)%IfO!bAM=py~5R-fjjqCc7GoJtNXL$sw@Kbr1=*n zo2S+Ilf;S_C54k;^*ehvRUaGl+sgWf)Uo-VwdudA2`1W^ZJoxg#HyuOfIAQFYkfQn z(h6jnGA$&ma)}rTxjkP@3mWgr4!!h$*n9JEwz|K4ROeP(sv25DJyn#LXQgOsstAfi zh@hw;h#F(2_0&9-n#VRI2x5wCY&H3)@TINm#+>vcZ%h?2qDL=F9NF_|C=c3B z1mA|j-CXrnizbSGGfd;1Hc;$+k|Os4*{>dm-757SWH$5LAwDUs86p>UKkd0Rdc!KI z`K7vT1}`sH;^pyny)Rwt)g?;53U8zt2Z@1jhS63l#tY(`Yvx@}4cFFHP zzG<=Ub~#XefI3M)&xRJGLkJ@W_lo?cY|M{+*=Tq+%CDoKauH5w>gYW4seKd<9-MnEXD~Ly{*PQ z0dzuJlre2;Db+K|)&K)`6vd%oOF-Jf!}~LB3!a&i0ogiotFF|z<3|ji$WpkA8Nzi~ zMq}faY+=umZ8Ex`95O|Gj|FHzn7eTFo{|VTc0X=nFZ@N95+E&Zv9DWi1cJJC{LNLR zK{PIo6E?3e=LCk-&-v0~R3l8{6jE+=TM6&(6iw`i&!M;|%AjT$}!+i3@s zf(46X-H5N6B|9$-8hIJ8%V-cTQ~{HqAa>kK$!$g*Sb*Eq)qCS)n?XkFo3m+fX_VtB zFUMl@#`ncl+r`jikb6Fe-NmbuO9^maLw=4R7O7vGAUCrCw0-2~!eSI%08+oe0wgma zBCj(w_U>mg>4`3Cj8Z}9s|P;?i^A=G307+=z#XH*j=SOh z!g^Di#CYS%v9wYk6ud!e<#-M)ikeR(UC`Y}2{z26i&ZIN`s?Szl#GJdoOMK0@qGb}nH&@6X>yt4vu2?%Z4Tm!MK9~6aekBp zj@P>0uJ|F;RUJNCXIR}Vhj)T(`J>R;Xr5+rszn-@kDX0oLZz3bLNekT$xK;|`o?T^IySi^K@DhN)) z!TkYeF%PKZj~=K8>HKqO5^~g#Qh~FJN`kiw!@G>r4X$LG!Ucg%Go!9kX`i##U=X5! zh9b_dyr0~Xgc_8BLhP{Yg}k^|8YUJxb>c}hn55$kXy&Sbbf zNgHBaOSHLw=s4KP0JJ)4*j6YMyV+k&n0mr0OE6=RBI3sCjFac|daoo_ zPlm!l;5s5NoaJg%bOvuJ+_f2Qa2|)V?w^(fkbqJ++!%C32q}T{tJE252!L^5D2(TK5sY7^ILO$2q z6`J8njq9G&i95!a2n#GAmAk;7zOtgZ-0drCo2TC*+ zAxktYt}t+j%8pjY5!##4u`GsF!im=8PGw?|27%LitT>AHShyc3c}YR;I( zOOov}@Rua=7Fdg|FNQLnA1bg0GJU*vnH}2Fq8AcV=E(1#m{wqKCo(?|zh45ki=-xl z4ATjm!f^^^*4Bo1tg8WaQ(&t}s6OZqsFo!fNgQ1+5svNyjV1%wp? z?cWJSoW%XGLTx~{0Tsj5E+N_MtI4p=%V}GvK}o#4n5R0UV;y~~-F5L@4tFRBRng;R zT$qLxvyg4RN`#@l^+{SR?O2T9#!nk&n%u$q7=gA({;ZA$Le&p5O5Hjei=iM^8Iq@N zI)bYUO$02`}^OHZcEjO>eTb)VoR5~ho) z?n%srkaz%-QpcB3MU$aU5K+YCI^qgaY~8TP(5_~yS&p#ojC)2>l6ztV2abp!a-YK_jSde&z}?EImKYd|DQw1PFuJGXKdp_0O2C?|NUA{cOLIK3~5 zo_!UaV%Rj{0#`)@ZOM^odgFY%LN<@LH@slp~CUO_E<(EI1)@BzErM3 zC)_Yhe+`$^=#sOlc1WLBZ}z7X?O4ZMf`nku$^pLZzVl83(;g6k_I7lLb4QxZ#;uSo z6f2ifvK;9K9RvF-t*j;@4SvsEd@qrKgg4Dji zh56c$m2z*JIGI)v$+Al|&TWi^qtd$dE45ty=qe1NJkw0X1E!C}iV8(7)XnSG8{z{b zn}JNiX5|t{yEqQWy-K|aBc1oYsv}RpIiOO=?_%w9C{_`PmX{x^XW%4H2zXefn|HI_ zF>S#>y~m5)7H&vkVLeTaH2~|@a)FBg_&6Phoe%jOnfQrubyUfSV=03;UR7&tSX`IR zUg7VQ1D~v=Tu%RNsMm&Kz2^Z<4%S1%i=>PTlaZqAj)*{Z#uba{-O`7puG_7E=da4p$9e)K6Z*}oCaMPROwN8STL*+&Vh+8w^!Nu02LL0;r2(#KI zMw{i-B<(d!9Y_?8F$0sMjbAxqqvdW$sL*N{nBTKualntYfqk7Vru>!8 zmMK48kM*NCO+ib&#|n$W)>rf|r{5uF1ZCA7S+x8G)1Y;+b0r&9Rujkhh);70H^BB9 zU0B;%{wXry;Iq;8F12bjKIpU?)WG{$=RLQ{4D8c}w?<~;xqkC7!VPC?73lnscpwX6 zd^&BI;-xLATL*Wdv|d_I0~@fV;o(;Wi<0HGCSiK}rE)l%^*8#ktv<=k&e28+r7HoQ z`l)ebXV!>l3r(#BwKA4rt^ynBUCj+$uC=6-EZ%|rh8qh{Q@wr+Oa*5>T#{oTpA(7^1F;uU-ED({oX#f<~Gvdff{qHZflXQW}>ap+?K zQqcSL`h&rH<8IfGJ_hpi;aU*heXhcGclr5+{Yn}f$S~uv${RUtNLJp@$&*mys3^*y z+jKQ*sJbP}sIzr^MRWu(R<l0!n#fx!Tmb?mANWL4yRa+@Sc60nj0@4R2!4xhfnSetLtqkj=32^iD|oY! zA|50OZxbR-%Ym`H-o!ztP~&P168d4rA{=jkMzJ`h7J*!UnD7QTIwPa%S5V%iZd2sB z4Ja|%Fk>D9HxP_U+a&pb2NAM($7=KB3v8KK+^G9x)u`ScZqz{sn44S_o<{5b;1z(> z;f0cVkV_C_Vw!-$3Vfev6N(*4HmrtE0@a9Vr(LXoOsn4rKXD~w++WE!hcq%kVc95^ zXht;F8>ZP*!@(Mc(bT8fwY(Ja-RSvT*S&(F`{#$!e{Mszq25<^mtT6@HV4Hh*N;n52Fk>Z zK}g*8i9LkN%%P9{gQj&$mA5M!Jz@|!zny_*Y@osk2CeZGYAqEKx_>Z?^nRAxw`Rp={VCtza5fgzYa&L*T=g#m}$6u_7fu+#+J54#SqH)^P8 zgX>mdEC7!q`G#%MA0mfh$|t=Puj@U9*v#)WAfkd*{>Y>79+;z04TvS*INclpm5(kE zGS|}QQPm`nL%Q$d&;5fR78IP;dp zTesGr?Bf}{3q?oLW;Iyr=avuZdoC$e(e`)rM()Z;6M22N4~lcn#0WNd?F4y76A3wJiii`wk zxuBkkdy6yo#kdLF8{s(zsU-q}nXe}k9!&Z08VwY$ilssLy$=~kEq0B#N-1J8GX zx<1dni(!Tl5vMsI1&-D^0gDf3@`+f2&`Q6I*r*^eGwL!wdxe|63iia)DY!6Ya%D}_ z%)Z%Ud$$9B=sf7p-u>2@dY91N6|i-RgL+da)zNqHMNH7PBc^9#b8Z47l#1nJ&6J4etUPIRCArZpA$(gwV*L_XoTj#5zBUH(_fQ@&tEFx>?A)j(4o_vhzv0feTOTx>|pB_0=_&6w`Ru z9+kv?VR)n`F>Y?YFx!T4?b~h9n%$us`EctGy?@!cjBcJbiy*MvK$AU(_Tvoj=<8bj z$dQ0~vr)`-+ua%t^bKIWERL)8l`7`aO_TRkcx<9p{?<68^lI$-(t!zc`}jv)&*w_ zA6v1gx?()G72G4Xm{qys1k1y;DWcnK#)guLKc);4OAX*GMl#FaEX!N?V9C_+-wc(Q zHV@YlF`vAG@(SI`=)}=ONd4FwEUC8$piEL2MbRNoigL{NJeuJwK7dycymK_x(aQ{x zuKq(xlUS{xNw7Sd_GRe4C|p86D$UzQpO!VgAW~@=sGQq-AqCy>2HVKF9*N|4n+yZZ z15N^$J`VFkUvuZY0~?Y%FL#A8dZ|+HmL`Jje>2$14W;qkw_33~_2(Sow2V8<{%iUL zH^0(ifI$vOgkx>$9g~i(^TV6H=b=XR@=udH!7H&$1&8*sKcWxO8wCfaz>7__Xr3B> zlVF9{XUaB!F zCuL>^IDuoeHb{~ftjx+ZFt!7nZ-;Gj*_otzl$&ZFd!Lq33io$Yhm(Aai#4_gcLiol zja<5))X};mh`h7`M)0O$9xZE>MR}pi$uf}j_}Lcip{g^ziN&~n%pq+dy3!)4rzVqu z7PKjE#4#vALc?Gk>0|ZQB}H-IdH}yCKpG-Z<;`%c*TY$V9m^F)o8JsA=xhUc@F&o| zZOQ_V^K#Rb&4LYFaNov(TQAcD5pS3&zmzP|k_3msjiceSn#DOcaH9yY5r=?svTdM~ zI$+^E*=O}@zPrwUts48A;f*k*RiZX$XoYwGa4o*<=ik=`IDoqzy^}*gRWUSd=0R12&+hgAg3!*E;HWiNhR(V0Oh( z37jZXp3VST()2PSxH0X=!C7B#=ib1osb6Xq?HT-XE~&Voh=@p(&~xq&(MW;}j-Z2_ z2VxEi!f)XQY^spr3U8@yNfSkIITFcpYK1COmklF%d&E~VWuQ(-|Cx+IVdO!A12i>% zD0l*dXOYOjJ+0P1cDaUwG2pZDzf^Sx?86BHWGB#e|!# z^{8a)45Qf^zgkh|VD!W3VidqiSZolIvZ&J5Kj4{&JXp^Zf*7MHuNA*BE!mc^r4z?8 zT}f@ttf%|#8Qc(-A_IG|F*tkOk(T6^Y9xZ|HNJ6*hTv3%(K0HD**)7Bj{=t)3%c}4 zC!T|w1I*)3ahTSh)TaKwypghT2e`#Vf>%o#9M10I+5VW=y_DmHVr2x#7to zHFTtR_b(;et^H<@Gfry0TIWnl7x&HY?srzVTxr}sE^TS_c&yZw)2=aBg@r+lWWV7x zv5R`#`$#d^=D-=Xyu=?F`gHkf#Qwb8=8@B8Te^5cK0tE%^T;IqX2|$;@QP_4LYTer zy&#FC07{>Xdlac}XtS}aLF8si?HxZfJ)Zu}@T*jN=)g>$E|o?k0^}zn+20K7(OL_VHtx%Ut(-qL{9C zP1tvp(N8JK+_Gh?;-NK|nVIUpQ~Gl1G$)glG9b5>B;APXH*FOYTWY>N`J(dSuO`cI z8KT&oIHi{Fh?K3h((E@BO7Ci0?u3(@t<9{C=;ajhltEi}!PUA>haQJEbw1-5XE{=C zJ!TrpWkjlEQ@p$z@lk$z-m*Smjy3eV<)<>XJohMUhG%ahH9v3_7$J>=HA<;>bAE^4K+Sdep4OlHrK#@sR}Pa+kdNFW^oZh zxYl!8-%!jGa?ls(kT;~}HsxTBYWyyCYnSrib^x{R#;-&<=dF`tCeaU8w-$JvM=KKi zPOVg?zn2zgA#h^pV1!JVv4GUwn117fo3h(IfdVs9W72sU+s?YUK(8U;nfJoaoS%Go zC9j#V z$0Yf0U_T9}cC3Hp{~mE{(T38^d)2C0i)FiPD;H)e>bdSFma@;Po~?t@o23MwJ}{)U zeNetp9e&Ncx`%5AMl^cn&U;lBG9TsKRPW>36Vn%cP>5%%0}F5pXMmkMSvwRDNz+Zoxz`9Z5s)zI+hDQd!ZYDKHN3#>e9Z+>jqmsB zWa>NR{Pypp+B4f5?*&bW>fT70Gy|b629CZTnwxlr+8$CZMk@G^>FvTbOV4=O?vf+- zyie5ZQRDaOF>vTAh1K?I8a8SW?$Lvh_ZdW-fgu63BKOcq_IUgo5-(5~J!9!#Nw{ug zw>Ut^%~|d8yfNfHvAXn~>xj(OrCky*zS+6;@{sX+>t_#Z-xNn zi>2S`!b9(pBG%{M^}n6)b0%?0LP$|EN<|!42yVG z&-?Fu(foG?X)>xh#ox!ekrZeR1yFRMdyE7|f1t!Z;_(R@!m5_+&3JmRsT?Wo+1gtc zMi3=34-cJzPFKurS0Z9+*H6`cZLO7s<48-Si}5a-SJUzxGr{%z9wa5WaEeok&x)E> zwh*`U#lg~3?rz0--qh@8VPaoz`8Cy^G#{VXp156n{ioTu4yiWi@Nk1}UR+cp{D{YY zzdBD@?A25)Wxy+x?*D94HuUht7_6p$!ZcIhwfa!%a0AUuL-EDy1Hb!6{f~pvSA){m zZbq)THYSV~=RR_e-H$m}KC*9AH4gC>SjVGLLZ<6!TRpN=_+%)+ivcE`?!6(4R_)`? zT6;O&On|;z4XiU$PDdoX1Q0HErA*_2;zq2Tz(^r?7mTzIu~OFn@NkmC7T`uwZK&jp z074XXyu1KtfWr#8xrT43DI`}#6hm3;4hoAk)HPr!GKJ~Z5yYfYwxoMCmgnAOSAXa6 z^A7bG`^}J-ZJW|h!+6p=kb=gZ>FkaCoe-*Odl!fM!ayBxzXkaKW7#gs6*&eTT&xrcTpSkBTJ+i{x`! zCN}PJI+dbOwGgdAi5i#Q`>HQrM(6b7Oa`-2I<}-mo6mn;kBs(NqyCHuxYWpPq1o}U z&cEaJj31!p9z8};9kmG$pB|=>e(ju^x;awj;sqhJnPr`_1rvqatIb{qML+1GdJ&No{U|S#!q6TijHiVy5MrOv=&1 zwj4R{13A_?gv_+nD^Qe3%$)I*TJiWCTQL8b!S2YHvfqGCtR?`$LA0u+cS+1zMG$*S zRsB$*hXGZsjH1Fwf%8Q$YKRMRDI~|0b>_jIJAZKcv)9MG>MQX_E6{p8AH6>oJ_QHYvCbvs+3pChx*Ih2zp7IVt!yAGpHioK2y+nUxd z6jPcpT`hG66n?FO<#}94kfBz+oCgq*rPt)L?Zm6-+jb|<97@*}?NZKp$1S-r+stWx z$bZW}*jKrACT%Rw)J`;X;Kr8NDj%-yvd(xQDFKSWOIk0<>JoSini3kyL@R?_9{ zpBZ-EpDNnqVqN*Rp~~Wz(uHIbIb`)Aa5wW!Zl*k4xKP{M7<_3s#X@Ev#q|5T*=$qv zm*w6mz1Y>Cptn`SrZI7We3@v&gR^MCtZv-gedyBb>vs;MD8U!FPjJld@u8$woK;+p zhC2a`vKsgm<&3IoIKsVDVyd3-r5P*Gju$LtcWEc$rN5F)2)$!u9H3g!G-Ezpx@r;7 z*fG};%i?!;B0a0odYJvq*3X49LsQ|bmik9&*Khm^F?X-gbUGuFPVr(nzvU+C;!bC? zo33wz7DWa?pN^T1V2fvbOaZeW)fW{9XM1U)NiQ>dZCnS$LyoM zW`x~E7(u~63N?B!)uC%EtBe)0u|wGieK#A&A6tz*@Lab@i1#G3W3<1d@S8z#wIL0I95sI9 zoopcI(vn8n6oMue#Ttp6zjLVqFW6K;P#TJ^1rLR59o1)8(q-p<{e&8EsUiV+Q$mX+ zxZv;x>7d_;hla@VF63T>Sk0`|GEEC6L0@HB`@LV>Tky1}rUy?A(3j+Fe=}IuII9S* zom%52b1*xMJCI{vI~>wiUR1J$b@!BNWaxZy{7@_M3K?0<<~x&T=iWX|4Suwzq$csI zXI3X8sm^LKy?CNMt!|GmJnAx@G*sh?l= zr73vZH+TsRM188RH-`tED11c2hU8{Bt1uYt4nUhv?kw~5p5qBsr#shx>C#X6$6ix8HidIY`P3lJFDcfS zaQgd`^XZ;GzZsUCfUC*pKE65fV4>-!1oPpn>Q7|wX0PgN20()iFmg{WIPU%6|M*$`O`s(W9X^l@A1dRxrfpxX!madQ|W)UX#I~b^N3=BTULTFq%n; zz3|q4YM2(YMZI?@dzcs0+pu!TMA?A5tkLh%BPw%#_%G6>x6K2OU+n4Y?yYP1$-iy$ z<2m$_Jswl71%gZ26SKNDp@zlg0BVAx5A)#!{H5P&=QlfMuhlkt%;|sfjGEKYIqtY; z|A@TrKYDcDd4uHcY|YwoGR}0}26?!dS%K#-%2BBbXO_16Le!@WaxbwekNnwMPc~nDDIati`xv$6a>T~N^pmCtEf8w zuN!7ml(IK9`4>U<$V;zR)r=x+zJ~&V%Ma1A;k$oxA0I3(Zu<>ijtq4}5*V;8I5?2{ zayXku$KBYF)eot|0a}QLN#AhG)h$Jf0OcKELl_~8S}j@d1Y5b;<@Tpa&n{CCXX5gZQ|UN1r~4qT=nwJ~=@h1N z!0!qP5`XvyXJHA(C zfM!tsax|1);eUM=4XDEH(EFTr*y)3+%U_i&p9LMv(+&c(a*>$bDK9OmY+0KnRsA`?ca+qKP&m~3;ul1 zG;Xo(3X~ZJFdk5ef55MQ0Keb}=6`<$@TAIrKIi1St9uNKAE#^_(1k{|eTl^6gyCzY z0$vt->Zv&Ju&rTnH5jJTZP!$SAwDzB6cNSFZ~OcBeV|?24H4r`rp_$9U_tPeN?Lqr zchUvS+a9p^u!hgrNVqsVyFJkkgnK+`RP3b8Jcfg!a;EiGts2g$#k>G=WJ> zAL1G!AtJWURtUw#r_+JdMZ`^%8kG{HeY18pL^T_1Q$@fsTP&@jN-teULD`fJJM3<3-hC&*+i|aZ`6=iXxAFt=57I>g>D*mD{$o>xELouMxPrsu2U>K@Vh< zVhYnX^&QKG=Ns6imS$L3l!T`!fo6w{F6KrJX!vyI>wc9y@Y1Ltx!qlNHmD)_F>!5% zg>~$GL%?_TUg?_b$eGEx6{*Zi&J$^6Xl$!efO76*&~-`+v+{p+=Hg9b(%VlzF<>B}}2^)RAg^?>`&-B{=b z)LwmCUu8hZVP^^~2GRpc81PfEDz0gR;OtRjkNx2&H_2yjiz^$*W$s|i*IDwEdo2kB zE?Tz;a+-}Wx#t>P!GdTGv_Sl&;Iyi^xf^HJ5Lv}~jn1t4cPkZ&j`yP(WhsaCm;5BO z&&Qd4D)(iKu8>$x*i1J8%g^o4d zC%XL9juNJh2LpZl8J*5d6mQtCsijw+iG}AP2US8cngf#e zg?RwkL!MPj{s5CN$``+sMRUbj{pZp1`Qy-Ui1s+OPmPct6(5&x{^!yEY54zxoAZPw zvfO9Vb!ljXdf``Mw`nBT?T#Y~7! za>=L6xc^eVo}ua)V&au*wq|Y0IiAonr#5r6Z@PM2v(z@j7g6?h$s-jqEzH)~QG0Et zHX+5r=_-x;_K&*AOC4&m5sr2_SN6hJM}~AXMS1i6lr6{vHT#sY-rS?`*pNia}pSe@JX!=#mClGHHM#Ydd6tWG(SqH z853*iZ;}5S z+NmaCFThi&EDS@@a|z4T7(9G46FqeDr#RzH{~+VpU(V)pZ6-QABaP))-adU1&@vJo z!}pXfb|XEuxH{;EskSs>5m3AOcERjY@8`EBWS6-XJ@c@bcPRnm>6ukVKaXO_hDzp7 zSB#Y89YuPlELEz;LUeAhh-G%!8x|HAR8Hnss(=>jA{17y*NWk8;ke#gEf(}o0Co!o zmkc(}5!m0RIDc!`*_#1s$*h^sKv(ao0~esl}|#Uo-gp}D=U%%vUjHqCfpei3}2 z_%;8r%NUqLh-d1@9Ttfl;}^DXmlpP(sq8$foSEY6Ysj=$t)a6yxdNwvFuNYFj(Am1A zJk3Yv_q1o0weIgrM?1IO-uLGI>s@4kf3=5V9A>fhm1GTxzlSPnZz+AX44JL_*|<+* zZFOIIuwW}JZ!1pismmQ*9aR>z%eR61JtCv88;dXBdFk!w{4xqPKhlU02gVC>f$i#O z7yhx!^j$k&yX@wv2#52sd+GcY>1`r9w>CIFd%C_;zAjeNH$Bs3(iIq4je6Xm!=WhQu}zh2o%(3PUiQm*vhn!daB?BP%0h0fbCsJ`9l zGns5RrpUwR%PcJ5_*dpDhJPp$ z=tZ_{GCIYvkj9B2O7!Roj2`{7!o0sZ$6J$RoSgjho}ib=&ob$;vF9^?jav>r8!W($%4p$o{d&2P(j__%tTVQX6Es-KGTuk?t4sqGJu*DBr7 zwGGTR1%oNsy(fE>x$VUHr3K~<)*q^SS<$z@>1BuG>LMZcCmX z+WJZkuSl^7wkc^RCYfl%h#HPOJ-GuYXMUQ8)SFRn?r3g%=g$nfcy*2X!+UG?ZU8MjMyC7R?9p|Q;J%DBJWVojM~Evh40I}Y$rAfm{EBwOgS0~7_J8N1|btO zbk~0k@$-%@Td-5<@o$DjZ?9v+ocp9)t;6q4h3O-pPE_fpB_Dulo&h<$B~@Aw&L^JJQ-)b7!1Pm|f@o2!|eSJPa z^@}Tyw`YszTXV}tn`h&{$~$4ljz1g~=7}qUJ?YbJrsIGCXJ&o5m@R3^+4N^j=g~#F z(9IDiH%#5=#ym@_cy+FD_Pv=>e0aHc>=V&8_1lv#m1Angj7OWEyY8nl=VeV!Zl0dm z>aH)lfLU@boL4S@G-QrS>&P8qXNb`BOTkS8@(MT4FsRZ zX7mv%$}1;PBs0ciMH{KKPF3%VXHJ{|q(?WQPo1CY0CJM$eyYow3?R(5! z_a*AHn{qvu$V2DW?EeiJeVx}*R(%>8gk@^$GpU1>{XL^c-yTR>i}(9V25p_}pNNc& z3h~$mEl)+HI=_$hy&zpt5*VlKcH%PY4HizDFNUkvP12J9M_IqtJ@Ldw5%+(i&HKJB zLuz@;OMa>c+%jZJPsNMxv!nfD9SCmU+5*{^VP1~Um_DgZMc?aI*C?);DT6{&{5`6{p@KsRNt0vWikN&ClRLmnYRo;DJMzDzgez z={L%Sl8m_@JB$5_^~wIdj=44b1SkDiYVN6aeZzr_T~!^u(1~+y%Irwq%AdpH=I_hL zUYmx;P%vSyX|FLLpmeI4U;qNh4DDd&l}$g>AC(t>Gk{(mtulYqDYEbLjl<{4E(bL< z*$fS|zq0&Ma%WqMwRX(UlztJTn*GXhpWgux3giR-W|;8li`ckHdlRHJ^QXsurah^O zt+MHs?l+6%D~;@fS6l~~Zw$>+DVnqOt~+F_%&fYUgqP@z%V4P}DkLIW-8cgYhcRFH zzne?%(++Q@1c`+FW@xuk_2c=UF5GwUnBIMOJCFklGROdG@Ln|QsDVQVr)?tPYv8{* zfyuhbQtNqIYZw`RSW3b3Xs# z-Mt8bGA5U{0OFGKo*75~=r7I=wv&UiN)z6_G6P0@re`vvJ*kCVft6{Bns0M_HivW| z{)a;gUvXthk2pJXW-k}`#b@c5q$zt}yj2BwD*Js&oaB^0*(Q_N+cn`5TXGF|7L=B{ zI^yhM;I^IHuFRZ$00d2G>!!OF_L3EBOw+TN!eo=^+KLp?S4{r?;<%K~Eo+g@g)wAg z>&lgF>$!KykN70qcF})#N|1Qk8oV!@|5@O=WzmRXq1H@6Pq$d|2*$@H>prpJf35xW zDYVg6G)+wZ~FYf4ISwgjWenvkH-6K{V( zoa4^wPoc)uqQ1oUN}Ej^(jr-UwD#9o5R67j=bN3Vw~OJxle@x znsAq8TAgKLrG_dC@s|H zcp%Lw9*w1Q2uVZ17usz3AIvkawVJb`90@Yne_i2AobCyL_IO=Rrz?&x5XK|)Wy z_>5-PzIe)Njrj0u>d*K{Kd|r|Xz>cX&S6nYY&!el2uJ}8}={7#$!ut158!hHZxEs5DJ|8E% zVc4QECt<-xpc-Z%jK4@HAaj3gd(O3-pmDxw1l{z6J7moge+j`io|Xt8w*3U_@mOn2 z-oHI(?$g@8`tEU)qixY|hPdy#zy4w#fvi0|DoQChR+^Fj`aCFk_CN6f<}T9lo=2nZ zb#X@Udf7s&*38W32i;2^h0%8<<6c8^E5KRxm|vB$5tFC;F(Lu$Le$!*?z^!*)S8)^ zwOuhliT1*WP44H_^4XY8FY1K0(xC>X^r-OF1m)IWVg47HSro}*Ip~Z036SYFE%lZU zt@1q5v0^y1rAB@;bovvHubf-w_k0^P(qr_SfqN_S z$9+}E_CF)z*1zlCx$vL}QZ(kCjMv)PI;Z)@*qiorHkxy0=BV``GK~uNel3W$9@w(` zS~8M-^T8w9%Q1(;Vf(7crw#F%&x1$bN7-&{5xK+5vJXxE*Tnf>)99)2gMWrF^S_T* z+P?$n-=qKM8TbD*{9h05|6Y#%zq>h+d{?*Nn`8QK8DpBofI{?^L4YyQo%}+-VFy-r z8Z3RfE&v4ab_F0srI4wZgQ4QdOqlurk4&T28QtWqPV72AyQ44a@Cq8%%-)WlNjZ;S ztW#Hq;8~Xd%ND5|k5f#`%p!MvX?^VXE>)!=jV{k@Y)sa!7QOPmJlT?2;=L}uS-k7I4dE0*P)t<}9!r6<1{tCg@{KV~<7t-f6bk{o5_F%JFzAr-d zEc$ucZ$?kH{vdb{8u_^`D}&?=k z(1Bk}Svj3`(vyI`9TS3_c2VVR$JI4cL8%k-e*B)Z7AX72S6!6U^ zKkyrs(|wug?xuQUhiXt;Nb_V}3KBEQR~vlWL%8x=T_@A{;7zEZVO3$OOS*PUi|DTC zJ*R!&fBw=O^}W{b@?*P?M3tYN+}X;Rn^1Z)n6qcmGOK}4>uBlFqbaA?ri4k!VwTb> zYOY#t2gr2alyjb^n4e*h%AG9YtK=9i$++-E$Iw#4=cdHlCzhQWfU@^Pm6+I=pk=nJ zS3x}=BMJ)(!(-~h!@|Pdd!AV~1?|^x-*sOL%Te|j76H;rnTWI7May5KcW&|zH1_w zV#9sV^XYFKr`qMyTskZAPET&sq*gJ_r|@o*b`!4-Q@0ul{3d!Tlxh&!m{^i&eVU0ak-3Uil>!Bwlz+SqCx#Mi0ymWqMpxP8vS~Xe|n&F z6qgI3`d_$mJU1mjmMAu;Tktr+B5Cajp==^N@gC+^BSI|sp+qlh>D@yDhL?#bd7Q~=O<86_*SM;SLe%oR z@bP;$n`T$r-Ii_eitCL-N4y!1;C|zwiwT_7ySJ&3m}nXOrt*O$rM9H7$2kcpji@k+TMH`z9DJNXc|^Wayi$jt2X| z&-_vo6B8-vZcID*M=o#hkB3$jv;#P60EDzv;qOrQ{+i-KAA9IsS6~~0Lo1*Qt#pN1 ztU;)8<=sciJq*67@1oTgcDI14vkUfYq!nvp4lQhLvLpr>%q~&I0xe%>+{R>eRbvXn z^-ZnY^%tpLEZlTqwgZexnh&AD?9Kb)xLWC+s>X|F(4>Xg$&aDoS(9ewg3+)0-ooJ| z0)IFQRHFCkJK3;6UNhMc7Xef0m+0xI@5I0?8wGvG4LMPn!|~Efmqk3U560^jv(rKO z@bO2q;zBL)nMo>aEoF&~-q944(WhZ5Y%hk8uGg@!nDmfw; zgc`q*ul!?mz}ehv^<`xusf;p6Np++1kQJ+ATwW{jJcbeoykqQ=ZcJrp9z`jn+ zqp~XRSU(Oc%b7W(Fi3@BGTG2?&i%U97;9@UdZ}ij{R72%SJYEI(fh&)*;IAyr*2=z zc;Q!eTIwTx9WeQ~JGk2+=HwR}-~U-@ey#Zh?p3}V^451UwJquGN{^j!po*HMRK?$# z%bPfV2nWYU#=l=%OffOe_SzN=P&*W?5VMe5Ry4J-m2_E+cL;ip)YIASzoXUj`Q>1G zrp)M3r-}CFnK9++Dnz9z7pOQs)RBqF;owQ{>AvB*pK1l$%ZXYnpGvy(3S1LcFSI?a zfwSI_eEF-S?D%sTRqJAB*39gy?_SQNg|G8-O)+t)RKYvFs+r{nx7OwFCG{tKfmMz| zY;Y{QdZJu$fNdG{=IxI8W#&=N$9Hdrr(R&s-%6@I=jtjkFem9JpZ9cgWT_7JjP#;1 z-p<9EmOn46!XbIPQsQ-e&yvl2fl&cVUmT4R3K zjcGp2{0|Ox={D1hBDP0F$tp?H1Q1V2Qdd`Nm#_C7WaOQkQ{F%)qiv&VTvne}u$y8B z6PQwoQSURKF)SUGrS;_A7Jif|?7f|q)G1La727%sRViU(gg&hgkGepRH-7JP^1J15PGjJ3%#gF=pem@8bSx9 z3ZX~>0TP<@0HOEhm*w7Tuf5ON``qW;v+whK_xt3Jkue8zjydOVyluR5jQ72CRG4~^ zHR9YMF1hB4eC%sKyN_5Ok<)GF;uhbnoy8RYqg6<=|K6&mjPKrDS3>@j3?$DW6@o}0 zZg@;E0p}5y&*Itq{Q zR9eyi#U=Ug6P#`+F||bc-PwX#LcH=`f>}%9mGcS(I$--*j<=92ITRj_*`@>Ya8bD7 zl0%*V2Q)`b-SAhi&3d*a){SnzxMFjMl;d@Ha686-(I~AyABsV#r{?fm+fXGl2E2w0 zt5X1XHGf!0rmCfVDSc1w?K=#pb8Jh?+T}evVvKyk^Tz8UZ+uUlVC-`a_j;$>(){0M zW;iwl*IDm=GnKaNlaWqzHWNhN5bg#2FtMKdZXOtFQ6`hWQY-vm-15#y*Cop|Lz2_z zFhj@F&AWS&%yk&VyT8=1apcA>3py#aGc$el$f@P_oN8Z5)wTKBgA6TCXEi*PYec$B z{wgu{p|j1yVEFm(R$tB!b{#n8anX|L&d%SR>$^ewyVZC9hhZqv^1HAUS}tmSuyavA zNO*I3P?;FvrRb$uw0Qr1OJBiM*3r8?r=S&g8e6h|%#6xT#>v zkHJal*KQt9(j4CvAi4m7{&+*^_6U38$K;$Tr#mU65T=jLYIA8o0YU4YJXQOj! zf1&^H5AU;|cRkR*XoI8?f7(mBuS=L-ig2Jad zXV%&$RKm#}d(V#an%ipWgp)ejA3h>x)492T4!#|PGD8KG`KuKmKKDuJlLj3qcpFB? zrB@bzTWiz4DA-VVU|*OLaVvVV5=PVoLdvl2QU1QgVa8xI_%}!Aw8@p|KYcJ?3p$WExM|i_wm)J2_=|mR1ZX^6w;N z$DjHq6moTG#OkvLH^_yM&hJ(e-%9w|nrcCE)x*{h1g0(__TAftWeID#L?8Ab;s?Fj zMag?z$$B=9v-3K3HySr6t(s_jS%0$RclDc>nF;=03mXrCpy6H-(*&8{M?UOZ``~1~ z;BozGXKdA1rxG_^Wu1>p^adw|U{Mh&2Fa|1E=7&m5NLZ{^Ywkm-Mn?IT7yxM()jq3 z9Jir?41Ft(t!kv>eP6th*G5c|e;jkW(4zK}vj?KZXyWeWfp-!^j)YT@Bt#B}fzBGR z9`K@i!_W-M@YYE3dJ!Z(p+j&19_C=PsJj6NLhl^3S>D;Bo;}TVl29m%k`?!yi~KFJ z9+;WZHg>gOts$a?AvkW$Y~-_)N;v*hQ7kv9t(MXO_zGgITJIGKHA(K15=FXz`lR(C z7tPLy=2z&@?xp20RJS%h?b2+gv2EGn{23roH+8Relk%&$66>U#p<9`gUaNlJz!sO5 zvG*D7rgzXS&FhSW38pN#w-+0eyoC|{jgvG@YEN%x9cR&Zu|9cX_(!EO*7b_}2E+La zPNyF9AMvzP>DX~@ZMF@?DjKO_w>RV*?Sl@w#WCo$h;1@cDDefpWN3^~`8 zo#TLv6IFPpRqvNuORnUWkp5khF<(_=kOMI)-O}dGO7e+Z*@UWy+XUPgko&HxFNdn{ zgNR|peK+#q$%Db5d$QO3CBXZ$AQz5-w288J=ix080peEA7Is@kU=3>6_`7-Qkr6m^XeiI%H%w7I_1PrchAAZ~ z#*fri;8|a;#`!8Fw5*}w06Nn6Cd`La&>xR;!3>z(H)bjda~;f8>|s(6$L|b=H6Y~n zD8__G$JE(<#T`7X0Sigh2-Fvo`&{qwXV4mV`|FSF3Z7EvQ_tVVXo`nLC2Ft&4UEAB zlutLzN;Il4W!3kK785lGJpit?WfQZwWe=xBl|~5FXjc#n_P8G)+plR2#6TF;b0`Z} z?R@$aujxojkhWooI`0}hMS3wDmAWSTM=c6X&lm?s? zT6}6PQ_^5>TA|%o`f;V}zL!->cBjhtm3?>TJvtDLRdgPOYJ>1eA@ZVxl^Hu~afVA= z?)j+RBL618oY-Vub)1ESvPooAcMq}WA_j0hI{=*I!S-}aqE z^vQ%c(n(}X&q+%DGLu{RkaV`Rz6Qv!Cf(a&VTJ1} z)N53N6t8P zSkWHpQ-x`fef1!5E_aTgrWf563*H>kfir2>5v=>=aRLVOTH9NRdgEFnoxx=jk$sI5 z2?Wz-bNz?e?YSE7BU&8_?Bv1j?XAyTuq}ZS)O6NWC7)$Bo;3*71WIn~B;6A3TBE`( z4JftqjaE_(M$i~x>%3hS2)tGO0hBUduL}3OYEV9)9uii381bHsI@vaThR!zqM6bAA ztkZqJTtNDZaDM=z2zZyo)(~|6!(Jh!UfDGraJv55n8Dq`$PZ8N-}>FTde#!SuVs zAFgv)`@Gy)ntcX-js0LDC+8-R@Y=M37^20M8{SJ$E65}#F%l*CuobY#c5-;97mY7b z-7V$pdvLUM&w$olfW`jKo_9$lO^e)vTfAjm@r}KSD{T-Z?b{qHXsa`s7u_ZB=`aVq zFun9lG09|dm^V*=WQ-EgrFS82CBAyGKxl-^u3yVmLC2?n`A6~4`Z#y(sHo5D$@q?L z^4noEeD`09JLg5xat~jb~piy!Iy*x5572`Q$1W?E#?7rl?QV+P2P4^U%wKPfUWipeD55Zeg3x zjBPG8vk+J6_@DK$Cq#gEy7XsH3%lzpmOq1b1n8@1Tee=i7+d0+$5*7lyymd{^mf6s zJL3ix!jtlLrkdYL9Qb$VzWgXCUhO_z#(k}RY`9ge$>=ORVAQB9@|y!txK{W6IH9`s zohyZj_crH+$ufk8@$QNtUyT1k`|`L0 znmc$q$SmoyJozWd?p%(*-Z#7a=70qR53VP*X|u58E7jP3{_S)d(198n;DkoH(Mcuu z!){D=F#e)xE5M>ueR+kW&QNXE@K^psDNvFSY1 z_V<{f!=}CaWr!|CVy;E;BZ!)OXaGMP8p(4ZQ6%DqjXF1dCmbk135Y_tr2dvH7nh(p zImk&9=j#2q(^$H-YMX)5(rF^Ld+Y?j`})0cqk!$gQ+M!1#!$CKjk$kUmS;LpbPVApFmLEmqbv!D$sKQXiG zJ{AB3!AfIBj&oPKv637`@ui@pwvNa5P=kHnY*BlWu25raYuIj`ifq6KUxIl9#*)Df zXe_Zq40#vF`g?I#=e^}Wx@`IJgAfGaA!XKA~DQtjM);f=GnCi7|$WK~wHp$bQT=UmCO0A~v}yMyxxee5;*UkbzC6b)Vu)7d1U}TYp1+?RV6~3WVd8wN2`kmhw{)WM zeGJ@oqhpUZ#;YH!b!pC;NjY58Bq1c(Io|=JU5tH?mcGjVCjnZwJGNXmM5}!?5)E%q zGFI0Xg?nGq6t3QP_5lH+r+SqYo-Do_$k!3n(V77|Uw%#qABD)jaS$ilafQi8r~rif z6gtfOI|Gu*V|+tLYIUR(K2;SL$9{8B)56`@XX_fX@BX0uVaw3JXgT#yIS=NaYaZNC zHtWVlfGWK_sc<71JyvPmY6eG;4+G<>S=Ovm?A_YgPJz6)q#0yD(0AO|?bl9cNvSE} zp(>?STM~-vbm;s$p7=25$wtdWV&P2;ux0t0= zwHVr_BBT-{_ihp$t}1;|z7{97(p6z_ zK@@31L)?dch@Nhvx?{oqfUGT=lrgryH=Dsr4DL2yNptJTFR?RBZ4Lg&gY~J7mSce* z22WpT_J)?skK#r5-tX2@(tmm_QI~?aM+UJCA=7KNZxa&(64BNW8Blz+_oI1eTT8{j zJm16dL^tOwHY3{*8!lZ6^>9@LhQmP2w79BU505oyrgCFmtX5+9tp%6eDlHb=@OS`1 zJuqb!-gI<3JAlfY@WeJg;5wKClVT>2DstiZOil{4vlGeK-c@~t?)vSDL1y;wFaa-f zk>!*B1C;o`;N*XolK*L9W1`vuhSVlwq79u6^~Fex|@oX7w-W zO#9hfc4^mhEu{?y({q=*76TlbhOgWB)bnCn&41Oi_CJo#T;`{IgN5%b`AG>zyw?xZ zyQWdmcq?M5dw@gPSdm~soU`cPF{=v*Jj&9cQ|yr}yv5FNDtV@)r({Yg$to;Zl0n+N z!jsKrbE&XbWV)#k$J*<4!8dwBK3XA+*Oej#EI_>J=M>9=&YNoB!cas{w?IV!=zo6~9an(;96e0nsLFft`DBA0%F)ru5J@{|eCm>jdbY zfxfukPE)-Bt*u<(I)|QK|NURHtD>qg89}+l8}5fY$5AyPTG8KUI_0%*X;NaGXJ0pD z62p4bA4fGSt+5tj*17wx%PRZ0nOp0mPZ%cqC{46nBd%Zh{185D=R>_HMmO2%m*{DR zoXL)=54?R{^XI8Q5%`I~PXvA<@ZUthM(6cde~?-evY3Bi^O+QkzjN;!;g|6{X3^*{ zHXBRtp$Fxe#uhqd8x}nA?9Hn)zh1HwAMy3u;!>Q*ApKGrEu7vw|LK`BtuynqoINqY zbB}DmlObp#NP6?QXXv%Y*8T-eI(=lfr9Pb^!EF8$iDKDRjp*Wi&U0XIVK1k-^ut$t zXzIZ+jXz>%Ukk4OyVi+U-A-#LwoxsL-F7{MBms{{}%w z!JPLgm1!Na{dVBRB=7EM7MFZVrlh*3UCk6#lN4UtVkIiQbl8uKN;p^KHdCHh_}q)*de0hdfCQv9+@V6C|J! zx-`V3h{hlxeT9xbMUB1=MHRo~-SF_EzCjf0VoeQOSej>ObNq?({*v)R}&wst5s zS=%61Qx;}(?~LR7lL~Hv)vLI7TKSu>J?(o?j>P?5tGF7k1a$X%E;sithS7PH2o zh8WRkcwvp=q14pwkdZ2NWLTqg8hrl^0tlYq>m3^eVXUYTI>qe!d8kAhD90R`h(WUZ zunl`>F*`)sB-?VLHe8mjO|z(V*wo7%-DGhYq3*I~Fth{Pv>&zOlnyrL)$2!@4>F7G zH4FWo_ln#?ZNk>qCo|uYzt| zf;^*zQTONoJMkIH{+;Ao@@baL=J}^!v2E&nE%kTH!I!HkCE6SNwxv_`HgM~m56Tz< z3@~x!kg@WDyu4L7v#>S13sv8ZhHsVscE@1Q+gdo9IJGQ9=X6bhs-zI1~J} zb4>8LUMHBE?5TxTgJ3J{uU6?PaH)WR$F6Sj9tB50!!1Nt9@n{s$<}w0v_7Hp*s1!I zj>WC(x%l9zn(po$I>+hFC>%3g(&_2DQ)cv|Ik}4(le`Ns;bFPAqwpfN9wfKFR#eV{kU=ZsLm3qHEZ$I3+BI*2T(e8+ zx*U63DV^;ZJ zPr?=Ztg*sa4uogArbXeURd%A7nx< zc{|&pMD!rCoR{5b`85M+T6RvU)$(+_w9D77XpEpWQ{RL(1(YHXVsl-TN#Q5bf(bZo z$Hc+`0eYXC{VB=9-}0+e1mC$NDQUml($RNsk?!LEZQd51VSXB{?oH5A(Y7;ZZ|VqI z+s%iVoSxZ^&$3Am1`kbA?QvBWz^`bbIUPKM$v} z%T-c$X9Z|<+sE#hpCn&F)>`DpMoSPEVDUjV#`RN_gi1R?zjn%0c}zlVEKMr`aOZ_M ztBfkNM&4Zm0Q6n10RuQqyO0hH9S0%kK?nvAy(L1Q9+YpQR)q$z5i?+_5`#e$M@H$H z+@gu&=yp%CwvL%X&kJfhkHZnJYjbP>w`Z7UbPOr?sI zVzgeKp`7uN-lzA%tW1Jv^-9`y7F1KQ=Nm+=md*MU9M=K51Ijb0d8s39qSfCbb`g=O zl{KkP@7w#VDDz%-FDJ))tg4=g*V^eu;V3l%Weeo;-Gk1K5%-+tnjjL?1ROio#^-c% z*+r2bq#*eQvQyVuSBo+i+{>=_k#(NEZwsc&Oy8rZGSY4r*=fnq2=PwK+i- zj*dSU^f}TyJ0u$j`g!6{c>c#kL2ZV;YA_<7C|olR`=+n>Z7;>rCqFtp@66Tbjr^#t zeD8di@LRAKcWfXb)H=Pa`bn5k)ZA%}x5r0@s25RIfW*jlRZM;!xEg4Z(SA2@I;ZBF z0&e-b@>%<^|NFgocC{FTs5|lc+T&ts$HIiMpu7LTcK_3Zi!aRqi(?FV)k282EtpbZ#@B zL!mv1;*O&_0*!`M(qTvAQMWH6<5qt0l1kLm_Lf_clo+x}1G>*fL zA??d#=#LK_1IMf8iHR}em;eDLR=iaF-k$xN;42=9WLyp&{?P3wpfN)M=FdnLd85Wh zVg^jjzQ`iIm!wG%@BkP8{K*PjlD;dlmwj{~x#UT1GiQS-K{MOI5+v#Zm9Vjac~uMw zkcV8upB2V>qXi~KkCnIre+BGO!N-n+?>lXS1!>U-iUsB`(ko(z)-St-T-X4r{r1sPiq9PXuMg)VaES z$4Yvq@h~T0Y1^XK(dGn5TyVU4w6p;vPpI*-vfKCHjeAI9^~CoNx|RFTz$5^Vs$2Ss ze=hKNNI}h19I0+=r^9Ps+K!>KG+KeGOYYVg*-|Gc8Z6*1pWW}RI7(2|U99jB^&>kM zv1&B+UdM#?b8^=2i7bpFnF?B6&zPyoaP|1n&C*8C)Y7m9)?KTMF}ruwl{yD^iwjna;GgtT4SfV!{>Sc#^{h{j!$mAQpV`aXCRh2Wde;K<&QsViYQsYVQ6YHNY^tT4?<>^LDV zvke}(Zp|JSba`uzZmf^GQ@o`L2uc8sM!CCEEK3dWS z-n_R*=C=$Nri7nWmRDnC1M4fTkpaQ`!`$+b=AWmSy=28DS;!AOc3H&iTh!c+0GS`~ zL21=fL+Xx8J;5r`J2>xrI2o&`=`P z_Bqa$EI*YP|F{{x?>1;OEX*dpkcg%OmAN-3v7rMi+*A%T9>} zEd36B>#j1ThD}FsNg1zbgC>m3{_t2#(5Yz3KvzEV7F8w*ofO~?%KP(|)a0;a2`t1L zLLFp2d@&6BAcGjA#w+g*SQpUmGMQ*gnp_gZwLv!@`HL*ViaJI`V04a+lYGd#+=boN zyR*jj7xrUiOk>M+qci1b&za=ru!Men=!ksstU+Px!9AoE1g2X-fxIQHl`g*M0MmeX zqOzZ()eWH1s_M8Xg9HzKqbSoYeM9(XiF|VCAhrJDhZLnI{Z9SH^(I7up;U1Vc*H}_ zlO%}ZzzlDBVz(Q1hArnh&13PJg0dh&R6{03-}x23UH8iiV24jt%&T8Spl5G5t0zP>?tQc*5IT1wN*xL_wWbEwyOktc|}d;wavGm~O@ zdM|^6XN5=KdTOXZDE|Q}XD!6bSripJS|M{w8&e3hW|RLOf*1x$KR-oZ|Jhi+8Dv&M8k0(s z-=%K9b-Ojlncae;xkFKVvZvNJa$vDLS38r#nptvVUC1h;Hr31g%87(0%S-<|J8s9r zOH!@kR|_~sCSqG8C!1mB<6ehp#JKwHTRS3R2lNMsu1>2~hMF4D?s<}{XO<8D17Tdm z!x%l`Er2_)i&VT9EVivJXJLmgvV3o8+! zLVI1&+B7rlaCVh_(y_b~D8U-(=Ilm%ZrOCF;UkP~GFxD>5Uyr(v0Jo1?4BV%FPg*A zexD*6kz%NmClm9!dMLsUvU@|`*q;B~`3x;$ukYQR0qcWaw zl96^EF*&)k2?G%{b1HR@^oy%>>l4!9&s4jGwu}1mxz`v2ZvaDwYF$iQJkfw>Ma5fa z|A9UZcB$r^P`g;LSlM-4ZTgn|SVD<<1TDXo= zLsEva(xs`N>5FFm3J{KQj=FEjtK&;N9MrFGD?`|P&G z8t3`RtLbku6ca+HoV8uQY{`08z9mk}n&M*5qO5tBTME=a~@q zit-c}4^dIGfv@C_YIW~}ho@C|Gt)|Cj=7Of4Kp1U;_y^luY=pX5OVsr@s4Cd(e9Yi zeQvZyN895jqbr({fk!7!bLsjcj4rC1CycEee%sb(8HgHA+4J?0Y;+XxhW38>LaO=B zftwXF{D99#O>g)t8I*2IICzbd7znSb1e=#CbUWK>kYQc=)dxp{tzpYo(I$*9n-oKdk| zvCbDcN_lf*lDO4VV4~SFF_yTsH8FNd7)cCI&&K2Ly}X2uA!gaGj&&~H&ewW&$X8lJ zLt}MT;G6-(-=IPm8D|ToL^ow3C)v5BERo!JExho`IJhtYVDUQmzD4{26JQv~?EJVU zI#8QEWjetBL!2fc6&t+2z{^sB6q$B-_h3V$(gbI%+cG+ZG-|MzYtr9bii-}Cjt5ll zxoCmsPSR+cMmL-tquW&pS`6aq-qXXmO1@2qvOww+c}_LA6Lk_A>avgjI4XZ(XR2GZ zTZSWqhf-7H=e0yNrt7j}A}Um1x2lIb#&VrRGAtoNU|aITxKm8b4eDi>_FnClkPt-%uV!=b*-qC~voB5!=fVKaPte!bnruB;tC4y%Ra4x| zV6gR!KY$*0tKI`3J}eqJ*w*CRk)m=nj#(DWsQ%4F8R%%{f0#eZW)LF}rpj02o|ORF zt!nvjb^`p}=yl^QA}~bb;MqP zr(>IoE9dShr*Vevdf_$Y%?}n`x1^2&`UY9r(Hwi5ezx3|l@QnlfXi|6D+&AFn}0R1 zmjpJ-%n6->%^pgJi`ts(B)l&t#} zHLmNO?-zOBZJYLZW>do!nYwb*q-|?B>Tvtnkb^n2w6nzDglz<_p`oGJ(b0~sE-$Yy z&(w9f3`jRCmGs*8s-7z|WuQO8I~iBlcKX%`TOngH-SJGTV$A>tEGMVsT7beC=REy0 zGsY_HqnsoLWA2rEnB&2UEojOI6E0`3l)!~sF??mtgwUJ?7Y57F1hh6Q)~+~^QQZRez&OwRl0e?DT0N$l|w$$>Jj8{OchKCq0lI_mFgAWuDsqrH#=Igpx=MlJh60}Nj?>jkCyc9OLoH<9KfgLnKBJ9EgFaW z`N=mgaF+bT0IE%QS{T-lMgR{>R`x$Kxj20%0nUaL)gHm<@1U#qiXmqZs|0Z)KT>NBrf{Hotj!jPE+FJMsXjNaWVyAl zng|gQiu3F(uDudU5Pj7`D%)@;q)DbfiEt*{)#u|@Q!{b+h_H*Wac9{1N7U|S(IS67(v5!+nfNeH| z2Z4sL^X#pv5@J9^_hXpT5LD;Z#VvFRq-#rRQm7yiS<{E{*ysmf59|6238o%6c!%?v z0a#w$a&$0uNbJiPZH3EgqvOO9KbG5m=|;$oU31m1GrZ7uPC!}RnwJ9c4lVX6SYIu9 zfQJF6G}`0c&{(&9OZ6`#JV579{{@m4mNT>EpX9?pZ&Q|6iAIUde!D`gbcKMGc{Qec z>|pR+a&!W!DHzt|JkTxYea?g~xEhVLrElo%phpjU#vZT)P_4!`J5u?Jd(CykR(aIf zFNYI9bA@ucL$OAF9eKyXTPPV1VW@1xYj9$WgD|d(x!6$}q$|A4UxY--s%P~o!8W~{ z9Nc|#n!3#8WlQMJ*Mj#pHFWK6`}-h66Oy;FLxQbwQ`8QJpT8x_qM+STgf!m*C_bp^ zol&~h$FJS*k99VKj$okz`rxj|KDeU|MFT- zL*}-qq786~7#uT}nP}O`g70|F5(8us69jMNeNJ>vuRufKb;3xVl6SMVY@D`MZ0t>a z$BK%9i+1>%J0@66B!&|M?{qZj=!bzbh@OL05fMBkbG6*tuW=eNhwyXIbI;)TuA1S8 zb+(&;oJ0ZUDx}*x^LT-(s>6IrI?pZ3Z^p@*)L8gbdHzFLJrGP^lZI(JH(^!D0&+A3 zT9gmOjRmMX*iziJ2Lq}r21aH_LK%BL&LkVqDI2d+Bi?;5fHvQCJSb~; zIjK2f+6`DrU7a6CklopkEy*f5A+zAqUO(ycj6Mk8J*amFt{l^Cvb0Z_-|^KMn&eow zreH1aoSl~(Col)55u?>nw)UPNRW?rL1{}eb@Z+wsvTK1wBqSa0H~*x7e^R@MvQy+Z ztbyBs9jw_;?J zl$k2_BYQM;BtIu2_&hw`i;r7;AgP5Y)J-GJ4?TgzF{_N>r)Glo7{KIVX z|A7BXP6j=-liCn-+r>HP`mG7RDK9qLjvi*Ik=6IsPMMAGWPI@^pA+9!eW{Q30A!1z znImDs35t3rH&7Ou)Xhc=q#lWO6t{5zEQ7WzLgc<7L^QhQx-G{5hwx%%b|6iX9~Ib| z-W{n{<98KppWq#tRJ9XS#D%i1#K2Da31IABxIviCl%pKnF^P60gw6e0ET*Az`Kd()Z)^6TD zU1awE^y`J7t1tcqo_{p+KhI&y8+sdmm1~1F=ed=s@?*sYGsB9lr-Mcz!GFN!cu!~|%GZ2`aCYu@_2{{E#00Y!*bWT{x z?5jWCpM-?;hk=y!$JYiJA#*iQdr$m3iCB&Ty?1bpW-BZ^q%Nx^!0vdO>P)k>-~MY? zdL~TQWz{}&{r;7C*FU@Z7qyGiOLf-gkplZvAwi!vHaD-V-}z3G9d-74dfGMM^j}=` z-)r`Z$G@x@g%bd^pDd`URll5Uw zcgOs0;psAE;8M2JP6{q!lgRx2Ul5ByEUd zC+2;fc`_`t)q#cq?$XCWWAGr0TO`*!CqDi0ib3pFo^q(*Esg=sedW20%a+`c-pFOi zG@FF^Pz%NdIL7ky66B+^AsG`nD$sBbk)UZg*@*<{-152kj>^$|n0?V)p|cMqE;Lc4ytl(s6^0s*b}VqbbNma>^>qA2 z)Cs92VdA`Ff`CIp0?Cq6lzVa@2}NnjkCBULQcnffcP01U_f81ioPbTJCziHpTIKgi z2>PfDEDSL2xv(HjRUU5AH_K)XpLq<^9YW;HA^V0b-K$z%=NO*jt^nYqlM=80eh+m_ zz_Xh5lJcCDIHY-@?7Ktt4MrJzKRJptJ9 zVSGH7ufM1>79M}U!;pV%H&CXFvO_OL+!l6xuVz94UwQ+@F(*jD#>!^V_8dR_h%4Bk8Qe@(|ZC?@IiJHyG0g2C7kz1A!x06D z`&MZVhud{aZk`}#2~EOV=(5^Vg*Z|f%gv2FE||oF<_yPI^AF5Y-P0xe?N&w;YRVEow)fm z;afzbpP}}dy)?U(?bprz$36M3PX`&Sq`U z_c!mdk9mktuM3y)`8Z#6osr}R4H@Yg->v)%83QJ1%LE7_1(K&}n_`fl*D2|oKx7Ao z-x0(TR`C6{;04&pU}7A} z4KU{qCaZhxjT|eq)66ppxVeC{k1Q-ky3m1gi>(rrOm%NdgrT^z#AC5?6E~=v8jvhP z?@a7Q-`L%wV7G#q<)=#-o3~qW zeAx-qe(E8WEXG}e_CG$6-Wx+gleewMW0Je+;oYwQ!sc?cTq(ly?UYmLFz20x=;Ogo z=hS6q*ycfwUyQT01n;Z``xm#g%jWVxUGdnKZU$%JdP1-5U~@^T1$99JCd~jdI#H8d z-!zNA=!42%3J^V==4_2Q3q~+9sM}lk3a7CVK zYtno^S9ueDn%$0Jvh^|?#Qp%R@N$L3aZxEJ%FgOTgRHGll;1A&-aG_Bq8B&nJq8D zzV7&o8=t)PpE~qHkN&xC`pEL`)8D$fu&*3_#%$t_fBS7MIO_QRbo!p^w^{Q?N+vj3 zpPjMB>%TJM^FZ^Lf|?`Wysmspxdx9hxF+mB%dHa@8LOWNDUp73AYpb#{7NoP`$P4? zH-p*CvpmTj#BC$rIV6<}?%WZ$J-9CJ-O| zT%D8w5S!AbVHs4m+jWu^5Wf68b1a5zH*g50;4jg6zv32MyZB{Y;ollc66%oGncEKo z=(xjQSG$wGRt&^Q{c@r3%XLya5XSqmv7Hr1yiuycb$rFMv5%+cF7h91^A?xZ=JiVv zXDnESlg=b_<1JF~H7Gm4`N23YF-kphe@?psh|j?*nD&>II3 z#N9{naJ4qy4#M$iEbiorduU8jI!(T9z|W)TEyS9T5jB`duvEpDHixz%)u}9P zpBeR#WmQ+%H8@Oa60`7z8`osMmyUex=K|;qPZ$Kz%-$MT`^IJ)SGLe`3))9-tKCsOjoW;Ee+!h*EAM>7NWi^+=vv{&(g~p{^^h}%*kEItJr+X9L zpf2lUsA5kXcCZ5kP#NVWR^u&9?j{{Pv5g^OlDMX%(&D=pMv;^1aie$d>6)~6c<<%+ z5C2A$e^dfa|NgTzGs)TCxsP7_ank?fmx4~pT189{Rjukn0O(I{0>9ig8J$4_Zg|#w z_)hY&k4;4LL)O~Z7IC$!Xo@zTF$UA>5-_1xJ_T!qU+XT>F)pyQkj(-JwRxV&S34V8 zp-&x)?Bh0@Q*WLz)vd~U&C(c$@1S!JPrWir4F!Z^N8`SUgrbJxQ z0p&c+4tSf!w`9jz0JlFt0MUcHuI-UO9)^Q~*bN|a12%y_I^#D`C{rM)X{NNkC^l^qJFW4*K!AY{Klf#Nild8fga z=b=iAEpDr&pu4<aPCqiyi*1MBV*}&}{G1HiDVVl)HXRmx@AeOy*NR#Lf6BFHPwirr(f|gNH_ZnbU zQINRu#bpI*LiZ3=j2>sf%)5lKciHEOgrZMsJ8z>ZfX|Unwc>oOANn$s~5Q4VX2B z(3hFZMR_o;bIf6iahMt$W;e`3%4E5yz_Xb!j#U>RL8PBDD(WJun(#8kvhyC~jJ#jQ zR#`=rB3~x8{N^5`$Ua6})u?`Tk!iOl!c$a~-OYKo8^w{8R;|?N!V0G$od@Ddnw0a^ z@BJ1VxGyZ+qs@^Kdu(YttQO4eLY3=|_gY z&FwX`7t}k;mmFIg1_1f{A#uocn8smtog|aCoEoV8{b)C=n(9F{rhb)93>>@TKhH!q zcdpg4!ms^#kkVhJP=;ws<-?4htd<17Y`GtU?~eT%j&p+;W&f3h9Af>3(ayFhsD!~^ zQXuC&_B1~zO|LWLF+I1cr%iQjkkrc|ozwSh8yUF!hec?2h9~v}MK&PKJTz!HK){+H zigICIbXMAAFURqIF?YY0jj(qxlvx z0b}JGe%yz=F0ZFZw}T$d$;X+AgmuZ&)G?lMec3%{ip~Bem1C`)xe|dZ=Mw85P94sa zXHC?d&~C$?*ER1uPq)kyCtL+SjREhG<&6&{gm%<{4%zejV6+^`m%HqMVXc(3U|Fzv@;>>!*X ziLOIi&N?WS#wrOPTMOBk=!D1Od%bcYOuyP^XQlWP>cS5V*v#5RmaG)xYtq%|s=390 ziW9x06A{U@d8PQG_AiM}>Pa8&wI0m04jk`wf87nvoHZ#&g!1s=g zeQ8%+?!D)3e8#PpO)7B9PbdSY>c`jI{sa&jk*Eq9`uY^YF2JnVC6%PbsAaCfmOWc= zlb~tEo*_o(8zA(cUL(!t@u0yTMN7MsajlS{^~*W0aw>_#n1GW~z44k=xy5mj&MHH= zWlL)va!Wh_%bB5>@nLkug1I$YfI^PSxoN6^tR^vbb*f63|eaa3X0A1+Ylk4YDF+TEs^5BdhxUT{6`?=Rcu85$3Ga(8vaC^R;< z(ja}9otP(UEY#Q&eR%Q!R{-}TyCU>D+@;j+QHsKZe#ubRK0s{5WN}hismEM0^20z@ zT9eyF`~Qc%_Y7-tTlc+j7CS0k`UC_N2uPPcRXPNugc6#R1Of!4cbtmSi?q-|fe;`B z1VZRAl_p&h36M~v*U)?O%{*)Gz1BMKe$V^m>~&pdANUZ)lU&J2eq%hN+~dCg_uB5K z1kL2Z=Q)b7S-td_2y}6sb^UQK_2g`uIK$l(24A(P8G2d}dg=|qGq+EMu_XBIobdd5 z+i9M;^C#(f+3|}CK<__3r+Oo``iNneg83~r&l!HJP zF(c232S~h?PWyJckIaj$I*(P@Hduinj7f6j7Ds)FQkCm0#?waB5{tt*2X%J^65lPp zvgWg&R`e%sb`=JjEu30!4x;5vz0zi7<+J?klNRJ%vS&-0E3=-QG-i^rn4*ZYUJl)u z7*iu7QBfUz5f@W?8v)Dln1X|+H^T5gt1Fnp0hCv6L)JIY5ZAS}XwUvKoP-bsM3PmPS$teQat?N@e?@&% z!zA$X-Z47Ev^LDmVG}Tl`sj3q?z00pVRO?|%>{j7-S2D(NDV|Ck zlwV18ukdeAGdf7suz8PL?73jpv&`2g0)E#dp(Z`LuHyqBaoF)^#SC;EG#|mbdY|lW zB|}ER#b=-Ve8&0fnIG-hSQsHf=ioR6GPO}_|AS^1fRStddDu*1*U@@SLw9%m(Twy9 z3ZxBqU0u|=vHl1iy}DgPA-h~g+K)Tqhsa#lYWVP0g4io>PL6Y>PE@vbW?n{~Ft2i1 zcts6Q^baoJrZjEBzAl~13i9JK6#BM;BgBKcczPDQl=l5fbcuUtD|rvIfrKm-ukB(A zv%N^H+N`Ymy|0AJ_e}ODNKWll?)PwsbNxm0`-mYRa(x;PUD1x~5Wm@Hgc~N*x@Y(v z?a;0`{d8r8%aKLl%fPuPU-a~YM;^9^TA;j)TT?-ANWF)@G+Ht8FbY zq$Sa8)TLS?r|Af5Nn=gz{)YK>fLy5a@K|=Jm5v+agn+J?OCRalM&+KhJf~S2`}(&v zovTqvU@+NYvMz3d0dMRXiC_YX!YecAw7}-B3 z{1Sgw0w?hYNe?Gj-7LrlNUtg9Q_wW!Mu{^zH?G^g?Z z@kum+V+Y*wP%FK-=HFP-JZr0+kS6jhIu_+AqZSQVqhi!Ui7#2?N+Pmvy~nIL@~~*) z$tM+DRa8ystHhc+XKyn|#X2g`?>X(di(hYLPO3CW9Xx9IeR<<0oxJA~NTHg!Xiv~Y zsBg?=xXuNp{Hk&bS1Q!jYo2J{XyA+Mq2@L2Zp>&O8=)@|nd!4&O-(~6Xz?)=v+L6_ ziHF?xIjU6f-|Fq;YJk`3TgmixxpQI(w>g_^3t{1-@Kp75cz7Z;$c`FlSE#0@_H-!p zjq-{D(&8!1IKF*QjCTNL>Vp@&gFj^FE6gspb;jJQGM+|Q1xn@a-}ACi2>`VE-D<0) z->cax=Z{;CgIgkB%7gAZ}0&ZzN6;nE01b@nf(A&lIaLg z5hzR6&FXWzS?@Cn*cJ;p%gF=skWARrtxK!0M+0BU>^3e|<_FB>!(biVh3+rEl_3#c zPL9cP1Zws}WCeF~nmJl|9l}K4p81$&UxG1KxLe#tcPHreAQ1vSW2K}dM4?~^uk zRJ7X(dco!}A*B~h%-lk7^(cn;S8fZB4rP8*>*rE<1na1YwMrt zD-B0zv3=`gst=Pm9oxx)uJvMp1{zZ*?1+ExzWGhc_(^X~bSl-kQ|dK`_5Qt>$V!t1 z@}zX0+gG*GC`Gk8DD$v2=ldGweDNLT4|5&qC_1l*_22ReUVL;Lf2!cSoM)(X`+Qz` zAzxHTtw>)dc*f;klAbGCHbHo(dA|ImkFVQjE0PYvyQ2s%x@lYBK#bOZ7@0&hHWie; z2@kPPYST&g+qZX`DH<%=hxQ*uF7Xe|^ehAM^Y1(QEuy?d7QX0;1)Q~DB{UaxRdrBR zjmee1aDqG?@IbVv*UTPfdoh z^M#q|ONa(^-DW%lcFp+%_Ic&AWBN|AdAmI`_(^|mElZl;j@I}(KlYEbKh1TP56=5P zfurVvE%dUraOrhtRo zL0th4aoy$+I;ZDuoulUF7DwauqZx&rKKvFsEX><5w!M`r3tdBeFAhM32U_ak$0}2A z(=1%P(<(yf+4wv*CieaJr(z zkbz~nb!{wr4V#_SaP`NB3Emn@hmGuU2{jFmE5(}8woVkKmZpG^vfK`ZwBO0>Yc=~6 zbX`@|3EeGfW=Me7L7xskzV7bb2OOA;rWF{hY$RUvjgBxc za$|$O$B+#64jW)hwt=1`Y{1R9PEA>gN(&1VA6%?<91Pj;T(BqveZcB!Eih;m+7;Bh z9C6N@C<9Iv=s_@>Ckj@)C+}^%0FF}ZjSu!SNmtcKV+#q)P*K*##d>xl@u(V;%!PR) z&5?(9WM(?RkqB@O30?ChAvz2}(()+`lByx9;5opL(2t$U$YbMb30u*j)su_2j*FCd zt*&~;RN&=K)n?kv)i)BJ^agM$hbCV=vG;w4^R!&o0Awpi`5xf8b=*p~3QZpH@|s6R z#=c2>+SSz*6&Dp1ys08^$Fng2!t2UkkMre{-Vvum$PAN&AF$kM6KcCXYXx98^1@MOL9k_pC>3C+iq!;)sex% z@X0s5HSyJFjZR*t00F)&tWhA5va{WRnx{WBqcKKI{`qe}*va*`;)9}FFtk<{!aqCN zqiQ>-nZ~3B%w1546+HaDPsY0QS)JW&@oE77Z7zC~ZQC0RJn8)cdJ6>K4|(!=I>(WY zAwjfR&&7AMMabr98#4dQu(rEK=Nf zA1gyS5w>{8>y(qoG`;DGek4KT*$cht16kf>=#b1r564q$P!uldYLNkA2Iv25=_MGqetWCSx!yeHJ8zx?ak_)2-V}99Sn0{M))pT8END2CD&eP82S;9mS9M;O- zeNvy1Q{V4eM-8WScd?mVAjg%eQNl!(V$EJaqYWDSg0v3Bh#^*adlso%)O9Ip!E47- z6fSC5C!ba%s052|0{V!rP^NC>mf!UMcq)KmQnU`TEjlkB(6Fj zb#I_Udm*mZRl2r%A2&j}>UVoIRZC zA?e}MHU&tyZJx8I0t~-e@HX;YOPb~06u8$&+?L#l{CYz$)l8Uo{={{NJvvHb%S-0| zBpN9HraD1>-wgIPIs#-{t?IWGdhoW;YDRZMU~54%zi2By=g(f`SJBC*-L7j0)>_Ob z&B7P%T&-?wHrELUgCOgcmrN|o=K}Kb0s=DpCkNTNM#;-=aZ7GCh5mYh%?3Stmj^@| zvoh-(S-6p5oF9Qr$s3aP&6I>+X3Fdb5&JD#y=mhFE=AK-c~j)6@m4{X+q^1v%% zZ<`-XFS692KX0DqQhXaCGA9QU0>w{`PvU^tkHivJiL*G6nFgN>17r2Xd5(hZ< zyd~A!nuhRO$h9Vj-3Rw_INK3kDw=#}YoGa3UAR9%u0YIM$8O9PsV!BWrCR!NSn+&H zIz4;zWU{GOSm{;dtL$#fe90d%Z$g)A-F-%L)P>W^$6zT`hl_Z2AEwJ^Z(!eyg%9XN z+5G2saHM04C$y49$Gl|L*`;p26LUY`v2V>CnCi_$y=myXAw%3u$XebP8&wmAsk?#( zl^?h6hy$Ls0YBJO&7WEdk2*c7gSYfG=wX@CRl;lO_OnFyY)@98Ew;s`0^IVbwY>t8Gn0j!Le1qvE#neE3iyZ1-ll-@_M_LZG7<-$eUEf*8j~ye~={ zk(hP_b??tYR}))^R%esFYuVxMB3_UpqZ^MVDnewu&*pku#4~lcK6e3mZ0#qMlN!=w z8ON(w*O0Z{*Ao+Ll-+HTF!y-NyR^C~KWN5PKTzTk?WCjK6(f6;evZbcrfS4%{?%n< zYPP~FC~L1_F_F8)wogRZd0)5ZvGk>f0h}UlGs?dw7uG&;*{t^b62jvaC@!!~WIAXz z$!yaU;{{&g*duc#4QJ&Dm35GBXZrRQO(`d9*(gEo+OE;_xiTB)mX*VjKw{1oB-3I0JMk=6n+)(cY0_Daub)2kS)O9w zIW+ikSb#stxq)o6K>DDbCM`CwXJ&Q=BicG4ab@gsA04_YnMj1#hRK7Vq>Ry#ZlG?X z3db%49LFbiLn}z~*20$i6Axda9leiYlbKdr1(v`ryaf2N@Xk|HD}~Y9TealW`}0?o zw8Ebw;_>3B7h9Ddm&)JsX4+!|omB|Tv(#0%&^M|Pc9bE5B$_Im+PHMWVlU;^z(SO# z*ut}4L;M*Yu?s?6zv)_~zRmcv73;amYL6U>hg2*|)?1*yDxZO`#bS0U!k5VrVtJ3U ze-8%X8IZ{FWr*|oLXe-K1)Tp)6?351gA4^+)fi&~|EX>#g!b-q9rHbtq@jku=?FbA zWYysIhg^v*b9GK!4_b>dUoV!zRMWLgqHPkd5`R2 z>4Sz`DOh;sI7+y&TMrQ8V(9h!+b48{NXVDLJh;;B))k}dm#x2+|DZ`GKHL$PKJ(6a zY18>~@iuMq5+|O{i%rb3FoaA#kqp?0ngccEk|I1zlyx8i^hJ;zIZ)oK2v73Sa831A z)ZMl*-KY9F)jtu!t#I>Zk^ThzyMCypkv`Q)rTS~Ea22d3s@CK zSE!!I2BULPGj8t;BxlSV-HP9weX8SkYhaO~%kxn^XRw!KvXKCID|bC3-;P({d{NAe zpi=LU_x+{Xp1$7UAVqL+Cs<&Ez0JqnzjSNo>F z&6_z30ovIYD*`7q!h>6{#AuYsJLb&6+HF_jWo>LMlKQo9EiIi`H$0!zLG(y#r#kqg z*RIRyQ?OSS=SD*7&!m?H#~WTbo9^xFVarVuwzbnXMxKgkf&_2?I_BNnqjSAeE*A?! z085J&YP5E^$;Fm5)&XBrkS2__g((`TW@4Pt##YA05ODrV0gz9-M`$h@FM+3SAY-v5 zN$+G$i=lfR`${Vy<2;kQ!`UdZS%f`q-b2 zA~spI-7x@hLN`w9W;iyNvaQQ>eBE%&%2<|#Ek^eQDrGdd{C;9(V3L?@@f3pmxF&Et z67#t^T^eNkiIi_r3RUL%jvKV}E|>2LsE{qlt37V0N7um4L2Z(!?*_4YXOE_SIyD(> zZmQ}2dbvh7?m8;W%Gk36xf4TVXbv6dVcBUl+ycuTcXnZ@3fl*T|W>DxpT&G zb`LLnUfTc~q=d{)*7TF^YB37LZ6+_Q0h7Z%B0dj@?@I>}u4RWy_kYCEwK{wyW*S@* z4v$MVN6T{m_JN4Ry3BORL{u%aFHhksEKWVJPclItp;mC)wt(lo zpr=ze=tD}6z$VuL*5bhNm}`>i;$L;_?bIJIV&iJ}p7T$z7LuUjy0^;yK1(3x6>cl- zM{+H)?U!AChl{=pb6;!Kn4fU!h6yAxT(+MCH?CpRJRC$#@sJ@}Yz0c(!*@Yx_sou? zYHQ}t&+2;I&QG4Gw)$*-o0@p;&1EtR=JK2Tg8U zUEUyofvCAPf%%KB=BDWD zCsCA1OU2iIbSloGLyF;%Y2xl;qTiZcr&PPblQSGFT^n@Y;bDs5J=zO&n}#q8gB`iG zZD01A2X`gwgV9Le-S2#MoN`fE(rxSUBtyzxbu$#?xZt5p zd1I2;C%IUf8BaD|{Xye<#h1CK%e!6|zPqi(ea)dF@Oyc5knQ3ikIlVO@Ad9pdspd# zS8o!&?V1uEh)il=q|!d_+5cuMkmOXCCi-FF>up}Cr|8QY63-`_09Wimy*qfhmZM&%?7g?$F-e$l6);M2oj&a{IR(Jk|zSa2~ zyuMG+S4?3)*_^nGtwVPtgJJUZS*ljZB}+hDD_VgcyH*cLkIbTTnw}BZ6kj)UIWlHE zc640R9X`SNzl*ILivGUaTBjf@(d2)| zIAyWum+0vFMqzAiQhvTd{#Gy0#+tG8vgOKy(;3infqe;j(HB(%HFXx!&I^c4p76qL z);E^i3FUci@8W2WHFq1USf)Qr^jY+xs`sHwb1ddAP#nq1p{#V0VU_b?dZhzOqW5P9 zd(=l?SbKPXr(D(7Ef3##UQw6dQpdgs%rSdS^80aDmxs6dzyjoHCyh7$ z=b!)ltm#JF5^?CU*xznA5&VUcc86Jd_g7Rx>e%W)6}_e}=i@O=IZR=d(JDa1aWca9 zwGU6&yDxLE=Cu3A&}y!jUy{1bS#K_Uqq=)Yy-FM-OFQy=RM(%L`$$FkT>+$MIc$&6 zNnR_Y<|{q=Cc^j&qrzcvaYXreo%hzPYgH>IPi^m;+>+3e0CW^)_z`C}I?)l<)Gt_3 zKA_sw*63{Gj_I9`uVT@;br$C+29FtKF%9zB;Ni*Ztc!0FtbA5gTvzufQZO#~N$$#( z_m|gZicH6RN0{K`7V}s|OJk$eYx!yuW5OdD>Rs}1JKG|}zOt7i{~(tdZVP2}wTP1K zQX7lgYv{-?5L1lv{&w;{jwjG!7C8a|RNFWK=v`y?qV{s@OC0v*_Cw&5Ul_zJbpUbe z;D~2cUtnvU*2}w3S5+Vo!zBet$YiG?9EZ8L!pw$$wR7;eaNQo(;OtF{_44bclfkk* z>v8nbd;__wvBQd%tUDa}(x&q3n;?cedsxUr2wVR1h&mOY)uD-?W9y|D&pR21&LX1!pK0{YpN1L!m_GT1_OT>mols8_fGW77&NT zUN4`%ml(OzCi{EEng2k7%DIOxb#4;R%zLk)|5A5&(_0Bfb=Y!Q>rZ;!?2^#JE?k(M zd%FHw#xCh@_o*}@+fsoHa1jYXX+C&8cH-g?`bBVkewFp-hlzUg$t7jE?mw;b?B<93 zcDn~`#GkFdNKaPcP3c1!9rbn68{ALqdCps86jer2<{#&{S#ALc^FEf5w`XVG`zCUa zQ8=PfTwIK^&U3jIQ`K``n?sv+=LgLPm-jzt)>^d}g>5NnX;mXN$i0)Xk~dH5oXCO? zb9y=Z3K5r96m8jcpbPEhS+^kz^d?sAYLfoq;>5s9=?Af&MKs!RIuqKv*X2VePLW;I ziKF#yy5CkclTSW!q9#~>LELRpn)_DAj3(fwYQFTE#YjR-$~vjeyd-Bl(& zzlh?V;GV42&W?)XEO%=kaQpe`7uIpceGjN0gOmB&`6=T`AY&gqH@^95iDXxjoOISZ zb?UyodwoHTT@lfUeerca-VX-naK-gCRzF^7`9^vW_Yu1vPaI>*=$`S1U}UieqI?4y?Bs%{A41vf8#%fS(2U9ZsQ;}N+nr57|Twb*`{lUzCn`)SUo0AX; zVO_QCg{NTBBjAcIvr^L;shMv)qoN-k1G4F?h01JaSvVCVe&5~!A60oA5av9(s3BPu z)$tjWI?%g1oy@ksU8_?$P+suK4lk zqL?u1LwqFzgG`N`!eHUiR~p8E=7;}I?EmZkl>QUsJ7cex%tx!jrCXGksynpKwx+rR zi$>7Eo<$8j=$q;hP^{zWldjVE=ti1}=pn8FV7{$cL|l`FJ`95<77tqP(-osk+>FVc z$oiuALnpz=K#ffi>Eu)@hfp7oGS+veSq!QLi^2@INH zufqRG=t?b%p;6c-L)vV?JtGy+PP59Nwvp*Eq`KPBsj=;@!EX6e0bO$eKCG#T2~=@w z%7Nym6{*<2|EB+n(7wy#$G^T@?eq@#L9-K6^@HXp_S^38`n<{ts(>1K@lLAd2Mu0c zj*D^qcnh$HCtJt{uvow`ka26K_>6|^F<~!T%uQkscvW1M8n#}SsR`hS7rpF$KV1$o z+i9i#yINcO!(MoS7#$mUKlKdef|NYK0NfWsf0 z&Bl+0vjgCc$wh_bi@PzLDchNH8o@751;3-FSdh257;X?H{F-lmKWlORI10? zf@RaAb~l)s`a(VE*Na1NVJJ4RWnD093`PKYQrWxAMEhf zquO3l3Mi3e*iKJR&xl$- zR$E^8dRlVG#Zr7&R+$yISXZu+{_L^|^h4j3*BAYu zG2V5IXvoMPJr0T+Tj8?c1WZbF8!DLKGV=RZ4@cbhHSnw1ODc)=~|}xYKQsOSc^BM7a%Q^p%TIh<(mPk zLRN{k0ttNcnH1qbv{aZ+*!>>Cyy|hl+C)?QK{=5$kyGd!*Gn8*3i+KN(yL-dENT_bn;y?Rw{) znr7hUMDPiZk1!Sgh;fmwpuMx)aLW6^f0=3^ln=Z8Y;`uBun1!s&Fq@!=w88NyBWy% zR)z{obM#(|Wsu3SEZrLCOsafdTmRIpBhJWL>8}Bl2vKaZ|-KEQ7fBZB1f4;gjMS3{?hM?&}sbsOGX(K)_A_(xorMwD3 z2jx9FY*3*PE`lbx#elnob-a{z~YQ!`1peTv?r|7&xk) zD_8V6&4)W}NG_XgNRoK1Y~=bqn&sL&n;-YN67-{|{m%xB5=q@BbyB-89L7ew#dokH z%nAW8>;2|N!%7*f>IO9&FmN`MNK#R5io&vs!uhv#IS0m@{3$){a+UbpmRtSxklFhc zW?mdyYdxOvB&t+n@sdXL;3r!n7*t;WewrpfeLZ77(>P<1j_9kD-rus3oKJM-zYe_r z{vn5V*nk}AC_3>ly0oE;-}p<`_2m|ZD|#<1ZLU?2U|lQrZNZ6LHX*q|b7Q0F$9f?# z^ZnwxS^Gy%7meCm>ZY~?E96n-a(8Pa_ih6!>tn2mJEvT4gBwnvZ!AtgUuQqAEE6Yl z{XZ?{S!mKIbl&_s>i>#K^Y5SjSLt6c3DM9Dnd;zT_4#<_<#o+jy?`yRyskjqrTc_Y zaoBI{fIS&cLNf$GQq_d!2K9;u_aay!pL-^i0yKa^?#6$D(PF$fqH~Y~K(T=f?ufZp zDx>o#O-;deHL~v78-*8Jx2T#*0Eswf8LECtRQdd>h>~wvlPx0o?kZOXab+@ZYT8#3 z+v2Qlr4*wPFg)2dNgA82Ei)0D;xeniY&!HNoWOKGRWQ`6Tn&EuJ&>FboAD9mm}Bko zByGFv!Jq3ukL^I_4RNjJN>x{9@Y!<2OB*9QyO2THX4&l`EOw~#t5Zj?(ds1$s!Y?M zYEzKh$Lht88=P{vV`jw>Wq&qlL=(DzUA@C^)B3Fxg11lx@oexy+lckVP{@52o)5Jh z8*mTuA-tj>!rz7fycm~f>q-D&FGg&HBTU`d(WsrJw+E9C5ZUrUOXc&f zQuqQ|p5lRoW=38tqIt<_?DWQ7Lt|@XST@-VH%&G($LdwPBW1LD_fsPPDp@KXMBTd( zR0W5&m8uLOb#=V-xaY-myKuzAuLD+3+nzS~&Tvt+5jg5zO!r=;5Yj|*3PdO5y(tJY zUrIRDQ=KYBpbDY8!Smfw%|bM2FO4SxC!%~{`ld*ms`%e8{s?!l%5at~owYJuTV?^+ z7f`UE74RvcOwal%S#c=e^j@E{@Cup^P_FBJecnKls*$P7y}Vy`3>ojWv@BXzX>@j; znO$~Q28?5)-~aSg+TkAv(fl{L0coyukzh_3K78&9pUAfO?VsJtR#dVk&fW)~x1x#y)(&LC37zaN6I!KuiOs)ev}!Q|Hzr(b2(tB1 zu~gu$*UeHX{tHLq*Naz1;7HEcJ`9%>1B)*rK zqN(9*Tmo!7e}%Kn{4c}V_~}3N>HekK*1n&frxlfuts5f19v&5=3a)0xR*+bXiQ`_=n zh8%Dye#kQ9q_gOTZUDTtl1{oXu#*i~Jz33!5wi}-Zwj1ly1jfe%OfOYvTEVQ;>fbz zt^F81U}QzoDehdp&pKP5)5TN(mQlFwco6u=-D18w>&n+mc}qazQ0L0p-q@I+Zj)Bf zo9H~fEL(b+A<|t0tFz;ySQuR@`k;IG^CMNr_&tW&JL_XW^-PzhKgE=Db8ERvDhiO{ zna7#w9;>V0ySTu19nqEAhLuNuWrfMW9@G>;p^mB?gOc6U3Ax*=iMSrBftWw=mAj=8 z1U(Nvu?R8;q{&ze7OIl=^8hYPNa1;;FxaH#51P4#KmViUsD=M7>T=YdB1OhC4SiqV zxtnDJ>FTkpYhn@2RVSUW|3Zlng`;bAh4rDHDBYDtKUlhNzjghg2yhI-3es#=C+~b< zpruL*(p_P_^*e8o(SzVj4(WRJ7ao?ze=n3dnniir3PiWvU$If~@4Z=X=N-G}VeGe&Bt;OW zPhIV}ef6Ax>oV}hT_1T@nqcjEo&fQ_3q}qVfaQP$v~j5;_&Eb1=SvR zu+k!`(w4{MSLLug?vbF6lCM>&$ddh4Z%bFvQ5v@6(BEdLU}O}kI9Aut@xrlOPo+CK zVds}yKvxlXY2%58RFw?zv1GLj0!Y72?Xr$ASF(^?*84)VD(k9xN; zTF@nCtzZoE?*?t#cSrDVLArv?Jtjw~7ZyeW3V0|Ex$G2UxQEpR<07e>()6hC5vo|* zf%GPP#j&jhT^+*}0?!G?4pvl#0qhQ|pZ7--sY0mQ;99D78%Bp{H=Gd_MRR3({U1Bx z-^w?Kv#XO=ZIn{YW5gfC=aR0?xkP#A8vr8QgyfZFcrd1V9CE(V7@-*gyrz_zG|7Uh zrOWw{?7DNKxPiT`g=`P_nC1eVg>$~oQ1b0*jIcMnZgrDj93+vgfs3LAAU;=??emKA z=WFvM8zbFz8xzc^xb<^@8mlpz+c z-oOjh`RvbcdUxD~kUMkQchU(&xF5Q-a*>abYeJd{v%_pE=QyiT=_xw0iH71+BC z9~oB9wN2IzI=AC%E0mRj)Vw2Jol4KT3y307nEq;kr{bUw-A3=vof=PBJ zn!73CKzB2NcU56Knjbe;`Xp6uL*BF4zy4k~kUcAXm@8=AaGbffn~gqsY zNK-aXkkL)v*~QplF)mizK8x0SDp6MYU-sNhJ>}%MY!bUCp+N)-eQ>hM?XIoka~C5c z4U^=#Pp^}eTK07j-B|*bwKTV;|0f;V{|+iZ|JE-rZI>qpa!+ujB>fVGOBxJ>JKRW% zH9rXvcribbpCUz&(h$pZF&LjT!SK;GrFLNn7$~bV=bU6ula0i&?viaVNvz*GBu$$w z*9^5$bMN3SkLTW5ZoGP~426)si|*Qf5CbklKVtv@-72T@+tnn9m1~+^z`5tc5jlQkx_C#sEXhA2{szp~=pc$Q*XX$VA$tT6e zjrUQDdoL*)(IVgHs;jE@p!Kyt%~+YLn!N}(i?Pgv4^T-I2j*>xkqRml?{-H-HKR%! zxI9%CmUA`ic3ZhENbodS{cQ%z`bT}$lCn5V<>D;WufxT8b})ISWcoL*sNKw^gevCB zlDB0;M3>vPs0#VfG~8uh@*+`LX&rqKy`m!l;npxGPRf*X%14B*+X5hT7@Mc|j6)%7 zmLaQ_-beE}&Fl;cRUTiqa6EQ=A5!ae`@^X@hE!4pc!t-i9Oh@_VY7fIs!ebNb+7AN z1EFr9cDW6A<1I9VKLo*!n(FG6G;yISBD(t(l$pv$V(uw+V?`X*N~hSGAh7T3v}wX5 ztN$l-{DknJU02^pad!>=6g&HMg;p#2pqs3H1h86r^n<3Rwi7ZwT;U%xk37N4zo)S+ zdH+v?(Z=e#q3{#$@J#VbzRbK3nb(jN`8e!QnY2h%QUlrvqcNDD0i|WLwZg_deIjD) zS!xhzGVJ7u-Sv~>%nl4>Yh-UUNAw3%v+OT)Vga5a>tFkKMy+}o?-WVr!=L`f3Fwbu2NcW zRln3RWbR|CyKUvX5h}#C5AT!I%g^q$d4iq!)NPm31fQ*mNNp`sJvu?IP%R(s!=Lxc zGhtB{SBr~=#~*oIpYD^AOnbKZbv>spBH{&gI^}re`B}kxz8B@xTdS9&06}mz+9J$s z!wnDytg27iyiH$aY?E*E5KRy6+V=*&$gH>Xnmf`}Kc9S%IgP@PO1lT+q9_V?;S5?M z8gY}8Z1Qyn@_wIUxjAc{T5dLbbgz&yYkbUd7*ai{#a?!Ja= z)jDSzBdn;g@2B47L+#l(&pSyUi>dc#2ooCP%5xE?<7<3B#C_mcT@No9XDQ9Ka&^|9`8M#+!Bod8X!O~GiDfW zwhkn>M6LAXd=Gu{{C}?E|8@PZk@WqyYOk=>;3T>&#yB9ER5OQ$^BmoJu6#_2{`|XS zvnzc~zT~3JUH>k9svP4(vL@vOYrBKAa@4;Irz@O$f9lYc01%4-JV@ix?w7Fd22Z9T z3u>scumZTUu0kSJ(hP6AJ~B2+7>sZ+QifaQ1gG|f+1mg%9X}zGnTsstD#7*QbI5#v z1%9{&%4=r_4r}F#)XBresSk*{4fU0mdLN+@MibRP9^*&5Dsq+7hY2VHx?78$5%+s= zZP#a%pU)3|QvVHv@BwOD|De%uOO^foo29YUq$)W`<$6MHNTL-PPKpGDdz122UJ6He zuYdiNU#SsyPxnKFD{rX}hEHf{HJi@#*`f4M)7+E{4rhJa?QC&!%cNY1s!SX-^_1To z!*uF`v4Z7ch+S>1a51((wsffgQ5~c5!&qgodIe~ky=F^x;;Hj z=a%)0L?;uj(!DcCT0(6aUDZs#JL(v{B0w+RMqQ!$l`T+C75482F3*63+B#Wb!qLoK zwHBZ2PI8+gXzQASu$8`DR;>EkIbZmPSlV8?4Q zMc)Cs3ztq{+C#OHXmL?*O2hZ!L@}!3T7%GCnZ>uwAxKHqKzA<@jeYF4^M-2IEL}-u z=2VXh!(qF&|MXeuSzdhup41}nq5)T9=g2Ky(euK$aL{e9Y5SPX>~u(y1g!^{QzR|G zl@p~OT}2i0M}YU$Q#q{4GNDmm>7V^gXvqM-pm`^LihZ?t3gttjUTlbLDh5<ifFO zlyv~2bAKg*R9Kdkgs0|$gNmvj?y9+$W0}KU?xq@liVT1wg07SDg-Ta-Ig1$8z~AP+ zZyuD(z?r)6O%u@2zwQSa%*z}cI=u39ffM?J2CM%n7!C+YU^?dJci~)+lB0;4?3@oM ziwP{~49;tlUJ9Tdw`B2rEuLpe!yTV0zyf|ikd6oON`@0O(n0bL!A z&;RrWEhX4xy^YK=@74FOq`ClBlU-o>nQsD5OyU&XK+p;E<)BXKQi3S2WqYG8U15NB zxoMX_|40zQeDvGUObIOhU}~xj7Jaan=l5Z&o;S!Z9fQ`&oj}!k1Ha{tTVLAr>E`eg z8`!fBRBgBYF8|Vx2_8Bzqs*6g!eH$(h1JsykZ2F=w>xXpN0g{iLp1rudkQ5ovezB& zU?bABf8#AO*dP|CcwPC0>R>XA)=aS_>wr{A5mT}%Lvcu@<=Pu8(p4WvEF7n>6jZXy zr$}cj&TldsWve`8eZq7`i*ZBd>SnQT(iBWG^IIWw#(S4+*Kw5cfnTHGlcNg!cHc++ zhK146zag~Q0y})t@Z68vGvv%(8E2xzuAXYfDc7orS zy!4adQnAid3@vx=Dl@Vd6pm=!FxgrfMt1J%JDvGXM#wZp5N^z2vLT9HCtuG{^VoW0ri1);#?+Z;^a8;WRDCL%pFs#ww$q zX+_gM%j+6^lVW5?JsjZ7FD-qzOujh`a&mYq{US&9llQ{y2&#glo^moBt5^hg@KICi zgVC{W+0jAq-Rv=U@m8%~e%a3Swf;Avas5tmv5AO)r!w zLTWXM)c|P!3*)ZqX9_!i-tLm{`5J;xaLj~9wZzbU#5^pGoN1oH+^hbf0o zOWe_SpL-@zh8h?wzSkTCI{oSJ)U~bp=6=Pew}Wsx59_>J6BfJy(7;@uBEL< zc&mKAbX*bg#Z#pt_Wbe7&)l9I30w9m?`$^zI4yp8@vaLR|CjZRv8Cu`dYIEdJOjVY zL3;z^{^U=r{UR$M=6op8GwO>8}Z=9^TOpjg;Q~IL*n$6V7WVVoAP^%FY;wvf! z^nRvunY;?|!&N%=+8Jr7VR!95lX~^WYbUWaMBkQ^YO&qHV56@}!bA2U>?FD&S#DdN zGDVKPK7|y|#9kqys-vm7t)V>-4Gz>k%vt;UNcOKS{lY|N7;T{#0cjXc0gw2xow0iu zE?s&PAmTaU+$IcO)05VR_A%njMdUFc0@uxLx!-<{3+ldoD4@tXr!*IF%JA27_b;CN z|6^cm_iQ?E5BHF)?y|PCB6szt0ea3zZ}?rRwmg_n4bD;s@=g2WU)%H-wOtUnAaFt8 zg1`lV3j!AeE(lx@xFB#r;DW#ffeQi`1TF|%5V#<4LEwVG1%V3!7X&T{ToAY*a6#aL zzy*N|0v7}>2wV`jAaFt8g1`lV3j!AeE(lx@xFB#r;DW#ffeQi`1TF|%5V#<4LEwVG z1%V3!|Hlxx(pOuJ^cl5M9NWu|4UoVhGFip1wwMB| zNNtath4@KQgVytSTxYFjg(fhj!@P0zSsBt0Es>Is)%vazH}k$YZJ_&o~6N7@X_h;yCd@aO!mj`_hq8a9dVgxZNZi#Oua))G)SmtHsOBUQU^M%zL9H561SNIavb#PWffsxi1UpP%LSm|=rm&zA% zD9H(;196u!*b7r%(~r*QEgLY2tl5Cp*%~7~fL0FRS0CTGjLAQ7bw(O)0Fet0+yiSWvzd1yz3Scu@#xDgvTQDSr@6EKyZ^CUb{2=)71d zj_ilXp)XDEn+E~G#5#iq+5(RjVpKtzp~b-1A2eRQ2HN>9B0VNipdU10mc{k<#=65o z?AIyOb9#9RIuPJ+^(lcQI`BR+OUB0%85&d95%Tg2Vs_iblvy$G$Y??Ih;8^y+8k z8$v{k!6x;R;rFqahXpoF&X+%5s<0WpUYSxs+9u#5(Wg79R6(Ak?w9riEeok< z=9dCkjnzL=r634wj+%m+pjawionFH%*hWezc1pFJy)u7T8sz+k>wUI8y?5xlCB}_Z zn!FfjQcAuMfzk4XF&2N^5Va$dNB?>;y6mh1E^V#~`l}T(L59&iLZ$pN_S9bX z*ZU97p2e`0My3Tgvw=pF zn3SZ#!sPPp8tIrzv47o6rPRCm8yGMN4o0hH^ngsFOEwMDXJRZ3=+jF@fBCCh4Y64? zW0#_%TgyF5hlN#pVn9ISe2ggvbujpCq+;c*S)WSZHetvl^#E@e_4cI$)^T5`e#n41 zx->fS|LN`eznZwyb@#SVzihiZ=-?(=+YSv4lTtAz)Y|n+x05U#gLKGzCT0K;Y>*_d zt0K0dm)@e#5JD|2L5(8YKw|Pq1{4yCDD?oM<(r-aCm?LCLc4YakJwvXj?9}$C)B+zdZWr2UyY%Qvp*-C#sF1AeTQ97}X8?(XsQloDWI5GcS8Bgqu{kNAcS*;Rsm^)HBbX?NFD zN^7kCyy4Q7W2HY7iPkuXP3RASkzbzJ|INkodzZHaj~d&Tzobp8Y1aWaAA6*A;I#ul zT_f{*Iw*T{N_7(Fgz;pUM-o1ULj1?l@-GV)7VuN!3FW6+AAETB#Xlb>UK723@V|d| zx7Lv(zE629w>H%i-NfJ&b^<)gC^%=`@%Tk|L({4+xa5hfXGi}UY-#B}w{f+XVNTpn z{gaC4)-7BicBNYaMk7J@)jqi;-(nwto}d#~g!v}(?^kjO&9-T!`pX5kZBm>32w%(> ze+C-LtU-;KY@5|*0<A|L zF(|LbqrA$$pBfa91-G9=5~ zVGzAgzr4Ngc+9<5!V)%9qFozsi~BVcT12*9hO6NJn7>8<3w#NwhDhVOEo}7poYTi5G9wcG&{LwrZgg)9SL6e@`(ogzuixv9r zF&4{_c00}CJh~{V-_C^QDXM4&flA0>FL$$M^VR|Pg3D4te~PsLq1=071q{1Q=L_CY z0^^d5>t`TNrF$;>F7W+AI(3^*kH2+)EoV0!uFR`3s+yqjV-cUx+?rPfgj+zZQ}2v+ zx)^H&#yumvy;r=4L#Za3OyXdi(tylM8mHVK-(usC+Mhp$JOWUbR6sB2E3RoW)H%k; z-6a`M0oSD7zY~&fPdG7o1?#Clf;;0BG_Atwmq+>#WW}??*d5xg`C(4k%UaJz#d5k> zD&NA%KW|C416f6L+ur6@kZhJo?Zz0-H#5aB+|oUfRa<||j)kr>aw$W4s0&#_*A&m%_1EVKeHuLc0! z&HbnmMUYs5dEbWNB(zql#wx7rB6m}&REiRa57=kLk$5#)f|NAR?%;TgfE z;DG6N8z3}qf1n+|mXmRzO-alt?5QGyeS%O=t7{Mxucg&B#h?Ded~Mf7&*%(er+Fh| zk7Tl!k{x|$zRf8|HZykd$sS`7ZK?{cTa@61VYz==Zn1zV7%9nSrz*CCuEn`YuDU3BDcAaBc&(1POE^>5M2hOvDL6UZ(&wz`N;r^WsZ^ud z8{bago{=?PG9GU@ZBTluR5Sw>{$M>K?T}CuOSXAGb;)LrGHjn9u05jyVR^73W>~U| zw+{;f6>2`ss`%b0B9mW938d>njPKX|P0*c|E^V6avXVSE-qC!u56Oqo=ccm{R#re? zB8Bcyuj+2MQ$Va)N#a0yV6ijMamwnysUr8kt2T*Iw8hI?S7=a(n6*RQ#C zRe7H&({9lbKXfet)Fg&Y9g}IKM`2&dTFx3O9ov)Z@dv8zYDT6ch^ao;4V{=aQtQN` z&($PlvSy%LlN_G1VvrIpDbevr3SNG95EJbNP+$Rw*E#WU6*TYKd}qr>f_ZO^3`mX+QS1t@CPz6RNekn>o;z z70lErpWNbY5mtpj7#A@29!Qj!&h9Xp!e+dAzPj!cGQPQ`hai{?hJv|4P>6~QB37p4 z#KQS9bWx5`u!opm`Kd^)!W~?C2gZMginiZ4WffqVt+TwjW-a%rMDT}!L{uj5rvow$ zu1#ni!e$k;_H7t#4kGm|kB41ot&u_ymnqo4%P6R{Lta^f+FddgXif=l?U)QZF& zG%ShsR0!h~8Ozytp)KDMJlR!55MVoS5eE0p%N&`(8k zDb)qT4F{m(40v)&=T||HngzBm@U51B04Ie$!Tm9rf}mBZqip7Ayq=F3D1h$Fvw8`` z(z$u#jZ$cXJY_t!`}_OtG$F8Zb-HB;ng;g6+wE1eyiSj3qj)l}TzCw6?iGZw#1B}v z{p(=+=`0TCWCTGtE51ZcVV`C?9_FaB%dJzhhxPeZizV2vH;UjVtlSfp#99aB9-kF! z^V=RRR;jg70?au;-Hr$Z=`#ye>3-4MnGs9XiI!d`*kgiN`Vkjn`2ImV?m1tuQDL#zol!c{P?x8qvk|K_)PBhrB5s0d)+XB!@)nqh!<>( zv<{=9+cizy==%r1XuQ1ps`gOn3Y@t;zwYRd2kXAthGEBcJ35EfZ1&7;e0O zwyny_tN$~dRrq06`8EB%rq&&Gf9dboe_`R_D~;IX Date: Fri, 23 May 2025 15:23:49 +0800 Subject: [PATCH 07/20] =?UTF-8?q?=E5=BD=95=E5=B1=8Fsample?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: xuzhangchi --- .../ScreenCaptureSample/AppScope/app.json5 | 2 +- .../ScreenCaptureSample/README_zh.md | 35 +- .../ScreenCaptureSample/build-profile.json5 | 59 +- .../entry/build-profile.json5 | 15 + .../entry/oh-package.json5 | 15 + .../entry/src/main/cpp/include/libyuv.h | 32 - .../src/main/cpp/include/libyuv/basic_types.h | 68 - .../src/main/cpp/include/libyuv/compare.h | 111 - .../src/main/cpp/include/libyuv/compare_row.h | 141 - .../src/main/cpp/include/libyuv/convert.h | 504 -- .../main/cpp/include/libyuv/convert_argb.h | 721 --- .../main/cpp/include/libyuv/convert_from.h | 366 -- .../cpp/include/libyuv/convert_from_argb.h | 298 -- .../src/main/cpp/include/libyuv/cpu_id.h | 120 - .../src/main/cpp/include/libyuv/macros_msa.h | 233 - .../main/cpp/include/libyuv/mjpeg_decoder.h | 195 - .../cpp/include/libyuv/planar_functions.h | 860 ---- .../src/main/cpp/include/libyuv/rotate.h | 182 - .../src/main/cpp/include/libyuv/rotate_argb.h | 37 - .../src/main/cpp/include/libyuv/rotate_row.h | 223 - .../entry/src/main/cpp/include/libyuv/row.h | 4037 ----------------- .../entry/src/main/cpp/include/libyuv/scale.h | 179 - .../src/main/cpp/include/libyuv/scale_argb.h | 76 - .../src/main/cpp/include/libyuv/scale_row.h | 1107 ----- .../src/main/cpp/include/libyuv/version.h | 16 - .../main/cpp/include/libyuv/video_common.h | 191 - .../entry/src/main/cpp/main.h | 21 +- .../entry/src/main/cpp/napi_init.cpp | 25 +- .../entry/src/main/cpp/sample_callback.cpp | 15 + .../entry/src/main/cpp/sample_callback.h | 15 + .../entry/src/main/cpp/sample_info.h | 15 + .../src/main/cpp/types/libentry/Index.d.ts | 15 + .../main/cpp/types/libentry/oh-package.json5 | 15 + .../main/ets/entryability/EntryAbility.ets | 17 + .../entrybackupability/EntryBackupAbility.ets | 15 + .../entry/src/main/ets/pages/Index.ets | 15 +- .../entry/src/main/ets/pages/Menu.ets | 34 +- .../entry/src/main/ets/pages/Scene1.ets | 25 +- .../entry/src/main/ets/pages/Scene2.ets | 24 +- .../entry/src/main/ets/pages/Scene3.ets | 21 +- .../entry/src/main/ets/pages/Scene4.ets | 38 +- .../entry/src/main/module.json5 | 42 +- .../main/resources/base/element/string.json | 58 +- .../entry/src/mock/Libentry.mock.ets | 15 + .../entry/src/mock/mock-config.json5 | 15 + .../src/ohosTest/ets/test/Ability.test.ets | 15 + .../entry/src/ohosTest/ets/test/List.test.ets | 15 + .../entry/src/ohosTest/module.json5 | 20 +- .../entry/src/test/List.test.ets | 15 + .../entry/src/test/LocalUnit.test.ets | 15 + .../ScreenCapture/ScreenCaptureSample/log.txt | 521 ++- .../ScreenCaptureSample/oh-package.json5 | 15 + .../ScreenCaptureSample/ohosTest.md | 10 + 53 files changed, 1095 insertions(+), 9794 deletions(-) delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv.h delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/basic_types.h delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/compare.h delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/compare_row.h delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert.h delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_argb.h delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_from.h delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_from_argb.h delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/cpu_id.h delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/macros_msa.h delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/mjpeg_decoder.h delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/planar_functions.h delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate.h delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate_argb.h delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate_row.h delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/row.h delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale.h delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale_argb.h delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale_row.h delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/version.h delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/video_common.h create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/ohosTest.md diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/AppScope/app.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/AppScope/app.json5 index 27274f3d61..b409266e20 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/AppScope/app.json5 +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/AppScope/app.json5 @@ -1,6 +1,6 @@ { "app": { - "bundleName": "com.example.screencapturesample", + "bundleName": "com.sample.screencapturesample", "vendor": "example", "versionCode": 1000000, "versionName": "1.0.0", diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/README_zh.md b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/README_zh.md index 18a5ca3b5f..8ac7552432 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/README_zh.md +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/README_zh.md @@ -1,10 +1,5 @@ # 录屏 Sample -- [介绍] -- [效果预览] -- [工程目录] -- [约束和限制] - ## 介绍 录屏 Sample 调用了媒体 AVScreenCapture 组件提供的接口能力,提供屏幕捕获的功能,包含: - 录屏存文件 @@ -53,4 +48,34 @@ entry/src/main # 录屏demo业务代码 │ Scene4.ets # 其他场景 │ └─resources # 资源文件 +``` + +## 相关权限 + +ohos.permission.MICROPHONE +ohos.permission.KEEP_BACKGROUND_RUNNING +ohos.permission.WRITE_MEDIA + +## 依赖 + +不涉及 + +## 约束和限制 + +1. 本示例支持标准系统上运行,支持设备:RK3568; + +2. 本示例支持API19版本SDK,版本号:5.1.1.62; + +3. 本示例已支持使DevEco Studio 5.0.5 Beta1(构建版本:5.0.13.100,构建于:2025年4月25日)编译运行 + +## 下载 + +如需单独下载本工程,执行如下命令: + +``` +git init +git config core.sparsecheckout true +echo code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/ > .git/info/sparse-checkout +git remote add origin OpenHarmony/applications_app_samples +git pull origin master ``` \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/build-profile.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/build-profile.json5 index 8acddc17b0..c23fc126c8 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/build-profile.json5 +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/build-profile.json5 @@ -1,42 +1,51 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + { "app": { - "signingConfigs": [ - { - "name": "default", - "type": "HarmonyOS", - "material": { - "certpath": "C:\\Users\\Administrator\\.ohos\\config\\default_ScreenCaptureSample_CeL3z6K4h_OzePagI5-ySY-x2D6rRiDv_1qXz6rkY-w=.cer", - "keyAlias": "debugKey", - "keyPassword": "0000001BD1B4FC860FA0BE8F00C64A8C0CCC03A4E40AEB23756632B71E0B4FECF9DE4C1B7258DAFE074673", - "profile": "C:\\Users\\Administrator\\.ohos\\config\\default_ScreenCaptureSample_CeL3z6K4h_OzePagI5-ySY-x2D6rRiDv_1qXz6rkY-w=.p7b", - "signAlg": "SHA256withECDSA", - "storeFile": "C:\\Users\\Administrator\\.ohos\\config\\default_ScreenCaptureSample_CeL3z6K4h_OzePagI5-ySY-x2D6rRiDv_1qXz6rkY-w=.p12", - "storePassword": "0000001B006F3C6DD5AEB4BDB33B5C9786A35242875531906721DA77575322D4E0A9BB988C584BDDDA4195" - } - } - ], "products": [ { "name": "default", "signingConfig": "default", - "targetSdkVersion": "5.0.5(17)", - "compatibleSdkVersion": "5.0.5(17)", - "runtimeOS": "HarmonyOS", - "buildOption": { - "strictMode": { - "caseSensitiveCheck": true, - "useNormalizedOHMUrl": true - } - } + "compileSdkVersion": 19, + "compatibleSdkVersion": 19, + "runtimeOS": "OpenHarmony" } ], "buildModeSet": [ { - "name": "debug", + "name": "debug" }, { "name": "release" } + ], + "signingConfigs": [ + { + "name": "default", + "type": "HarmonyOS", + "material": { + "certpath": "C:\\Users\\Administrator\\.ohos\\config\\default_ScreenCaptureSample_7ukOyNpC8nTumHEkp8OgkgKW4VEy6wKEsBHrIDg9Q74=.cer", + "keyAlias": "debugKey", + "keyPassword": "0000001A6DE2202D2D984A90FF1E544A13AC54BA267BEF351ACC6A1203D72C79F75FF3DBCD2F12CC8147", + "profile": "C:\\Users\\Administrator\\.ohos\\config\\default_ScreenCaptureSample_7ukOyNpC8nTumHEkp8OgkgKW4VEy6wKEsBHrIDg9Q74=.p7b", + "signAlg": "SHA256withECDSA", + "storeFile": "C:\\Users\\Administrator\\.ohos\\config\\default_ScreenCaptureSample_7ukOyNpC8nTumHEkp8OgkgKW4VEy6wKEsBHrIDg9Q74=.p12", + "storePassword": "0000001A3BB1C53BB88A60625556A56C3DD99B1CC7819996C7D8388512B64921D01C628C59B955AEF766" + } + } ] }, "modules": [ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/build-profile.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/build-profile.json5 index 38bdcc9929..01bed8940f 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/build-profile.json5 +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/build-profile.json5 @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + { "apiType": "stageMode", "buildOption": { diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/oh-package.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/oh-package.json5 index 54cb066266..118bdd4fe7 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/oh-package.json5 +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/oh-package.json5 @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + { "name": "entry", "version": "1.0.0", diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv.h deleted file mode 100644 index aeffd5ef7a..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2011 The LibYuv Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef INCLUDE_LIBYUV_H_ -#define INCLUDE_LIBYUV_H_ - -#include "libyuv/basic_types.h" -#include "libyuv/compare.h" -#include "libyuv/convert.h" -#include "libyuv/convert_argb.h" -#include "libyuv/convert_from.h" -#include "libyuv/convert_from_argb.h" -#include "libyuv/cpu_id.h" -#include "libyuv/mjpeg_decoder.h" -#include "libyuv/planar_functions.h" -#include "libyuv/rotate.h" -#include "libyuv/rotate_argb.h" -#include "libyuv/row.h" -#include "libyuv/scale.h" -#include "libyuv/scale_argb.h" -#include "libyuv/scale_row.h" -#include "libyuv/version.h" -#include "libyuv/video_common.h" - -#endif // INCLUDE_LIBYUV_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/basic_types.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/basic_types.h deleted file mode 100644 index 1bea67f2f2..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/basic_types.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2011 The LibYuv Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef INCLUDE_LIBYUV_BASIC_TYPES_H_ -#define INCLUDE_LIBYUV_BASIC_TYPES_H_ - -#include // For size_t and NULL - -#if !defined(INT_TYPES_DEFINED) && !defined(GG_LONGLONG) -#define INT_TYPES_DEFINED - -#if defined(_MSC_VER) && (_MSC_VER < 1600) -#include // for uintptr_t on x86 -typedef unsigned __int64 uint64_t; -typedef __int64 int64_t; -typedef unsigned int uint32_t; -typedef int int32_t; -typedef unsigned short uint16_t; -typedef short int16_t; -typedef unsigned char uint8_t; -typedef signed char int8_t; -#else -#include // for uintptr_t and C99 types -#endif // defined(_MSC_VER) && (_MSC_VER < 1600) -// Types are deprecated. Enable this macro for legacy types. -#ifdef LIBYUV_LEGACY_TYPES -typedef uint64_t uint64; -typedef int64_t int64; -typedef uint32_t uint32; -typedef int32_t int32; -typedef uint16_t uint16; -typedef int16_t int16; -typedef uint8_t uint8; -typedef int8_t int8; -#endif // LIBYUV_LEGACY_TYPES -#endif // INT_TYPES_DEFINED - -#if !defined(LIBYUV_API) -#if defined(_WIN32) || defined(__CYGWIN__) -#if defined(LIBYUV_BUILDING_SHARED_LIBRARY) -#define LIBYUV_API __declspec(dllexport) -#elif defined(LIBYUV_USING_SHARED_LIBRARY) -#define LIBYUV_API __declspec(dllimport) -#else -#define LIBYUV_API -#endif // LIBYUV_BUILDING_SHARED_LIBRARY -#elif defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__APPLE__) && \ - (defined(LIBYUV_BUILDING_SHARED_LIBRARY) || \ - defined(LIBYUV_USING_SHARED_LIBRARY)) -#define LIBYUV_API __attribute__((visibility("default"))) -#else -#define LIBYUV_API -#endif // __GNUC__ -#endif // LIBYUV_API - -// TODO(fbarchard): Remove bool macros. -#define LIBYUV_BOOL int -#define LIBYUV_FALSE 0 -#define LIBYUV_TRUE 1 - -#endif // INCLUDE_LIBYUV_BASIC_TYPES_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/compare.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/compare.h deleted file mode 100644 index 3353ad71c6..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/compare.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright 2011 The LibYuv Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef INCLUDE_LIBYUV_COMPARE_H_ -#define INCLUDE_LIBYUV_COMPARE_H_ - -#include "libyuv/basic_types.h" - -#ifdef __cplusplus -namespace libyuv { -extern "C" { -#endif - -// Compute a hash for specified memory. Seed of 5381 recommended. -LIBYUV_API -uint32_t HashDjb2(const uint8_t* src, uint64_t count, uint32_t seed); - -// Hamming Distance -LIBYUV_API -uint64_t ComputeHammingDistance(const uint8_t* src_a, - const uint8_t* src_b, - int count); - -// Scan an opaque argb image and return fourcc based on alpha offset. -// Returns FOURCC_ARGB, FOURCC_BGRA, or 0 if unknown. -LIBYUV_API -uint32_t ARGBDetect(const uint8_t* argb, - int stride_argb, - int width, - int height); - -// Sum Square Error - used to compute Mean Square Error or PSNR. -LIBYUV_API -uint64_t ComputeSumSquareError(const uint8_t* src_a, - const uint8_t* src_b, - int count); - -LIBYUV_API -uint64_t ComputeSumSquareErrorPlane(const uint8_t* src_a, - int stride_a, - const uint8_t* src_b, - int stride_b, - int width, - int height); - -static const int kMaxPsnr = 128; - -LIBYUV_API -double SumSquareErrorToPsnr(uint64_t sse, uint64_t count); - -LIBYUV_API -double CalcFramePsnr(const uint8_t* src_a, - int stride_a, - const uint8_t* src_b, - int stride_b, - int width, - int height); - -LIBYUV_API -double I420Psnr(const uint8_t* src_y_a, - int stride_y_a, - const uint8_t* src_u_a, - int stride_u_a, - const uint8_t* src_v_a, - int stride_v_a, - const uint8_t* src_y_b, - int stride_y_b, - const uint8_t* src_u_b, - int stride_u_b, - const uint8_t* src_v_b, - int stride_v_b, - int width, - int height); - -LIBYUV_API -double CalcFrameSsim(const uint8_t* src_a, - int stride_a, - const uint8_t* src_b, - int stride_b, - int width, - int height); - -LIBYUV_API -double I420Ssim(const uint8_t* src_y_a, - int stride_y_a, - const uint8_t* src_u_a, - int stride_u_a, - const uint8_t* src_v_a, - int stride_v_a, - const uint8_t* src_y_b, - int stride_y_b, - const uint8_t* src_u_b, - int stride_u_b, - const uint8_t* src_v_b, - int stride_v_b, - int width, - int height); - -#ifdef __cplusplus -} // extern "C" -} // namespace libyuv -#endif - -#endif // INCLUDE_LIBYUV_COMPARE_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/compare_row.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/compare_row.h deleted file mode 100644 index e95b9d93eb..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/compare_row.h +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright 2013 The LibYuv Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef INCLUDE_LIBYUV_COMPARE_ROW_H_ -#define INCLUDE_LIBYUV_COMPARE_ROW_H_ - -#include "libyuv/basic_types.h" - -#ifdef __cplusplus -namespace libyuv { -extern "C" { -#endif - -#if defined(__pnacl__) || defined(__CLR_VER) || \ - (defined(__native_client__) && defined(__x86_64__)) || \ - (defined(__i386__) && !defined(__SSE__) && !defined(__clang__)) -#define LIBYUV_DISABLE_X86 -#endif -#if defined(__native_client__) -#define LIBYUV_DISABLE_NEON -#endif -// MemorySanitizer does not support assembly code yet. http://crbug.com/344505 -#if defined(__has_feature) -#if __has_feature(memory_sanitizer) -#define LIBYUV_DISABLE_X86 -#endif -#endif -// Visual C 2012 required for AVX2. -#if defined(_M_IX86) && !defined(__clang__) && defined(_MSC_VER) && \ - _MSC_VER >= 1700 -#define VISUALC_HAS_AVX2 1 -#endif // VisualStudio >= 2012 - -// clang >= 3.4.0 required for AVX2. -#if defined(__clang__) && (defined(__x86_64__) || defined(__i386__)) -#if (__clang_major__ > 3) || (__clang_major__ == 3 && (__clang_minor__ >= 4)) -#define CLANG_HAS_AVX2 1 -#endif // clang >= 3.4 -#endif // __clang__ - -// The following are available for Visual C and GCC: -#if !defined(LIBYUV_DISABLE_X86) && \ - (defined(__x86_64__) || defined(__i386__) || defined(_M_IX86)) -#define HAS_HASHDJB2_SSE41 -#define HAS_SUMSQUAREERROR_SSE2 -#define HAS_HAMMINGDISTANCE_SSE42 -#endif - -// The following are available for Visual C and clangcl 32 bit: -#if !defined(LIBYUV_DISABLE_X86) && defined(_M_IX86) && defined(_MSC_VER) && \ - (defined(VISUALC_HAS_AVX2) || defined(CLANG_HAS_AVX2)) -#define HAS_HASHDJB2_AVX2 -#define HAS_SUMSQUAREERROR_AVX2 -#endif - -// The following are available for GCC and clangcl 64 bit: -#if !defined(LIBYUV_DISABLE_X86) && \ - (defined(__x86_64__) || (defined(__i386__) && !defined(_MSC_VER))) -#define HAS_HAMMINGDISTANCE_SSSE3 -#endif - -// The following are available for GCC and clangcl 64 bit: -#if !defined(LIBYUV_DISABLE_X86) && defined(CLANG_HAS_AVX2) && \ - (defined(__x86_64__) || (defined(__i386__) && !defined(_MSC_VER))) -#define HAS_HAMMINGDISTANCE_AVX2 -#endif - -// The following are available for Neon: -#if !defined(LIBYUV_DISABLE_NEON) && \ - (defined(__ARM_NEON__) || defined(LIBYUV_NEON) || defined(__aarch64__)) -#define HAS_SUMSQUAREERROR_NEON -#define HAS_HAMMINGDISTANCE_NEON -#endif - -#if !defined(LIBYUV_DISABLE_MSA) && defined(__mips_msa) -#define HAS_HAMMINGDISTANCE_MSA -#define HAS_SUMSQUAREERROR_MSA -#endif - -#if !defined(LIBYUV_DISABLE_MMI) && defined(_MIPS_ARCH_LOONGSON3A) -#define HAS_HAMMINGDISTANCE_MMI -#define HAS_SUMSQUAREERROR_MMI -#endif - -uint32_t HammingDistance_C(const uint8_t* src_a, - const uint8_t* src_b, - int count); -uint32_t HammingDistance_SSE42(const uint8_t* src_a, - const uint8_t* src_b, - int count); -uint32_t HammingDistance_SSSE3(const uint8_t* src_a, - const uint8_t* src_b, - int count); -uint32_t HammingDistance_AVX2(const uint8_t* src_a, - const uint8_t* src_b, - int count); -uint32_t HammingDistance_NEON(const uint8_t* src_a, - const uint8_t* src_b, - int count); -uint32_t HammingDistance_MSA(const uint8_t* src_a, - const uint8_t* src_b, - int count); -uint32_t HammingDistance_MMI(const uint8_t* src_a, - const uint8_t* src_b, - int count); -uint32_t SumSquareError_C(const uint8_t* src_a, - const uint8_t* src_b, - int count); -uint32_t SumSquareError_SSE2(const uint8_t* src_a, - const uint8_t* src_b, - int count); -uint32_t SumSquareError_AVX2(const uint8_t* src_a, - const uint8_t* src_b, - int count); -uint32_t SumSquareError_NEON(const uint8_t* src_a, - const uint8_t* src_b, - int count); -uint32_t SumSquareError_MSA(const uint8_t* src_a, - const uint8_t* src_b, - int count); -uint32_t SumSquareError_MMI(const uint8_t* src_a, - const uint8_t* src_b, - int count); - -uint32_t HashDjb2_C(const uint8_t* src, int count, uint32_t seed); -uint32_t HashDjb2_SSE41(const uint8_t* src, int count, uint32_t seed); -uint32_t HashDjb2_AVX2(const uint8_t* src, int count, uint32_t seed); - -#ifdef __cplusplus -} // extern "C" -} // namespace libyuv -#endif - -#endif // INCLUDE_LIBYUV_COMPARE_ROW_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert.h deleted file mode 100644 index f571142fab..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert.h +++ /dev/null @@ -1,504 +0,0 @@ -/* - * Copyright 2011 The LibYuv Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef INCLUDE_LIBYUV_CONVERT_H_ -#define INCLUDE_LIBYUV_CONVERT_H_ - -#include "libyuv/basic_types.h" - -#include "libyuv/rotate.h" // For enum RotationMode. - -// TODO(fbarchard): fix WebRTC source to include following libyuv headers: -#include "libyuv/convert_argb.h" // For WebRTC I420ToARGB. b/620 -#include "libyuv/convert_from.h" // For WebRTC ConvertFromI420. b/620 -#include "libyuv/planar_functions.h" // For WebRTC I420Rect, CopyPlane. b/618 - -#ifdef __cplusplus -namespace libyuv { -extern "C" { -#endif - -// Convert I444 to I420. -LIBYUV_API -int I444ToI420(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Convert I444 to NV21. -LIBYUV_API -int I444ToNV21(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_vu, - int dst_stride_vu, - int width, - int height); - -// Convert I422 to I420. -LIBYUV_API -int I422ToI420(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Convert I422 to NV21. -LIBYUV_API -int I422ToNV21(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_vu, - int dst_stride_vu, - int width, - int height); - -// Copy I420 to I420. -#define I420ToI420 I420Copy -LIBYUV_API -int I420Copy(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Copy I010 to I010 -#define I010ToI010 I010Copy -#define H010ToH010 I010Copy -LIBYUV_API -int I010Copy(const uint16_t* src_y, - int src_stride_y, - const uint16_t* src_u, - int src_stride_u, - const uint16_t* src_v, - int src_stride_v, - uint16_t* dst_y, - int dst_stride_y, - uint16_t* dst_u, - int dst_stride_u, - uint16_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Convert 10 bit YUV to 8 bit -#define H010ToH420 I010ToI420 -LIBYUV_API -int I010ToI420(const uint16_t* src_y, - int src_stride_y, - const uint16_t* src_u, - int src_stride_u, - const uint16_t* src_v, - int src_stride_v, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Convert I400 (grey) to I420. -LIBYUV_API -int I400ToI420(const uint8_t* src_y, - int src_stride_y, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Convert I400 (grey) to NV21. -LIBYUV_API -int I400ToNV21(const uint8_t* src_y, - int src_stride_y, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_vu, - int dst_stride_vu, - int width, - int height); - -#define J400ToJ420 I400ToI420 - -// Convert NV12 to I420. -LIBYUV_API -int NV12ToI420(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_uv, - int src_stride_uv, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Convert NV21 to I420. -LIBYUV_API -int NV21ToI420(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_vu, - int src_stride_vu, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Convert YUY2 to I420. -LIBYUV_API -int YUY2ToI420(const uint8_t* src_yuy2, - int src_stride_yuy2, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Convert UYVY to I420. -LIBYUV_API -int UYVYToI420(const uint8_t* src_uyvy, - int src_stride_uyvy, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Convert AYUV to NV12. -LIBYUV_API -int AYUVToNV12(const uint8_t* src_ayuv, - int src_stride_ayuv, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_uv, - int dst_stride_uv, - int width, - int height); - -// Convert AYUV to NV21. -LIBYUV_API -int AYUVToNV21(const uint8_t* src_ayuv, - int src_stride_ayuv, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_vu, - int dst_stride_vu, - int width, - int height); - -// Convert M420 to I420. -LIBYUV_API -int M420ToI420(const uint8_t* src_m420, - int src_stride_m420, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Convert Android420 to I420. -LIBYUV_API -int Android420ToI420(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - int src_pixel_stride_uv, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// ARGB little endian (bgra in memory) to I420. -LIBYUV_API -int ARGBToI420(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// BGRA little endian (argb in memory) to I420. -LIBYUV_API -int BGRAToI420(const uint8_t* src_bgra, - int src_stride_bgra, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// ABGR little endian (rgba in memory) to I420. -LIBYUV_API -int ABGRToI420(const uint8_t* src_abgr, - int src_stride_abgr, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// RGBA little endian (abgr in memory) to I420. -LIBYUV_API -int RGBAToI420(const uint8_t* src_rgba, - int src_stride_rgba, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// RGB little endian (bgr in memory) to I420. -LIBYUV_API -int RGB24ToI420(const uint8_t* src_rgb24, - int src_stride_rgb24, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// RGB little endian (bgr in memory) to J420. -LIBYUV_API -int RGB24ToJ420(const uint8_t* src_rgb24, - int src_stride_rgb24, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// RGB big endian (rgb in memory) to I420. -LIBYUV_API -int RAWToI420(const uint8_t* src_raw, - int src_stride_raw, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// RGB16 (RGBP fourcc) little endian to I420. -LIBYUV_API -int RGB565ToI420(const uint8_t* src_rgb565, - int src_stride_rgb565, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// RGB15 (RGBO fourcc) little endian to I420. -LIBYUV_API -int ARGB1555ToI420(const uint8_t* src_argb1555, - int src_stride_argb1555, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// RGB12 (R444 fourcc) little endian to I420. -LIBYUV_API -int ARGB4444ToI420(const uint8_t* src_argb4444, - int src_stride_argb4444, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// RGB little endian (bgr in memory) to J400. -LIBYUV_API -int RGB24ToJ400(const uint8_t* src_rgb24, - int src_stride_rgb24, - uint8_t* dst_yj, - int dst_stride_yj, - int width, - int height); - -#ifdef HAVE_JPEG -// src_width/height provided by capture. -// dst_width/height for clipping determine final size. -LIBYUV_API -int MJPGToI420(const uint8_t* sample, - size_t sample_size, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int src_width, - int src_height, - int dst_width, - int dst_height); - -// JPEG to NV21 -LIBYUV_API -int MJPGToNV21(const uint8_t* sample, - size_t sample_size, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_vu, - int dst_stride_vu, - int src_width, - int src_height, - int dst_width, - int dst_height); - -// Query size of MJPG in pixels. -LIBYUV_API -int MJPGSize(const uint8_t* sample, - size_t sample_size, - int* width, - int* height); -#endif - -// Convert camera sample to I420 with cropping, rotation and vertical flip. -// "src_size" is needed to parse MJPG. -// "dst_stride_y" number of bytes in a row of the dst_y plane. -// Normally this would be the same as dst_width, with recommended alignment -// to 16 bytes for better efficiency. -// If rotation of 90 or 270 is used, stride is affected. The caller should -// allocate the I420 buffer according to rotation. -// "dst_stride_u" number of bytes in a row of the dst_u plane. -// Normally this would be the same as (dst_width + 1) / 2, with -// recommended alignment to 16 bytes for better efficiency. -// If rotation of 90 or 270 is used, stride is affected. -// "crop_x" and "crop_y" are starting position for cropping. -// To center, crop_x = (src_width - dst_width) / 2 -// crop_y = (src_height - dst_height) / 2 -// "src_width" / "src_height" is size of src_frame in pixels. -// "src_height" can be negative indicating a vertically flipped image source. -// "crop_width" / "crop_height" is the size to crop the src to. -// Must be less than or equal to src_width/src_height -// Cropping parameters are pre-rotation. -// "rotation" can be 0, 90, 180 or 270. -// "fourcc" is a fourcc. ie 'I420', 'YUY2' -// Returns 0 for successful; -1 for invalid parameter. Non-zero for failure. -LIBYUV_API -int ConvertToI420(const uint8_t* sample, - size_t sample_size, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int crop_x, - int crop_y, - int src_width, - int src_height, - int crop_width, - int crop_height, - enum RotationMode rotation, - uint32_t fourcc); - -#ifdef __cplusplus -} // extern "C" -} // namespace libyuv -#endif - -#endif // INCLUDE_LIBYUV_CONVERT_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_argb.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_argb.h deleted file mode 100644 index e8ed1f59f3..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_argb.h +++ /dev/null @@ -1,721 +0,0 @@ -/* - * Copyright 2012 The LibYuv Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef INCLUDE_LIBYUV_CONVERT_ARGB_H_ -#define INCLUDE_LIBYUV_CONVERT_ARGB_H_ - -#include "libyuv/basic_types.h" - -#include "libyuv/rotate.h" // For enum RotationMode. - -// TODO(fbarchard): This set of functions should exactly match convert.h -// TODO(fbarchard): Add tests. Create random content of right size and convert -// with C vs Opt and or to I420 and compare. -// TODO(fbarchard): Some of these functions lack parameter setting. - -#ifdef __cplusplus -namespace libyuv { -extern "C" { -#endif - -// Alias. -#define ARGBToARGB ARGBCopy - -// Copy ARGB to ARGB. -LIBYUV_API -int ARGBCopy(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert I420 to ARGB. -LIBYUV_API -int I420ToARGB(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Duplicate prototype for function in convert_from.h for remoting. -LIBYUV_API -int I420ToABGR(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_abgr, - int dst_stride_abgr, - int width, - int height); - -// Convert I010 to ARGB. -LIBYUV_API -int I010ToARGB(const uint16_t* src_y, - int src_stride_y, - const uint16_t* src_u, - int src_stride_u, - const uint16_t* src_v, - int src_stride_v, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert I010 to ARGB. -LIBYUV_API -int I010ToARGB(const uint16_t* src_y, - int src_stride_y, - const uint16_t* src_u, - int src_stride_u, - const uint16_t* src_v, - int src_stride_v, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert I010 to ABGR. -LIBYUV_API -int I010ToABGR(const uint16_t* src_y, - int src_stride_y, - const uint16_t* src_u, - int src_stride_u, - const uint16_t* src_v, - int src_stride_v, - uint8_t* dst_abgr, - int dst_stride_abgr, - int width, - int height); - -// Convert H010 to ARGB. -LIBYUV_API -int H010ToARGB(const uint16_t* src_y, - int src_stride_y, - const uint16_t* src_u, - int src_stride_u, - const uint16_t* src_v, - int src_stride_v, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert H010 to ABGR. -LIBYUV_API -int H010ToABGR(const uint16_t* src_y, - int src_stride_y, - const uint16_t* src_u, - int src_stride_u, - const uint16_t* src_v, - int src_stride_v, - uint8_t* dst_abgr, - int dst_stride_abgr, - int width, - int height); - -// Convert I422 to ARGB. -LIBYUV_API -int I422ToARGB(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert I444 to ARGB. -LIBYUV_API -int I444ToARGB(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert J444 to ARGB. -LIBYUV_API -int J444ToARGB(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert I444 to ABGR. -LIBYUV_API -int I444ToABGR(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_abgr, - int dst_stride_abgr, - int width, - int height); - -// Convert I420 with Alpha to preattenuated ARGB. -LIBYUV_API -int I420AlphaToARGB(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - const uint8_t* src_a, - int src_stride_a, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height, - int attenuate); - -// Convert I420 with Alpha to preattenuated ABGR. -LIBYUV_API -int I420AlphaToABGR(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - const uint8_t* src_a, - int src_stride_a, - uint8_t* dst_abgr, - int dst_stride_abgr, - int width, - int height, - int attenuate); - -// Convert I400 (grey) to ARGB. Reverse of ARGBToI400. -LIBYUV_API -int I400ToARGB(const uint8_t* src_y, - int src_stride_y, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert J400 (jpeg grey) to ARGB. -LIBYUV_API -int J400ToARGB(const uint8_t* src_y, - int src_stride_y, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Alias. -#define YToARGB I400ToARGB - -// Convert NV12 to ARGB. -LIBYUV_API -int NV12ToARGB(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_uv, - int src_stride_uv, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert NV21 to ARGB. -LIBYUV_API -int NV21ToARGB(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_vu, - int src_stride_vu, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert NV12 to ABGR. -LIBYUV_API -int NV12ToABGR(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_uv, - int src_stride_uv, - uint8_t* dst_abgr, - int dst_stride_abgr, - int width, - int height); - -// Convert NV21 to ABGR. -LIBYUV_API -int NV21ToABGR(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_vu, - int src_stride_vu, - uint8_t* dst_abgr, - int dst_stride_abgr, - int width, - int height); - -// Convert NV12 to RGB24. -LIBYUV_API -int NV12ToRGB24(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_uv, - int src_stride_uv, - uint8_t* dst_rgb24, - int dst_stride_rgb24, - int width, - int height); - -// Convert NV21 to RGB24. -LIBYUV_API -int NV21ToRGB24(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_vu, - int src_stride_vu, - uint8_t* dst_rgb24, - int dst_stride_rgb24, - int width, - int height); - -// Convert NV21 to YUV24. -LIBYUV_API -int NV21ToYUV24(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_vu, - int src_stride_vu, - uint8_t* dst_yuv24, - int dst_stride_yuv24, - int width, - int height); - -// Convert NV12 to RAW. -LIBYUV_API -int NV12ToRAW(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_uv, - int src_stride_uv, - uint8_t* dst_raw, - int dst_stride_raw, - int width, - int height); - -// Convert NV21 to RAW. -LIBYUV_API -int NV21ToRAW(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_vu, - int src_stride_vu, - uint8_t* dst_raw, - int dst_stride_raw, - int width, - int height); - -// Convert M420 to ARGB. -LIBYUV_API -int M420ToARGB(const uint8_t* src_m420, - int src_stride_m420, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert YUY2 to ARGB. -LIBYUV_API -int YUY2ToARGB(const uint8_t* src_yuy2, - int src_stride_yuy2, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert UYVY to ARGB. -LIBYUV_API -int UYVYToARGB(const uint8_t* src_uyvy, - int src_stride_uyvy, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert J420 to ARGB. -LIBYUV_API -int J420ToARGB(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert J422 to ARGB. -LIBYUV_API -int J422ToARGB(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert J420 to ABGR. -LIBYUV_API -int J420ToABGR(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_abgr, - int dst_stride_abgr, - int width, - int height); - -// Convert J422 to ABGR. -LIBYUV_API -int J422ToABGR(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_abgr, - int dst_stride_abgr, - int width, - int height); - -// Convert H420 to ARGB. -LIBYUV_API -int H420ToARGB(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert H422 to ARGB. -LIBYUV_API -int H422ToARGB(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert H420 to ABGR. -LIBYUV_API -int H420ToABGR(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_abgr, - int dst_stride_abgr, - int width, - int height); - -// Convert H422 to ABGR. -LIBYUV_API -int H422ToABGR(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_abgr, - int dst_stride_abgr, - int width, - int height); - -// Convert H010 to ARGB. -LIBYUV_API -int H010ToARGB(const uint16_t* src_y, - int src_stride_y, - const uint16_t* src_u, - int src_stride_u, - const uint16_t* src_v, - int src_stride_v, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert I010 to AR30. -LIBYUV_API -int I010ToAR30(const uint16_t* src_y, - int src_stride_y, - const uint16_t* src_u, - int src_stride_u, - const uint16_t* src_v, - int src_stride_v, - uint8_t* dst_ar30, - int dst_stride_ar30, - int width, - int height); - -// Convert H010 to AR30. -LIBYUV_API -int H010ToAR30(const uint16_t* src_y, - int src_stride_y, - const uint16_t* src_u, - int src_stride_u, - const uint16_t* src_v, - int src_stride_v, - uint8_t* dst_ar30, - int dst_stride_ar30, - int width, - int height); - -// Convert I010 to AB30. -LIBYUV_API -int I010ToAB30(const uint16_t* src_y, - int src_stride_y, - const uint16_t* src_u, - int src_stride_u, - const uint16_t* src_v, - int src_stride_v, - uint8_t* dst_ab30, - int dst_stride_ab30, - int width, - int height); - -// Convert H010 to AB30. -LIBYUV_API -int H010ToAB30(const uint16_t* src_y, - int src_stride_y, - const uint16_t* src_u, - int src_stride_u, - const uint16_t* src_v, - int src_stride_v, - uint8_t* dst_ab30, - int dst_stride_ab30, - int width, - int height); - -// BGRA little endian (argb in memory) to ARGB. -LIBYUV_API -int BGRAToARGB(const uint8_t* src_bgra, - int src_stride_bgra, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// ABGR little endian (rgba in memory) to ARGB. -LIBYUV_API -int ABGRToARGB(const uint8_t* src_abgr, - int src_stride_abgr, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// RGBA little endian (abgr in memory) to ARGB. -LIBYUV_API -int RGBAToARGB(const uint8_t* src_rgba, - int src_stride_rgba, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Deprecated function name. -#define BG24ToARGB RGB24ToARGB - -// RGB little endian (bgr in memory) to ARGB. -LIBYUV_API -int RGB24ToARGB(const uint8_t* src_rgb24, - int src_stride_rgb24, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// RGB big endian (rgb in memory) to ARGB. -LIBYUV_API -int RAWToARGB(const uint8_t* src_raw, - int src_stride_raw, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// RGB16 (RGBP fourcc) little endian to ARGB. -LIBYUV_API -int RGB565ToARGB(const uint8_t* src_rgb565, - int src_stride_rgb565, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// RGB15 (RGBO fourcc) little endian to ARGB. -LIBYUV_API -int ARGB1555ToARGB(const uint8_t* src_argb1555, - int src_stride_argb1555, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// RGB12 (R444 fourcc) little endian to ARGB. -LIBYUV_API -int ARGB4444ToARGB(const uint8_t* src_argb4444, - int src_stride_argb4444, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Aliases -#define AB30ToARGB AR30ToABGR -#define AB30ToABGR AR30ToARGB -#define AB30ToAR30 AR30ToAB30 - -// Convert AR30 To ARGB. -LIBYUV_API -int AR30ToARGB(const uint8_t* src_ar30, - int src_stride_ar30, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert AR30 To ABGR. -LIBYUV_API -int AR30ToABGR(const uint8_t* src_ar30, - int src_stride_ar30, - uint8_t* dst_abgr, - int dst_stride_abgr, - int width, - int height); - -// Convert AR30 To AB30. -LIBYUV_API -int AR30ToAB30(const uint8_t* src_ar30, - int src_stride_ar30, - uint8_t* dst_ab30, - int dst_stride_ab30, - int width, - int height); - -#ifdef HAVE_JPEG -// src_width/height provided by capture -// dst_width/height for clipping determine final size. -LIBYUV_API -int MJPGToARGB(const uint8_t* sample, - size_t sample_size, - uint8_t* dst_argb, - int dst_stride_argb, - int src_width, - int src_height, - int dst_width, - int dst_height); -#endif - -// Convert Android420 to ARGB. -LIBYUV_API -int Android420ToARGB(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - int src_pixel_stride_uv, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert Android420 to ABGR. -LIBYUV_API -int Android420ToABGR(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - int src_pixel_stride_uv, - uint8_t* dst_abgr, - int dst_stride_abgr, - int width, - int height); - -// Convert camera sample to ARGB with cropping, rotation and vertical flip. -// "sample_size" is needed to parse MJPG. -// "dst_stride_argb" number of bytes in a row of the dst_argb plane. -// Normally this would be the same as dst_width, with recommended alignment -// to 16 bytes for better efficiency. -// If rotation of 90 or 270 is used, stride is affected. The caller should -// allocate the I420 buffer according to rotation. -// "dst_stride_u" number of bytes in a row of the dst_u plane. -// Normally this would be the same as (dst_width + 1) / 2, with -// recommended alignment to 16 bytes for better efficiency. -// If rotation of 90 or 270 is used, stride is affected. -// "crop_x" and "crop_y" are starting position for cropping. -// To center, crop_x = (src_width - dst_width) / 2 -// crop_y = (src_height - dst_height) / 2 -// "src_width" / "src_height" is size of src_frame in pixels. -// "src_height" can be negative indicating a vertically flipped image source. -// "crop_width" / "crop_height" is the size to crop the src to. -// Must be less than or equal to src_width/src_height -// Cropping parameters are pre-rotation. -// "rotation" can be 0, 90, 180 or 270. -// "fourcc" is a fourcc. ie 'I420', 'YUY2' -// Returns 0 for successful; -1 for invalid parameter. Non-zero for failure. -LIBYUV_API -int ConvertToARGB(const uint8_t* sample, - size_t sample_size, - uint8_t* dst_argb, - int dst_stride_argb, - int crop_x, - int crop_y, - int src_width, - int src_height, - int crop_width, - int crop_height, - enum RotationMode rotation, - uint32_t fourcc); - -#ifdef __cplusplus -} // extern "C" -} // namespace libyuv -#endif - -#endif // INCLUDE_LIBYUV_CONVERT_ARGB_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_from.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_from.h deleted file mode 100644 index 861418d07b..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_from.h +++ /dev/null @@ -1,366 +0,0 @@ -/* - * Copyright 2011 The LibYuv Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef INCLUDE_LIBYUV_CONVERT_FROM_H_ -#define INCLUDE_LIBYUV_CONVERT_FROM_H_ - -#include "libyuv/basic_types.h" -#include "libyuv/rotate.h" - -#ifdef __cplusplus -namespace libyuv { -extern "C" { -#endif - -// See Also convert.h for conversions from formats to I420. - -// Convert 8 bit YUV to 10 bit. -#define H420ToH010 I420ToI010 -int I420ToI010(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint16_t* dst_y, - int dst_stride_y, - uint16_t* dst_u, - int dst_stride_u, - uint16_t* dst_v, - int dst_stride_v, - int width, - int height); - -LIBYUV_API -int I420ToI422(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -LIBYUV_API -int I420ToI444(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Copy to I400. Source can be I420, I422, I444, I400, NV12 or NV21. -LIBYUV_API -int I400Copy(const uint8_t* src_y, - int src_stride_y, - uint8_t* dst_y, - int dst_stride_y, - int width, - int height); - -LIBYUV_API -int I420ToNV12(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_uv, - int dst_stride_uv, - int width, - int height); - -LIBYUV_API -int I420ToNV21(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_vu, - int dst_stride_vu, - int width, - int height); - -LIBYUV_API -int I420ToYUY2(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_yuy2, - int dst_stride_yuy2, - int width, - int height); - -LIBYUV_API -int I420ToUYVY(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_uyvy, - int dst_stride_uyvy, - int width, - int height); - -LIBYUV_API -int I420ToARGB(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -LIBYUV_API -int I420ToBGRA(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_bgra, - int dst_stride_bgra, - int width, - int height); - -LIBYUV_API -int I420ToABGR(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_abgr, - int dst_stride_abgr, - int width, - int height); - -LIBYUV_API -int I420ToRGBA(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_rgba, - int dst_stride_rgba, - int width, - int height); - -LIBYUV_API -int I420ToRGB24(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_rgb24, - int dst_stride_rgb24, - int width, - int height); - -LIBYUV_API -int I420ToRAW(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_raw, - int dst_stride_raw, - int width, - int height); - -LIBYUV_API -int H420ToRGB24(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_rgb24, - int dst_stride_rgb24, - int width, - int height); - -LIBYUV_API -int H420ToRAW(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_raw, - int dst_stride_raw, - int width, - int height); - -LIBYUV_API -int I420ToRGB565(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_rgb565, - int dst_stride_rgb565, - int width, - int height); - -LIBYUV_API -int J420ToRGB565(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_rgb565, - int dst_stride_rgb565, - int width, - int height); - -LIBYUV_API -int H420ToRGB565(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_rgb565, - int dst_stride_rgb565, - int width, - int height); - -LIBYUV_API -int I422ToRGB565(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_rgb565, - int dst_stride_rgb565, - int width, - int height); - -// Convert I420 To RGB565 with 4x4 dither matrix (16 bytes). -// Values in dither matrix from 0 to 7 recommended. -// The order of the dither matrix is first byte is upper left. - -LIBYUV_API -int I420ToRGB565Dither(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_rgb565, - int dst_stride_rgb565, - const uint8_t* dither4x4, - int width, - int height); - -LIBYUV_API -int I420ToARGB1555(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_argb1555, - int dst_stride_argb1555, - int width, - int height); - -LIBYUV_API -int I420ToARGB4444(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_argb4444, - int dst_stride_argb4444, - int width, - int height); - -// Convert I420 to AR30. -LIBYUV_API -int I420ToAR30(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_ar30, - int dst_stride_ar30, - int width, - int height); - -// Convert H420 to AR30. -LIBYUV_API -int H420ToAR30(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_ar30, - int dst_stride_ar30, - int width, - int height); - -// Convert I420 to specified format. -// "dst_sample_stride" is bytes in a row for the destination. Pass 0 if the -// buffer has contiguous rows. Can be negative. A multiple of 16 is optimal. -LIBYUV_API -int ConvertFromI420(const uint8_t* y, - int y_stride, - const uint8_t* u, - int u_stride, - const uint8_t* v, - int v_stride, - uint8_t* dst_sample, - int dst_sample_stride, - int width, - int height, - uint32_t fourcc); - -#ifdef __cplusplus -} // extern "C" -} // namespace libyuv -#endif - -#endif // INCLUDE_LIBYUV_CONVERT_FROM_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_from_argb.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_from_argb.h deleted file mode 100644 index cbbef6fe45..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/convert_from_argb.h +++ /dev/null @@ -1,298 +0,0 @@ -/* - * Copyright 2012 The LibYuv Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef INCLUDE_LIBYUV_CONVERT_FROM_ARGB_H_ -#define INCLUDE_LIBYUV_CONVERT_FROM_ARGB_H_ - -#include "libyuv/basic_types.h" - -#ifdef __cplusplus -namespace libyuv { -extern "C" { -#endif - -// Copy ARGB to ARGB. -#define ARGBToARGB ARGBCopy -LIBYUV_API -int ARGBCopy(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert ARGB To BGRA. -LIBYUV_API -int ARGBToBGRA(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_bgra, - int dst_stride_bgra, - int width, - int height); - -// Convert ARGB To ABGR. -LIBYUV_API -int ARGBToABGR(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_abgr, - int dst_stride_abgr, - int width, - int height); - -// Convert ARGB To RGBA. -LIBYUV_API -int ARGBToRGBA(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_rgba, - int dst_stride_rgba, - int width, - int height); - -// Aliases -#define ARGBToAB30 ABGRToAR30 -#define ABGRToAB30 ARGBToAR30 - -// Convert ABGR To AR30. -LIBYUV_API -int ABGRToAR30(const uint8_t* src_abgr, - int src_stride_abgr, - uint8_t* dst_ar30, - int dst_stride_ar30, - int width, - int height); - -// Convert ARGB To AR30. -LIBYUV_API -int ARGBToAR30(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_ar30, - int dst_stride_ar30, - int width, - int height); - -// Convert ARGB To RGB24. -LIBYUV_API -int ARGBToRGB24(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_rgb24, - int dst_stride_rgb24, - int width, - int height); - -// Convert ARGB To RAW. -LIBYUV_API -int ARGBToRAW(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_raw, - int dst_stride_raw, - int width, - int height); - -// Convert ARGB To RGB565. -LIBYUV_API -int ARGBToRGB565(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_rgb565, - int dst_stride_rgb565, - int width, - int height); - -// Convert ARGB To RGB565 with 4x4 dither matrix (16 bytes). -// Values in dither matrix from 0 to 7 recommended. -// The order of the dither matrix is first byte is upper left. -// TODO(fbarchard): Consider pointer to 2d array for dither4x4. -// const uint8_t(*dither)[4][4]; -LIBYUV_API -int ARGBToRGB565Dither(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_rgb565, - int dst_stride_rgb565, - const uint8_t* dither4x4, - int width, - int height); - -// Convert ARGB To ARGB1555. -LIBYUV_API -int ARGBToARGB1555(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_argb1555, - int dst_stride_argb1555, - int width, - int height); - -// Convert ARGB To ARGB4444. -LIBYUV_API -int ARGBToARGB4444(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_argb4444, - int dst_stride_argb4444, - int width, - int height); - -// Convert ARGB To I444. -LIBYUV_API -int ARGBToI444(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Convert ARGB To I422. -LIBYUV_API -int ARGBToI422(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Convert ARGB To I420. (also in convert.h) -LIBYUV_API -int ARGBToI420(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Convert ARGB to J420. (JPeg full range I420). -LIBYUV_API -int ARGBToJ420(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_yj, - int dst_stride_yj, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Convert ARGB to J422. -LIBYUV_API -int ARGBToJ422(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_yj, - int dst_stride_yj, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Convert ARGB to J400. (JPeg full range). -LIBYUV_API -int ARGBToJ400(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_yj, - int dst_stride_yj, - int width, - int height); - -// Convert ARGB to I400. -LIBYUV_API -int ARGBToI400(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_y, - int dst_stride_y, - int width, - int height); - -// Convert ARGB to G. (Reverse of J400toARGB, which replicates G back to ARGB) -LIBYUV_API -int ARGBToG(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_g, - int dst_stride_g, - int width, - int height); - -// Convert ARGB To NV12. -LIBYUV_API -int ARGBToNV12(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_uv, - int dst_stride_uv, - int width, - int height); - -// Convert ARGB To NV21. -LIBYUV_API -int ARGBToNV21(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_vu, - int dst_stride_vu, - int width, - int height); - -// Convert ARGB To NV21. -LIBYUV_API -int ARGBToNV21(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_vu, - int dst_stride_vu, - int width, - int height); - -// Convert ABGR To NV12. -LIBYUV_API -int ABGRToNV12(const uint8_t* src_abgr, - int src_stride_abgr, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_uv, - int dst_stride_uv, - int width, - int height); - -// Convert ARGB To YUY2. -LIBYUV_API -int ARGBToYUY2(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_yuy2, - int dst_stride_yuy2, - int width, - int height); - -// Convert ARGB To UYVY. -LIBYUV_API -int ARGBToUYVY(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_uyvy, - int dst_stride_uyvy, - int width, - int height); - -#ifdef __cplusplus -} // extern "C" -} // namespace libyuv -#endif - -#endif // INCLUDE_LIBYUV_CONVERT_FROM_ARGB_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/cpu_id.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/cpu_id.h deleted file mode 100644 index b01cd25c57..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/cpu_id.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright 2011 The LibYuv Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef INCLUDE_LIBYUV_CPU_ID_H_ -#define INCLUDE_LIBYUV_CPU_ID_H_ - -#include "libyuv/basic_types.h" - -#ifdef __cplusplus -namespace libyuv { -extern "C" { -#endif - -// Internal flag to indicate cpuid requires initialization. -static const int kCpuInitialized = 0x1; - -// These flags are only valid on ARM processors. -static const int kCpuHasARM = 0x2; -static const int kCpuHasNEON = 0x4; -// 0x8 reserved for future ARM flag. - -// These flags are only valid on x86 processors. -static const int kCpuHasX86 = 0x10; -static const int kCpuHasSSE2 = 0x20; -static const int kCpuHasSSSE3 = 0x40; -static const int kCpuHasSSE41 = 0x80; -static const int kCpuHasSSE42 = 0x100; // unused at this time. -static const int kCpuHasAVX = 0x200; -static const int kCpuHasAVX2 = 0x400; -static const int kCpuHasERMS = 0x800; -static const int kCpuHasFMA3 = 0x1000; -static const int kCpuHasF16C = 0x2000; -static const int kCpuHasGFNI = 0x4000; -static const int kCpuHasAVX512BW = 0x8000; -static const int kCpuHasAVX512VL = 0x10000; -static const int kCpuHasAVX512VBMI = 0x20000; -static const int kCpuHasAVX512VBMI2 = 0x40000; -static const int kCpuHasAVX512VBITALG = 0x80000; -static const int kCpuHasAVX512VPOPCNTDQ = 0x100000; - -// These flags are only valid on MIPS processors. -static const int kCpuHasMIPS = 0x200000; -static const int kCpuHasMSA = 0x400000; -static const int kCpuHasMMI = 0x800000; - -// Optional init function. TestCpuFlag does an auto-init. -// Returns cpu_info flags. -LIBYUV_API -int InitCpuFlags(void); - -// Detect CPU has SSE2 etc. -// Test_flag parameter should be one of kCpuHas constants above. -// Returns non-zero if instruction set is detected -static __inline int TestCpuFlag(int test_flag) { - LIBYUV_API extern int cpu_info_; -#ifdef __ATOMIC_RELAXED - int cpu_info = __atomic_load_n(&cpu_info_, __ATOMIC_RELAXED); -#else - int cpu_info = cpu_info_; -#endif - return (!cpu_info ? InitCpuFlags() : cpu_info) & test_flag; -} - -// Internal function for parsing /proc/cpuinfo. -LIBYUV_API -int ArmCpuCaps(const char* cpuinfo_name); - -// For testing, allow CPU flags to be disabled. -// ie MaskCpuFlags(~kCpuHasSSSE3) to disable SSSE3. -// MaskCpuFlags(-1) to enable all cpu specific optimizations. -// MaskCpuFlags(1) to disable all cpu specific optimizations. -// MaskCpuFlags(0) to reset state so next call will auto init. -// Returns cpu_info flags. -LIBYUV_API -int MaskCpuFlags(int enable_flags); - -// Sets the CPU flags to |cpu_flags|, bypassing the detection code. |cpu_flags| -// should be a valid combination of the kCpuHas constants above and include -// kCpuInitialized. Use this method when running in a sandboxed process where -// the detection code might fail (as it might access /proc/cpuinfo). In such -// cases the cpu_info can be obtained from a non sandboxed process by calling -// InitCpuFlags() and passed to the sandboxed process (via command line -// parameters, IPC...) which can then call this method to initialize the CPU -// flags. -// Notes: -// - when specifying 0 for |cpu_flags|, the auto initialization is enabled -// again. -// - enabling CPU features that are not supported by the CPU will result in -// undefined behavior. -// TODO(fbarchard): consider writing a helper function that translates from -// other library CPU info to libyuv CPU info and add a .md doc that explains -// CPU detection. -static __inline void SetCpuFlags(int cpu_flags) { - LIBYUV_API extern int cpu_info_; -#ifdef __ATOMIC_RELAXED - __atomic_store_n(&cpu_info_, cpu_flags, __ATOMIC_RELAXED); -#else - cpu_info_ = cpu_flags; -#endif -} - -// Low level cpuid for X86. Returns zeros on other CPUs. -// eax is the info type that you want. -// ecx is typically the cpu number, and should normally be zero. -LIBYUV_API -void CpuId(int info_eax, int info_ecx, int* cpu_info); - -#ifdef __cplusplus -} // extern "C" -} // namespace libyuv -#endif - -#endif // INCLUDE_LIBYUV_CPU_ID_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/macros_msa.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/macros_msa.h deleted file mode 100644 index 29997ce11f..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/macros_msa.h +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright 2016 The LibYuv Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef INCLUDE_LIBYUV_MACROS_MSA_H_ -#define INCLUDE_LIBYUV_MACROS_MSA_H_ - -#if !defined(LIBYUV_DISABLE_MSA) && defined(__mips_msa) -#include -#include - -#if (__mips_isa_rev >= 6) -#define LW(psrc) \ - ({ \ - const uint8_t* psrc_lw_m = (const uint8_t*)(psrc); \ - uint32_t val_m; \ - asm volatile("lw %[val_m], %[psrc_lw_m] \n" \ - : [val_m] "=r"(val_m) \ - : [psrc_lw_m] "m"(*psrc_lw_m)); \ - val_m; \ - }) - -#if (__mips == 64) -#define LD(psrc) \ - ({ \ - const uint8_t* psrc_ld_m = (const uint8_t*)(psrc); \ - uint64_t val_m = 0; \ - asm volatile("ld %[val_m], %[psrc_ld_m] \n" \ - : [val_m] "=r"(val_m) \ - : [psrc_ld_m] "m"(*psrc_ld_m)); \ - val_m; \ - }) -#else // !(__mips == 64) -#define LD(psrc) \ - ({ \ - const uint8_t* psrc_ld_m = (const uint8_t*)(psrc); \ - uint32_t val0_m, val1_m; \ - uint64_t val_m = 0; \ - val0_m = LW(psrc_ld_m); \ - val1_m = LW(psrc_ld_m + 4); \ - val_m = (uint64_t)(val1_m); /* NOLINT */ \ - val_m = (uint64_t)((val_m << 32) & 0xFFFFFFFF00000000); /* NOLINT */ \ - val_m = (uint64_t)(val_m | (uint64_t)val0_m); /* NOLINT */ \ - val_m; \ - }) -#endif // (__mips == 64) - -#define SW(val, pdst) \ - ({ \ - uint8_t* pdst_sw_m = (uint8_t*)(pdst); /* NOLINT */ \ - uint32_t val_m = (val); \ - asm volatile("sw %[val_m], %[pdst_sw_m] \n" \ - : [pdst_sw_m] "=m"(*pdst_sw_m) \ - : [val_m] "r"(val_m)); \ - }) - -#if (__mips == 64) -#define SD(val, pdst) \ - ({ \ - uint8_t* pdst_sd_m = (uint8_t*)(pdst); /* NOLINT */ \ - uint64_t val_m = (val); \ - asm volatile("sd %[val_m], %[pdst_sd_m] \n" \ - : [pdst_sd_m] "=m"(*pdst_sd_m) \ - : [val_m] "r"(val_m)); \ - }) -#else // !(__mips == 64) -#define SD(val, pdst) \ - ({ \ - uint8_t* pdst_sd_m = (uint8_t*)(pdst); /* NOLINT */ \ - uint32_t val0_m, val1_m; \ - val0_m = (uint32_t)((val)&0x00000000FFFFFFFF); \ - val1_m = (uint32_t)(((val) >> 32) & 0x00000000FFFFFFFF); \ - SW(val0_m, pdst_sd_m); \ - SW(val1_m, pdst_sd_m + 4); \ - }) -#endif // !(__mips == 64) -#else // !(__mips_isa_rev >= 6) -#define LW(psrc) \ - ({ \ - const uint8_t* psrc_lw_m = (const uint8_t*)(psrc); \ - uint32_t val_m; \ - asm volatile("ulw %[val_m], %[psrc_lw_m] \n" \ - : [val_m] "=r"(val_m) \ - : [psrc_lw_m] "m"(*psrc_lw_m)); \ - val_m; \ - }) - -#if (__mips == 64) -#define LD(psrc) \ - ({ \ - const uint8_t* psrc_ld_m = (const uint8_t*)(psrc); \ - uint64_t val_m = 0; \ - asm volatile("uld %[val_m], %[psrc_ld_m] \n" \ - : [val_m] "=r"(val_m) \ - : [psrc_ld_m] "m"(*psrc_ld_m)); \ - val_m; \ - }) -#else // !(__mips == 64) -#define LD(psrc) \ - ({ \ - const uint8_t* psrc_ld_m = (const uint8_t*)(psrc); \ - uint32_t val0_m, val1_m; \ - uint64_t val_m = 0; \ - val0_m = LW(psrc_ld_m); \ - val1_m = LW(psrc_ld_m + 4); \ - val_m = (uint64_t)(val1_m); /* NOLINT */ \ - val_m = (uint64_t)((val_m << 32) & 0xFFFFFFFF00000000); /* NOLINT */ \ - val_m = (uint64_t)(val_m | (uint64_t)val0_m); /* NOLINT */ \ - val_m; \ - }) -#endif // (__mips == 64) - -#define SW(val, pdst) \ - ({ \ - uint8_t* pdst_sw_m = (uint8_t*)(pdst); /* NOLINT */ \ - uint32_t val_m = (val); \ - asm volatile("usw %[val_m], %[pdst_sw_m] \n" \ - : [pdst_sw_m] "=m"(*pdst_sw_m) \ - : [val_m] "r"(val_m)); \ - }) - -#define SD(val, pdst) \ - ({ \ - uint8_t* pdst_sd_m = (uint8_t*)(pdst); /* NOLINT */ \ - uint32_t val0_m, val1_m; \ - val0_m = (uint32_t)((val)&0x00000000FFFFFFFF); \ - val1_m = (uint32_t)(((val) >> 32) & 0x00000000FFFFFFFF); \ - SW(val0_m, pdst_sd_m); \ - SW(val1_m, pdst_sd_m + 4); \ - }) -#endif // (__mips_isa_rev >= 6) - -// TODO(fbarchard): Consider removing __VAR_ARGS versions. -#define LD_B(RTYPE, psrc) *((RTYPE*)(psrc)) /* NOLINT */ -#define LD_UB(...) LD_B(const v16u8, __VA_ARGS__) - -#define ST_B(RTYPE, in, pdst) *((RTYPE*)(pdst)) = (in) /* NOLINT */ -#define ST_UB(...) ST_B(v16u8, __VA_ARGS__) - -#define ST_H(RTYPE, in, pdst) *((RTYPE*)(pdst)) = (in) /* NOLINT */ -#define ST_UH(...) ST_H(v8u16, __VA_ARGS__) - -/* Description : Load two vectors with 16 'byte' sized elements - Arguments : Inputs - psrc, stride - Outputs - out0, out1 - Return Type - as per RTYPE - Details : Load 16 byte elements in 'out0' from (psrc) - Load 16 byte elements in 'out1' from (psrc + stride) -*/ -#define LD_B2(RTYPE, psrc, stride, out0, out1) \ - { \ - out0 = LD_B(RTYPE, (psrc)); \ - out1 = LD_B(RTYPE, (psrc) + stride); \ - } -#define LD_UB2(...) LD_B2(const v16u8, __VA_ARGS__) - -#define LD_B4(RTYPE, psrc, stride, out0, out1, out2, out3) \ - { \ - LD_B2(RTYPE, (psrc), stride, out0, out1); \ - LD_B2(RTYPE, (psrc) + 2 * stride, stride, out2, out3); \ - } -#define LD_UB4(...) LD_B4(const v16u8, __VA_ARGS__) - -/* Description : Store two vectors with stride each having 16 'byte' sized - elements - Arguments : Inputs - in0, in1, pdst, stride - Details : Store 16 byte elements from 'in0' to (pdst) - Store 16 byte elements from 'in1' to (pdst + stride) -*/ -#define ST_B2(RTYPE, in0, in1, pdst, stride) \ - { \ - ST_B(RTYPE, in0, (pdst)); \ - ST_B(RTYPE, in1, (pdst) + stride); \ - } -#define ST_UB2(...) ST_B2(v16u8, __VA_ARGS__) - -#define ST_B4(RTYPE, in0, in1, in2, in3, pdst, stride) \ - { \ - ST_B2(RTYPE, in0, in1, (pdst), stride); \ - ST_B2(RTYPE, in2, in3, (pdst) + 2 * stride, stride); \ - } -#define ST_UB4(...) ST_B4(v16u8, __VA_ARGS__) - -/* Description : Store vectors of 8 halfword elements with stride - Arguments : Inputs - in0, in1, pdst, stride - Details : Store 8 halfword elements from 'in0' to (pdst) - Store 8 halfword elements from 'in1' to (pdst + stride) -*/ -#define ST_H2(RTYPE, in0, in1, pdst, stride) \ - { \ - ST_H(RTYPE, in0, (pdst)); \ - ST_H(RTYPE, in1, (pdst) + stride); \ - } -#define ST_UH2(...) ST_H2(v8u16, __VA_ARGS__) - -// TODO(fbarchard): Consider using __msa_vshf_b and __msa_ilvr_b directly. -/* Description : Shuffle byte vector elements as per mask vector - Arguments : Inputs - in0, in1, in2, in3, mask0, mask1 - Outputs - out0, out1 - Return Type - as per RTYPE - Details : Byte elements from 'in0' & 'in1' are copied selectively to - 'out0' as per control vector 'mask0' -*/ -#define VSHF_B2(RTYPE, in0, in1, in2, in3, mask0, mask1, out0, out1) \ - { \ - out0 = (RTYPE)__msa_vshf_b((v16i8)mask0, (v16i8)in1, (v16i8)in0); \ - out1 = (RTYPE)__msa_vshf_b((v16i8)mask1, (v16i8)in3, (v16i8)in2); \ - } -#define VSHF_B2_UB(...) VSHF_B2(v16u8, __VA_ARGS__) - -/* Description : Interleave both left and right half of input vectors - Arguments : Inputs - in0, in1 - Outputs - out0, out1 - Return Type - as per RTYPE - Details : Right half of byte elements from 'in0' and 'in1' are - interleaved and written to 'out0' -*/ -#define ILVRL_B2(RTYPE, in0, in1, out0, out1) \ - { \ - out0 = (RTYPE)__msa_ilvr_b((v16i8)in0, (v16i8)in1); \ - out1 = (RTYPE)__msa_ilvl_b((v16i8)in0, (v16i8)in1); \ - } -#define ILVRL_B2_UB(...) ILVRL_B2(v16u8, __VA_ARGS__) - -#endif /* !defined(LIBYUV_DISABLE_MSA) && defined(__mips_msa) */ - -#endif // INCLUDE_LIBYUV_MACROS_MSA_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/mjpeg_decoder.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/mjpeg_decoder.h deleted file mode 100644 index 275f8d4c18..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/mjpeg_decoder.h +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Copyright 2012 The LibYuv Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef INCLUDE_LIBYUV_MJPEG_DECODER_H_ -#define INCLUDE_LIBYUV_MJPEG_DECODER_H_ - -#include "libyuv/basic_types.h" - -#ifdef __cplusplus -// NOTE: For a simplified public API use convert.h MJPGToI420(). - -struct jpeg_common_struct; -struct jpeg_decompress_struct; -struct jpeg_source_mgr; - -namespace libyuv { - -#ifdef __cplusplus -extern "C" { -#endif - -LIBYUV_BOOL ValidateJpeg(const uint8_t* sample, size_t sample_size); - -#ifdef __cplusplus -} // extern "C" -#endif - -static const uint32_t kUnknownDataSize = 0xFFFFFFFF; - -enum JpegSubsamplingType { - kJpegYuv420, - kJpegYuv422, - kJpegYuv444, - kJpegYuv400, - kJpegUnknown -}; - -struct Buffer { - const uint8_t* data; - int len; -}; - -struct BufferVector { - Buffer* buffers; - int len; - int pos; -}; - -struct SetJmpErrorMgr; - -// MJPEG ("Motion JPEG") is a pseudo-standard video codec where the frames are -// simply independent JPEG images with a fixed huffman table (which is omitted). -// It is rarely used in video transmission, but is common as a camera capture -// format, especially in Logitech devices. This class implements a decoder for -// MJPEG frames. -// -// See http://tools.ietf.org/html/rfc2435 -class LIBYUV_API MJpegDecoder { - public: - typedef void (*CallbackFunction)(void* opaque, - const uint8_t* const* data, - const int* strides, - int rows); - - static const int kColorSpaceUnknown; - static const int kColorSpaceGrayscale; - static const int kColorSpaceRgb; - static const int kColorSpaceYCbCr; - static const int kColorSpaceCMYK; - static const int kColorSpaceYCCK; - - MJpegDecoder(); - ~MJpegDecoder(); - - // Loads a new frame, reads its headers, and determines the uncompressed - // image format. - // Returns LIBYUV_TRUE if image looks valid and format is supported. - // If return value is LIBYUV_TRUE, then the values for all the following - // getters are populated. - // src_len is the size of the compressed mjpeg frame in bytes. - LIBYUV_BOOL LoadFrame(const uint8_t* src, size_t src_len); - - // Returns width of the last loaded frame in pixels. - int GetWidth(); - - // Returns height of the last loaded frame in pixels. - int GetHeight(); - - // Returns format of the last loaded frame. The return value is one of the - // kColorSpace* constants. - int GetColorSpace(); - - // Number of color components in the color space. - int GetNumComponents(); - - // Sample factors of the n-th component. - int GetHorizSampFactor(int component); - - int GetVertSampFactor(int component); - - int GetHorizSubSampFactor(int component); - - int GetVertSubSampFactor(int component); - - // Public for testability. - int GetImageScanlinesPerImcuRow(); - - // Public for testability. - int GetComponentScanlinesPerImcuRow(int component); - - // Width of a component in bytes. - int GetComponentWidth(int component); - - // Height of a component. - int GetComponentHeight(int component); - - // Width of a component in bytes with padding for DCTSIZE. Public for testing. - int GetComponentStride(int component); - - // Size of a component in bytes. - int GetComponentSize(int component); - - // Call this after LoadFrame() if you decide you don't want to decode it - // after all. - LIBYUV_BOOL UnloadFrame(); - - // Decodes the entire image into a one-buffer-per-color-component format. - // dst_width must match exactly. dst_height must be <= to image height; if - // less, the image is cropped. "planes" must have size equal to at least - // GetNumComponents() and they must point to non-overlapping buffers of size - // at least GetComponentSize(i). The pointers in planes are incremented - // to point to after the end of the written data. - // TODO(fbarchard): Add dst_x, dst_y to allow specific rect to be decoded. - LIBYUV_BOOL DecodeToBuffers(uint8_t** planes, int dst_width, int dst_height); - - // Decodes the entire image and passes the data via repeated calls to a - // callback function. Each call will get the data for a whole number of - // image scanlines. - // TODO(fbarchard): Add dst_x, dst_y to allow specific rect to be decoded. - LIBYUV_BOOL DecodeToCallback(CallbackFunction fn, - void* opaque, - int dst_width, - int dst_height); - - // The helper function which recognizes the jpeg sub-sampling type. - static JpegSubsamplingType JpegSubsamplingTypeHelper( - int* subsample_x, - int* subsample_y, - int number_of_components); - - private: - void AllocOutputBuffers(int num_outbufs); - void DestroyOutputBuffers(); - - LIBYUV_BOOL StartDecode(); - LIBYUV_BOOL FinishDecode(); - - void SetScanlinePointers(uint8_t** data); - LIBYUV_BOOL DecodeImcuRow(); - - int GetComponentScanlinePadding(int component); - - // A buffer holding the input data for a frame. - Buffer buf_; - BufferVector buf_vec_; - - jpeg_decompress_struct* decompress_struct_; - jpeg_source_mgr* source_mgr_; - SetJmpErrorMgr* error_mgr_; - - // LIBYUV_TRUE iff at least one component has scanline padding. (i.e., - // GetComponentScanlinePadding() != 0.) - LIBYUV_BOOL has_scanline_padding_; - - // Temporaries used to point to scanline outputs. - int num_outbufs_; // Outermost size of all arrays below. - uint8_t*** scanlines_; - int* scanlines_sizes_; - // Temporary buffer used for decoding when we can't decode directly to the - // output buffers. Large enough for just one iMCU row. - uint8_t** databuf_; - int* databuf_strides_; -}; - -} // namespace libyuv - -#endif // __cplusplus -#endif // INCLUDE_LIBYUV_MJPEG_DECODER_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/planar_functions.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/planar_functions.h deleted file mode 100644 index f6f5b3edd8..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/planar_functions.h +++ /dev/null @@ -1,860 +0,0 @@ -/* - * Copyright 2011 The LibYuv Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef INCLUDE_LIBYUV_PLANAR_FUNCTIONS_H_ -#define INCLUDE_LIBYUV_PLANAR_FUNCTIONS_H_ - -#include "libyuv/basic_types.h" - -// TODO(fbarchard): Remove the following headers includes. -#include "libyuv/convert.h" -#include "libyuv/convert_argb.h" - -#ifdef __cplusplus -namespace libyuv { -extern "C" { -#endif - -// TODO(fbarchard): Move cpu macros to row.h -#if defined(__pnacl__) || defined(__CLR_VER) || \ - (defined(__native_client__) && defined(__x86_64__)) || \ - (defined(__i386__) && !defined(__SSE__) && !defined(__clang__)) -#define LIBYUV_DISABLE_X86 -#endif -// MemorySanitizer does not support assembly code yet. http://crbug.com/344505 -#if defined(__has_feature) -#if __has_feature(memory_sanitizer) -#define LIBYUV_DISABLE_X86 -#endif -#endif -// The following are available on all x86 platforms: -#if !defined(LIBYUV_DISABLE_X86) && \ - (defined(_M_IX86) || defined(__x86_64__) || defined(__i386__)) -#define HAS_ARGBAFFINEROW_SSE2 -#endif - -// Copy a plane of data. -LIBYUV_API -void CopyPlane(const uint8_t* src_y, - int src_stride_y, - uint8_t* dst_y, - int dst_stride_y, - int width, - int height); - -LIBYUV_API -void CopyPlane_16(const uint16_t* src_y, - int src_stride_y, - uint16_t* dst_y, - int dst_stride_y, - int width, - int height); - -LIBYUV_API -void Convert16To8Plane(const uint16_t* src_y, - int src_stride_y, - uint8_t* dst_y, - int dst_stride_y, - int scale, // 16384 for 10 bits - int width, - int height); - -LIBYUV_API -void Convert8To16Plane(const uint8_t* src_y, - int src_stride_y, - uint16_t* dst_y, - int dst_stride_y, - int scale, // 1024 for 10 bits - int width, - int height); - -// Set a plane of data to a 32 bit value. -LIBYUV_API -void SetPlane(uint8_t* dst_y, - int dst_stride_y, - int width, - int height, - uint32_t value); - -// Split interleaved UV plane into separate U and V planes. -LIBYUV_API -void SplitUVPlane(const uint8_t* src_uv, - int src_stride_uv, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Merge separate U and V planes into one interleaved UV plane. -LIBYUV_API -void MergeUVPlane(const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_uv, - int dst_stride_uv, - int width, - int height); - -// Split interleaved RGB plane into separate R, G and B planes. -LIBYUV_API -void SplitRGBPlane(const uint8_t* src_rgb, - int src_stride_rgb, - uint8_t* dst_r, - int dst_stride_r, - uint8_t* dst_g, - int dst_stride_g, - uint8_t* dst_b, - int dst_stride_b, - int width, - int height); - -// Merge separate R, G and B planes into one interleaved RGB plane. -LIBYUV_API -void MergeRGBPlane(const uint8_t* src_r, - int src_stride_r, - const uint8_t* src_g, - int src_stride_g, - const uint8_t* src_b, - int src_stride_b, - uint8_t* dst_rgb, - int dst_stride_rgb, - int width, - int height); - -// Copy I400. Supports inverting. -LIBYUV_API -int I400ToI400(const uint8_t* src_y, - int src_stride_y, - uint8_t* dst_y, - int dst_stride_y, - int width, - int height); - -#define J400ToJ400 I400ToI400 - -// Copy I422 to I422. -#define I422ToI422 I422Copy -LIBYUV_API -int I422Copy(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Copy I444 to I444. -#define I444ToI444 I444Copy -LIBYUV_API -int I444Copy(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Convert YUY2 to I422. -LIBYUV_API -int YUY2ToI422(const uint8_t* src_yuy2, - int src_stride_yuy2, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Convert UYVY to I422. -LIBYUV_API -int UYVYToI422(const uint8_t* src_uyvy, - int src_stride_uyvy, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -LIBYUV_API -int YUY2ToNV12(const uint8_t* src_yuy2, - int src_stride_yuy2, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_uv, - int dst_stride_uv, - int width, - int height); - -LIBYUV_API -int UYVYToNV12(const uint8_t* src_uyvy, - int src_stride_uyvy, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_uv, - int dst_stride_uv, - int width, - int height); - -// Convert NV21 to NV12. -LIBYUV_API -int NV21ToNV12(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_vu, - int src_stride_vu, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_uv, - int dst_stride_uv, - int width, - int height); - -LIBYUV_API -int YUY2ToY(const uint8_t* src_yuy2, - int src_stride_yuy2, - uint8_t* dst_y, - int dst_stride_y, - int width, - int height); - -// Convert I420 to I400. (calls CopyPlane ignoring u/v). -LIBYUV_API -int I420ToI400(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_y, - int dst_stride_y, - int width, - int height); - -// Alias -#define J420ToJ400 I420ToI400 -#define I420ToI420Mirror I420Mirror - -// I420 mirror. -LIBYUV_API -int I420Mirror(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Alias -#define I400ToI400Mirror I400Mirror - -// I400 mirror. A single plane is mirrored horizontally. -// Pass negative height to achieve 180 degree rotation. -LIBYUV_API -int I400Mirror(const uint8_t* src_y, - int src_stride_y, - uint8_t* dst_y, - int dst_stride_y, - int width, - int height); - -// Alias -#define ARGBToARGBMirror ARGBMirror - -// ARGB mirror. -LIBYUV_API -int ARGBMirror(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert NV12 to RGB565. -LIBYUV_API -int NV12ToRGB565(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_uv, - int src_stride_uv, - uint8_t* dst_rgb565, - int dst_stride_rgb565, - int width, - int height); - -// I422ToARGB is in convert_argb.h -// Convert I422 to BGRA. -LIBYUV_API -int I422ToBGRA(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_bgra, - int dst_stride_bgra, - int width, - int height); - -// Convert I422 to ABGR. -LIBYUV_API -int I422ToABGR(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_abgr, - int dst_stride_abgr, - int width, - int height); - -// Convert I422 to RGBA. -LIBYUV_API -int I422ToRGBA(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_rgba, - int dst_stride_rgba, - int width, - int height); - -// Alias -#define RGB24ToRAW RAWToRGB24 - -LIBYUV_API -int RAWToRGB24(const uint8_t* src_raw, - int src_stride_raw, - uint8_t* dst_rgb24, - int dst_stride_rgb24, - int width, - int height); - -// Draw a rectangle into I420. -LIBYUV_API -int I420Rect(uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int x, - int y, - int width, - int height, - int value_y, - int value_u, - int value_v); - -// Draw a rectangle into ARGB. -LIBYUV_API -int ARGBRect(uint8_t* dst_argb, - int dst_stride_argb, - int dst_x, - int dst_y, - int width, - int height, - uint32_t value); - -// Convert ARGB to gray scale ARGB. -LIBYUV_API -int ARGBGrayTo(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Make a rectangle of ARGB gray scale. -LIBYUV_API -int ARGBGray(uint8_t* dst_argb, - int dst_stride_argb, - int dst_x, - int dst_y, - int width, - int height); - -// Make a rectangle of ARGB Sepia tone. -LIBYUV_API -int ARGBSepia(uint8_t* dst_argb, - int dst_stride_argb, - int dst_x, - int dst_y, - int width, - int height); - -// Apply a matrix rotation to each ARGB pixel. -// matrix_argb is 4 signed ARGB values. -128 to 127 representing -2 to 2. -// The first 4 coefficients apply to B, G, R, A and produce B of the output. -// The next 4 coefficients apply to B, G, R, A and produce G of the output. -// The next 4 coefficients apply to B, G, R, A and produce R of the output. -// The last 4 coefficients apply to B, G, R, A and produce A of the output. -LIBYUV_API -int ARGBColorMatrix(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_argb, - int dst_stride_argb, - const int8_t* matrix_argb, - int width, - int height); - -// Deprecated. Use ARGBColorMatrix instead. -// Apply a matrix rotation to each ARGB pixel. -// matrix_argb is 3 signed ARGB values. -128 to 127 representing -1 to 1. -// The first 4 coefficients apply to B, G, R, A and produce B of the output. -// The next 4 coefficients apply to B, G, R, A and produce G of the output. -// The last 4 coefficients apply to B, G, R, A and produce R of the output. -LIBYUV_API -int RGBColorMatrix(uint8_t* dst_argb, - int dst_stride_argb, - const int8_t* matrix_rgb, - int dst_x, - int dst_y, - int width, - int height); - -// Apply a color table each ARGB pixel. -// Table contains 256 ARGB values. -LIBYUV_API -int ARGBColorTable(uint8_t* dst_argb, - int dst_stride_argb, - const uint8_t* table_argb, - int dst_x, - int dst_y, - int width, - int height); - -// Apply a color table each ARGB pixel but preserve destination alpha. -// Table contains 256 ARGB values. -LIBYUV_API -int RGBColorTable(uint8_t* dst_argb, - int dst_stride_argb, - const uint8_t* table_argb, - int dst_x, - int dst_y, - int width, - int height); - -// Apply a luma/color table each ARGB pixel but preserve destination alpha. -// Table contains 32768 values indexed by [Y][C] where 7 it 7 bit luma from -// RGB (YJ style) and C is an 8 bit color component (R, G or B). -LIBYUV_API -int ARGBLumaColorTable(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_argb, - int dst_stride_argb, - const uint8_t* luma, - int width, - int height); - -// Apply a 3 term polynomial to ARGB values. -// poly points to a 4x4 matrix. The first row is constants. The 2nd row is -// coefficients for b, g, r and a. The 3rd row is coefficients for b squared, -// g squared, r squared and a squared. The 4rd row is coefficients for b to -// the 3, g to the 3, r to the 3 and a to the 3. The values are summed and -// result clamped to 0 to 255. -// A polynomial approximation can be dirived using software such as 'R'. - -LIBYUV_API -int ARGBPolynomial(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_argb, - int dst_stride_argb, - const float* poly, - int width, - int height); - -// Convert plane of 16 bit shorts to half floats. -// Source values are multiplied by scale before storing as half float. -LIBYUV_API -int HalfFloatPlane(const uint16_t* src_y, - int src_stride_y, - uint16_t* dst_y, - int dst_stride_y, - float scale, - int width, - int height); - -// Convert a buffer of bytes to floats, scale the values and store as floats. -LIBYUV_API -int ByteToFloat(const uint8_t* src_y, float* dst_y, float scale, int width); - -// Quantize a rectangle of ARGB. Alpha unaffected. -// scale is a 16 bit fractional fixed point scaler between 0 and 65535. -// interval_size should be a value between 1 and 255. -// interval_offset should be a value between 0 and 255. -LIBYUV_API -int ARGBQuantize(uint8_t* dst_argb, - int dst_stride_argb, - int scale, - int interval_size, - int interval_offset, - int dst_x, - int dst_y, - int width, - int height); - -// Copy ARGB to ARGB. -LIBYUV_API -int ARGBCopy(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Copy Alpha channel of ARGB to alpha of ARGB. -LIBYUV_API -int ARGBCopyAlpha(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Extract the alpha channel from ARGB. -LIBYUV_API -int ARGBExtractAlpha(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_a, - int dst_stride_a, - int width, - int height); - -// Copy Y channel to Alpha of ARGB. -LIBYUV_API -int ARGBCopyYToAlpha(const uint8_t* src_y, - int src_stride_y, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -typedef void (*ARGBBlendRow)(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); - -// Get function to Alpha Blend ARGB pixels and store to destination. -LIBYUV_API -ARGBBlendRow GetARGBBlend(); - -// Alpha Blend ARGB images and store to destination. -// Source is pre-multiplied by alpha using ARGBAttenuate. -// Alpha of destination is set to 255. -LIBYUV_API -int ARGBBlend(const uint8_t* src_argb0, - int src_stride_argb0, - const uint8_t* src_argb1, - int src_stride_argb1, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Alpha Blend plane and store to destination. -// Source is not pre-multiplied by alpha. -LIBYUV_API -int BlendPlane(const uint8_t* src_y0, - int src_stride_y0, - const uint8_t* src_y1, - int src_stride_y1, - const uint8_t* alpha, - int alpha_stride, - uint8_t* dst_y, - int dst_stride_y, - int width, - int height); - -// Alpha Blend YUV images and store to destination. -// Source is not pre-multiplied by alpha. -// Alpha is full width x height and subsampled to half size to apply to UV. -LIBYUV_API -int I420Blend(const uint8_t* src_y0, - int src_stride_y0, - const uint8_t* src_u0, - int src_stride_u0, - const uint8_t* src_v0, - int src_stride_v0, - const uint8_t* src_y1, - int src_stride_y1, - const uint8_t* src_u1, - int src_stride_u1, - const uint8_t* src_v1, - int src_stride_v1, - const uint8_t* alpha, - int alpha_stride, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height); - -// Multiply ARGB image by ARGB image. Shifted down by 8. Saturates to 255. -LIBYUV_API -int ARGBMultiply(const uint8_t* src_argb0, - int src_stride_argb0, - const uint8_t* src_argb1, - int src_stride_argb1, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Add ARGB image with ARGB image. Saturates to 255. -LIBYUV_API -int ARGBAdd(const uint8_t* src_argb0, - int src_stride_argb0, - const uint8_t* src_argb1, - int src_stride_argb1, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Subtract ARGB image (argb1) from ARGB image (argb0). Saturates to 0. -LIBYUV_API -int ARGBSubtract(const uint8_t* src_argb0, - int src_stride_argb0, - const uint8_t* src_argb1, - int src_stride_argb1, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert I422 to YUY2. -LIBYUV_API -int I422ToYUY2(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_yuy2, - int dst_stride_yuy2, - int width, - int height); - -// Convert I422 to UYVY. -LIBYUV_API -int I422ToUYVY(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_uyvy, - int dst_stride_uyvy, - int width, - int height); - -// Convert unattentuated ARGB to preattenuated ARGB. -LIBYUV_API -int ARGBAttenuate(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Convert preattentuated ARGB to unattenuated ARGB. -LIBYUV_API -int ARGBUnattenuate(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Internal function - do not call directly. -// Computes table of cumulative sum for image where the value is the sum -// of all values above and to the left of the entry. Used by ARGBBlur. -LIBYUV_API -int ARGBComputeCumulativeSum(const uint8_t* src_argb, - int src_stride_argb, - int32_t* dst_cumsum, - int dst_stride32_cumsum, - int width, - int height); - -// Blur ARGB image. -// dst_cumsum table of width * (height + 1) * 16 bytes aligned to -// 16 byte boundary. -// dst_stride32_cumsum is number of ints in a row (width * 4). -// radius is number of pixels around the center. e.g. 1 = 3x3. 2=5x5. -// Blur is optimized for radius of 5 (11x11) or less. -LIBYUV_API -int ARGBBlur(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_argb, - int dst_stride_argb, - int32_t* dst_cumsum, - int dst_stride32_cumsum, - int width, - int height, - int radius); - -// Multiply ARGB image by ARGB value. -LIBYUV_API -int ARGBShade(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height, - uint32_t value); - -// Interpolate between two images using specified amount of interpolation -// (0 to 255) and store to destination. -// 'interpolation' is specified as 8 bit fraction where 0 means 100% src0 -// and 255 means 1% src0 and 99% src1. -LIBYUV_API -int InterpolatePlane(const uint8_t* src0, - int src_stride0, - const uint8_t* src1, - int src_stride1, - uint8_t* dst, - int dst_stride, - int width, - int height, - int interpolation); - -// Interpolate between two ARGB images using specified amount of interpolation -// Internally calls InterpolatePlane with width * 4 (bpp). -LIBYUV_API -int ARGBInterpolate(const uint8_t* src_argb0, - int src_stride_argb0, - const uint8_t* src_argb1, - int src_stride_argb1, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height, - int interpolation); - -// Interpolate between two YUV images using specified amount of interpolation -// Internally calls InterpolatePlane on each plane where the U and V planes -// are half width and half height. -LIBYUV_API -int I420Interpolate(const uint8_t* src0_y, - int src0_stride_y, - const uint8_t* src0_u, - int src0_stride_u, - const uint8_t* src0_v, - int src0_stride_v, - const uint8_t* src1_y, - int src1_stride_y, - const uint8_t* src1_u, - int src1_stride_u, - const uint8_t* src1_v, - int src1_stride_v, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height, - int interpolation); - -// Row function for copying pixels from a source with a slope to a row -// of destination. Useful for scaling, rotation, mirror, texture mapping. -LIBYUV_API -void ARGBAffineRow_C(const uint8_t* src_argb, - int src_argb_stride, - uint8_t* dst_argb, - const float* uv_dudv, - int width); -// TODO(fbarchard): Move ARGBAffineRow_SSE2 to row.h -LIBYUV_API -void ARGBAffineRow_SSE2(const uint8_t* src_argb, - int src_argb_stride, - uint8_t* dst_argb, - const float* uv_dudv, - int width); - -// Shuffle ARGB channel order. e.g. BGRA to ARGB. -// shuffler is 16 bytes and must be aligned. -LIBYUV_API -int ARGBShuffle(const uint8_t* src_bgra, - int src_stride_bgra, - uint8_t* dst_argb, - int dst_stride_argb, - const uint8_t* shuffler, - int width, - int height); - -// Sobel ARGB effect with planar output. -LIBYUV_API -int ARGBSobelToPlane(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_y, - int dst_stride_y, - int width, - int height); - -// Sobel ARGB effect. -LIBYUV_API -int ARGBSobel(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -// Sobel ARGB effect w/ Sobel X, Sobel, Sobel Y in ARGB. -LIBYUV_API -int ARGBSobelXY(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_argb, - int dst_stride_argb, - int width, - int height); - -#ifdef __cplusplus -} // extern "C" -} // namespace libyuv -#endif - -#endif // INCLUDE_LIBYUV_PLANAR_FUNCTIONS_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate.h deleted file mode 100644 index c64e0216d5..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate.h +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright 2011 The LibYuv Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef INCLUDE_LIBYUV_ROTATE_H_ -#define INCLUDE_LIBYUV_ROTATE_H_ - -#include "libyuv/basic_types.h" - -#ifdef __cplusplus -namespace libyuv { -extern "C" { -#endif - -// Supported rotation. -typedef enum RotationMode { - kRotate0 = 0, // No rotation. - kRotate90 = 90, // Rotate 90 degrees clockwise. - kRotate180 = 180, // Rotate 180 degrees. - kRotate270 = 270, // Rotate 270 degrees clockwise. - - // Deprecated. - kRotateNone = 0, - kRotateClockwise = 90, - kRotateCounterClockwise = 270, -} RotationModeEnum; - -// Rotate I420 frame. -LIBYUV_API -int I420Rotate(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height, - enum RotationMode mode); - -// Rotate I444 frame. -LIBYUV_API -int I444Rotate(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height, - enum RotationMode mode); - -// Rotate NV12 input and store in I420. -LIBYUV_API -int NV12ToI420Rotate(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_uv, - int src_stride_uv, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int width, - int height, - enum RotationMode mode); - -// Rotate a plane by 0, 90, 180, or 270. -LIBYUV_API -int RotatePlane(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride, - int width, - int height, - enum RotationMode mode); - -// Rotate planes by 90, 180, 270. Deprecated. -LIBYUV_API -void RotatePlane90(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride, - int width, - int height); - -LIBYUV_API -void RotatePlane180(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride, - int width, - int height); - -LIBYUV_API -void RotatePlane270(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride, - int width, - int height); - -LIBYUV_API -void RotateUV90(const uint8_t* src, - int src_stride, - uint8_t* dst_a, - int dst_stride_a, - uint8_t* dst_b, - int dst_stride_b, - int width, - int height); - -// Rotations for when U and V are interleaved. -// These functions take one input pointer and -// split the data into two buffers while -// rotating them. Deprecated. -LIBYUV_API -void RotateUV180(const uint8_t* src, - int src_stride, - uint8_t* dst_a, - int dst_stride_a, - uint8_t* dst_b, - int dst_stride_b, - int width, - int height); - -LIBYUV_API -void RotateUV270(const uint8_t* src, - int src_stride, - uint8_t* dst_a, - int dst_stride_a, - uint8_t* dst_b, - int dst_stride_b, - int width, - int height); - -// The 90 and 270 functions are based on transposes. -// Doing a transpose with reversing the read/write -// order will result in a rotation by +- 90 degrees. -// Deprecated. -LIBYUV_API -void TransposePlane(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride, - int width, - int height); - -LIBYUV_API -void TransposeUV(const uint8_t* src, - int src_stride, - uint8_t* dst_a, - int dst_stride_a, - uint8_t* dst_b, - int dst_stride_b, - int width, - int height); - -#ifdef __cplusplus -} // extern "C" -} // namespace libyuv -#endif - -#endif // INCLUDE_LIBYUV_ROTATE_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate_argb.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate_argb.h deleted file mode 100644 index 20432949ab..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate_argb.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright 2012 The LibYuv Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef INCLUDE_LIBYUV_ROTATE_ARGB_H_ -#define INCLUDE_LIBYUV_ROTATE_ARGB_H_ - -#include "libyuv/basic_types.h" -#include "libyuv/rotate.h" // For RotationMode. - -#ifdef __cplusplus -namespace libyuv { -extern "C" { -#endif - -// Rotate ARGB frame -LIBYUV_API -int ARGBRotate(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_argb, - int dst_stride_argb, - int src_width, - int src_height, - enum RotationMode mode); - -#ifdef __cplusplus -} // extern "C" -} // namespace libyuv -#endif - -#endif // INCLUDE_LIBYUV_ROTATE_ARGB_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate_row.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate_row.h deleted file mode 100644 index 022293eef2..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/rotate_row.h +++ /dev/null @@ -1,223 +0,0 @@ -/* - * Copyright 2013 The LibYuv Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef INCLUDE_LIBYUV_ROTATE_ROW_H_ -#define INCLUDE_LIBYUV_ROTATE_ROW_H_ - -#include "libyuv/basic_types.h" - -#ifdef __cplusplus -namespace libyuv { -extern "C" { -#endif - -#if defined(__pnacl__) || defined(__CLR_VER) || \ - (defined(__native_client__) && defined(__x86_64__)) || \ - (defined(__i386__) && !defined(__SSE__) && !defined(__clang__)) -#define LIBYUV_DISABLE_X86 -#endif -#if defined(__native_client__) -#define LIBYUV_DISABLE_NEON -#endif -// MemorySanitizer does not support assembly code yet. http://crbug.com/344505 -#if defined(__has_feature) -#if __has_feature(memory_sanitizer) -#define LIBYUV_DISABLE_X86 -#endif -#endif -// The following are available for Visual C and clangcl 32 bit: -#if !defined(LIBYUV_DISABLE_X86) && defined(_M_IX86) && defined(_MSC_VER) -#define HAS_TRANSPOSEWX8_SSSE3 -#define HAS_TRANSPOSEUVWX8_SSE2 -#endif - -// The following are available for GCC 32 or 64 bit: -#if !defined(LIBYUV_DISABLE_X86) && (defined(__i386__) || defined(__x86_64__)) -#define HAS_TRANSPOSEWX8_SSSE3 -#endif - -// The following are available for 64 bit GCC: -#if !defined(LIBYUV_DISABLE_X86) && defined(__x86_64__) -#define HAS_TRANSPOSEWX8_FAST_SSSE3 -#define HAS_TRANSPOSEUVWX8_SSE2 -#endif - -#if !defined(LIBYUV_DISABLE_NEON) && \ - (defined(__ARM_NEON__) || defined(LIBYUV_NEON) || defined(__aarch64__)) -#define HAS_TRANSPOSEWX8_NEON -#define HAS_TRANSPOSEUVWX8_NEON -#endif - -#if !defined(LIBYUV_DISABLE_MSA) && defined(__mips_msa) -#define HAS_TRANSPOSEWX16_MSA -#define HAS_TRANSPOSEUVWX16_MSA -#endif - -#if !defined(LIBYUV_DISABLE_MMI) && defined(_MIPS_ARCH_LOONGSON3A) -#define HAS_TRANSPOSEWX8_MMI -#define HAS_TRANSPOSEUVWX8_MMI -#endif - -void TransposeWxH_C(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride, - int width, - int height); - -void TransposeWx8_C(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride, - int width); -void TransposeWx16_C(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride, - int width); -void TransposeWx8_NEON(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride, - int width); -void TransposeWx8_SSSE3(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride, - int width); -void TransposeWx8_MMI(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride, - int width); -void TransposeWx8_Fast_SSSE3(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride, - int width); -void TransposeWx16_MSA(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride, - int width); - -void TransposeWx8_Any_NEON(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride, - int width); -void TransposeWx8_Any_SSSE3(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride, - int width); -void TransposeWx8_Any_MMI(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride, - int width); -void TransposeWx8_Fast_Any_SSSE3(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride, - int width); -void TransposeWx16_Any_MSA(const uint8_t* src, - int src_stride, - uint8_t* dst, - int dst_stride, - int width); - -void TransposeUVWxH_C(const uint8_t* src, - int src_stride, - uint8_t* dst_a, - int dst_stride_a, - uint8_t* dst_b, - int dst_stride_b, - int width, - int height); - -void TransposeUVWx8_C(const uint8_t* src, - int src_stride, - uint8_t* dst_a, - int dst_stride_a, - uint8_t* dst_b, - int dst_stride_b, - int width); -void TransposeUVWx16_C(const uint8_t* src, - int src_stride, - uint8_t* dst_a, - int dst_stride_a, - uint8_t* dst_b, - int dst_stride_b, - int width); -void TransposeUVWx8_SSE2(const uint8_t* src, - int src_stride, - uint8_t* dst_a, - int dst_stride_a, - uint8_t* dst_b, - int dst_stride_b, - int width); -void TransposeUVWx8_NEON(const uint8_t* src, - int src_stride, - uint8_t* dst_a, - int dst_stride_a, - uint8_t* dst_b, - int dst_stride_b, - int width); -void TransposeUVWx8_MMI(const uint8_t* src, - int src_stride, - uint8_t* dst_a, - int dst_stride_a, - uint8_t* dst_b, - int dst_stride_b, - int width); -void TransposeUVWx16_MSA(const uint8_t* src, - int src_stride, - uint8_t* dst_a, - int dst_stride_a, - uint8_t* dst_b, - int dst_stride_b, - int width); - -void TransposeUVWx8_Any_SSE2(const uint8_t* src, - int src_stride, - uint8_t* dst_a, - int dst_stride_a, - uint8_t* dst_b, - int dst_stride_b, - int width); -void TransposeUVWx8_Any_NEON(const uint8_t* src, - int src_stride, - uint8_t* dst_a, - int dst_stride_a, - uint8_t* dst_b, - int dst_stride_b, - int width); -void TransposeUVWx8_Any_MMI(const uint8_t* src, - int src_stride, - uint8_t* dst_a, - int dst_stride_a, - uint8_t* dst_b, - int dst_stride_b, - int width); -void TransposeUVWx16_Any_MSA(const uint8_t* src, - int src_stride, - uint8_t* dst_a, - int dst_stride_a, - uint8_t* dst_b, - int dst_stride_b, - int width); - -#ifdef __cplusplus -} // extern "C" -} // namespace libyuv -#endif - -#endif // INCLUDE_LIBYUV_ROTATE_ROW_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/row.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/row.h deleted file mode 100644 index 9bb4885065..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/row.h +++ /dev/null @@ -1,4037 +0,0 @@ -/* - * Copyright 2011 The LibYuv Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef INCLUDE_LIBYUV_ROW_H_ -#define INCLUDE_LIBYUV_ROW_H_ - -#include // For malloc. - -#include "libyuv/basic_types.h" - -#ifdef __cplusplus -namespace libyuv { -extern "C" { -#endif - -#if defined(__pnacl__) || defined(__CLR_VER) || \ - (defined(__native_client__) && defined(__x86_64__)) || \ - (defined(__i386__) && !defined(__SSE__) && !defined(__clang__)) -#define LIBYUV_DISABLE_X86 -#endif -#if defined(__native_client__) -#define LIBYUV_DISABLE_NEON -#endif -// MemorySanitizer does not support assembly code yet. http://crbug.com/344505 -#if defined(__has_feature) -#if __has_feature(memory_sanitizer) -#define LIBYUV_DISABLE_X86 -#endif -#endif -// clang >= 3.5.0 required for Arm64. -#if defined(__clang__) && defined(__aarch64__) && !defined(LIBYUV_DISABLE_NEON) -#if (__clang_major__ < 3) || (__clang_major__ == 3 && (__clang_minor__ < 5)) -#define LIBYUV_DISABLE_NEON -#endif // clang >= 3.5 -#endif // __clang__ - -// GCC >= 4.7.0 required for AVX2. -#if defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__)) -#if (__GNUC__ > 4) || (__GNUC__ == 4 && (__GNUC_MINOR__ >= 7)) -#define GCC_HAS_AVX2 1 -#endif // GNUC >= 4.7 -#endif // __GNUC__ - -// clang >= 3.4.0 required for AVX2. -#if defined(__clang__) && (defined(__x86_64__) || defined(__i386__)) -#if (__clang_major__ > 3) || (__clang_major__ == 3 && (__clang_minor__ >= 4)) -#define CLANG_HAS_AVX2 1 -#endif // clang >= 3.4 -#endif // __clang__ - -// clang >= 6.0.0 required for AVX512. -#if defined(__clang__) && (defined(__x86_64__) || defined(__i386__)) -// clang in xcode follows a different versioning scheme. -// TODO(fbarchard): fix xcode 9 ios b/789. -#if (__clang_major__ >= 7) && !defined(__APPLE__) -#define CLANG_HAS_AVX512 1 -#endif // clang >= 7 -#endif // __clang__ - -// Visual C 2012 required for AVX2. -#if defined(_M_IX86) && !defined(__clang__) && defined(_MSC_VER) && \ - _MSC_VER >= 1700 -#define VISUALC_HAS_AVX2 1 -#endif // VisualStudio >= 2012 - -// The following are available on all x86 platforms: -#if !defined(LIBYUV_DISABLE_X86) && \ - (defined(_M_IX86) || defined(__x86_64__) || defined(__i386__)) -// Conversions: -#define HAS_ABGRTOUVROW_SSSE3 -#define HAS_ABGRTOYROW_SSSE3 -#define HAS_ARGB1555TOARGBROW_SSE2 -#define HAS_ARGB4444TOARGBROW_SSE2 -#define HAS_ARGBEXTRACTALPHAROW_SSE2 -#define HAS_ARGBSETROW_X86 -#define HAS_ARGBSHUFFLEROW_SSSE3 -#define HAS_ARGBTOARGB1555ROW_SSE2 -#define HAS_ARGBTOARGB4444ROW_SSE2 -#define HAS_ARGBTORAWROW_SSSE3 -#define HAS_ARGBTORGB24ROW_SSSE3 -#define HAS_ARGBTORGB565DITHERROW_SSE2 -#define HAS_ARGBTORGB565ROW_SSE2 -#define HAS_ARGBTOUV444ROW_SSSE3 -#define HAS_ARGBTOUVJROW_SSSE3 -#define HAS_ARGBTOUVROW_SSSE3 -#define HAS_ARGBTOYJROW_SSSE3 -#define HAS_ARGBTOYROW_SSSE3 -#define HAS_BGRATOUVROW_SSSE3 -#define HAS_BGRATOYROW_SSSE3 -#define HAS_COPYROW_ERMS -#define HAS_COPYROW_SSE2 -#define HAS_H422TOARGBROW_SSSE3 -#define HAS_HALFFLOATROW_SSE2 -#define HAS_I400TOARGBROW_SSE2 -#define HAS_I422TOARGB1555ROW_SSSE3 -#define HAS_I422TOARGB4444ROW_SSSE3 -#define HAS_I422TOARGBROW_SSSE3 -#define HAS_I422TORGB24ROW_SSSE3 -#define HAS_I422TORGB565ROW_SSSE3 -#define HAS_I422TORGBAROW_SSSE3 -#define HAS_I422TOUYVYROW_SSE2 -#define HAS_I422TOYUY2ROW_SSE2 -#define HAS_I444TOARGBROW_SSSE3 -#define HAS_J400TOARGBROW_SSE2 -#define HAS_J422TOARGBROW_SSSE3 -#define HAS_MERGEUVROW_SSE2 -#define HAS_MIRRORROW_SSSE3 -#define HAS_MIRRORUVROW_SSSE3 -#define HAS_NV12TOARGBROW_SSSE3 -#define HAS_NV12TORGB24ROW_SSSE3 -#define HAS_NV12TORGB565ROW_SSSE3 -#define HAS_NV21TOARGBROW_SSSE3 -#define HAS_NV21TORGB24ROW_SSSE3 -#define HAS_RAWTOARGBROW_SSSE3 -#define HAS_RAWTORGB24ROW_SSSE3 -#define HAS_RAWTOYROW_SSSE3 -#define HAS_RGB24TOARGBROW_SSSE3 -#define HAS_RGB24TOYROW_SSSE3 -#define HAS_RGB565TOARGBROW_SSE2 -#define HAS_RGBATOUVROW_SSSE3 -#define HAS_RGBATOYROW_SSSE3 -#define HAS_SETROW_ERMS -#define HAS_SETROW_X86 -#define HAS_SPLITUVROW_SSE2 -#define HAS_UYVYTOARGBROW_SSSE3 -#define HAS_UYVYTOUV422ROW_SSE2 -#define HAS_UYVYTOUVROW_SSE2 -#define HAS_UYVYTOYROW_SSE2 -#define HAS_YUY2TOARGBROW_SSSE3 -#define HAS_YUY2TOUV422ROW_SSE2 -#define HAS_YUY2TOUVROW_SSE2 -#define HAS_YUY2TOYROW_SSE2 - -// Effects: -#define HAS_ARGBADDROW_SSE2 -#define HAS_ARGBAFFINEROW_SSE2 -#define HAS_ARGBATTENUATEROW_SSSE3 -#define HAS_ARGBBLENDROW_SSSE3 -#define HAS_ARGBCOLORMATRIXROW_SSSE3 -#define HAS_ARGBCOLORTABLEROW_X86 -#define HAS_ARGBCOPYALPHAROW_SSE2 -#define HAS_ARGBCOPYYTOALPHAROW_SSE2 -#define HAS_ARGBGRAYROW_SSSE3 -#define HAS_ARGBLUMACOLORTABLEROW_SSSE3 -#define HAS_ARGBMIRRORROW_SSE2 -#define HAS_ARGBMULTIPLYROW_SSE2 -#define HAS_ARGBPOLYNOMIALROW_SSE2 -#define HAS_ARGBQUANTIZEROW_SSE2 -#define HAS_ARGBSEPIAROW_SSSE3 -#define HAS_ARGBSHADEROW_SSE2 -#define HAS_ARGBSUBTRACTROW_SSE2 -#define HAS_ARGBUNATTENUATEROW_SSE2 -#define HAS_BLENDPLANEROW_SSSE3 -#define HAS_COMPUTECUMULATIVESUMROW_SSE2 -#define HAS_CUMULATIVESUMTOAVERAGEROW_SSE2 -#define HAS_INTERPOLATEROW_SSSE3 -#define HAS_RGBCOLORTABLEROW_X86 -#define HAS_SOBELROW_SSE2 -#define HAS_SOBELTOPLANEROW_SSE2 -#define HAS_SOBELXROW_SSE2 -#define HAS_SOBELXYROW_SSE2 -#define HAS_SOBELYROW_SSE2 - -// The following functions fail on gcc/clang 32 bit with fpic and framepointer. -// caveat: clangcl uses row_win.cc which works. -#if defined(__x86_64__) || !defined(__pic__) || defined(__clang__) || \ - defined(_MSC_VER) -// TODO(fbarchard): fix build error on android_full_debug=1 -// https://code.google.com/p/libyuv/issues/detail?id=517 -#define HAS_I422ALPHATOARGBROW_SSSE3 -#endif -#endif - -// The following are available on all x86 platforms, but -// require VS2012, clang 3.4 or gcc 4.7. -#if !defined(LIBYUV_DISABLE_X86) && \ - (defined(VISUALC_HAS_AVX2) || defined(CLANG_HAS_AVX2) || \ - defined(GCC_HAS_AVX2)) -#define HAS_ARGBCOPYALPHAROW_AVX2 -#define HAS_ARGBCOPYYTOALPHAROW_AVX2 -#define HAS_ARGBEXTRACTALPHAROW_AVX2 -#define HAS_ARGBMIRRORROW_AVX2 -#define HAS_ARGBPOLYNOMIALROW_AVX2 -#define HAS_ARGBSHUFFLEROW_AVX2 -#define HAS_ARGBTORGB565DITHERROW_AVX2 -#define HAS_ARGBTOUVJROW_AVX2 -#define HAS_ARGBTOUVROW_AVX2 -#define HAS_ARGBTOYJROW_AVX2 -#define HAS_ARGBTOYROW_AVX2 -#define HAS_COPYROW_AVX -#define HAS_H422TOARGBROW_AVX2 -#define HAS_HALFFLOATROW_AVX2 -// #define HAS_HALFFLOATROW_F16C // Enable to test halffloat cast -#define HAS_I400TOARGBROW_AVX2 -#define HAS_I422TOARGB1555ROW_AVX2 -#define HAS_I422TOARGB4444ROW_AVX2 -#define HAS_I422TOARGBROW_AVX2 -#define HAS_I422TORGB24ROW_AVX2 -#define HAS_I422TORGB565ROW_AVX2 -#define HAS_I422TORGBAROW_AVX2 -#define HAS_I444TOARGBROW_AVX2 -#define HAS_INTERPOLATEROW_AVX2 -#define HAS_J422TOARGBROW_AVX2 -#define HAS_MERGEUVROW_AVX2 -#define HAS_MIRRORROW_AVX2 -#define HAS_NV12TOARGBROW_AVX2 -#define HAS_NV12TORGB24ROW_AVX2 -#define HAS_NV12TORGB565ROW_AVX2 -#define HAS_NV21TOARGBROW_AVX2 -#define HAS_NV21TORGB24ROW_AVX2 -#define HAS_SPLITUVROW_AVX2 -#define HAS_UYVYTOARGBROW_AVX2 -#define HAS_UYVYTOUV422ROW_AVX2 -#define HAS_UYVYTOUVROW_AVX2 -#define HAS_UYVYTOYROW_AVX2 -#define HAS_YUY2TOARGBROW_AVX2 -#define HAS_YUY2TOUV422ROW_AVX2 -#define HAS_YUY2TOUVROW_AVX2 -#define HAS_YUY2TOYROW_AVX2 - -// Effects: -#define HAS_ARGBADDROW_AVX2 -#define HAS_ARGBATTENUATEROW_AVX2 -#define HAS_ARGBMULTIPLYROW_AVX2 -#define HAS_ARGBSUBTRACTROW_AVX2 -#define HAS_ARGBUNATTENUATEROW_AVX2 -#define HAS_BLENDPLANEROW_AVX2 - -#if defined(__x86_64__) || !defined(__pic__) || defined(__clang__) || \ - defined(_MSC_VER) -// TODO(fbarchard): fix build error on android_full_debug=1 -// https://code.google.com/p/libyuv/issues/detail?id=517 -#define HAS_I422ALPHATOARGBROW_AVX2 -#endif -#endif - -// The following are available for AVX2 Visual C and clangcl 32 bit: -// TODO(fbarchard): Port to gcc. -#if !defined(LIBYUV_DISABLE_X86) && defined(_M_IX86) && defined(_MSC_VER) && \ - (defined(VISUALC_HAS_AVX2) || defined(CLANG_HAS_AVX2)) -#define HAS_ARGB1555TOARGBROW_AVX2 -#define HAS_ARGB4444TOARGBROW_AVX2 -#define HAS_ARGBTOARGB1555ROW_AVX2 -#define HAS_ARGBTOARGB4444ROW_AVX2 -#define HAS_ARGBTORGB565ROW_AVX2 -#define HAS_J400TOARGBROW_AVX2 -#define HAS_RGB565TOARGBROW_AVX2 -#endif - -// The following are also available on x64 Visual C. -#if !defined(LIBYUV_DISABLE_X86) && defined(_MSC_VER) && defined(_M_X64) && \ - (!defined(__clang__) || defined(__SSSE3__)) -#define HAS_I422ALPHATOARGBROW_SSSE3 -#define HAS_I422TOARGBROW_SSSE3 -#endif - -// The following are available for gcc/clang x86 platforms: -// TODO(fbarchard): Port to Visual C -#if !defined(LIBYUV_DISABLE_X86) && \ - (defined(__x86_64__) || (defined(__i386__) && !defined(_MSC_VER))) -#define HAS_ABGRTOAR30ROW_SSSE3 -#define HAS_ARGBTOAR30ROW_SSSE3 -#define HAS_CONVERT16TO8ROW_SSSE3 -#define HAS_CONVERT8TO16ROW_SSE2 -// I210 is for H010. 2 = 422. I for 601 vs H for 709. -#define HAS_I210TOAR30ROW_SSSE3 -#define HAS_I210TOARGBROW_SSSE3 -#define HAS_I422TOAR30ROW_SSSE3 -#define HAS_MERGERGBROW_SSSE3 -#define HAS_SPLITRGBROW_SSSE3 -#endif - -// The following are available for AVX2 gcc/clang x86 platforms: -// TODO(fbarchard): Port to Visual C -#if !defined(LIBYUV_DISABLE_X86) && \ - (defined(__x86_64__) || (defined(__i386__) && !defined(_MSC_VER))) && \ - (defined(CLANG_HAS_AVX2) || defined(GCC_HAS_AVX2)) -#define HAS_ABGRTOAR30ROW_AVX2 -#define HAS_ARGBTOAR30ROW_AVX2 -#define HAS_ARGBTORAWROW_AVX2 -#define HAS_ARGBTORGB24ROW_AVX2 -#define HAS_CONVERT16TO8ROW_AVX2 -#define HAS_CONVERT8TO16ROW_AVX2 -#define HAS_I210TOAR30ROW_AVX2 -#define HAS_I210TOARGBROW_AVX2 -#define HAS_I422TOAR30ROW_AVX2 -#define HAS_I422TOUYVYROW_AVX2 -#define HAS_I422TOYUY2ROW_AVX2 -#define HAS_MERGEUVROW_16_AVX2 -#define HAS_MULTIPLYROW_16_AVX2 -// TODO(fbarchard): Fix AVX2 version of YUV24 -// #define HAS_NV21TOYUV24ROW_AVX2 -#endif - -// The following are available for AVX512 clang x86 platforms: -// TODO(fbarchard): Port to GCC and Visual C -// TODO(fbarchard): re-enable HAS_ARGBTORGB24ROW_AVX512VBMI. Issue libyuv:789 -#if !defined(LIBYUV_DISABLE_X86) && \ - (defined(__x86_64__) || (defined(__i386__) && !defined(_MSC_VER))) && \ - (defined(CLANG_HAS_AVX512)) -#define HAS_ARGBTORGB24ROW_AVX512VBMI -#endif - -// The following are available on Neon platforms: -#if !defined(LIBYUV_DISABLE_NEON) && \ - (defined(__aarch64__) || defined(__ARM_NEON__) || defined(LIBYUV_NEON)) -#define HAS_ABGRTOUVROW_NEON -#define HAS_ABGRTOYROW_NEON -#define HAS_ARGB1555TOARGBROW_NEON -#define HAS_ARGB1555TOUVROW_NEON -#define HAS_ARGB1555TOYROW_NEON -#define HAS_ARGB4444TOARGBROW_NEON -#define HAS_ARGB4444TOUVROW_NEON -#define HAS_ARGB4444TOYROW_NEON -#define HAS_ARGBEXTRACTALPHAROW_NEON -#define HAS_ARGBSETROW_NEON -#define HAS_ARGBTOARGB1555ROW_NEON -#define HAS_ARGBTOARGB4444ROW_NEON -#define HAS_ARGBTORAWROW_NEON -#define HAS_ARGBTORGB24ROW_NEON -#define HAS_ARGBTORGB565DITHERROW_NEON -#define HAS_ARGBTORGB565ROW_NEON -#define HAS_ARGBTOUV444ROW_NEON -#define HAS_ARGBTOUVJROW_NEON -#define HAS_ARGBTOUVROW_NEON -#define HAS_ARGBTOYJROW_NEON -#define HAS_ARGBTOYROW_NEON -#define HAS_AYUVTOUVROW_NEON -#define HAS_AYUVTOVUROW_NEON -#define HAS_AYUVTOYROW_NEON -#define HAS_BGRATOUVROW_NEON -#define HAS_BGRATOYROW_NEON -#define HAS_BYTETOFLOATROW_NEON -#define HAS_COPYROW_NEON -#define HAS_HALFFLOATROW_NEON -#define HAS_I400TOARGBROW_NEON -#define HAS_I422ALPHATOARGBROW_NEON -#define HAS_I422TOARGB1555ROW_NEON -#define HAS_I422TOARGB4444ROW_NEON -#define HAS_I422TOARGBROW_NEON -#define HAS_I422TORGB24ROW_NEON -#define HAS_I422TORGB565ROW_NEON -#define HAS_I422TORGBAROW_NEON -#define HAS_I422TOUYVYROW_NEON -#define HAS_I422TOYUY2ROW_NEON -#define HAS_I444TOARGBROW_NEON -#define HAS_J400TOARGBROW_NEON -#define HAS_MERGEUVROW_NEON -#define HAS_MIRRORROW_NEON -#define HAS_MIRRORUVROW_NEON -#define HAS_NV12TOARGBROW_NEON -#define HAS_NV12TORGB24ROW_NEON -#define HAS_NV12TORGB565ROW_NEON -#define HAS_NV21TOARGBROW_NEON -#define HAS_NV21TORGB24ROW_NEON -#define HAS_NV21TOYUV24ROW_NEON -#define HAS_RAWTOARGBROW_NEON -#define HAS_RAWTORGB24ROW_NEON -#define HAS_RAWTOUVROW_NEON -#define HAS_RAWTOYROW_NEON -#define HAS_RGB24TOARGBROW_NEON -#define HAS_RGB24TOUVROW_NEON -#define HAS_RGB24TOYROW_NEON -#define HAS_RGB565TOARGBROW_NEON -#define HAS_RGB565TOUVROW_NEON -#define HAS_RGB565TOYROW_NEON -#define HAS_RGBATOUVROW_NEON -#define HAS_RGBATOYROW_NEON -#define HAS_SETROW_NEON -#define HAS_SPLITRGBROW_NEON -#define HAS_SPLITUVROW_NEON -#define HAS_UVToVUROW_NEON -#define HAS_UYVYTOARGBROW_NEON -#define HAS_UYVYTOUV422ROW_NEON -#define HAS_UYVYTOUVROW_NEON -#define HAS_UYVYTOYROW_NEON -#define HAS_YUY2TOARGBROW_NEON -#define HAS_YUY2TOUV422ROW_NEON -#define HAS_YUY2TOUVROW_NEON -#define HAS_YUY2TOYROW_NEON - -// Effects: -#define HAS_ARGBADDROW_NEON -#define HAS_ARGBATTENUATEROW_NEON -#define HAS_ARGBBLENDROW_NEON -#define HAS_ARGBCOLORMATRIXROW_NEON -#define HAS_ARGBGRAYROW_NEON -#define HAS_ARGBMIRRORROW_NEON -#define HAS_ARGBMULTIPLYROW_NEON -#define HAS_ARGBQUANTIZEROW_NEON -#define HAS_ARGBSEPIAROW_NEON -#define HAS_ARGBSHADEROW_NEON -#define HAS_ARGBSHUFFLEROW_NEON -#define HAS_ARGBSUBTRACTROW_NEON -#define HAS_INTERPOLATEROW_NEON -#define HAS_SOBELROW_NEON -#define HAS_SOBELTOPLANEROW_NEON -#define HAS_SOBELXROW_NEON -#define HAS_SOBELXYROW_NEON -#define HAS_SOBELYROW_NEON -#endif - -// The following are available on AArch64 platforms: -#if !defined(LIBYUV_DISABLE_NEON) && defined(__aarch64__) -#define HAS_FLOATDIVTOBYTEROW_NEON -#define HAS_SCALESUMSAMPLES_NEON -#endif -#if !defined(LIBYUV_DISABLE_MSA) && defined(__mips_msa) -#define HAS_ABGRTOUVROW_MSA -#define HAS_ABGRTOYROW_MSA -#define HAS_ARGB1555TOARGBROW_MSA -#define HAS_ARGB1555TOUVROW_MSA -#define HAS_ARGB1555TOYROW_MSA -#define HAS_ARGB4444TOARGBROW_MSA -#define HAS_ARGBADDROW_MSA -#define HAS_ARGBATTENUATEROW_MSA -#define HAS_ARGBBLENDROW_MSA -#define HAS_ARGBCOLORMATRIXROW_MSA -#define HAS_ARGBEXTRACTALPHAROW_MSA -#define HAS_ARGBGRAYROW_MSA -#define HAS_ARGBMIRRORROW_MSA -#define HAS_ARGBMULTIPLYROW_MSA -#define HAS_ARGBQUANTIZEROW_MSA -#define HAS_ARGBSEPIAROW_MSA -#define HAS_ARGBSETROW_MSA -#define HAS_ARGBSHADEROW_MSA -#define HAS_ARGBSHUFFLEROW_MSA -#define HAS_ARGBSUBTRACTROW_MSA -#define HAS_ARGBTOARGB1555ROW_MSA -#define HAS_ARGBTOARGB4444ROW_MSA -#define HAS_ARGBTORAWROW_MSA -#define HAS_ARGBTORGB24ROW_MSA -#define HAS_ARGBTORGB565DITHERROW_MSA -#define HAS_ARGBTORGB565ROW_MSA -#define HAS_ARGBTOUV444ROW_MSA -#define HAS_ARGBTOUVJROW_MSA -#define HAS_ARGBTOUVROW_MSA -#define HAS_ARGBTOYJROW_MSA -#define HAS_ARGBTOYROW_MSA -#define HAS_BGRATOUVROW_MSA -#define HAS_BGRATOYROW_MSA -#define HAS_HALFFLOATROW_MSA -#define HAS_I400TOARGBROW_MSA -#define HAS_I422ALPHATOARGBROW_MSA -#define HAS_I422TOARGBROW_MSA -#define HAS_I422TORGB24ROW_MSA -#define HAS_I422TORGBAROW_MSA -#define HAS_I422TOUYVYROW_MSA -#define HAS_I422TOYUY2ROW_MSA -#define HAS_I444TOARGBROW_MSA -#define HAS_INTERPOLATEROW_MSA -#define HAS_J400TOARGBROW_MSA -#define HAS_MERGEUVROW_MSA -#define HAS_MIRRORROW_MSA -#define HAS_MIRRORUVROW_MSA -#define HAS_NV12TOARGBROW_MSA -#define HAS_NV12TORGB565ROW_MSA -#define HAS_NV21TOARGBROW_MSA -#define HAS_RAWTOARGBROW_MSA -#define HAS_RAWTORGB24ROW_MSA -#define HAS_RAWTOUVROW_MSA -#define HAS_RAWTOYROW_MSA -#define HAS_RGB24TOARGBROW_MSA -#define HAS_RGB24TOUVROW_MSA -#define HAS_RGB24TOYROW_MSA -#define HAS_RGB565TOARGBROW_MSA -#define HAS_RGB565TOUVROW_MSA -#define HAS_RGB565TOYROW_MSA -#define HAS_RGBATOUVROW_MSA -#define HAS_RGBATOYROW_MSA -#define HAS_SETROW_MSA -#define HAS_SOBELROW_MSA -#define HAS_SOBELTOPLANEROW_MSA -#define HAS_SOBELXROW_MSA -#define HAS_SOBELXYROW_MSA -#define HAS_SOBELYROW_MSA -#define HAS_SPLITUVROW_MSA -#define HAS_UYVYTOARGBROW_MSA -#define HAS_UYVYTOUVROW_MSA -#define HAS_UYVYTOYROW_MSA -#define HAS_YUY2TOARGBROW_MSA -#define HAS_YUY2TOUV422ROW_MSA -#define HAS_YUY2TOUVROW_MSA -#define HAS_YUY2TOYROW_MSA -#endif - -#if !defined(LIBYUV_DISABLE_MMI) && defined(_MIPS_ARCH_LOONGSON3A) -#define HAS_ABGRTOUVROW_MMI -#define HAS_ABGRTOYROW_MMI -#define HAS_ARGB1555TOARGBROW_MMI -#define HAS_ARGB1555TOUVROW_MMI -#define HAS_ARGB1555TOYROW_MMI -#define HAS_ARGB4444TOARGBROW_MMI -#define HAS_ARGB4444TOUVROW_MMI -#define HAS_ARGB4444TOYROW_MMI -#define HAS_ARGBADDROW_MMI -#define HAS_ARGBATTENUATEROW_MMI -#define HAS_ARGBBLENDROW_MMI -#define HAS_ARGBCOLORMATRIXROW_MMI -#define HAS_ARGBCOPYALPHAROW_MMI -#define HAS_ARGBCOPYYTOALPHAROW_MMI -#define HAS_ARGBEXTRACTALPHAROW_MMI -#define HAS_ARGBGRAYROW_MMI -#define HAS_ARGBMIRRORROW_MMI -#define HAS_ARGBMULTIPLYROW_MMI -#define HAS_ARGBSEPIAROW_MMI -#define HAS_ARGBSHADEROW_MMI -#define HAS_ARGBSHUFFLEROW_MMI -#define HAS_ARGBSUBTRACTROW_MMI -#define HAS_ARGBTOARGB1555ROW_MMI -#define HAS_ARGBTOARGB4444ROW_MMI -#define HAS_ARGBTORAWROW_MMI -#define HAS_ARGBTORGB24ROW_MMI -#define HAS_ARGBTORGB565DITHERROW_MMI -#define HAS_ARGBTORGB565ROW_MMI -#define HAS_ARGBTOUV444ROW_MMI -#define HAS_ARGBTOUVJROW_MMI -#define HAS_ARGBTOUVROW_MMI -#define HAS_ARGBTOYJROW_MMI -#define HAS_ARGBTOYROW_MMI -#define HAS_BGRATOUVROW_MMI -#define HAS_BGRATOYROW_MMI -#define HAS_BLENDPLANEROW_MMI -#define HAS_COMPUTECUMULATIVESUMROW_MMI -#define HAS_CUMULATIVESUMTOAVERAGEROW_MMI -#define HAS_HALFFLOATROW_MMI -#define HAS_I400TOARGBROW_MMI -#define HAS_I422TOUYVYROW_MMI -#define HAS_I422TOYUY2ROW_MMI -#define HAS_INTERPOLATEROW_MMI -#define HAS_J400TOARGBROW_MMI -#define HAS_MERGERGBROW_MMI -#define HAS_MERGEUVROW_MMI -#define HAS_MIRRORROW_MMI -#define HAS_MIRRORUVROW_MMI -#define HAS_RAWTOARGBROW_MMI -#define HAS_RAWTORGB24ROW_MMI -#define HAS_RAWTOUVROW_MMI -#define HAS_RAWTOYROW_MMI -#define HAS_RGB24TOARGBROW_MMI -#define HAS_RGB24TOUVROW_MMI -#define HAS_RGB24TOYROW_MMI -#define HAS_RGB565TOARGBROW_MMI -#define HAS_RGB565TOUVROW_MMI -#define HAS_RGB565TOYROW_MMI -#define HAS_RGBATOUVROW_MMI -#define HAS_RGBATOYROW_MMI -#define HAS_SOBELROW_MMI -#define HAS_SOBELTOPLANEROW_MMI -#define HAS_SOBELXROW_MMI -#define HAS_SOBELXYROW_MMI -#define HAS_SOBELYROW_MMI -#define HAS_SPLITRGBROW_MMI -#define HAS_SPLITUVROW_MMI -#define HAS_UYVYTOUVROW_MMI -#define HAS_UYVYTOYROW_MMI -#define HAS_YUY2TOUV422ROW_MMI -#define HAS_YUY2TOUVROW_MMI -#define HAS_YUY2TOYROW_MMI -#endif - -#if defined(_MSC_VER) && !defined(__CLR_VER) && !defined(__clang__) -#if defined(VISUALC_HAS_AVX2) -#define SIMD_ALIGNED(var) __declspec(align(32)) var -#else -#define SIMD_ALIGNED(var) __declspec(align(16)) var -#endif -typedef __declspec(align(16)) int16_t vec16[8]; -typedef __declspec(align(16)) int32_t vec32[4]; -typedef __declspec(align(16)) int8_t vec8[16]; -typedef __declspec(align(16)) uint16_t uvec16[8]; -typedef __declspec(align(16)) uint32_t uvec32[4]; -typedef __declspec(align(16)) uint8_t uvec8[16]; -typedef __declspec(align(32)) int16_t lvec16[16]; -typedef __declspec(align(32)) int32_t lvec32[8]; -typedef __declspec(align(32)) int8_t lvec8[32]; -typedef __declspec(align(32)) uint16_t ulvec16[16]; -typedef __declspec(align(32)) uint32_t ulvec32[8]; -typedef __declspec(align(32)) uint8_t ulvec8[32]; -#elif !defined(__pnacl__) && (defined(__GNUC__) || defined(__clang__)) -// Caveat GCC 4.2 to 4.7 have a known issue using vectors with const. -#if defined(CLANG_HAS_AVX2) || defined(GCC_HAS_AVX2) -#define SIMD_ALIGNED(var) var __attribute__((aligned(32))) -#else -#define SIMD_ALIGNED(var) var __attribute__((aligned(16))) -#endif -typedef int16_t __attribute__((vector_size(16))) vec16; -typedef int32_t __attribute__((vector_size(16))) vec32; -typedef int8_t __attribute__((vector_size(16))) vec8; -typedef uint16_t __attribute__((vector_size(16))) uvec16; -typedef uint32_t __attribute__((vector_size(16))) uvec32; -typedef uint8_t __attribute__((vector_size(16))) uvec8; -typedef int16_t __attribute__((vector_size(32))) lvec16; -typedef int32_t __attribute__((vector_size(32))) lvec32; -typedef int8_t __attribute__((vector_size(32))) lvec8; -typedef uint16_t __attribute__((vector_size(32))) ulvec16; -typedef uint32_t __attribute__((vector_size(32))) ulvec32; -typedef uint8_t __attribute__((vector_size(32))) ulvec8; -#else -#define SIMD_ALIGNED(var) var -typedef int16_t vec16[8]; -typedef int32_t vec32[4]; -typedef int8_t vec8[16]; -typedef uint16_t uvec16[8]; -typedef uint32_t uvec32[4]; -typedef uint8_t uvec8[16]; -typedef int16_t lvec16[16]; -typedef int32_t lvec32[8]; -typedef int8_t lvec8[32]; -typedef uint16_t ulvec16[16]; -typedef uint32_t ulvec32[8]; -typedef uint8_t ulvec8[32]; -#endif - -#if defined(__aarch64__) -// This struct is for Arm64 color conversion. -struct YuvConstants { - uvec16 kUVToRB; - uvec16 kUVToRB2; - uvec16 kUVToG; - uvec16 kUVToG2; - vec16 kUVBiasBGR; - vec32 kYToRgb; -}; -#elif defined(__arm__) -// This struct is for ArmV7 color conversion. -struct YuvConstants { - uvec8 kUVToRB; - uvec8 kUVToG; - vec16 kUVBiasBGR; - vec32 kYToRgb; -}; -#else -// This struct is for Intel color conversion. -struct YuvConstants { - int8_t kUVToB[32]; - int8_t kUVToG[32]; - int8_t kUVToR[32]; - int16_t kUVBiasB[16]; - int16_t kUVBiasG[16]; - int16_t kUVBiasR[16]; - int16_t kYToRgb[16]; -}; - -// Offsets into YuvConstants structure -#define KUVTOB 0 -#define KUVTOG 32 -#define KUVTOR 64 -#define KUVBIASB 96 -#define KUVBIASG 128 -#define KUVBIASR 160 -#define KYTORGB 192 -#endif - -// Conversion matrix for YUV to RGB -extern const struct YuvConstants SIMD_ALIGNED(kYuvI601Constants); // BT.601 -extern const struct YuvConstants SIMD_ALIGNED(kYuvJPEGConstants); // JPeg -extern const struct YuvConstants SIMD_ALIGNED(kYuvH709Constants); // BT.709 - -// Conversion matrix for YVU to BGR -extern const struct YuvConstants SIMD_ALIGNED(kYvuI601Constants); // BT.601 -extern const struct YuvConstants SIMD_ALIGNED(kYvuJPEGConstants); // JPeg -extern const struct YuvConstants SIMD_ALIGNED(kYvuH709Constants); // BT.709 - -#define IS_ALIGNED(p, a) (!((uintptr_t)(p) & ((a)-1))) - -#define align_buffer_64(var, size) \ - uint8_t* var##_mem = (uint8_t*)(malloc((size) + 63)); /* NOLINT */ \ - uint8_t* var = (uint8_t*)(((intptr_t)(var##_mem) + 63) & ~63) /* NOLINT */ - -#define free_aligned_buffer_64(var) \ - free(var##_mem); \ - var = 0 - -#if defined(__APPLE__) || defined(__x86_64__) || defined(__llvm__) -#define OMITFP -#else -#define OMITFP __attribute__((optimize("omit-frame-pointer"))) -#endif - -// NaCL macros for GCC x86 and x64. -#if defined(__native_client__) -#define LABELALIGN ".p2align 5\n" -#else -#define LABELALIGN -#endif - -// Intel Code Analizer markers. Insert IACA_START IACA_END around code to be -// measured and then run with iaca -64 libyuv_unittest. -// IACA_ASM_START amd IACA_ASM_END are equivalents that can be used within -// inline assembly blocks. -// example of iaca: -// ~/iaca-lin64/bin/iaca.sh -64 -analysis LATENCY out/Release/libyuv_unittest - -#if defined(__x86_64__) || defined(__i386__) - -#define IACA_ASM_START \ - ".byte 0x0F, 0x0B\n" \ - " movl $111, %%ebx\n" \ - ".byte 0x64, 0x67, 0x90\n" - -#define IACA_ASM_END \ - " movl $222, %%ebx\n" \ - ".byte 0x64, 0x67, 0x90\n" \ - ".byte 0x0F, 0x0B\n" - -#define IACA_SSC_MARK(MARK_ID) \ - __asm__ __volatile__("\n\t movl $" #MARK_ID \ - ", %%ebx" \ - "\n\t .byte 0x64, 0x67, 0x90" \ - : \ - : \ - : "memory"); - -#define IACA_UD_BYTES __asm__ __volatile__("\n\t .byte 0x0F, 0x0B"); - -#else /* Visual C */ -#define IACA_UD_BYTES \ - { __asm _emit 0x0F __asm _emit 0x0B } - -#define IACA_SSC_MARK(x) \ - { __asm mov ebx, x __asm _emit 0x64 __asm _emit 0x67 __asm _emit 0x90 } - -#define IACA_VC64_START __writegsbyte(111, 111); -#define IACA_VC64_END __writegsbyte(222, 222); -#endif - -#define IACA_START \ - { \ - IACA_UD_BYTES \ - IACA_SSC_MARK(111) \ - } -#define IACA_END \ - { \ - IACA_SSC_MARK(222) \ - IACA_UD_BYTES \ - } - -void I444ToARGBRow_NEON(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGBRow_NEON(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void I422AlphaToARGBRow_NEON(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - const uint8_t* src_a, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGBRow_NEON(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGBARow_NEON(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_rgba, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGB24Row_NEON(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_rgb24, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGB565Row_NEON(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_rgb565, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGB1555Row_NEON(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_argb1555, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGB4444Row_NEON(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_argb4444, - const struct YuvConstants* yuvconstants, - int width); -void NV12ToARGBRow_NEON(const uint8_t* src_y, - const uint8_t* src_uv, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void NV12ToRGB565Row_NEON(const uint8_t* src_y, - const uint8_t* src_uv, - uint8_t* dst_rgb565, - const struct YuvConstants* yuvconstants, - int width); -void NV21ToARGBRow_NEON(const uint8_t* src_y, - const uint8_t* src_vu, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void NV12ToRGB24Row_NEON(const uint8_t* src_y, - const uint8_t* src_uv, - uint8_t* dst_rgb24, - const struct YuvConstants* yuvconstants, - int width); -void NV21ToRGB24Row_NEON(const uint8_t* src_y, - const uint8_t* src_vu, - uint8_t* dst_rgb24, - const struct YuvConstants* yuvconstants, - int width); -void NV21ToYUV24Row_NEON(const uint8_t* src_y, - const uint8_t* src_vu, - uint8_t* dst_yuv24, - int width); -void YUY2ToARGBRow_NEON(const uint8_t* src_yuy2, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void UYVYToARGBRow_NEON(const uint8_t* src_uyvy, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void I444ToARGBRow_MSA(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); - -void I422ToARGBRow_MSA(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGBARow_MSA(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void I422AlphaToARGBRow_MSA(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - const uint8_t* src_a, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGB24Row_MSA(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGB565Row_MSA(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_rgb565, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGB4444Row_MSA(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_argb4444, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGB1555Row_MSA(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_argb1555, - const struct YuvConstants* yuvconstants, - int width); -void NV12ToARGBRow_MSA(const uint8_t* src_y, - const uint8_t* src_uv, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void NV12ToRGB565Row_MSA(const uint8_t* src_y, - const uint8_t* src_uv, - uint8_t* dst_rgb565, - const struct YuvConstants* yuvconstants, - int width); -void NV21ToARGBRow_MSA(const uint8_t* src_y, - const uint8_t* src_vu, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void YUY2ToARGBRow_MSA(const uint8_t* src_yuy2, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void UYVYToARGBRow_MSA(const uint8_t* src_uyvy, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); - -void ARGBToYRow_AVX2(const uint8_t* src_argb, uint8_t* dst_y, int width); -void ARGBToYRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void ARGBToYRow_SSSE3(const uint8_t* src_argb, uint8_t* dst_y, int width); -void ARGBToYJRow_AVX2(const uint8_t* src_argb, uint8_t* dst_y, int width); -void ARGBToYJRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void ARGBToYJRow_SSSE3(const uint8_t* src_argb, uint8_t* dst_y, int width); -void BGRAToYRow_SSSE3(const uint8_t* src_bgra, uint8_t* dst_y, int width); -void ABGRToYRow_SSSE3(const uint8_t* src_abgr, uint8_t* dst_y, int width); -void RGBAToYRow_SSSE3(const uint8_t* src_rgba, uint8_t* dst_y, int width); -void RGB24ToYRow_SSSE3(const uint8_t* src_rgb24, uint8_t* dst_y, int width); -void RAWToYRow_SSSE3(const uint8_t* src_raw, uint8_t* dst_y, int width); -void ARGBToYRow_NEON(const uint8_t* src_argb, uint8_t* dst_y, int width); -void ARGBToYJRow_NEON(const uint8_t* src_argb, uint8_t* dst_y, int width); -void ARGBToYRow_MSA(const uint8_t* src_argb0, uint8_t* dst_y, int width); -void ARGBToYJRow_MSA(const uint8_t* src_argb0, uint8_t* dst_y, int width); -void ARGBToYRow_MMI(const uint8_t* src_argb0, uint8_t* dst_y, int width); -void ARGBToYJRow_MMI(const uint8_t* src_argb0, uint8_t* dst_y, int width); -void ARGBToUV444Row_NEON(const uint8_t* src_argb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVRow_NEON(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUV444Row_MSA(const uint8_t* src_argb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVRow_MSA(const uint8_t* src_argb0, - int src_stride_argb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUV444Row_MMI(const uint8_t* src_argb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVRow_MMI(const uint8_t* src_argb0, - int src_stride_argb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVJRow_NEON(const uint8_t* src_argb, - int src_stride_argb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void BGRAToUVRow_NEON(const uint8_t* src_bgra, - int src_stride_bgra, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ABGRToUVRow_NEON(const uint8_t* src_abgr, - int src_stride_abgr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGBAToUVRow_NEON(const uint8_t* src_rgba, - int src_stride_rgba, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGB24ToUVRow_NEON(const uint8_t* src_rgb24, - int src_stride_rgb24, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RAWToUVRow_NEON(const uint8_t* src_raw, - int src_stride_raw, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGB565ToUVRow_NEON(const uint8_t* src_rgb565, - int src_stride_rgb565, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGB1555ToUVRow_NEON(const uint8_t* src_argb1555, - int src_stride_argb1555, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGB4444ToUVRow_NEON(const uint8_t* src_argb4444, - int src_stride_argb4444, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVJRow_MSA(const uint8_t* src_rgb0, - int src_stride_rgb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void BGRAToUVRow_MSA(const uint8_t* src_rgb0, - int src_stride_rgb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ABGRToUVRow_MSA(const uint8_t* src_rgb0, - int src_stride_rgb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGBAToUVRow_MSA(const uint8_t* src_rgb0, - int src_stride_rgb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGB24ToUVRow_MSA(const uint8_t* src_rgb0, - int src_stride_rgb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RAWToUVRow_MSA(const uint8_t* src_rgb0, - int src_stride_rgb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGB565ToUVRow_MSA(const uint8_t* src_rgb565, - int src_stride_rgb565, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGB1555ToUVRow_MSA(const uint8_t* src_argb1555, - int src_stride_argb1555, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVJRow_MMI(const uint8_t* src_rgb0, - int src_stride_rgb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void BGRAToUVRow_MMI(const uint8_t* src_rgb0, - int src_stride_rgb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ABGRToUVRow_MMI(const uint8_t* src_rgb0, - int src_stride_rgb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGBAToUVRow_MMI(const uint8_t* src_rgb0, - int src_stride_rgb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGB24ToUVRow_MMI(const uint8_t* src_rgb0, - int src_stride_rgb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RAWToUVRow_MMI(const uint8_t* src_rgb0, - int src_stride_rgb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGB565ToUVRow_MMI(const uint8_t* src_rgb565, - int src_stride_rgb565, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGB1555ToUVRow_MMI(const uint8_t* src_argb1555, - int src_stride_argb1555, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGB4444ToUVRow_MMI(const uint8_t* src_argb4444, - int src_stride_argb4444, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void BGRAToYRow_NEON(const uint8_t* src_bgra, uint8_t* dst_y, int width); -void ABGRToYRow_NEON(const uint8_t* src_abgr, uint8_t* dst_y, int width); -void RGBAToYRow_NEON(const uint8_t* src_rgba, uint8_t* dst_y, int width); -void RGB24ToYRow_NEON(const uint8_t* src_rgb24, uint8_t* dst_y, int width); -void RAWToYRow_NEON(const uint8_t* src_raw, uint8_t* dst_y, int width); -void RGB565ToYRow_NEON(const uint8_t* src_rgb565, uint8_t* dst_y, int width); -void ARGB1555ToYRow_NEON(const uint8_t* src_argb1555, - uint8_t* dst_y, - int width); -void ARGB4444ToYRow_NEON(const uint8_t* src_argb4444, - uint8_t* dst_y, - int width); -void BGRAToYRow_MSA(const uint8_t* src_argb0, uint8_t* dst_y, int width); -void ABGRToYRow_MSA(const uint8_t* src_argb0, uint8_t* dst_y, int width); -void RGBAToYRow_MSA(const uint8_t* src_argb0, uint8_t* dst_y, int width); -void RGB24ToYRow_MSA(const uint8_t* src_argb0, uint8_t* dst_y, int width); -void RAWToYRow_MSA(const uint8_t* src_argb0, uint8_t* dst_y, int width); -void RGB565ToYRow_MSA(const uint8_t* src_rgb565, uint8_t* dst_y, int width); -void ARGB1555ToYRow_MSA(const uint8_t* src_argb1555, uint8_t* dst_y, int width); -void BGRAToYRow_MMI(const uint8_t* src_argb0, uint8_t* dst_y, int width); -void ABGRToYRow_MMI(const uint8_t* src_argb0, uint8_t* dst_y, int width); -void RGBAToYRow_MMI(const uint8_t* src_argb0, uint8_t* dst_y, int width); -void RGB24ToYRow_MMI(const uint8_t* src_argb0, uint8_t* dst_y, int width); -void RAWToYRow_MMI(const uint8_t* src_argb0, uint8_t* dst_y, int width); -void RGB565ToYRow_MMI(const uint8_t* src_rgb565, uint8_t* dst_y, int width); -void ARGB1555ToYRow_MMI(const uint8_t* src_argb1555, uint8_t* dst_y, int width); -void ARGB4444ToYRow_MMI(const uint8_t* src_argb4444, uint8_t* dst_y, int width); - -void ARGBToYRow_C(const uint8_t* src_argb0, uint8_t* dst_y, int width); -void ARGBToYJRow_C(const uint8_t* src_argb0, uint8_t* dst_y, int width); -void BGRAToYRow_C(const uint8_t* src_argb0, uint8_t* dst_y, int width); -void ABGRToYRow_C(const uint8_t* src_argb0, uint8_t* dst_y, int width); -void RGBAToYRow_C(const uint8_t* src_argb0, uint8_t* dst_y, int width); -void RGB24ToYRow_C(const uint8_t* src_argb0, uint8_t* dst_y, int width); -void RAWToYRow_C(const uint8_t* src_argb0, uint8_t* dst_y, int width); -void RGB565ToYRow_C(const uint8_t* src_rgb565, uint8_t* dst_y, int width); -void ARGB1555ToYRow_C(const uint8_t* src_argb1555, uint8_t* dst_y, int width); -void ARGB4444ToYRow_C(const uint8_t* src_argb4444, uint8_t* dst_y, int width); -void ARGBToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void ARGBToYJRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void BGRAToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void ABGRToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void RGBAToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void RGB24ToYRow_Any_SSSE3(const uint8_t* src_rgb24, uint8_t* dst_y, int width); -void RAWToYRow_Any_SSSE3(const uint8_t* src_raw, uint8_t* dst_y, int width); -void ARGBToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void ARGBToYJRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void BGRAToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void ABGRToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void RGBAToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void RGB24ToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void RAWToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void RGB565ToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void ARGB1555ToYRow_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGB4444ToYRow_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void BGRAToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void ABGRToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void RGBAToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void ARGBToYJRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void ARGBToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void RGB24ToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void RAWToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void RGB565ToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void ARGB1555ToYRow_Any_MSA(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void BGRAToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void ABGRToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void RGBAToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void ARGBToYJRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void ARGBToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void RGB24ToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void RAWToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void RGB565ToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void ARGB1555ToYRow_Any_MMI(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGB4444ToYRow_Any_MMI(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); - -void ARGBToUVRow_AVX2(const uint8_t* src_argb0, - int src_stride_argb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVJRow_AVX2(const uint8_t* src_argb0, - int src_stride_argb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVRow_SSSE3(const uint8_t* src_argb0, - int src_stride_argb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVJRow_SSSE3(const uint8_t* src_argb0, - int src_stride_argb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void BGRAToUVRow_SSSE3(const uint8_t* src_bgra0, - int src_stride_bgra, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ABGRToUVRow_SSSE3(const uint8_t* src_abgr0, - int src_stride_abgr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGBAToUVRow_SSSE3(const uint8_t* src_rgba0, - int src_stride_rgba, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVRow_Any_AVX2(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVJRow_Any_AVX2(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVRow_Any_SSSE3(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVJRow_Any_SSSE3(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void BGRAToUVRow_Any_SSSE3(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ABGRToUVRow_Any_SSSE3(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGBAToUVRow_Any_SSSE3(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUV444Row_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVRow_Any_NEON(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUV444Row_Any_MSA(const uint8_t* src_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVRow_Any_MSA(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUV444Row_Any_MMI(const uint8_t* src_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVRow_Any_MMI(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVJRow_Any_NEON(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void BGRAToUVRow_Any_NEON(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ABGRToUVRow_Any_NEON(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGBAToUVRow_Any_NEON(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGB24ToUVRow_Any_NEON(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RAWToUVRow_Any_NEON(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGB565ToUVRow_Any_NEON(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGB1555ToUVRow_Any_NEON(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGB4444ToUVRow_Any_NEON(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVJRow_Any_MSA(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void BGRAToUVRow_Any_MSA(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ABGRToUVRow_Any_MSA(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGBAToUVRow_Any_MSA(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGB24ToUVRow_Any_MSA(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RAWToUVRow_Any_MSA(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGB565ToUVRow_Any_MSA(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGB1555ToUVRow_Any_MSA(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVJRow_Any_MMI(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void BGRAToUVRow_Any_MMI(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ABGRToUVRow_Any_MMI(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGBAToUVRow_Any_MMI(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGB24ToUVRow_Any_MMI(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RAWToUVRow_Any_MMI(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGB565ToUVRow_Any_MMI(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGB1555ToUVRow_Any_MMI(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGB4444ToUVRow_Any_MMI(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVRow_C(const uint8_t* src_rgb0, - int src_stride_rgb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVJRow_C(const uint8_t* src_rgb0, - int src_stride_rgb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVRow_C(const uint8_t* src_rgb0, - int src_stride_rgb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUVJRow_C(const uint8_t* src_rgb0, - int src_stride_rgb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void BGRAToUVRow_C(const uint8_t* src_rgb0, - int src_stride_rgb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ABGRToUVRow_C(const uint8_t* src_rgb0, - int src_stride_rgb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGBAToUVRow_C(const uint8_t* src_rgb0, - int src_stride_rgb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGB24ToUVRow_C(const uint8_t* src_rgb0, - int src_stride_rgb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RAWToUVRow_C(const uint8_t* src_rgb0, - int src_stride_rgb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void RGB565ToUVRow_C(const uint8_t* src_rgb565, - int src_stride_rgb565, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGB1555ToUVRow_C(const uint8_t* src_argb1555, - int src_stride_argb1555, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGB4444ToUVRow_C(const uint8_t* src_argb4444, - int src_stride_argb4444, - uint8_t* dst_u, - uint8_t* dst_v, - int width); - -void ARGBToUV444Row_SSSE3(const uint8_t* src_argb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void ARGBToUV444Row_Any_SSSE3(const uint8_t* src_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); - -void ARGBToUV444Row_C(const uint8_t* src_argb, - uint8_t* dst_u, - uint8_t* dst_v, - int width); - -void MirrorRow_AVX2(const uint8_t* src, uint8_t* dst, int width); -void MirrorRow_SSSE3(const uint8_t* src, uint8_t* dst, int width); -void MirrorRow_NEON(const uint8_t* src, uint8_t* dst, int width); -void MirrorRow_MSA(const uint8_t* src, uint8_t* dst, int width); -void MirrorRow_MMI(const uint8_t* src, uint8_t* dst, int width); -void MirrorRow_C(const uint8_t* src, uint8_t* dst, int width); -void MirrorRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void MirrorRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void MirrorRow_Any_SSE2(const uint8_t* src, uint8_t* dst, int width); -void MirrorRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void MirrorRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void MirrorRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); - -void MirrorUVRow_SSSE3(const uint8_t* src, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void MirrorUVRow_NEON(const uint8_t* src_uv, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void MirrorUVRow_MSA(const uint8_t* src_uv, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void MirrorUVRow_MMI(const uint8_t* src_uv, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void MirrorUVRow_C(const uint8_t* src_uv, - uint8_t* dst_u, - uint8_t* dst_v, - int width); - -void ARGBMirrorRow_AVX2(const uint8_t* src, uint8_t* dst, int width); -void ARGBMirrorRow_SSE2(const uint8_t* src, uint8_t* dst, int width); -void ARGBMirrorRow_NEON(const uint8_t* src, uint8_t* dst, int width); -void ARGBMirrorRow_MSA(const uint8_t* src, uint8_t* dst, int width); -void ARGBMirrorRow_MMI(const uint8_t* src, uint8_t* dst, int width); -void ARGBMirrorRow_C(const uint8_t* src, uint8_t* dst, int width); -void ARGBMirrorRow_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBMirrorRow_Any_SSE2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBMirrorRow_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBMirrorRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void ARGBMirrorRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); - -void SplitUVRow_C(const uint8_t* src_uv, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void SplitUVRow_SSE2(const uint8_t* src_uv, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void SplitUVRow_AVX2(const uint8_t* src_uv, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void SplitUVRow_NEON(const uint8_t* src_uv, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void SplitUVRow_MSA(const uint8_t* src_uv, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void SplitUVRow_MMI(const uint8_t* src_uv, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void SplitUVRow_Any_SSE2(const uint8_t* src_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void SplitUVRow_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void SplitUVRow_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void SplitUVRow_Any_MSA(const uint8_t* src_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void SplitUVRow_Any_MMI(const uint8_t* src_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); - -void MergeUVRow_C(const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_uv, - int width); -void MergeUVRow_SSE2(const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_uv, - int width); -void MergeUVRow_AVX2(const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_uv, - int width); -void MergeUVRow_NEON(const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_uv, - int width); -void MergeUVRow_MSA(const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_uv, - int width); -void MergeUVRow_MMI(const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_uv, - int width); -void MergeUVRow_Any_SSE2(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void MergeUVRow_Any_AVX2(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void MergeUVRow_Any_NEON(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void MergeUVRow_Any_MSA(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void MergeUVRow_Any_MMI(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); - -void SplitRGBRow_C(const uint8_t* src_rgb, - uint8_t* dst_r, - uint8_t* dst_g, - uint8_t* dst_b, - int width); -void SplitRGBRow_SSSE3(const uint8_t* src_rgb, - uint8_t* dst_r, - uint8_t* dst_g, - uint8_t* dst_b, - int width); -void SplitRGBRow_NEON(const uint8_t* src_rgb, - uint8_t* dst_r, - uint8_t* dst_g, - uint8_t* dst_b, - int width); -void SplitRGBRow_MMI(const uint8_t* src_rgb, - uint8_t* dst_r, - uint8_t* dst_g, - uint8_t* dst_b, - int width); -void SplitRGBRow_Any_SSSE3(const uint8_t* src_ptr, - uint8_t* dst_r, - uint8_t* dst_g, - uint8_t* dst_b, - int width); -void SplitRGBRow_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_r, - uint8_t* dst_g, - uint8_t* dst_b, - int width); -void SplitRGBRow_Any_MMI(const uint8_t* src_ptr, - uint8_t* dst_r, - uint8_t* dst_g, - uint8_t* dst_b, - int width); - -void MergeRGBRow_C(const uint8_t* src_r, - const uint8_t* src_g, - const uint8_t* src_b, - uint8_t* dst_rgb, - int width); -void MergeRGBRow_SSSE3(const uint8_t* src_r, - const uint8_t* src_g, - const uint8_t* src_b, - uint8_t* dst_rgb, - int width); -void MergeRGBRow_NEON(const uint8_t* src_r, - const uint8_t* src_g, - const uint8_t* src_b, - uint8_t* dst_rgb, - int width); -void MergeRGBRow_MMI(const uint8_t* src_r, - const uint8_t* src_g, - const uint8_t* src_b, - uint8_t* dst_rgb, - int width); -void MergeRGBRow_Any_SSSE3(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - int width); -void MergeRGBRow_Any_NEON(const uint8_t* src_r, - const uint8_t* src_g, - const uint8_t* src_b, - uint8_t* dst_rgb, - int width); -void MergeRGBRow_Any_MMI(const uint8_t* src_r, - const uint8_t* src_g, - const uint8_t* src_b, - uint8_t* dst_rgb, - int width); - -void MergeUVRow_16_C(const uint16_t* src_u, - const uint16_t* src_v, - uint16_t* dst_uv, - int scale, /* 64 for 10 bit */ - int width); -void MergeUVRow_16_AVX2(const uint16_t* src_u, - const uint16_t* src_v, - uint16_t* dst_uv, - int scale, - int width); - -void MultiplyRow_16_AVX2(const uint16_t* src_y, - uint16_t* dst_y, - int scale, - int width); -void MultiplyRow_16_C(const uint16_t* src_y, - uint16_t* dst_y, - int scale, - int width); - -void Convert8To16Row_C(const uint8_t* src_y, - uint16_t* dst_y, - int scale, - int width); -void Convert8To16Row_SSE2(const uint8_t* src_y, - uint16_t* dst_y, - int scale, - int width); -void Convert8To16Row_AVX2(const uint8_t* src_y, - uint16_t* dst_y, - int scale, - int width); -void Convert8To16Row_Any_SSE2(const uint8_t* src_ptr, - uint16_t* dst_ptr, - int scale, - int width); -void Convert8To16Row_Any_AVX2(const uint8_t* src_ptr, - uint16_t* dst_ptr, - int scale, - int width); - -void Convert16To8Row_C(const uint16_t* src_y, - uint8_t* dst_y, - int scale, - int width); -void Convert16To8Row_SSSE3(const uint16_t* src_y, - uint8_t* dst_y, - int scale, - int width); -void Convert16To8Row_AVX2(const uint16_t* src_y, - uint8_t* dst_y, - int scale, - int width); -void Convert16To8Row_Any_SSSE3(const uint16_t* src_ptr, - uint8_t* dst_ptr, - int scale, - int width); -void Convert16To8Row_Any_AVX2(const uint16_t* src_ptr, - uint8_t* dst_ptr, - int scale, - int width); - -void CopyRow_SSE2(const uint8_t* src, uint8_t* dst, int width); -void CopyRow_AVX(const uint8_t* src, uint8_t* dst, int width); -void CopyRow_ERMS(const uint8_t* src, uint8_t* dst, int width); -void CopyRow_NEON(const uint8_t* src, uint8_t* dst, int width); -void CopyRow_MIPS(const uint8_t* src, uint8_t* dst, int count); -void CopyRow_C(const uint8_t* src, uint8_t* dst, int count); -void CopyRow_Any_SSE2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void CopyRow_Any_AVX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void CopyRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); - -void CopyRow_16_C(const uint16_t* src, uint16_t* dst, int count); - -void ARGBCopyAlphaRow_C(const uint8_t* src, uint8_t* dst, int width); -void ARGBCopyAlphaRow_SSE2(const uint8_t* src, uint8_t* dst, int width); -void ARGBCopyAlphaRow_AVX2(const uint8_t* src, uint8_t* dst, int width); -void ARGBCopyAlphaRow_MMI(const uint8_t* src, uint8_t* dst, int width); -void ARGBCopyAlphaRow_Any_SSE2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBCopyAlphaRow_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBCopyAlphaRow_Any_MMI(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); - -void ARGBExtractAlphaRow_C(const uint8_t* src_argb, uint8_t* dst_a, int width); -void ARGBExtractAlphaRow_SSE2(const uint8_t* src_argb, - uint8_t* dst_a, - int width); -void ARGBExtractAlphaRow_AVX2(const uint8_t* src_argb, - uint8_t* dst_a, - int width); -void ARGBExtractAlphaRow_NEON(const uint8_t* src_argb, - uint8_t* dst_a, - int width); -void ARGBExtractAlphaRow_MSA(const uint8_t* src_argb, - uint8_t* dst_a, - int width); -void ARGBExtractAlphaRow_MMI(const uint8_t* src_argb, - uint8_t* dst_a, - int width); -void ARGBExtractAlphaRow_Any_SSE2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBExtractAlphaRow_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBExtractAlphaRow_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBExtractAlphaRow_Any_MSA(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBExtractAlphaRow_Any_MMI(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); - -void ARGBCopyYToAlphaRow_C(const uint8_t* src, uint8_t* dst, int width); -void ARGBCopyYToAlphaRow_SSE2(const uint8_t* src, uint8_t* dst, int width); -void ARGBCopyYToAlphaRow_AVX2(const uint8_t* src, uint8_t* dst, int width); -void ARGBCopyYToAlphaRow_MMI(const uint8_t* src, uint8_t* dst, int width); -void ARGBCopyYToAlphaRow_Any_SSE2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBCopyYToAlphaRow_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBCopyYToAlphaRow_Any_MMI(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); - -void SetRow_C(uint8_t* dst, uint8_t v8, int width); -void SetRow_MSA(uint8_t* dst, uint8_t v8, int width); -void SetRow_X86(uint8_t* dst, uint8_t v8, int width); -void SetRow_ERMS(uint8_t* dst, uint8_t v8, int width); -void SetRow_NEON(uint8_t* dst, uint8_t v8, int width); -void SetRow_Any_X86(uint8_t* dst_ptr, uint8_t v32, int width); -void SetRow_Any_NEON(uint8_t* dst_ptr, uint8_t v32, int width); - -void ARGBSetRow_C(uint8_t* dst_argb, uint32_t v32, int width); -void ARGBSetRow_X86(uint8_t* dst_argb, uint32_t v32, int width); -void ARGBSetRow_NEON(uint8_t* dst, uint32_t v32, int width); -void ARGBSetRow_Any_NEON(uint8_t* dst_ptr, uint32_t v32, int width); -void ARGBSetRow_MSA(uint8_t* dst_argb, uint32_t v32, int width); -void ARGBSetRow_Any_MSA(uint8_t* dst_ptr, uint32_t v32, int width); - -// ARGBShufflers for BGRAToARGB etc. -void ARGBShuffleRow_C(const uint8_t* src_argb, - uint8_t* dst_argb, - const uint8_t* shuffler, - int width); -void ARGBShuffleRow_SSSE3(const uint8_t* src_argb, - uint8_t* dst_argb, - const uint8_t* shuffler, - int width); -void ARGBShuffleRow_AVX2(const uint8_t* src_argb, - uint8_t* dst_argb, - const uint8_t* shuffler, - int width); -void ARGBShuffleRow_NEON(const uint8_t* src_argb, - uint8_t* dst_argb, - const uint8_t* shuffler, - int width); -void ARGBShuffleRow_MSA(const uint8_t* src_argb, - uint8_t* dst_argb, - const uint8_t* shuffler, - int width); -void ARGBShuffleRow_MMI(const uint8_t* src_argb, - uint8_t* dst_argb, - const uint8_t* shuffler, - int width); -void ARGBShuffleRow_Any_SSSE3(const uint8_t* src_ptr, - uint8_t* dst_ptr, - const uint8_t* param, - int width); -void ARGBShuffleRow_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - const uint8_t* param, - int width); -void ARGBShuffleRow_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_ptr, - const uint8_t* param, - int width); -void ARGBShuffleRow_Any_MSA(const uint8_t* src_ptr, - uint8_t* dst_ptr, - const uint8_t* param, - int width); -void ARGBShuffleRow_Any_MMI(const uint8_t* src_ptr, - uint8_t* dst_ptr, - const uint8_t* param, - int width); - -void RGB24ToARGBRow_SSSE3(const uint8_t* src_rgb24, - uint8_t* dst_argb, - int width); -void RAWToARGBRow_SSSE3(const uint8_t* src_raw, uint8_t* dst_argb, int width); -void RAWToRGB24Row_SSSE3(const uint8_t* src_raw, uint8_t* dst_rgb24, int width); -void RGB565ToARGBRow_SSE2(const uint8_t* src, uint8_t* dst, int width); -void ARGB1555ToARGBRow_SSE2(const uint8_t* src, uint8_t* dst, int width); -void ARGB4444ToARGBRow_SSE2(const uint8_t* src, uint8_t* dst, int width); -void RGB565ToARGBRow_AVX2(const uint8_t* src_rgb565, - uint8_t* dst_argb, - int width); -void ARGB1555ToARGBRow_AVX2(const uint8_t* src_argb1555, - uint8_t* dst_argb, - int width); -void ARGB4444ToARGBRow_AVX2(const uint8_t* src_argb4444, - uint8_t* dst_argb, - int width); - -void RGB24ToARGBRow_NEON(const uint8_t* src_rgb24, - uint8_t* dst_argb, - int width); -void RGB24ToARGBRow_MSA(const uint8_t* src_rgb24, uint8_t* dst_argb, int width); -void RGB24ToARGBRow_MMI(const uint8_t* src_rgb24, uint8_t* dst_argb, int width); -void RAWToARGBRow_NEON(const uint8_t* src_raw, uint8_t* dst_argb, int width); -void RAWToARGBRow_MSA(const uint8_t* src_raw, uint8_t* dst_argb, int width); -void RAWToARGBRow_MMI(const uint8_t* src_raw, uint8_t* dst_argb, int width); -void RAWToRGB24Row_NEON(const uint8_t* src_raw, uint8_t* dst_rgb24, int width); -void RAWToRGB24Row_MSA(const uint8_t* src_raw, uint8_t* dst_rgb24, int width); -void RAWToRGB24Row_MMI(const uint8_t* src_raw, uint8_t* dst_rgb24, int width); -void RGB565ToARGBRow_NEON(const uint8_t* src_rgb565, - uint8_t* dst_argb, - int width); -void RGB565ToARGBRow_MSA(const uint8_t* src_rgb565, - uint8_t* dst_argb, - int width); -void RGB565ToARGBRow_MMI(const uint8_t* src_rgb565, - uint8_t* dst_argb, - int width); -void ARGB1555ToARGBRow_NEON(const uint8_t* src_argb1555, - uint8_t* dst_argb, - int width); -void ARGB1555ToARGBRow_MSA(const uint8_t* src_argb1555, - uint8_t* dst_argb, - int width); -void ARGB1555ToARGBRow_MMI(const uint8_t* src_argb1555, - uint8_t* dst_argb, - int width); -void ARGB4444ToARGBRow_NEON(const uint8_t* src_argb4444, - uint8_t* dst_argb, - int width); -void ARGB4444ToARGBRow_MSA(const uint8_t* src_argb4444, - uint8_t* dst_argb, - int width); -void ARGB4444ToARGBRow_MMI(const uint8_t* src_argb4444, - uint8_t* dst_argb, - int width); -void RGB24ToARGBRow_C(const uint8_t* src_rgb24, uint8_t* dst_argb, int width); -void RAWToARGBRow_C(const uint8_t* src_raw, uint8_t* dst_argb, int width); -void RAWToRGB24Row_C(const uint8_t* src_raw, uint8_t* dst_rgb24, int width); -void RGB565ToARGBRow_C(const uint8_t* src_rgb565, uint8_t* dst_argb, int width); -void ARGB1555ToARGBRow_C(const uint8_t* src_argb1555, - uint8_t* dst_argb, - int width); -void ARGB4444ToARGBRow_C(const uint8_t* src_argb4444, - uint8_t* dst_argb, - int width); -void AR30ToARGBRow_C(const uint8_t* src_ar30, uint8_t* dst_argb, int width); -void AR30ToABGRRow_C(const uint8_t* src_ar30, uint8_t* dst_abgr, int width); -void ARGBToAR30Row_C(const uint8_t* src_argb, uint8_t* dst_ar30, int width); -void AR30ToAB30Row_C(const uint8_t* src_ar30, uint8_t* dst_ab30, int width); - -void RGB24ToARGBRow_Any_SSSE3(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void RAWToARGBRow_Any_SSSE3(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void RAWToRGB24Row_Any_SSSE3(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); - -void RGB565ToARGBRow_Any_SSE2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGB1555ToARGBRow_Any_SSE2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGB4444ToARGBRow_Any_SSE2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void RGB565ToARGBRow_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGB1555ToARGBRow_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGB4444ToARGBRow_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); - -void RGB24ToARGBRow_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void RGB24ToARGBRow_Any_MSA(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void RGB24ToARGBRow_Any_MMI(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void RAWToARGBRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void RAWToARGBRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void RAWToARGBRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void RAWToRGB24Row_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void RAWToRGB24Row_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void RAWToRGB24Row_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void RGB565ToARGBRow_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void RGB565ToARGBRow_Any_MSA(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void RGB565ToARGBRow_Any_MMI(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGB1555ToARGBRow_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGB1555ToARGBRow_Any_MSA(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGB1555ToARGBRow_Any_MMI(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGB4444ToARGBRow_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); - -void ARGB4444ToARGBRow_Any_MSA(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGB4444ToARGBRow_Any_MMI(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); - -void ARGBToRGB24Row_SSSE3(const uint8_t* src, uint8_t* dst, int width); -void ARGBToRAWRow_SSSE3(const uint8_t* src, uint8_t* dst, int width); -void ARGBToRGB565Row_SSE2(const uint8_t* src, uint8_t* dst, int width); -void ARGBToARGB1555Row_SSE2(const uint8_t* src, uint8_t* dst, int width); -void ARGBToARGB4444Row_SSE2(const uint8_t* src, uint8_t* dst, int width); -void ABGRToAR30Row_SSSE3(const uint8_t* src, uint8_t* dst, int width); -void ARGBToAR30Row_SSSE3(const uint8_t* src, uint8_t* dst, int width); - -void ARGBToRAWRow_AVX2(const uint8_t* src, uint8_t* dst, int width); -void ARGBToRGB24Row_AVX2(const uint8_t* src, uint8_t* dst, int width); - -void ARGBToRGB24Row_AVX512VBMI(const uint8_t* src, uint8_t* dst, int width); - -void ARGBToRGB565DitherRow_C(const uint8_t* src_argb, - uint8_t* dst_rgb, - const uint32_t dither4, - int width); -void ARGBToRGB565DitherRow_SSE2(const uint8_t* src, - uint8_t* dst, - const uint32_t dither4, - int width); -void ARGBToRGB565DitherRow_AVX2(const uint8_t* src, - uint8_t* dst, - const uint32_t dither4, - int width); - -void ARGBToRGB565Row_AVX2(const uint8_t* src_argb, uint8_t* dst_rgb, int width); -void ARGBToARGB1555Row_AVX2(const uint8_t* src_argb, - uint8_t* dst_rgb, - int width); -void ARGBToARGB4444Row_AVX2(const uint8_t* src_argb, - uint8_t* dst_rgb, - int width); -void ABGRToAR30Row_AVX2(const uint8_t* src, uint8_t* dst, int width); -void ARGBToAR30Row_AVX2(const uint8_t* src, uint8_t* dst, int width); - -void ARGBToRGB24Row_NEON(const uint8_t* src_argb, - uint8_t* dst_rgb24, - int width); -void ARGBToRAWRow_NEON(const uint8_t* src_argb, uint8_t* dst_raw, int width); -void ARGBToRGB565Row_NEON(const uint8_t* src_argb, - uint8_t* dst_rgb565, - int width); -void ARGBToARGB1555Row_NEON(const uint8_t* src_argb, - uint8_t* dst_argb1555, - int width); -void ARGBToARGB4444Row_NEON(const uint8_t* src_argb, - uint8_t* dst_argb4444, - int width); -void ARGBToRGB565DitherRow_NEON(const uint8_t* src_argb, - uint8_t* dst_rgb, - const uint32_t dither4, - int width); -void ARGBToRGB24Row_MSA(const uint8_t* src_argb, uint8_t* dst_rgb, int width); -void ARGBToRAWRow_MSA(const uint8_t* src_argb, uint8_t* dst_rgb, int width); -void ARGBToRGB565Row_MSA(const uint8_t* src_argb, uint8_t* dst_rgb, int width); -void ARGBToARGB1555Row_MSA(const uint8_t* src_argb, - uint8_t* dst_rgb, - int width); -void ARGBToARGB4444Row_MSA(const uint8_t* src_argb, - uint8_t* dst_rgb, - int width); -void ARGBToRGB565DitherRow_MSA(const uint8_t* src_argb, - uint8_t* dst_rgb, - const uint32_t dither4, - int width); - -void ARGBToRGB24Row_MMI(const uint8_t* src_argb, uint8_t* dst_rgb, int width); -void ARGBToRAWRow_MMI(const uint8_t* src_argb, uint8_t* dst_rgb, int width); -void ARGBToRGB565Row_MMI(const uint8_t* src_argb, uint8_t* dst_rgb, int width); -void ARGBToARGB1555Row_MMI(const uint8_t* src_argb, - uint8_t* dst_rgb, - int width); -void ARGBToARGB4444Row_MMI(const uint8_t* src_argb, - uint8_t* dst_rgb, - int width); -void ARGBToRGB565DitherRow_MMI(const uint8_t* src_argb, - uint8_t* dst_rgb, - const uint32_t dither4, - int width); - -void ARGBToRGBARow_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width); -void ARGBToRGB24Row_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width); -void ARGBToRAWRow_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width); -void ARGBToRGB565Row_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width); -void ARGBToARGB1555Row_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width); -void ARGBToARGB4444Row_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width); -void ABGRToAR30Row_C(const uint8_t* src_abgr, uint8_t* dst_ar30, int width); -void ARGBToAR30Row_C(const uint8_t* src_argb, uint8_t* dst_ar30, int width); - -void J400ToARGBRow_SSE2(const uint8_t* src_y, uint8_t* dst_argb, int width); -void J400ToARGBRow_AVX2(const uint8_t* src_y, uint8_t* dst_argb, int width); -void J400ToARGBRow_NEON(const uint8_t* src_y, uint8_t* dst_argb, int width); -void J400ToARGBRow_MSA(const uint8_t* src_y, uint8_t* dst_argb, int width); -void J400ToARGBRow_MMI(const uint8_t* src_y, uint8_t* dst_argb, int width); -void J400ToARGBRow_C(const uint8_t* src_y, uint8_t* dst_argb, int width); -void J400ToARGBRow_Any_SSE2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void J400ToARGBRow_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void J400ToARGBRow_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void J400ToARGBRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void J400ToARGBRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); - -void I444ToARGBRow_C(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* rgb_buf, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGBRow_C(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* rgb_buf, - const struct YuvConstants* yuvconstants, - int width); -void I422ToAR30Row_C(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* rgb_buf, - const struct YuvConstants* yuvconstants, - int width); -void I210ToAR30Row_C(const uint16_t* src_y, - const uint16_t* src_u, - const uint16_t* src_v, - uint8_t* rgb_buf, - const struct YuvConstants* yuvconstants, - int width); -void I210ToARGBRow_C(const uint16_t* src_y, - const uint16_t* src_u, - const uint16_t* src_v, - uint8_t* rgb_buf, - const struct YuvConstants* yuvconstants, - int width); -void I422AlphaToARGBRow_C(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - const uint8_t* src_a, - uint8_t* rgb_buf, - const struct YuvConstants* yuvconstants, - int width); -void NV12ToARGBRow_C(const uint8_t* src_y, - const uint8_t* src_uv, - uint8_t* rgb_buf, - const struct YuvConstants* yuvconstants, - int width); -void NV12ToRGB565Row_C(const uint8_t* src_y, - const uint8_t* src_uv, - uint8_t* dst_rgb565, - const struct YuvConstants* yuvconstants, - int width); -void NV21ToARGBRow_C(const uint8_t* src_y, - const uint8_t* src_vu, - uint8_t* rgb_buf, - const struct YuvConstants* yuvconstants, - int width); -void NV12ToRGB24Row_C(const uint8_t* src_y, - const uint8_t* src_uv, - uint8_t* rgb_buf, - const struct YuvConstants* yuvconstants, - int width); -void NV21ToRGB24Row_C(const uint8_t* src_y, - const uint8_t* src_vu, - uint8_t* rgb_buf, - const struct YuvConstants* yuvconstants, - int width); -void NV21ToYUV24Row_C(const uint8_t* src_y, - const uint8_t* src_vu, - uint8_t* dst_yuv24, - int width); -void YUY2ToARGBRow_C(const uint8_t* src_yuy2, - uint8_t* rgb_buf, - const struct YuvConstants* yuvconstants, - int width); -void UYVYToARGBRow_C(const uint8_t* src_uyvy, - uint8_t* rgb_buf, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGBARow_C(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* rgb_buf, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGB24Row_C(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* rgb_buf, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGB4444Row_C(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_argb4444, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGB1555Row_C(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_argb1555, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGB565Row_C(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_rgb565, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGBRow_AVX2(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGBARow_AVX2(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void I444ToARGBRow_SSSE3(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void I444ToARGBRow_AVX2(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void I444ToARGBRow_SSSE3(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void I444ToARGBRow_AVX2(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGBRow_SSSE3(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); - -void I422ToAR30Row_SSSE3(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ar30, - const struct YuvConstants* yuvconstants, - int width); -void I210ToAR30Row_SSSE3(const uint16_t* y_buf, - const uint16_t* u_buf, - const uint16_t* v_buf, - uint8_t* dst_ar30, - const struct YuvConstants* yuvconstants, - int width); -void I210ToARGBRow_SSSE3(const uint16_t* y_buf, - const uint16_t* u_buf, - const uint16_t* v_buf, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void I422ToAR30Row_AVX2(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ar30, - const struct YuvConstants* yuvconstants, - int width); -void I210ToARGBRow_AVX2(const uint16_t* y_buf, - const uint16_t* u_buf, - const uint16_t* v_buf, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void I210ToAR30Row_AVX2(const uint16_t* y_buf, - const uint16_t* u_buf, - const uint16_t* v_buf, - uint8_t* dst_ar30, - const struct YuvConstants* yuvconstants, - int width); -void I422AlphaToARGBRow_SSSE3(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - const uint8_t* a_buf, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void I422AlphaToARGBRow_AVX2(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - const uint8_t* a_buf, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void NV12ToARGBRow_SSSE3(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void NV12ToARGBRow_AVX2(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void NV12ToRGB24Row_SSSE3(const uint8_t* src_y, - const uint8_t* src_uv, - uint8_t* dst_rgb24, - const struct YuvConstants* yuvconstants, - int width); -void NV21ToRGB24Row_SSSE3(const uint8_t* src_y, - const uint8_t* src_vu, - uint8_t* dst_rgb24, - const struct YuvConstants* yuvconstants, - int width); -void NV12ToRGB565Row_SSSE3(const uint8_t* src_y, - const uint8_t* src_uv, - uint8_t* dst_rgb565, - const struct YuvConstants* yuvconstants, - int width); -void NV12ToRGB24Row_AVX2(const uint8_t* src_y, - const uint8_t* src_uv, - uint8_t* dst_rgb24, - const struct YuvConstants* yuvconstants, - int width); -void NV21ToRGB24Row_AVX2(const uint8_t* src_y, - const uint8_t* src_vu, - uint8_t* dst_rgb24, - const struct YuvConstants* yuvconstants, - int width); -void NV21ToYUV24Row_AVX2(const uint8_t* src_y, - const uint8_t* src_vu, - uint8_t* dst_yuv24, - int width); -void NV12ToRGB565Row_AVX2(const uint8_t* src_y, - const uint8_t* src_uv, - uint8_t* dst_rgb565, - const struct YuvConstants* yuvconstants, - int width); -void NV21ToARGBRow_SSSE3(const uint8_t* y_buf, - const uint8_t* vu_buf, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void NV21ToARGBRow_AVX2(const uint8_t* y_buf, - const uint8_t* vu_buf, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void YUY2ToARGBRow_SSSE3(const uint8_t* yuy2_buf, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void UYVYToARGBRow_SSSE3(const uint8_t* uyvy_buf, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void YUY2ToARGBRow_AVX2(const uint8_t* yuy2_buf, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void UYVYToARGBRow_AVX2(const uint8_t* uyvy_buf, - uint8_t* dst_argb, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGBARow_SSSE3(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_rgba, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGB4444Row_SSSE3(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_argb4444, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGB4444Row_AVX2(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_argb4444, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGB1555Row_SSSE3(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_argb1555, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGB1555Row_AVX2(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_argb1555, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGB565Row_SSSE3(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_rgb565, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGB565Row_AVX2(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_rgb565, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGB24Row_SSSE3(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_rgb24, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGB24Row_AVX2(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_rgb24, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGBRow_Any_AVX2(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGBARow_Any_AVX2(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I444ToARGBRow_Any_SSSE3(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I444ToARGBRow_Any_AVX2(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGBRow_Any_SSSE3(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToAR30Row_Any_SSSE3(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I210ToAR30Row_Any_SSSE3(const uint16_t* y_buf, - const uint16_t* u_buf, - const uint16_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I210ToARGBRow_Any_SSSE3(const uint16_t* y_buf, - const uint16_t* u_buf, - const uint16_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToAR30Row_Any_AVX2(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I210ToARGBRow_Any_AVX2(const uint16_t* y_buf, - const uint16_t* u_buf, - const uint16_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I210ToAR30Row_Any_AVX2(const uint16_t* y_buf, - const uint16_t* u_buf, - const uint16_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422AlphaToARGBRow_Any_SSSE3(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - const uint8_t* a_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422AlphaToARGBRow_Any_AVX2(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - const uint8_t* a_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void NV12ToARGBRow_Any_SSSE3(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void NV12ToARGBRow_Any_AVX2(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void NV21ToARGBRow_Any_SSSE3(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void NV21ToARGBRow_Any_AVX2(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void NV12ToRGB24Row_Any_SSSE3(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void NV21ToRGB24Row_Any_SSSE3(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void NV12ToRGB24Row_Any_AVX2(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void NV21ToRGB24Row_Any_AVX2(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void NV21ToYUV24Row_Any_AVX2(const uint8_t* src_y, - const uint8_t* src_vu, - uint8_t* dst_yuv24, - int width); -void NV12ToRGB565Row_Any_SSSE3(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void NV12ToRGB565Row_Any_AVX2(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void YUY2ToARGBRow_Any_SSSE3(const uint8_t* src_ptr, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void UYVYToARGBRow_Any_SSSE3(const uint8_t* src_ptr, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void YUY2ToARGBRow_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void UYVYToARGBRow_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGBARow_Any_SSSE3(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGB4444Row_Any_SSSE3(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGB4444Row_Any_AVX2(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGB1555Row_Any_SSSE3(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGB1555Row_Any_AVX2(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGB565Row_Any_SSSE3(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGB565Row_Any_AVX2(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGB24Row_Any_SSSE3(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGB24Row_Any_AVX2(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); - -void I400ToARGBRow_C(const uint8_t* src_y, uint8_t* rgb_buf, int width); -void I400ToARGBRow_SSE2(const uint8_t* y_buf, uint8_t* dst_argb, int width); -void I400ToARGBRow_AVX2(const uint8_t* y_buf, uint8_t* dst_argb, int width); -void I400ToARGBRow_NEON(const uint8_t* src_y, uint8_t* dst_argb, int width); -void I400ToARGBRow_MSA(const uint8_t* src_y, uint8_t* dst_argb, int width); -void I400ToARGBRow_MMI(const uint8_t* src_y, uint8_t* dst_argb, int width); -void I400ToARGBRow_Any_SSE2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void I400ToARGBRow_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void I400ToARGBRow_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void I400ToARGBRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void I400ToARGBRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); - -// ARGB preattenuated alpha blend. -void ARGBBlendRow_SSSE3(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); -void ARGBBlendRow_NEON(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); -void ARGBBlendRow_MSA(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); -void ARGBBlendRow_MMI(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); -void ARGBBlendRow_C(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); - -// Unattenuated planar alpha blend. -void BlendPlaneRow_SSSE3(const uint8_t* src0, - const uint8_t* src1, - const uint8_t* alpha, - uint8_t* dst, - int width); -void BlendPlaneRow_Any_SSSE3(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - int width); -void BlendPlaneRow_AVX2(const uint8_t* src0, - const uint8_t* src1, - const uint8_t* alpha, - uint8_t* dst, - int width); -void BlendPlaneRow_Any_AVX2(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - int width); -void BlendPlaneRow_MMI(const uint8_t* src0, - const uint8_t* src1, - const uint8_t* alpha, - uint8_t* dst, - int width); -void BlendPlaneRow_Any_MMI(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - int width); -void BlendPlaneRow_C(const uint8_t* src0, - const uint8_t* src1, - const uint8_t* alpha, - uint8_t* dst, - int width); - -// ARGB multiply images. Same API as Blend, but these require -// pointer and width alignment for SSE2. -void ARGBMultiplyRow_C(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); -void ARGBMultiplyRow_SSE2(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); -void ARGBMultiplyRow_Any_SSE2(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void ARGBMultiplyRow_AVX2(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); -void ARGBMultiplyRow_Any_AVX2(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void ARGBMultiplyRow_NEON(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); -void ARGBMultiplyRow_Any_NEON(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void ARGBMultiplyRow_MSA(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); -void ARGBMultiplyRow_Any_MSA(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void ARGBMultiplyRow_MMI(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); -void ARGBMultiplyRow_Any_MMI(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); - -// ARGB add images. -void ARGBAddRow_C(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); -void ARGBAddRow_SSE2(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); -void ARGBAddRow_Any_SSE2(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void ARGBAddRow_AVX2(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); -void ARGBAddRow_Any_AVX2(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void ARGBAddRow_NEON(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); -void ARGBAddRow_Any_NEON(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void ARGBAddRow_MSA(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); -void ARGBAddRow_Any_MSA(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void ARGBAddRow_MMI(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); -void ARGBAddRow_Any_MMI(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); - -// ARGB subtract images. Same API as Blend, but these require -// pointer and width alignment for SSE2. -void ARGBSubtractRow_C(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); -void ARGBSubtractRow_SSE2(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); -void ARGBSubtractRow_Any_SSE2(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void ARGBSubtractRow_AVX2(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); -void ARGBSubtractRow_Any_AVX2(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void ARGBSubtractRow_NEON(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); -void ARGBSubtractRow_Any_NEON(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void ARGBSubtractRow_MSA(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); -void ARGBSubtractRow_Any_MSA(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void ARGBSubtractRow_MMI(const uint8_t* src_argb0, - const uint8_t* src_argb1, - uint8_t* dst_argb, - int width); -void ARGBSubtractRow_Any_MMI(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); - -void ARGBToRGB24Row_Any_SSSE3(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToRAWRow_Any_SSSE3(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToRGB565Row_Any_SSE2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToARGB1555Row_Any_SSE2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToARGB4444Row_Any_SSE2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ABGRToAR30Row_Any_SSSE3(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToAR30Row_Any_SSSE3(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToRAWRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void ARGBToRGB24Row_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToRGB24Row_Any_AVX512VBMI(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToRGB565DitherRow_Any_SSE2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - const uint32_t param, - int width); -void ARGBToRGB565DitherRow_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - const uint32_t param, - int width); - -void ARGBToRGB565Row_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToARGB1555Row_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToARGB4444Row_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ABGRToAR30Row_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToAR30Row_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); - -void ARGBToRGB24Row_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToRAWRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void ARGBToRGB565Row_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToARGB1555Row_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToARGB4444Row_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToRGB565DitherRow_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_ptr, - const uint32_t param, - int width); -void ARGBToRGB24Row_Any_MSA(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToRAWRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void ARGBToRGB565Row_Any_MSA(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToARGB1555Row_Any_MSA(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToARGB4444Row_Any_MSA(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToRGB565DitherRow_Any_MSA(const uint8_t* src_ptr, - uint8_t* dst_ptr, - const uint32_t param, - int width); - -void ARGBToRGB24Row_Any_MMI(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToRAWRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void ARGBToRGB565Row_Any_MMI(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToARGB1555Row_Any_MMI(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToARGB4444Row_Any_MMI(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBToRGB565DitherRow_Any_MMI(const uint8_t* src_ptr, - uint8_t* dst_ptr, - const uint32_t param, - int width); - -void I444ToARGBRow_Any_NEON(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGBRow_Any_NEON(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422AlphaToARGBRow_Any_NEON(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - const uint8_t* a_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGBARow_Any_NEON(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGB24Row_Any_NEON(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGB4444Row_Any_NEON(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGB1555Row_Any_NEON(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGB565Row_Any_NEON(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void NV12ToARGBRow_Any_NEON(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void NV21ToARGBRow_Any_NEON(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void NV12ToRGB24Row_Any_NEON(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void NV21ToRGB24Row_Any_NEON(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void NV21ToYUV24Row_Any_NEON(const uint8_t* src_y, - const uint8_t* src_vu, - uint8_t* dst_yuv24, - int width); -void NV12ToRGB565Row_Any_NEON(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void YUY2ToARGBRow_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void UYVYToARGBRow_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I444ToARGBRow_Any_MSA(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGBRow_Any_MSA(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGBARow_Any_MSA(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422AlphaToARGBRow_Any_MSA(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - const uint8_t* a_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGB24Row_Any_MSA(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToRGB565Row_Any_MSA(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGB4444Row_Any_MSA(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void I422ToARGB1555Row_Any_MSA(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void NV12ToARGBRow_Any_MSA(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void NV12ToRGB565Row_Any_MSA(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void NV21ToARGBRow_Any_MSA(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void YUY2ToARGBRow_Any_MSA(const uint8_t* src_ptr, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); -void UYVYToARGBRow_Any_MSA(const uint8_t* src_ptr, - uint8_t* dst_ptr, - const struct YuvConstants* yuvconstants, - int width); - -void YUY2ToYRow_AVX2(const uint8_t* src_yuy2, uint8_t* dst_y, int width); -void YUY2ToUVRow_AVX2(const uint8_t* src_yuy2, - int stride_yuy2, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void YUY2ToUV422Row_AVX2(const uint8_t* src_yuy2, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void YUY2ToYRow_SSE2(const uint8_t* src_yuy2, uint8_t* dst_y, int width); -void YUY2ToUVRow_SSE2(const uint8_t* src_yuy2, - int stride_yuy2, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void YUY2ToUV422Row_SSE2(const uint8_t* src_yuy2, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void YUY2ToYRow_NEON(const uint8_t* src_yuy2, uint8_t* dst_y, int width); -void YUY2ToUVRow_NEON(const uint8_t* src_yuy2, - int stride_yuy2, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void YUY2ToUV422Row_NEON(const uint8_t* src_yuy2, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void YUY2ToYRow_MSA(const uint8_t* src_yuy2, uint8_t* dst_y, int width); -void YUY2ToYRow_MMI(const uint8_t* src_yuy2, uint8_t* dst_y, int width); -void YUY2ToUVRow_MSA(const uint8_t* src_yuy2, - int src_stride_yuy2, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void YUY2ToUVRow_MMI(const uint8_t* src_yuy2, - int src_stride_yuy2, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void YUY2ToUV422Row_MSA(const uint8_t* src_yuy2, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void YUY2ToUV422Row_MMI(const uint8_t* src_yuy2, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void YUY2ToYRow_C(const uint8_t* src_yuy2, uint8_t* dst_y, int width); -void YUY2ToUVRow_C(const uint8_t* src_yuy2, - int src_stride_yuy2, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void YUY2ToUV422Row_C(const uint8_t* src_yuy2, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void YUY2ToYRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void YUY2ToUVRow_Any_AVX2(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void YUY2ToUV422Row_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void YUY2ToYRow_Any_SSE2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void YUY2ToUVRow_Any_SSE2(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void YUY2ToUV422Row_Any_SSE2(const uint8_t* src_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void YUY2ToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void YUY2ToUVRow_Any_NEON(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void YUY2ToUV422Row_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void YUY2ToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void YUY2ToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void YUY2ToUVRow_Any_MSA(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void YUY2ToUVRow_Any_MMI(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void YUY2ToUV422Row_Any_MSA(const uint8_t* src_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void YUY2ToUV422Row_Any_MMI(const uint8_t* src_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToYRow_AVX2(const uint8_t* src_uyvy, uint8_t* dst_y, int width); -void UYVYToUVRow_AVX2(const uint8_t* src_uyvy, - int stride_uyvy, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToUV422Row_AVX2(const uint8_t* src_uyvy, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToYRow_SSE2(const uint8_t* src_uyvy, uint8_t* dst_y, int width); -void UYVYToUVRow_SSE2(const uint8_t* src_uyvy, - int stride_uyvy, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToUV422Row_SSE2(const uint8_t* src_uyvy, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToYRow_AVX2(const uint8_t* src_uyvy, uint8_t* dst_y, int width); -void UYVYToUVRow_AVX2(const uint8_t* src_uyvy, - int stride_uyvy, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToUV422Row_AVX2(const uint8_t* src_uyvy, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToYRow_NEON(const uint8_t* src_uyvy, uint8_t* dst_y, int width); -void UYVYToUVRow_NEON(const uint8_t* src_uyvy, - int stride_uyvy, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToUV422Row_NEON(const uint8_t* src_uyvy, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToYRow_MSA(const uint8_t* src_uyvy, uint8_t* dst_y, int width); -void UYVYToYRow_MMI(const uint8_t* src_uyvy, uint8_t* dst_y, int width); -void UYVYToUVRow_MSA(const uint8_t* src_uyvy, - int src_stride_uyvy, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToUVRow_MMI(const uint8_t* src_uyvy, - int src_stride_uyvy, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToUV422Row_MSA(const uint8_t* src_uyvy, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToUV422Row_MMI(const uint8_t* src_uyvy, - uint8_t* dst_u, - uint8_t* dst_v, - int width); - -void UYVYToYRow_C(const uint8_t* src_uyvy, uint8_t* dst_y, int width); -void UYVYToUVRow_C(const uint8_t* src_uyvy, - int src_stride_uyvy, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToUV422Row_C(const uint8_t* src_uyvy, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToYRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void UYVYToUVRow_Any_AVX2(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToUV422Row_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToYRow_Any_SSE2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void UYVYToUVRow_Any_SSE2(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToUV422Row_Any_SSE2(const uint8_t* src_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void UYVYToUVRow_Any_NEON(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToUV422Row_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void UYVYToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width); -void UYVYToUVRow_Any_MSA(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToUVRow_Any_MMI(const uint8_t* src_ptr, - int src_stride_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToUV422Row_Any_MSA(const uint8_t* src_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UYVYToUV422Row_Any_MMI(const uint8_t* src_ptr, - uint8_t* dst_u, - uint8_t* dst_v, - int width); -void UVToVURow_C(const uint8_t* src_uv, uint8_t* dst_vu, int width); -void UVToVURow_NEON(const uint8_t* src_uv, uint8_t* dst_vu, int width); -void UVToVURow_Any_NEON(const uint8_t* src_uv, uint8_t* dst_vu, int width); -void AYUVToYRow_C(const uint8_t* src_ayuv, uint8_t* dst_y, int width); -void AYUVToUVRow_C(const uint8_t* src_ayuv, - int stride_ayuv, - uint8_t* dst_uv, - int width); -void AYUVToVURow_C(const uint8_t* src_ayuv, - int stride_ayuv, - uint8_t* dst_vu, - int width); -void AYUVToYRow_NEON(const uint8_t* src_ayuv, uint8_t* dst_y, int width); -void AYUVToUVRow_NEON(const uint8_t* src_ayuv, - int stride_ayuv, - uint8_t* dst_uv, - int width); -void AYUVToVURow_NEON(const uint8_t* src_ayuv, - int stride_ayuv, - uint8_t* dst_vu, - int width); -void AYUVToYRow_Any_NEON(const uint8_t* src_ayuv, uint8_t* dst_y, int width); -void AYUVToUVRow_Any_NEON(const uint8_t* src_ayuv, - int stride_ayuv, - uint8_t* dst_uv, - int width); -void AYUVToVURow_Any_NEON(const uint8_t* src_ayuv, - int stride_ayuv, - uint8_t* dst_vu, - int width); - -void I422ToYUY2Row_C(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_frame, - int width); -void I422ToUYVYRow_C(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_frame, - int width); -void I422ToYUY2Row_SSE2(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_yuy2, - int width); -void I422ToUYVYRow_SSE2(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_uyvy, - int width); -void I422ToYUY2Row_Any_SSE2(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - int width); -void I422ToUYVYRow_Any_SSE2(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - int width); -void I422ToYUY2Row_AVX2(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_yuy2, - int width); -void I422ToUYVYRow_AVX2(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_uyvy, - int width); -void I422ToYUY2Row_Any_AVX2(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - int width); -void I422ToUYVYRow_Any_AVX2(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - int width); -void I422ToYUY2Row_NEON(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_yuy2, - int width); -void I422ToUYVYRow_NEON(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_uyvy, - int width); -void I422ToYUY2Row_Any_NEON(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - int width); -void I422ToUYVYRow_Any_NEON(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - int width); -void I422ToYUY2Row_MSA(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_yuy2, - int width); -void I422ToYUY2Row_MMI(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_yuy2, - int width); -void I422ToUYVYRow_MSA(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_uyvy, - int width); -void I422ToUYVYRow_MMI(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - uint8_t* dst_uyvy, - int width); -void I422ToYUY2Row_Any_MSA(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - int width); -void I422ToYUY2Row_Any_MMI(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - int width); -void I422ToUYVYRow_Any_MSA(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - int width); -void I422ToUYVYRow_Any_MMI(const uint8_t* y_buf, - const uint8_t* u_buf, - const uint8_t* v_buf, - uint8_t* dst_ptr, - int width); - -// Effects related row functions. -void ARGBAttenuateRow_C(const uint8_t* src_argb, uint8_t* dst_argb, int width); -void ARGBAttenuateRow_SSSE3(const uint8_t* src_argb, - uint8_t* dst_argb, - int width); -void ARGBAttenuateRow_AVX2(const uint8_t* src_argb, - uint8_t* dst_argb, - int width); -void ARGBAttenuateRow_NEON(const uint8_t* src_argb, - uint8_t* dst_argb, - int width); -void ARGBAttenuateRow_MSA(const uint8_t* src_argb, - uint8_t* dst_argb, - int width); -void ARGBAttenuateRow_MMI(const uint8_t* src_argb, - uint8_t* dst_argb, - int width); -void ARGBAttenuateRow_Any_SSSE3(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBAttenuateRow_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBAttenuateRow_Any_NEON(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBAttenuateRow_Any_MSA(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBAttenuateRow_Any_MMI(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); - -// Inverse table for unattenuate, shared by C and SSE2. -extern const uint32_t fixed_invtbl8[256]; -void ARGBUnattenuateRow_C(const uint8_t* src_argb, - uint8_t* dst_argb, - int width); -void ARGBUnattenuateRow_SSE2(const uint8_t* src_argb, - uint8_t* dst_argb, - int width); -void ARGBUnattenuateRow_AVX2(const uint8_t* src_argb, - uint8_t* dst_argb, - int width); -void ARGBUnattenuateRow_Any_SSE2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); -void ARGBUnattenuateRow_Any_AVX2(const uint8_t* src_ptr, - uint8_t* dst_ptr, - int width); - -void ARGBGrayRow_C(const uint8_t* src_argb, uint8_t* dst_argb, int width); -void ARGBGrayRow_SSSE3(const uint8_t* src_argb, uint8_t* dst_argb, int width); -void ARGBGrayRow_NEON(const uint8_t* src_argb, uint8_t* dst_argb, int width); -void ARGBGrayRow_MSA(const uint8_t* src_argb, uint8_t* dst_argb, int width); -void ARGBGrayRow_MMI(const uint8_t* src_argb, uint8_t* dst_argb, int width); - -void ARGBSepiaRow_C(uint8_t* dst_argb, int width); -void ARGBSepiaRow_SSSE3(uint8_t* dst_argb, int width); -void ARGBSepiaRow_NEON(uint8_t* dst_argb, int width); -void ARGBSepiaRow_MSA(uint8_t* dst_argb, int width); -void ARGBSepiaRow_MMI(uint8_t* dst_argb, int width); - -void ARGBColorMatrixRow_C(const uint8_t* src_argb, - uint8_t* dst_argb, - const int8_t* matrix_argb, - int width); -void ARGBColorMatrixRow_SSSE3(const uint8_t* src_argb, - uint8_t* dst_argb, - const int8_t* matrix_argb, - int width); -void ARGBColorMatrixRow_NEON(const uint8_t* src_argb, - uint8_t* dst_argb, - const int8_t* matrix_argb, - int width); -void ARGBColorMatrixRow_MSA(const uint8_t* src_argb, - uint8_t* dst_argb, - const int8_t* matrix_argb, - int width); -void ARGBColorMatrixRow_MMI(const uint8_t* src_argb, - uint8_t* dst_argb, - const int8_t* matrix_argb, - int width); - -void ARGBColorTableRow_C(uint8_t* dst_argb, - const uint8_t* table_argb, - int width); -void ARGBColorTableRow_X86(uint8_t* dst_argb, - const uint8_t* table_argb, - int width); - -void RGBColorTableRow_C(uint8_t* dst_argb, - const uint8_t* table_argb, - int width); -void RGBColorTableRow_X86(uint8_t* dst_argb, - const uint8_t* table_argb, - int width); - -void ARGBQuantizeRow_C(uint8_t* dst_argb, - int scale, - int interval_size, - int interval_offset, - int width); -void ARGBQuantizeRow_SSE2(uint8_t* dst_argb, - int scale, - int interval_size, - int interval_offset, - int width); -void ARGBQuantizeRow_NEON(uint8_t* dst_argb, - int scale, - int interval_size, - int interval_offset, - int width); -void ARGBQuantizeRow_MSA(uint8_t* dst_argb, - int scale, - int interval_size, - int interval_offset, - int width); - -void ARGBShadeRow_C(const uint8_t* src_argb, - uint8_t* dst_argb, - int width, - uint32_t value); -void ARGBShadeRow_SSE2(const uint8_t* src_argb, - uint8_t* dst_argb, - int width, - uint32_t value); -void ARGBShadeRow_NEON(const uint8_t* src_argb, - uint8_t* dst_argb, - int width, - uint32_t value); -void ARGBShadeRow_MSA(const uint8_t* src_argb, - uint8_t* dst_argb, - int width, - uint32_t value); -void ARGBShadeRow_MMI(const uint8_t* src_argb, - uint8_t* dst_argb, - int width, - uint32_t value); - -// Used for blur. -void CumulativeSumToAverageRow_SSE2(const int32_t* topleft, - const int32_t* botleft, - int width, - int area, - uint8_t* dst, - int count); -void ComputeCumulativeSumRow_SSE2(const uint8_t* row, - int32_t* cumsum, - const int32_t* previous_cumsum, - int width); - -void ComputeCumulativeSumRow_MMI(const uint8_t* row, - int32_t* cumsum, - const int32_t* previous_cumsum, - int width); - -void CumulativeSumToAverageRow_C(const int32_t* tl, - const int32_t* bl, - int w, - int area, - uint8_t* dst, - int count); -void ComputeCumulativeSumRow_C(const uint8_t* row, - int32_t* cumsum, - const int32_t* previous_cumsum, - int width); - -LIBYUV_API -void ARGBAffineRow_C(const uint8_t* src_argb, - int src_argb_stride, - uint8_t* dst_argb, - const float* uv_dudv, - int width); -LIBYUV_API -void ARGBAffineRow_SSE2(const uint8_t* src_argb, - int src_argb_stride, - uint8_t* dst_argb, - const float* src_dudv, - int width); - -// Used for I420Scale, ARGBScale, and ARGBInterpolate. -void InterpolateRow_C(uint8_t* dst_ptr, - const uint8_t* src_ptr, - ptrdiff_t src_stride, - int width, - int source_y_fraction); -void InterpolateRow_SSSE3(uint8_t* dst_ptr, - const uint8_t* src_ptr, - ptrdiff_t src_stride, - int dst_width, - int source_y_fraction); -void InterpolateRow_AVX2(uint8_t* dst_ptr, - const uint8_t* src_ptr, - ptrdiff_t src_stride, - int dst_width, - int source_y_fraction); -void InterpolateRow_NEON(uint8_t* dst_ptr, - const uint8_t* src_ptr, - ptrdiff_t src_stride, - int dst_width, - int source_y_fraction); -void InterpolateRow_MSA(uint8_t* dst_ptr, - const uint8_t* src_ptr, - ptrdiff_t src_stride, - int width, - int source_y_fraction); -void InterpolateRow_MMI(uint8_t* dst_ptr, - const uint8_t* src_ptr, - ptrdiff_t src_stride, - int width, - int source_y_fraction); -void InterpolateRow_Any_NEON(uint8_t* dst_ptr, - const uint8_t* src_ptr, - ptrdiff_t src_stride_ptr, - int width, - int source_y_fraction); -void InterpolateRow_Any_SSSE3(uint8_t* dst_ptr, - const uint8_t* src_ptr, - ptrdiff_t src_stride_ptr, - int width, - int source_y_fraction); -void InterpolateRow_Any_AVX2(uint8_t* dst_ptr, - const uint8_t* src_ptr, - ptrdiff_t src_stride_ptr, - int width, - int source_y_fraction); -void InterpolateRow_Any_MSA(uint8_t* dst_ptr, - const uint8_t* src_ptr, - ptrdiff_t src_stride_ptr, - int width, - int source_y_fraction); -void InterpolateRow_Any_MMI(uint8_t* dst_ptr, - const uint8_t* src_ptr, - ptrdiff_t src_stride_ptr, - int width, - int source_y_fraction); - -void InterpolateRow_16_C(uint16_t* dst_ptr, - const uint16_t* src_ptr, - ptrdiff_t src_stride, - int width, - int source_y_fraction); - -// Sobel images. -void SobelXRow_C(const uint8_t* src_y0, - const uint8_t* src_y1, - const uint8_t* src_y2, - uint8_t* dst_sobelx, - int width); -void SobelXRow_SSE2(const uint8_t* src_y0, - const uint8_t* src_y1, - const uint8_t* src_y2, - uint8_t* dst_sobelx, - int width); -void SobelXRow_NEON(const uint8_t* src_y0, - const uint8_t* src_y1, - const uint8_t* src_y2, - uint8_t* dst_sobelx, - int width); -void SobelXRow_MSA(const uint8_t* src_y0, - const uint8_t* src_y1, - const uint8_t* src_y2, - uint8_t* dst_sobelx, - int width); -void SobelXRow_MMI(const uint8_t* src_y0, - const uint8_t* src_y1, - const uint8_t* src_y2, - uint8_t* dst_sobelx, - int width); -void SobelYRow_C(const uint8_t* src_y0, - const uint8_t* src_y1, - uint8_t* dst_sobely, - int width); -void SobelYRow_SSE2(const uint8_t* src_y0, - const uint8_t* src_y1, - uint8_t* dst_sobely, - int width); -void SobelYRow_NEON(const uint8_t* src_y0, - const uint8_t* src_y1, - uint8_t* dst_sobely, - int width); -void SobelYRow_MSA(const uint8_t* src_y0, - const uint8_t* src_y1, - uint8_t* dst_sobely, - int width); -void SobelYRow_MMI(const uint8_t* src_y0, - const uint8_t* src_y1, - uint8_t* dst_sobely, - int width); -void SobelRow_C(const uint8_t* src_sobelx, - const uint8_t* src_sobely, - uint8_t* dst_argb, - int width); -void SobelRow_SSE2(const uint8_t* src_sobelx, - const uint8_t* src_sobely, - uint8_t* dst_argb, - int width); -void SobelRow_NEON(const uint8_t* src_sobelx, - const uint8_t* src_sobely, - uint8_t* dst_argb, - int width); -void SobelRow_MSA(const uint8_t* src_sobelx, - const uint8_t* src_sobely, - uint8_t* dst_argb, - int width); -void SobelRow_MMI(const uint8_t* src_sobelx, - const uint8_t* src_sobely, - uint8_t* dst_argb, - int width); -void SobelToPlaneRow_C(const uint8_t* src_sobelx, - const uint8_t* src_sobely, - uint8_t* dst_y, - int width); -void SobelToPlaneRow_SSE2(const uint8_t* src_sobelx, - const uint8_t* src_sobely, - uint8_t* dst_y, - int width); -void SobelToPlaneRow_NEON(const uint8_t* src_sobelx, - const uint8_t* src_sobely, - uint8_t* dst_y, - int width); -void SobelToPlaneRow_MSA(const uint8_t* src_sobelx, - const uint8_t* src_sobely, - uint8_t* dst_y, - int width); -void SobelToPlaneRow_MMI(const uint8_t* src_sobelx, - const uint8_t* src_sobely, - uint8_t* dst_y, - int width); -void SobelXYRow_C(const uint8_t* src_sobelx, - const uint8_t* src_sobely, - uint8_t* dst_argb, - int width); -void SobelXYRow_SSE2(const uint8_t* src_sobelx, - const uint8_t* src_sobely, - uint8_t* dst_argb, - int width); -void SobelXYRow_NEON(const uint8_t* src_sobelx, - const uint8_t* src_sobely, - uint8_t* dst_argb, - int width); -void SobelXYRow_MSA(const uint8_t* src_sobelx, - const uint8_t* src_sobely, - uint8_t* dst_argb, - int width); -void SobelXYRow_MMI(const uint8_t* src_sobelx, - const uint8_t* src_sobely, - uint8_t* dst_argb, - int width); -void SobelRow_Any_SSE2(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void SobelRow_Any_NEON(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void SobelRow_Any_MSA(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void SobelRow_Any_MMI(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void SobelToPlaneRow_Any_SSE2(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void SobelToPlaneRow_Any_NEON(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void SobelToPlaneRow_Any_MSA(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void SobelToPlaneRow_Any_MMI(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void SobelXYRow_Any_SSE2(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void SobelXYRow_Any_NEON(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void SobelXYRow_Any_MSA(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); -void SobelXYRow_Any_MMI(const uint8_t* y_buf, - const uint8_t* uv_buf, - uint8_t* dst_ptr, - int width); - -void ARGBPolynomialRow_C(const uint8_t* src_argb, - uint8_t* dst_argb, - const float* poly, - int width); -void ARGBPolynomialRow_SSE2(const uint8_t* src_argb, - uint8_t* dst_argb, - const float* poly, - int width); -void ARGBPolynomialRow_AVX2(const uint8_t* src_argb, - uint8_t* dst_argb, - const float* poly, - int width); - -// Scale and convert to half float. -void HalfFloatRow_C(const uint16_t* src, uint16_t* dst, float scale, int width); -void HalfFloatRow_SSE2(const uint16_t* src, - uint16_t* dst, - float scale, - int width); -void HalfFloatRow_Any_SSE2(const uint16_t* src_ptr, - uint16_t* dst_ptr, - float param, - int width); -void HalfFloatRow_AVX2(const uint16_t* src, - uint16_t* dst, - float scale, - int width); -void HalfFloatRow_Any_AVX2(const uint16_t* src_ptr, - uint16_t* dst_ptr, - float param, - int width); -void HalfFloatRow_F16C(const uint16_t* src, - uint16_t* dst, - float scale, - int width); -void HalfFloatRow_Any_F16C(const uint16_t* src, - uint16_t* dst, - float scale, - int width); -void HalfFloat1Row_F16C(const uint16_t* src, - uint16_t* dst, - float scale, - int width); -void HalfFloat1Row_Any_F16C(const uint16_t* src, - uint16_t* dst, - float scale, - int width); -void HalfFloatRow_NEON(const uint16_t* src, - uint16_t* dst, - float scale, - int width); -void HalfFloatRow_Any_NEON(const uint16_t* src_ptr, - uint16_t* dst_ptr, - float param, - int width); -void HalfFloat1Row_NEON(const uint16_t* src, - uint16_t* dst, - float scale, - int width); -void HalfFloat1Row_Any_NEON(const uint16_t* src_ptr, - uint16_t* dst_ptr, - float param, - int width); -void HalfFloatRow_MSA(const uint16_t* src, - uint16_t* dst, - float scale, - int width); -void HalfFloatRow_Any_MSA(const uint16_t* src_ptr, - uint16_t* dst_ptr, - float param, - int width); -void ByteToFloatRow_C(const uint8_t* src, float* dst, float scale, int width); -void ByteToFloatRow_NEON(const uint8_t* src, - float* dst, - float scale, - int width); -void ByteToFloatRow_Any_NEON(const uint8_t* src_ptr, - float* dst_ptr, - float param, - int width); - -void ARGBLumaColorTableRow_C(const uint8_t* src_argb, - uint8_t* dst_argb, - int width, - const uint8_t* luma, - uint32_t lumacoeff); -void ARGBLumaColorTableRow_SSSE3(const uint8_t* src_argb, - uint8_t* dst_argb, - int width, - const uint8_t* luma, - uint32_t lumacoeff); - -float ScaleMaxSamples_C(const float* src, float* dst, float scale, int width); -float ScaleMaxSamples_NEON(const float* src, - float* dst, - float scale, - int width); -float ScaleSumSamples_C(const float* src, float* dst, float scale, int width); -float ScaleSumSamples_NEON(const float* src, - float* dst, - float scale, - int width); -void ScaleSamples_C(const float* src, float* dst, float scale, int width); -void ScaleSamples_NEON(const float* src, float* dst, float scale, int width); - -void FloatDivToByteRow_C(const float* src_weights, - const float* src_values, - uint8_t* dst_out, - uint8_t* dst_mask, - int width); -void FloatDivToByteRow_NEON(const float* src_weights, - const float* src_values, - uint8_t* dst_out, - uint8_t* dst_mask, - int width); - -#ifdef __cplusplus -} // extern "C" -} // namespace libyuv -#endif - -#endif // INCLUDE_LIBYUV_ROW_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale.h deleted file mode 100644 index 23ba1634f7..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale.h +++ /dev/null @@ -1,179 +0,0 @@ -/* - * Copyright 2011 The LibYuv Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef INCLUDE_LIBYUV_SCALE_H_ -#define INCLUDE_LIBYUV_SCALE_H_ - -#include "libyuv/basic_types.h" - -#ifdef __cplusplus -namespace libyuv { -extern "C" { -#endif - -// Supported filtering. -typedef enum FilterMode { - kFilterNone = 0, // Point sample; Fastest. - kFilterLinear = 1, // Filter horizontally only. - kFilterBilinear = 2, // Faster than box, but lower quality scaling down. - kFilterBox = 3 // Highest quality. -} FilterModeEnum; - -// Scale a YUV plane. -LIBYUV_API -void ScalePlane(const uint8_t* src, - int src_stride, - int src_width, - int src_height, - uint8_t* dst, - int dst_stride, - int dst_width, - int dst_height, - enum FilterMode filtering); - -LIBYUV_API -void ScalePlane_16(const uint16_t* src, - int src_stride, - int src_width, - int src_height, - uint16_t* dst, - int dst_stride, - int dst_width, - int dst_height, - enum FilterMode filtering); - -// Scales a YUV 4:2:0 image from the src width and height to the -// dst width and height. -// If filtering is kFilterNone, a simple nearest-neighbor algorithm is -// used. This produces basic (blocky) quality at the fastest speed. -// If filtering is kFilterBilinear, interpolation is used to produce a better -// quality image, at the expense of speed. -// If filtering is kFilterBox, averaging is used to produce ever better -// quality image, at further expense of speed. -// Returns 0 if successful. - -LIBYUV_API -int I420Scale(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - int src_width, - int src_height, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int dst_width, - int dst_height, - enum FilterMode filtering); - -LIBYUV_API -int I420Scale_16(const uint16_t* src_y, - int src_stride_y, - const uint16_t* src_u, - int src_stride_u, - const uint16_t* src_v, - int src_stride_v, - int src_width, - int src_height, - uint16_t* dst_y, - int dst_stride_y, - uint16_t* dst_u, - int dst_stride_u, - uint16_t* dst_v, - int dst_stride_v, - int dst_width, - int dst_height, - enum FilterMode filtering); - -// Scales a YUV 4:4:4 image from the src width and height to the -// dst width and height. -// If filtering is kFilterNone, a simple nearest-neighbor algorithm is -// used. This produces basic (blocky) quality at the fastest speed. -// If filtering is kFilterBilinear, interpolation is used to produce a better -// quality image, at the expense of speed. -// If filtering is kFilterBox, averaging is used to produce ever better -// quality image, at further expense of speed. -// Returns 0 if successful. - -LIBYUV_API -int I444Scale(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - int src_width, - int src_height, - uint8_t* dst_y, - int dst_stride_y, - uint8_t* dst_u, - int dst_stride_u, - uint8_t* dst_v, - int dst_stride_v, - int dst_width, - int dst_height, - enum FilterMode filtering); - -LIBYUV_API -int I444Scale_16(const uint16_t* src_y, - int src_stride_y, - const uint16_t* src_u, - int src_stride_u, - const uint16_t* src_v, - int src_stride_v, - int src_width, - int src_height, - uint16_t* dst_y, - int dst_stride_y, - uint16_t* dst_u, - int dst_stride_u, - uint16_t* dst_v, - int dst_stride_v, - int dst_width, - int dst_height, - enum FilterMode filtering); - -#ifdef __cplusplus -// Legacy API. Deprecated. -LIBYUV_API -int Scale(const uint8_t* src_y, - const uint8_t* src_u, - const uint8_t* src_v, - int src_stride_y, - int src_stride_u, - int src_stride_v, - int src_width, - int src_height, - uint8_t* dst_y, - uint8_t* dst_u, - uint8_t* dst_v, - int dst_stride_y, - int dst_stride_u, - int dst_stride_v, - int dst_width, - int dst_height, - LIBYUV_BOOL interpolate); - -// For testing, allow disabling of specialized scalers. -LIBYUV_API -void SetUseReferenceImpl(LIBYUV_BOOL use); -#endif // __cplusplus - -#ifdef __cplusplus -} // extern "C" -} // namespace libyuv -#endif - -#endif // INCLUDE_LIBYUV_SCALE_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale_argb.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale_argb.h deleted file mode 100644 index 7641f18e34..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale_argb.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2012 The LibYuv Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef INCLUDE_LIBYUV_SCALE_ARGB_H_ -#define INCLUDE_LIBYUV_SCALE_ARGB_H_ - -#include "libyuv/basic_types.h" -#include "libyuv/scale.h" // For FilterMode - -#ifdef __cplusplus -namespace libyuv { -extern "C" { -#endif - -LIBYUV_API -int ARGBScale(const uint8_t* src_argb, - int src_stride_argb, - int src_width, - int src_height, - uint8_t* dst_argb, - int dst_stride_argb, - int dst_width, - int dst_height, - enum FilterMode filtering); - -// Clipped scale takes destination rectangle coordinates for clip values. -LIBYUV_API -int ARGBScaleClip(const uint8_t* src_argb, - int src_stride_argb, - int src_width, - int src_height, - uint8_t* dst_argb, - int dst_stride_argb, - int dst_width, - int dst_height, - int clip_x, - int clip_y, - int clip_width, - int clip_height, - enum FilterMode filtering); - -// Scale with YUV conversion to ARGB and clipping. -LIBYUV_API -int YUVToARGBScaleClip(const uint8_t* src_y, - int src_stride_y, - const uint8_t* src_u, - int src_stride_u, - const uint8_t* src_v, - int src_stride_v, - uint32_t src_fourcc, - int src_width, - int src_height, - uint8_t* dst_argb, - int dst_stride_argb, - uint32_t dst_fourcc, - int dst_width, - int dst_height, - int clip_x, - int clip_y, - int clip_width, - int clip_height, - enum FilterMode filtering); - -#ifdef __cplusplus -} // extern "C" -} // namespace libyuv -#endif - -#endif // INCLUDE_LIBYUV_SCALE_ARGB_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale_row.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale_row.h deleted file mode 100644 index 6e207a9c64..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/scale_row.h +++ /dev/null @@ -1,1107 +0,0 @@ -/* - * Copyright 2013 The LibYuv Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef INCLUDE_LIBYUV_SCALE_ROW_H_ -#define INCLUDE_LIBYUV_SCALE_ROW_H_ - -#include "libyuv/basic_types.h" -#include "libyuv/scale.h" - -#ifdef __cplusplus -namespace libyuv { -extern "C" { -#endif - -#if defined(__pnacl__) || defined(__CLR_VER) || \ - (defined(__native_client__) && defined(__x86_64__)) || \ - (defined(__i386__) && !defined(__SSE__) && !defined(__clang__)) -#define LIBYUV_DISABLE_X86 -#endif -#if defined(__native_client__) -#define LIBYUV_DISABLE_NEON -#endif -// MemorySanitizer does not support assembly code yet. http://crbug.com/344505 -#if defined(__has_feature) -#if __has_feature(memory_sanitizer) -#define LIBYUV_DISABLE_X86 -#endif -#endif -// GCC >= 4.7.0 required for AVX2. -#if defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__)) -#if (__GNUC__ > 4) || (__GNUC__ == 4 && (__GNUC_MINOR__ >= 7)) -#define GCC_HAS_AVX2 1 -#endif // GNUC >= 4.7 -#endif // __GNUC__ - -// clang >= 3.4.0 required for AVX2. -#if defined(__clang__) && (defined(__x86_64__) || defined(__i386__)) -#if (__clang_major__ > 3) || (__clang_major__ == 3 && (__clang_minor__ >= 4)) -#define CLANG_HAS_AVX2 1 -#endif // clang >= 3.4 -#endif // __clang__ - -// Visual C 2012 required for AVX2. -#if defined(_M_IX86) && !defined(__clang__) && defined(_MSC_VER) && \ - _MSC_VER >= 1700 -#define VISUALC_HAS_AVX2 1 -#endif // VisualStudio >= 2012 - -// The following are available on all x86 platforms: -#if !defined(LIBYUV_DISABLE_X86) && \ - (defined(_M_IX86) || defined(__x86_64__) || defined(__i386__)) -#define HAS_FIXEDDIV1_X86 -#define HAS_FIXEDDIV_X86 -#define HAS_SCALEADDROW_SSE2 -#define HAS_SCALEARGBCOLS_SSE2 -#define HAS_SCALEARGBCOLSUP2_SSE2 -#define HAS_SCALEARGBFILTERCOLS_SSSE3 -#define HAS_SCALEARGBROWDOWN2_SSE2 -#define HAS_SCALEARGBROWDOWNEVEN_SSE2 -#define HAS_SCALECOLSUP2_SSE2 -#define HAS_SCALEFILTERCOLS_SSSE3 -#define HAS_SCALEROWDOWN2_SSSE3 -#define HAS_SCALEROWDOWN34_SSSE3 -#define HAS_SCALEROWDOWN38_SSSE3 -#define HAS_SCALEROWDOWN4_SSSE3 -#endif - -// The following are available on all x86 platforms, but -// require VS2012, clang 3.4 or gcc 4.7. -// The code supports NaCL but requires a new compiler and validator. -#if !defined(LIBYUV_DISABLE_X86) && \ - (defined(VISUALC_HAS_AVX2) || defined(CLANG_HAS_AVX2) || \ - defined(GCC_HAS_AVX2)) -#define HAS_SCALEADDROW_AVX2 -#define HAS_SCALEROWDOWN2_AVX2 -#define HAS_SCALEROWDOWN4_AVX2 -#endif - -// The following are available on Neon platforms: -#if !defined(LIBYUV_DISABLE_NEON) && \ - (defined(__ARM_NEON__) || defined(LIBYUV_NEON) || defined(__aarch64__)) -#define HAS_SCALEADDROW_NEON -#define HAS_SCALEARGBCOLS_NEON -#define HAS_SCALEARGBFILTERCOLS_NEON -#define HAS_SCALEARGBROWDOWN2_NEON -#define HAS_SCALEARGBROWDOWNEVEN_NEON -#define HAS_SCALEFILTERCOLS_NEON -#define HAS_SCALEROWDOWN2_NEON -#define HAS_SCALEROWDOWN34_NEON -#define HAS_SCALEROWDOWN38_NEON -#define HAS_SCALEROWDOWN4_NEON -#endif - -#if !defined(LIBYUV_DISABLE_MSA) && defined(__mips_msa) -#define HAS_SCALEADDROW_MSA -#define HAS_SCALEARGBCOLS_MSA -#define HAS_SCALEARGBFILTERCOLS_MSA -#define HAS_SCALEARGBROWDOWN2_MSA -#define HAS_SCALEARGBROWDOWNEVEN_MSA -#define HAS_SCALEFILTERCOLS_MSA -#define HAS_SCALEROWDOWN2_MSA -#define HAS_SCALEROWDOWN34_MSA -#define HAS_SCALEROWDOWN38_MSA -#define HAS_SCALEROWDOWN4_MSA -#endif - -#if !defined(LIBYUV_DISABLE_MMI) && defined(_MIPS_ARCH_LOONGSON3A) -#define HAS_FIXEDDIV1_MIPS -#define HAS_FIXEDDIV_MIPS -#define HAS_SCALEADDROW_16_MMI -#define HAS_SCALEADDROW_MMI -#define HAS_SCALEARGBCOLS_MMI -#define HAS_SCALEARGBCOLSUP2_MMI -#define HAS_SCALEARGBROWDOWN2_MMI -#define HAS_SCALEARGBROWDOWNEVEN_MMI -#define HAS_SCALECOLS_16_MMI -#define HAS_SCALECOLS_MMI -#define HAS_SCALEROWDOWN2_16_MMI -#define HAS_SCALEROWDOWN2_MMI -#define HAS_SCALEROWDOWN4_16_MMI -#define HAS_SCALEROWDOWN4_MMI -#endif - -// Scale ARGB vertically with bilinear interpolation. -void ScalePlaneVertical(int src_height, - int dst_width, - int dst_height, - int src_stride, - int dst_stride, - const uint8_t* src_argb, - uint8_t* dst_argb, - int x, - int y, - int dy, - int bpp, - enum FilterMode filtering); - -void ScalePlaneVertical_16(int src_height, - int dst_width, - int dst_height, - int src_stride, - int dst_stride, - const uint16_t* src_argb, - uint16_t* dst_argb, - int x, - int y, - int dy, - int wpp, - enum FilterMode filtering); - -// Simplify the filtering based on scale factors. -enum FilterMode ScaleFilterReduce(int src_width, - int src_height, - int dst_width, - int dst_height, - enum FilterMode filtering); - -// Divide num by div and return as 16.16 fixed point result. -int FixedDiv_C(int num, int div); -int FixedDiv_X86(int num, int div); -int FixedDiv_MIPS(int num, int div); -// Divide num - 1 by div - 1 and return as 16.16 fixed point result. -int FixedDiv1_C(int num, int div); -int FixedDiv1_X86(int num, int div); -int FixedDiv1_MIPS(int num, int div); -#ifdef HAS_FIXEDDIV_X86 -#define FixedDiv FixedDiv_X86 -#define FixedDiv1 FixedDiv1_X86 -#elif defined HAS_FIXEDDIV_MIPS -#define FixedDiv FixedDiv_MIPS -#define FixedDiv1 FixedDiv1_MIPS -#else -#define FixedDiv FixedDiv_C -#define FixedDiv1 FixedDiv1_C -#endif - -// Compute slope values for stepping. -void ScaleSlope(int src_width, - int src_height, - int dst_width, - int dst_height, - enum FilterMode filtering, - int* x, - int* y, - int* dx, - int* dy); - -void ScaleRowDown2_C(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown2_16_C(const uint16_t* src_ptr, - ptrdiff_t src_stride, - uint16_t* dst, - int dst_width); -void ScaleRowDown2Linear_C(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown2Linear_16_C(const uint16_t* src_ptr, - ptrdiff_t src_stride, - uint16_t* dst, - int dst_width); -void ScaleRowDown2Box_C(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown2Box_Odd_C(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown2Box_16_C(const uint16_t* src_ptr, - ptrdiff_t src_stride, - uint16_t* dst, - int dst_width); -void ScaleRowDown4_C(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown4_16_C(const uint16_t* src_ptr, - ptrdiff_t src_stride, - uint16_t* dst, - int dst_width); -void ScaleRowDown4Box_C(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown4Box_16_C(const uint16_t* src_ptr, - ptrdiff_t src_stride, - uint16_t* dst, - int dst_width); -void ScaleRowDown34_C(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown34_16_C(const uint16_t* src_ptr, - ptrdiff_t src_stride, - uint16_t* dst, - int dst_width); -void ScaleRowDown34_0_Box_C(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* d, - int dst_width); -void ScaleRowDown34_0_Box_16_C(const uint16_t* src_ptr, - ptrdiff_t src_stride, - uint16_t* d, - int dst_width); -void ScaleRowDown34_1_Box_C(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* d, - int dst_width); -void ScaleRowDown34_1_Box_16_C(const uint16_t* src_ptr, - ptrdiff_t src_stride, - uint16_t* d, - int dst_width); -void ScaleCols_C(uint8_t* dst_ptr, - const uint8_t* src_ptr, - int dst_width, - int x, - int dx); -void ScaleCols_16_C(uint16_t* dst_ptr, - const uint16_t* src_ptr, - int dst_width, - int x, - int dx); -void ScaleColsUp2_C(uint8_t* dst_ptr, - const uint8_t* src_ptr, - int dst_width, - int, - int); -void ScaleColsUp2_16_C(uint16_t* dst_ptr, - const uint16_t* src_ptr, - int dst_width, - int, - int); -void ScaleFilterCols_C(uint8_t* dst_ptr, - const uint8_t* src_ptr, - int dst_width, - int x, - int dx); -void ScaleFilterCols_16_C(uint16_t* dst_ptr, - const uint16_t* src_ptr, - int dst_width, - int x, - int dx); -void ScaleFilterCols64_C(uint8_t* dst_ptr, - const uint8_t* src_ptr, - int dst_width, - int x32, - int dx); -void ScaleFilterCols64_16_C(uint16_t* dst_ptr, - const uint16_t* src_ptr, - int dst_width, - int x32, - int dx); -void ScaleRowDown38_C(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown38_16_C(const uint16_t* src_ptr, - ptrdiff_t src_stride, - uint16_t* dst, - int dst_width); -void ScaleRowDown38_3_Box_C(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown38_3_Box_16_C(const uint16_t* src_ptr, - ptrdiff_t src_stride, - uint16_t* dst_ptr, - int dst_width); -void ScaleRowDown38_2_Box_C(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown38_2_Box_16_C(const uint16_t* src_ptr, - ptrdiff_t src_stride, - uint16_t* dst_ptr, - int dst_width); -void ScaleAddRow_C(const uint8_t* src_ptr, uint16_t* dst_ptr, int src_width); -void ScaleAddRow_16_C(const uint16_t* src_ptr, - uint32_t* dst_ptr, - int src_width); -void ScaleARGBRowDown2_C(const uint8_t* src_argb, - ptrdiff_t src_stride, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBRowDown2Linear_C(const uint8_t* src_argb, - ptrdiff_t src_stride, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBRowDown2Box_C(const uint8_t* src_argb, - ptrdiff_t src_stride, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBRowDownEven_C(const uint8_t* src_argb, - ptrdiff_t src_stride, - int src_stepx, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBRowDownEvenBox_C(const uint8_t* src_argb, - ptrdiff_t src_stride, - int src_stepx, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBCols_C(uint8_t* dst_argb, - const uint8_t* src_argb, - int dst_width, - int x, - int dx); -void ScaleARGBCols64_C(uint8_t* dst_argb, - const uint8_t* src_argb, - int dst_width, - int x32, - int dx); -void ScaleARGBColsUp2_C(uint8_t* dst_argb, - const uint8_t* src_argb, - int dst_width, - int, - int); -void ScaleARGBFilterCols_C(uint8_t* dst_argb, - const uint8_t* src_argb, - int dst_width, - int x, - int dx); -void ScaleARGBFilterCols64_C(uint8_t* dst_argb, - const uint8_t* src_argb, - int dst_width, - int x32, - int dx); - -// Specialized scalers for x86. -void ScaleRowDown2_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown2Linear_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown2Box_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown2_AVX2(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown2Linear_AVX2(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown2Box_AVX2(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown4_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown4Box_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown4_AVX2(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown4Box_AVX2(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); - -void ScaleRowDown34_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown34_1_Box_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown34_0_Box_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown38_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown38_3_Box_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown38_2_Box_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown2_Any_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown2Linear_Any_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown2Box_Any_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown2Box_Odd_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown2_Any_AVX2(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown2Linear_Any_AVX2(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown2Box_Any_AVX2(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown2Box_Odd_AVX2(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown4_Any_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown4Box_Any_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown4_Any_AVX2(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown4Box_Any_AVX2(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); - -void ScaleRowDown34_Any_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown34_1_Box_Any_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown34_0_Box_Any_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown38_Any_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown38_3_Box_Any_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown38_2_Box_Any_SSSE3(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); - -void ScaleAddRow_SSE2(const uint8_t* src_ptr, uint16_t* dst_ptr, int src_width); -void ScaleAddRow_AVX2(const uint8_t* src_ptr, uint16_t* dst_ptr, int src_width); -void ScaleAddRow_Any_SSE2(const uint8_t* src_ptr, - uint16_t* dst_ptr, - int src_width); -void ScaleAddRow_Any_AVX2(const uint8_t* src_ptr, - uint16_t* dst_ptr, - int src_width); - -void ScaleFilterCols_SSSE3(uint8_t* dst_ptr, - const uint8_t* src_ptr, - int dst_width, - int x, - int dx); -void ScaleColsUp2_SSE2(uint8_t* dst_ptr, - const uint8_t* src_ptr, - int dst_width, - int x, - int dx); - -// ARGB Column functions -void ScaleARGBCols_SSE2(uint8_t* dst_argb, - const uint8_t* src_argb, - int dst_width, - int x, - int dx); -void ScaleARGBFilterCols_SSSE3(uint8_t* dst_argb, - const uint8_t* src_argb, - int dst_width, - int x, - int dx); -void ScaleARGBColsUp2_SSE2(uint8_t* dst_argb, - const uint8_t* src_argb, - int dst_width, - int x, - int dx); -void ScaleARGBFilterCols_NEON(uint8_t* dst_argb, - const uint8_t* src_argb, - int dst_width, - int x, - int dx); -void ScaleARGBCols_NEON(uint8_t* dst_argb, - const uint8_t* src_argb, - int dst_width, - int x, - int dx); -void ScaleARGBFilterCols_Any_NEON(uint8_t* dst_ptr, - const uint8_t* src_ptr, - int dst_width, - int x, - int dx); -void ScaleARGBCols_Any_NEON(uint8_t* dst_ptr, - const uint8_t* src_ptr, - int dst_width, - int x, - int dx); -void ScaleARGBFilterCols_MSA(uint8_t* dst_argb, - const uint8_t* src_argb, - int dst_width, - int x, - int dx); -void ScaleARGBCols_MSA(uint8_t* dst_argb, - const uint8_t* src_argb, - int dst_width, - int x, - int dx); -void ScaleARGBFilterCols_Any_MSA(uint8_t* dst_ptr, - const uint8_t* src_ptr, - int dst_width, - int x, - int dx); -void ScaleARGBCols_Any_MSA(uint8_t* dst_ptr, - const uint8_t* src_ptr, - int dst_width, - int x, - int dx); -void ScaleARGBCols_MMI(uint8_t* dst_argb, - const uint8_t* src_argb, - int dst_width, - int x, - int dx); -void ScaleARGBCols_Any_MMI(uint8_t* dst_ptr, - const uint8_t* src_ptr, - int dst_width, - int x, - int dx); - -// ARGB Row functions -void ScaleARGBRowDown2_SSE2(const uint8_t* src_argb, - ptrdiff_t src_stride, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBRowDown2Linear_SSE2(const uint8_t* src_argb, - ptrdiff_t src_stride, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBRowDown2Box_SSE2(const uint8_t* src_argb, - ptrdiff_t src_stride, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBRowDown2_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleARGBRowDown2Linear_NEON(const uint8_t* src_argb, - ptrdiff_t src_stride, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBRowDown2Box_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleARGBRowDown2_MSA(const uint8_t* src_argb, - ptrdiff_t src_stride, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBRowDown2Linear_MSA(const uint8_t* src_argb, - ptrdiff_t src_stride, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBRowDown2Box_MSA(const uint8_t* src_argb, - ptrdiff_t src_stride, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBRowDown2_MMI(const uint8_t* src_argb, - ptrdiff_t src_stride, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBRowDown2Linear_MMI(const uint8_t* src_argb, - ptrdiff_t src_stride, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBRowDown2Box_MMI(const uint8_t* src_argb, - ptrdiff_t src_stride, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBRowDown2_Any_SSE2(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleARGBRowDown2Linear_Any_SSE2(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleARGBRowDown2Box_Any_SSE2(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleARGBRowDown2_Any_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleARGBRowDown2Linear_Any_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleARGBRowDown2Box_Any_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleARGBRowDown2_Any_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleARGBRowDown2Linear_Any_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleARGBRowDown2Box_Any_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleARGBRowDown2_Any_MMI(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleARGBRowDown2Linear_Any_MMI(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleARGBRowDown2Box_Any_MMI(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleARGBRowDownEven_SSE2(const uint8_t* src_argb, - ptrdiff_t src_stride, - int src_stepx, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBRowDownEvenBox_SSE2(const uint8_t* src_argb, - ptrdiff_t src_stride, - int src_stepx, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBRowDownEven_NEON(const uint8_t* src_argb, - ptrdiff_t src_stride, - int src_stepx, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBRowDownEvenBox_NEON(const uint8_t* src_argb, - ptrdiff_t src_stride, - int src_stepx, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBRowDownEven_MSA(const uint8_t* src_argb, - ptrdiff_t src_stride, - int32_t src_stepx, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBRowDownEvenBox_MSA(const uint8_t* src_argb, - ptrdiff_t src_stride, - int src_stepx, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBRowDownEven_MMI(const uint8_t* src_argb, - ptrdiff_t src_stride, - int32_t src_stepx, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBRowDownEvenBox_MMI(const uint8_t* src_argb, - ptrdiff_t src_stride, - int src_stepx, - uint8_t* dst_argb, - int dst_width); -void ScaleARGBRowDownEven_Any_SSE2(const uint8_t* src_ptr, - ptrdiff_t src_stride, - int src_stepx, - uint8_t* dst_ptr, - int dst_width); -void ScaleARGBRowDownEvenBox_Any_SSE2(const uint8_t* src_ptr, - ptrdiff_t src_stride, - int src_stepx, - uint8_t* dst_ptr, - int dst_width); -void ScaleARGBRowDownEven_Any_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - int src_stepx, - uint8_t* dst_ptr, - int dst_width); -void ScaleARGBRowDownEvenBox_Any_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - int src_stepx, - uint8_t* dst_ptr, - int dst_width); -void ScaleARGBRowDownEven_Any_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - int32_t src_stepx, - uint8_t* dst_ptr, - int dst_width); -void ScaleARGBRowDownEvenBox_Any_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - int src_stepx, - uint8_t* dst_ptr, - int dst_width); -void ScaleARGBRowDownEven_Any_MMI(const uint8_t* src_ptr, - ptrdiff_t src_stride, - int32_t src_stepx, - uint8_t* dst_ptr, - int dst_width); -void ScaleARGBRowDownEvenBox_Any_MMI(const uint8_t* src_ptr, - ptrdiff_t src_stride, - int src_stepx, - uint8_t* dst_ptr, - int dst_width); - -// ScaleRowDown2Box also used by planar functions -// NEON downscalers with interpolation. - -// Note - not static due to reuse in convert for 444 to 420. -void ScaleRowDown2_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown2Linear_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown2Box_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); - -void ScaleRowDown4_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown4Box_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); - -// Down scale from 4 to 3 pixels. Use the neon multilane read/write -// to load up the every 4th pixel into a 4 different registers. -// Point samples 32 pixels to 24 pixels. -void ScaleRowDown34_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown34_0_Box_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown34_1_Box_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); - -// 32 -> 12 -void ScaleRowDown38_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -// 32x3 -> 12x1 -void ScaleRowDown38_3_Box_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -// 32x2 -> 12x1 -void ScaleRowDown38_2_Box_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); - -void ScaleRowDown2_Any_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown2Linear_Any_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown2Box_Any_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown2Box_Odd_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown4_Any_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown4Box_Any_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown34_Any_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown34_0_Box_Any_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown34_1_Box_Any_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -// 32 -> 12 -void ScaleRowDown38_Any_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -// 32x3 -> 12x1 -void ScaleRowDown38_3_Box_Any_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -// 32x2 -> 12x1 -void ScaleRowDown38_2_Box_Any_NEON(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); - -void ScaleAddRow_NEON(const uint8_t* src_ptr, uint16_t* dst_ptr, int src_width); -void ScaleAddRow_Any_NEON(const uint8_t* src_ptr, - uint16_t* dst_ptr, - int src_width); - -void ScaleFilterCols_NEON(uint8_t* dst_ptr, - const uint8_t* src_ptr, - int dst_width, - int x, - int dx); - -void ScaleFilterCols_Any_NEON(uint8_t* dst_ptr, - const uint8_t* src_ptr, - int dst_width, - int x, - int dx); - -void ScaleRowDown2_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown2Linear_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown2Box_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown4_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown4Box_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown38_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown38_2_Box_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown38_3_Box_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleAddRow_MSA(const uint8_t* src_ptr, uint16_t* dst_ptr, int src_width); -void ScaleFilterCols_MSA(uint8_t* dst_ptr, - const uint8_t* src_ptr, - int dst_width, - int x, - int dx); -void ScaleRowDown34_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown34_0_Box_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* d, - int dst_width); -void ScaleRowDown34_1_Box_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* d, - int dst_width); - -void ScaleRowDown2_Any_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown2Linear_Any_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown2Box_Any_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown4_Any_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown4Box_Any_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown38_Any_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown38_2_Box_Any_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown38_3_Box_Any_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleAddRow_Any_MSA(const uint8_t* src_ptr, - uint16_t* dst_ptr, - int src_width); -void ScaleFilterCols_Any_MSA(uint8_t* dst_ptr, - const uint8_t* src_ptr, - int dst_width, - int x, - int dx); -void ScaleRowDown34_Any_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown34_0_Box_Any_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown34_1_Box_Any_MSA(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); - -void ScaleRowDown2_MMI(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown2_16_MMI(const uint16_t* src_ptr, - ptrdiff_t src_stride, - uint16_t* dst, - int dst_width); -void ScaleRowDown2Linear_MMI(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown2Linear_16_MMI(const uint16_t* src_ptr, - ptrdiff_t src_stride, - uint16_t* dst, - int dst_width); -void ScaleRowDown2Box_MMI(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown2Box_16_MMI(const uint16_t* src_ptr, - ptrdiff_t src_stride, - uint16_t* dst, - int dst_width); -void ScaleRowDown2Box_Odd_MMI(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown4_MMI(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown4_16_MMI(const uint16_t* src_ptr, - ptrdiff_t src_stride, - uint16_t* dst, - int dst_width); -void ScaleRowDown4Box_MMI(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst, - int dst_width); -void ScaleRowDown4Box_16_MMI(const uint16_t* src_ptr, - ptrdiff_t src_stride, - uint16_t* dst, - int dst_width); -void ScaleAddRow_MMI(const uint8_t* src_ptr, uint16_t* dst_ptr, int src_width); -void ScaleAddRow_16_MMI(const uint16_t* src_ptr, - uint32_t* dst_ptr, - int src_width); -void ScaleColsUp2_MMI(uint8_t* dst_ptr, - const uint8_t* src_ptr, - int dst_width, - int x, - int dx); -void ScaleColsUp2_16_MMI(uint16_t* dst_ptr, - const uint16_t* src_ptr, - int dst_width, - int x, - int dx); -void ScaleARGBColsUp2_MMI(uint8_t* dst_argb, - const uint8_t* src_argb, - int dst_width, - int x, - int dx); - -void ScaleRowDown2_Any_MMI(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown2Linear_Any_MMI(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown2Box_Any_MMI(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown4_Any_MMI(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleRowDown4Box_Any_MMI(const uint8_t* src_ptr, - ptrdiff_t src_stride, - uint8_t* dst_ptr, - int dst_width); -void ScaleAddRow_Any_MMI(const uint8_t* src_ptr, - uint16_t* dst_ptr, - int src_width); -#ifdef __cplusplus -} // extern "C" -} // namespace libyuv -#endif - -#endif // INCLUDE_LIBYUV_SCALE_ROW_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/version.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/version.h deleted file mode 100644 index 741ef34df4..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/version.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2012 The LibYuv Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -#ifndef INCLUDE_LIBYUV_VERSION_H_ -#define INCLUDE_LIBYUV_VERSION_H_ - -#define LIBYUV_VERSION 1732 - -#endif // INCLUDE_LIBYUV_VERSION_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/video_common.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/video_common.h deleted file mode 100644 index ffcbdbf1b0..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/include/libyuv/video_common.h +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright 2011 The LibYuv Project Authors. All rights reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - -// Common definitions for video, including fourcc and VideoFormat. - -#ifndef INCLUDE_LIBYUV_VIDEO_COMMON_H_ -#define INCLUDE_LIBYUV_VIDEO_COMMON_H_ - -#include "libyuv/basic_types.h" - -#ifdef __cplusplus -namespace libyuv { -extern "C" { -#endif - -////////////////////////////////////////////////////////////////////////////// -// Definition of FourCC codes -////////////////////////////////////////////////////////////////////////////// - -// Convert four characters to a FourCC code. -// Needs to be a macro otherwise the OS X compiler complains when the kFormat* -// constants are used in a switch. -#ifdef __cplusplus -#define FOURCC(a, b, c, d) \ - ((static_cast(a)) | (static_cast(b) << 8) | \ - (static_cast(c) << 16) | /* NOLINT */ \ - (static_cast(d) << 24)) /* NOLINT */ -#else -#define FOURCC(a, b, c, d) \ - (((uint32_t)(a)) | ((uint32_t)(b) << 8) | /* NOLINT */ \ - ((uint32_t)(c) << 16) | ((uint32_t)(d) << 24)) /* NOLINT */ -#endif - -// Some pages discussing FourCC codes: -// http://www.fourcc.org/yuv.php -// http://v4l2spec.bytesex.org/spec/book1.htm -// http://developer.apple.com/quicktime/icefloe/dispatch020.html -// http://msdn.microsoft.com/library/windows/desktop/dd206750.aspx#nv12 -// http://people.xiph.org/~xiphmont/containers/nut/nut4cc.txt - -// FourCC codes grouped according to implementation efficiency. -// Primary formats should convert in 1 efficient step. -// Secondary formats are converted in 2 steps. -// Auxilliary formats call primary converters. -enum FourCC { - // 9 Primary YUV formats: 5 planar, 2 biplanar, 2 packed. - FOURCC_I420 = FOURCC('I', '4', '2', '0'), - FOURCC_I422 = FOURCC('I', '4', '2', '2'), - FOURCC_I444 = FOURCC('I', '4', '4', '4'), - FOURCC_I400 = FOURCC('I', '4', '0', '0'), - FOURCC_NV21 = FOURCC('N', 'V', '2', '1'), - FOURCC_NV12 = FOURCC('N', 'V', '1', '2'), - FOURCC_YUY2 = FOURCC('Y', 'U', 'Y', '2'), - FOURCC_UYVY = FOURCC('U', 'Y', 'V', 'Y'), - FOURCC_H010 = FOURCC('H', '0', '1', '0'), // unofficial fourcc. 10 bit lsb - - // 1 Secondary YUV format: row biplanar. - FOURCC_M420 = FOURCC('M', '4', '2', '0'), - - // 11 Primary RGB formats: 4 32 bpp, 2 24 bpp, 3 16 bpp, 1 10 bpc - FOURCC_ARGB = FOURCC('A', 'R', 'G', 'B'), - FOURCC_BGRA = FOURCC('B', 'G', 'R', 'A'), - FOURCC_ABGR = FOURCC('A', 'B', 'G', 'R'), - FOURCC_AR30 = FOURCC('A', 'R', '3', '0'), // 10 bit per channel. 2101010. - FOURCC_AB30 = FOURCC('A', 'B', '3', '0'), // ABGR version of 10 bit - FOURCC_24BG = FOURCC('2', '4', 'B', 'G'), - FOURCC_RAW = FOURCC('r', 'a', 'w', ' '), - FOURCC_RGBA = FOURCC('R', 'G', 'B', 'A'), - FOURCC_RGBP = FOURCC('R', 'G', 'B', 'P'), // rgb565 LE. - FOURCC_RGBO = FOURCC('R', 'G', 'B', 'O'), // argb1555 LE. - FOURCC_R444 = FOURCC('R', '4', '4', '4'), // argb4444 LE. - - // 1 Primary Compressed YUV format. - FOURCC_MJPG = FOURCC('M', 'J', 'P', 'G'), - - // 8 Auxiliary YUV variations: 3 with U and V planes are swapped, 1 Alias. - FOURCC_YV12 = FOURCC('Y', 'V', '1', '2'), - FOURCC_YV16 = FOURCC('Y', 'V', '1', '6'), - FOURCC_YV24 = FOURCC('Y', 'V', '2', '4'), - FOURCC_YU12 = FOURCC('Y', 'U', '1', '2'), // Linux version of I420. - FOURCC_J420 = FOURCC('J', '4', '2', '0'), - FOURCC_J400 = FOURCC('J', '4', '0', '0'), // unofficial fourcc - FOURCC_H420 = FOURCC('H', '4', '2', '0'), // unofficial fourcc - FOURCC_H422 = FOURCC('H', '4', '2', '2'), // unofficial fourcc - - // 14 Auxiliary aliases. CanonicalFourCC() maps these to canonical fourcc. - FOURCC_IYUV = FOURCC('I', 'Y', 'U', 'V'), // Alias for I420. - FOURCC_YU16 = FOURCC('Y', 'U', '1', '6'), // Alias for I422. - FOURCC_YU24 = FOURCC('Y', 'U', '2', '4'), // Alias for I444. - FOURCC_YUYV = FOURCC('Y', 'U', 'Y', 'V'), // Alias for YUY2. - FOURCC_YUVS = FOURCC('y', 'u', 'v', 's'), // Alias for YUY2 on Mac. - FOURCC_HDYC = FOURCC('H', 'D', 'Y', 'C'), // Alias for UYVY. - FOURCC_2VUY = FOURCC('2', 'v', 'u', 'y'), // Alias for UYVY on Mac. - FOURCC_JPEG = FOURCC('J', 'P', 'E', 'G'), // Alias for MJPG. - FOURCC_DMB1 = FOURCC('d', 'm', 'b', '1'), // Alias for MJPG on Mac. - FOURCC_BA81 = FOURCC('B', 'A', '8', '1'), // Alias for BGGR. - FOURCC_RGB3 = FOURCC('R', 'G', 'B', '3'), // Alias for RAW. - FOURCC_BGR3 = FOURCC('B', 'G', 'R', '3'), // Alias for 24BG. - FOURCC_CM32 = FOURCC(0, 0, 0, 32), // Alias for BGRA kCMPixelFormat_32ARGB - FOURCC_CM24 = FOURCC(0, 0, 0, 24), // Alias for RAW kCMPixelFormat_24RGB - FOURCC_L555 = FOURCC('L', '5', '5', '5'), // Alias for RGBO. - FOURCC_L565 = FOURCC('L', '5', '6', '5'), // Alias for RGBP. - FOURCC_5551 = FOURCC('5', '5', '5', '1'), // Alias for RGBO. - - // deprecated formats. Not supported, but defined for backward compatibility. - FOURCC_I411 = FOURCC('I', '4', '1', '1'), - FOURCC_Q420 = FOURCC('Q', '4', '2', '0'), - FOURCC_RGGB = FOURCC('R', 'G', 'G', 'B'), - FOURCC_BGGR = FOURCC('B', 'G', 'G', 'R'), - FOURCC_GRBG = FOURCC('G', 'R', 'B', 'G'), - FOURCC_GBRG = FOURCC('G', 'B', 'R', 'G'), - FOURCC_H264 = FOURCC('H', '2', '6', '4'), - - // Match any fourcc. - FOURCC_ANY = -1, -}; - -enum FourCCBpp { - // Canonical fourcc codes used in our code. - FOURCC_BPP_I420 = 12, - FOURCC_BPP_I422 = 16, - FOURCC_BPP_I444 = 24, - FOURCC_BPP_I411 = 12, - FOURCC_BPP_I400 = 8, - FOURCC_BPP_NV21 = 12, - FOURCC_BPP_NV12 = 12, - FOURCC_BPP_YUY2 = 16, - FOURCC_BPP_UYVY = 16, - FOURCC_BPP_M420 = 12, - FOURCC_BPP_Q420 = 12, - FOURCC_BPP_ARGB = 32, - FOURCC_BPP_BGRA = 32, - FOURCC_BPP_ABGR = 32, - FOURCC_BPP_RGBA = 32, - FOURCC_BPP_AR30 = 32, - FOURCC_BPP_AB30 = 32, - FOURCC_BPP_24BG = 24, - FOURCC_BPP_RAW = 24, - FOURCC_BPP_RGBP = 16, - FOURCC_BPP_RGBO = 16, - FOURCC_BPP_R444 = 16, - FOURCC_BPP_RGGB = 8, - FOURCC_BPP_BGGR = 8, - FOURCC_BPP_GRBG = 8, - FOURCC_BPP_GBRG = 8, - FOURCC_BPP_YV12 = 12, - FOURCC_BPP_YV16 = 16, - FOURCC_BPP_YV24 = 24, - FOURCC_BPP_YU12 = 12, - FOURCC_BPP_J420 = 12, - FOURCC_BPP_J400 = 8, - FOURCC_BPP_H420 = 12, - FOURCC_BPP_H422 = 16, - FOURCC_BPP_H010 = 24, - FOURCC_BPP_MJPG = 0, // 0 means unknown. - FOURCC_BPP_H264 = 0, - FOURCC_BPP_IYUV = 12, - FOURCC_BPP_YU16 = 16, - FOURCC_BPP_YU24 = 24, - FOURCC_BPP_YUYV = 16, - FOURCC_BPP_YUVS = 16, - FOURCC_BPP_HDYC = 16, - FOURCC_BPP_2VUY = 16, - FOURCC_BPP_JPEG = 1, - FOURCC_BPP_DMB1 = 1, - FOURCC_BPP_BA81 = 8, - FOURCC_BPP_RGB3 = 24, - FOURCC_BPP_BGR3 = 24, - FOURCC_BPP_CM32 = 32, - FOURCC_BPP_CM24 = 24, - - // Match any fourcc. - FOURCC_BPP_ANY = 0, // 0 means unknown. -}; - -// Converts fourcc aliases into canonical ones. -LIBYUV_API uint32_t CanonicalFourCC(uint32_t fourcc); - -#ifdef __cplusplus -} // extern "C" -} // namespace libyuv -#endif - -#endif // INCLUDE_LIBYUV_VIDEO_COMMON_H_ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/main.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/main.h index 86e4a2f858..41d1693075 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/main.h +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/main.h @@ -1,12 +1,21 @@ -// -// Created on 2024/4/11. -// -// Node APIs are not fully supported. To solve the compilation error of the interface cannot be found, -// please include "napi/native_api.h". +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ #ifndef AVSCREENCAPTURENDKDEMO_MAIN_H #define AVSCREENCAPTURENDKDEMO_MAIN_H -#endif //AVSCREENCAPTURENDKDEMO_MAIN_H +#endif // AVSCREENCAPTURENDKDEMO_MAIN_H #include "napi/native_api.h" #include diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp index ade4c20180..883a1777f0 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + #include "main.h" using namespace std; @@ -30,17 +45,17 @@ static napi_value Add(napi_env env, napi_callback_info info) { void OpenFile(std::string filename_) { snprintf(filename, sizeof(filename), "data/storage/el2/base/files/MIC_%s.pcm", filename_.c_str()); - micFile_ = fopen(filename, "w+"); + micFile_ = fopen(filename, "wb"); if (micFile_ == nullptr) { // OH_LOG_ERROR(LOG_APP, "OpenFile micFile_ audio open failed. %{public}s", strerror(errno)); } snprintf(filename, sizeof(filename), "data/storage/el2/base/files/INNER_%s.pcm", filename_.c_str()); - innerFile_ = fopen(filename, "w+"); + innerFile_ = fopen(filename, "wb"); if (innerFile_ == nullptr) { // OH_LOG_ERROR(LOG_APP, "OpenFile innerFile_ audio open failed. %{public}s", strerror(errno)); } snprintf(filename, sizeof(filename), "data/storage/el2/base/files/VIDEO_%s.yuv", filename_.c_str()); - vFile_ = fopen(filename, "w+"); + vFile_ = fopen(filename, "wb"); if (vFile_ == nullptr) { // OH_LOG_ERROR(LOG_APP, "OpenFile vFile video open failed. %{public}s", strerror(errno)); } @@ -261,7 +276,6 @@ static napi_value StartScreenCapture_03(napi_env env, napi_callback_info info) { } OH_AVScreenCaptureConfig config_; SetConfig(config_); - OpenFile("Demo"); bool isMicrophone = true; OH_AVScreenCapture_SetMicrophoneEnabled(g_avCapture, isMicrophone); OH_AVScreenCapture_SetErrorCallback(g_avCapture, OnError, nullptr); @@ -332,9 +346,6 @@ static napi_value StartScreenCapture_03(napi_env env, napi_callback_info info) { OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture Started OH_VideoEncoder_GetSurface ret=%{public}d", result); } result = OH_VideoEncoder_Prepare(g_videoEnc); - std::string_view outputFilePath = "/data/storage/el2/base/files/DemoSurface.h264"; - std::unique_ptr outputFile = std::make_unique(); - outputFile->open(outputFilePath.data(), std::ios::out | std::ios::binary | std::ios::ate); // 启动编码器 int32_t retEnc = OH_VideoEncoder_Start(g_videoEnc); diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.cpp b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.cpp index 3cfa87cbab..9d097930aa 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.cpp +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.cpp @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + #include "sample_callback.h" #include "hilog/log.h" diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.h index 2c5fcf1884..3c3536c0c3 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.h +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.h @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + #ifndef AVCODEC_SAMPLE_CALLBACK_H #define AVCODEC_SAMPLE_CALLBACK_H diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_info.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_info.h index 0b34df72ab..5ccb2112c3 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_info.h +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_info.h @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + #ifndef AVCODEC_SAMPLE_INFO_H #define AVCODEC_SAMPLE_INFO_H #include diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/types/libentry/Index.d.ts b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/types/libentry/Index.d.ts index df26ed321f..8aadf80908 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/types/libentry/Index.d.ts +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/types/libentry/Index.d.ts @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + export const add: (a: number, b: number) => number; export const startScreenCapture: () => number; export const stopScreenCapture: () => number; diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/types/libentry/oh-package.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/types/libentry/oh-package.json5 index ea410725a8..6abf3b7c20 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/types/libentry/oh-package.json5 +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/types/libentry/oh-package.json5 @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + { "name": "libentry.so", "types": "./Index.d.ts", diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets index 07363759b8..94c65b96ba 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entryability/EntryAbility.ets @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + import { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit'; import { hilog } from '@kit.PerformanceAnalysisKit'; import { window } from '@kit.ArkUI'; @@ -9,6 +24,8 @@ const DOMAIN = 0x0000; const permissions: Array = [ 'ohos.permission.MICROPHONE', + 'ohos.permission.KEEP_BACKGROUND_RUNNING', + 'ohos.permission.WRITE_MEDIA', ]; function reqPermissionsFromUser(permissions: Array, context: common.UIAbilityContext): void { diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets index 8e4de99282..0a97e21bd7 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + import { hilog } from '@kit.PerformanceAnalysisKit'; import { BackupExtensionAbility, BundleVersion } from '@kit.CoreFileKit'; diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Index.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Index.ets index abc8323312..9e32ea0a8e 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Index.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Index.ets @@ -20,7 +20,6 @@ class DividerTmp { @Entry({ routeName : 'Index' }) @Component struct Index { - @State message: string = 'Av Screen Capture'; @Provide('NavPathStack') pageInfos: NavPathStack = new NavPathStack() @State egDivider: DividerTmp = new DividerTmp(1, 60, 10, '#ffe9f0f0') @@ -43,33 +42,33 @@ struct Index { Navigation(this.pageInfos) { List({ space: 12 }) { ListItem() { - Text('Av Screen Capture 录屏DEMO') + Text($r('app.string.sample_label')) .fontSize(18) } ListItem() { - Text('录屏存文件') + Text($r('app.string.saving_file_desc')) .fontSize(20) } ListItem() { - Button('录屏存文件') + Button($r('app.string.saving_file_desc')) .width('80%') .onClick(() => { this.pageInfos.pushPathByName('Scene1', ''); }) } ListItem() { - Text('录屏取码流') + Text($r('app.string.streaming_desc')) .fontSize(20) } ListItem() { - Button('录屏取码流',{ type: ButtonType.Capsule, stateEffect: true }) + Button($r('app.string.streaming_desc'),{ type: ButtonType.Capsule, stateEffect: true }) .width('80%') .onClick(() => { this.pageInfos.pushPathByName('Scene2', ''); }) } ListItem() { - Button('录屏取码流SurfaceMode') + Button($r('app.string.streaming_surface_mode_desc')) .width('80%') .onClick(() => { this.pageInfos.pushPathByName('Scene3', ''); @@ -83,7 +82,7 @@ struct Index { } .mode(NavigationMode.Stack) - .title("录屏应用 DEMO") + .title($r('app.string.sample_label')) .titleMode(NavigationTitleMode.Full) .navDestination(this.PagesMap) diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Menu.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Menu.ets index 0281f702b3..615b016994 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Menu.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Menu.ets @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + import router from '@ohos.router'; @Component @@ -6,9 +21,8 @@ export struct MenuSCComponent { @Builder MyMenu(){ Menu() { - - MenuItemGroup({ header: '录屏场景列表' }) { - MenuItem({ content: "主页" }) + MenuItemGroup({ header: $r('app.string.list_desc') }) { + MenuItem({ content: $r('app.string.index_desc') }) .onChange((selected) => { console.info("menuItem select" + selected); router.pushUrl({ @@ -22,7 +36,7 @@ export struct MenuSCComponent { }); }) - MenuItem({ content: "录屏存文件" }) + MenuItem({ content: $r('app.string.saving_file_desc') }) .onChange((selected) => { router.pushUrl({ url: 'pages/Scene1' // 目标url @@ -35,7 +49,7 @@ export struct MenuSCComponent { }); }) - MenuItem({ content: "录屏取码流" }) + MenuItem({ content: $r('app.string.streaming_desc') }) .onChange((selected) => { router.pushUrl({ url: 'pages/Scene2' // 目标url @@ -48,7 +62,7 @@ export struct MenuSCComponent { }); }) - MenuItem({ content: "录屏取码流Surface模式"}) + MenuItem({ content: $r('app.string.streaming_surface_mode_desc')}) .onChange((selected) => { router.pushUrl({ url: 'pages/Scene3' // 目标url @@ -62,8 +76,8 @@ export struct MenuSCComponent { }) } - MenuItemGroup({ header: '录屏场景2' }) { - MenuItem({ content: "全场景" }) + MenuItemGroup({ header: $r('app.string.other_mode_desc') }) { + MenuItem({ content: $r('app.string.all_mode_desc') }) .onChange((selected) => { router.pushUrl({ url: 'pages/Scene4' // 目标url @@ -76,14 +90,14 @@ export struct MenuSCComponent { }); }) MenuItem({ - content: "待增加场景", + content: $r('app.string.all_mode_desc'), }) } } } build() { - Button('选择录屏场景', { type: ButtonType.Capsule, stateEffect: true }) + Button($r('app.string.choose_mode_desc'), { type: ButtonType.Capsule, stateEffect: true }) .fontSize(25) .backgroundColor(0x317aff) .fontWeight(800) diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene1.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene1.ets index 5699c1ec08..abc85d576a 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene1.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene1.ets @@ -1,10 +1,24 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + import { hilog } from '@kit.PerformanceAnalysisKit'; import testNapi from 'libentry.so'; @Entry({ routeName : 'Scene1' }) @Component export struct Scene1 { - @State message: string = '录屏存文件'; @State isCapturing: boolean = false; @Consume('pageInfos') pageInfos: NavPathStack; @@ -12,7 +26,7 @@ export struct Scene1 { NavDestination() { Column({ space: 15 }) { Column() { - Text(this.message) + Text($r('app.string.saving_file_desc')) .fontSize(30) .fontWeight(FontWeight.Bold) .onClick(() => { @@ -24,7 +38,7 @@ export struct Scene1 { Column() { List({ space: 40 }) { ListItem() { - Button('Start', { type: ButtonType.Circle, stateEffect: true }) + Button($r('app.string.start_desc'), { type: ButtonType.Circle, stateEffect: true }) .backgroundColor(0xF55A42) .width(90) .height(90) @@ -35,7 +49,7 @@ export struct Scene1 { }) } ListItem() { - Button('Stop', { type: ButtonType.Normal, stateEffect: true }) + Button($r('app.string.stop_desc'), { type: ButtonType.Normal, stateEffect: true }) .backgroundColor(0x000000) .width(85) .height(85) @@ -59,7 +73,6 @@ export struct Scene1 { } .width('100%') } - .title('录屏存文件') - + .title($r('app.string.saving_file_desc')) } } \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene2.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene2.ets index 90098242ab..095b230a1f 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene2.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene2.ets @@ -1,10 +1,24 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + import { hilog } from '@kit.PerformanceAnalysisKit'; import testNapi from 'libentry.so'; @Entry({ routeName : 'Scene2' }) @Component export struct Scene2 { - @State message: string = '录屏取码流'; @State isCapturing: boolean = false; @Consume('pageInfos') pageInfos: NavPathStack; @@ -13,7 +27,7 @@ export struct Scene2 { Column({ space: 15 }) { Column() { - Text(this.message) + Text($r('app.string.streaming_desc')) .fontSize(30) .fontWeight(FontWeight.Bold) .onClick(() => { @@ -25,7 +39,7 @@ export struct Scene2 { Column() { List({ space: 40 }) { ListItem() { - Button('Start', { type: ButtonType.Circle, stateEffect: true }) + Button($r('app.string.start_desc'), { type: ButtonType.Circle, stateEffect: true }) .backgroundColor(0xF55A42) .width(90) .height(90) @@ -36,7 +50,7 @@ export struct Scene2 { }) } ListItem() { - Button('Stop', { type: ButtonType.Normal, stateEffect: true }) + Button($r('app.string.stop_desc'), { type: ButtonType.Normal, stateEffect: true }) .backgroundColor(0x000000) .width(85) .height(85) @@ -60,6 +74,6 @@ export struct Scene2 { } .width('100%') } - .title('录屏取码流') + .title($r('app.string.streaming_desc')) } } \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene3.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene3.ets index bfaaf52a7c..8912dba01f 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene3.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene3.ets @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + import { hilog } from '@kit.PerformanceAnalysisKit'; import testNapi from 'libentry.so'; @@ -25,7 +40,7 @@ export struct Scene3 { Column() { List({ space: 40 }) { ListItem() { - Button('Start', { type: ButtonType.Circle, stateEffect: true }) + Button($r('app.string.start_desc'), { type: ButtonType.Circle, stateEffect: true }) .backgroundColor(0xF55A42) .width(90) .height(90) @@ -36,7 +51,7 @@ export struct Scene3 { }) } ListItem() { - Button('Stop', { type: ButtonType.Normal, stateEffect: true }) + Button($r('app.string.stop_desc'), { type: ButtonType.Normal, stateEffect: true }) .backgroundColor(0x000000) .width(85) .height(85) @@ -60,6 +75,6 @@ export struct Scene3 { } .width('100%') } - .title('录屏取码流Surface模式') + .title($r('app.string.other_mode_desc')) } } \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene4.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene4.ets index cde2fce477..86edb413cf 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene4.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene4.ets @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + import { hilog } from '@kit.PerformanceAnalysisKit'; import testNapi from 'libentry.so'; import {MenuSCComponent} from './Menu'; @@ -5,7 +20,6 @@ import {MenuSCComponent} from './Menu'; @Entry({ routeName : 'Scene4' }) @Component export struct Scene4 { - @State message: string = '全量'; @State isCapturing: boolean = false; @Consume('pageInfos') pageInfos: NavPathStack; @@ -15,7 +29,7 @@ export struct Scene4 { Column({ space: 15 }) { Column() { MenuSCComponent() - Text(this.message) + Text($r('app.string.all_mode_desc')) .fontSize(25) .fontWeight(FontWeight.Bold) } @@ -23,7 +37,7 @@ export struct Scene4 { .height('10%').border({ width: 1 }) Column() { - Text("Save File") + Text($r('app.string.saving_file_eng_desc')) .fontSize(20) .fontWeight(FontWeight.Bold) .onClick(() => { @@ -31,7 +45,7 @@ export struct Scene4 { }) List({ space: 40 }) { ListItem() { - Button('Start', { type: ButtonType.Circle, stateEffect: true }) + Button($r('app.string.start_desc'), { type: ButtonType.Circle, stateEffect: true }) .backgroundColor(0xF55A42) .width(90) .height(90) @@ -46,7 +60,7 @@ export struct Scene4 { } ListItem() { - Button('Stop', { type: ButtonType.Normal, stateEffect: true }) + Button($r('app.string.stop_desc'), { type: ButtonType.Normal, stateEffect: true }) .backgroundColor(0x000000) .width(85) .height(85) @@ -64,7 +78,7 @@ export struct Scene4 { .height('20%').border({ width: 1 }) Column() { - Text("Original Stream") + Text($r('app.string.streaming_eng_desc')) .fontSize(20) .fontWeight(FontWeight.Bold) .onClick(() => { @@ -72,7 +86,7 @@ export struct Scene4 { }) List({ space: 40 }) { ListItem() { - Button('Start', { type: ButtonType.Circle, stateEffect: true }) + Button($r('app.string.start_desc'), { type: ButtonType.Circle, stateEffect: true }) .backgroundColor(0xF55A42) .width(90) .height(90) @@ -85,7 +99,7 @@ export struct Scene4 { ListItem() { } ListItem() { - Button('Stop', { type: ButtonType.Normal, stateEffect: true }) + Button($r('app.string.stop_desc'), { type: ButtonType.Normal, stateEffect: true }) .backgroundColor(0x000000) .width(85) .height(85) @@ -103,7 +117,7 @@ export struct Scene4 { .height('20%').border({ width: 1 }) Column() { - Text("Original Stream With Surface") + Text($r('app.string.streaming_surface_mode_eng_desc')) .fontSize(20) .fontWeight(FontWeight.Bold) .onClick(() => { @@ -111,7 +125,7 @@ export struct Scene4 { }) List({ space: 40 }) { ListItem() { - Button('Start', { type: ButtonType.Circle, stateEffect: true }) + Button($r('app.string.start_desc'), { type: ButtonType.Circle, stateEffect: true }) .backgroundColor(0xF55A42) .width(90) .height(90) @@ -124,7 +138,7 @@ export struct Scene4 { ListItem() { } ListItem() { - Button('Stop', { type: ButtonType.Normal, stateEffect: true }) + Button($r('app.string.stop_desc'), { type: ButtonType.Normal, stateEffect: true }) .backgroundColor(0x000000) .width(85) .height(85) @@ -143,6 +157,6 @@ export struct Scene4 { } .height('100%') } - .title('全量') + .title($r('app.string.all_mode_desc')) } } \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/module.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/module.json5 index bed65274d0..0d035f4eaa 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/module.json5 +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/module.json5 @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + { "module": { "name": "entry", @@ -5,9 +20,8 @@ "description": "$string:module_desc", "mainElement": "EntryAbility", "deviceTypes": [ - "phone", - "tablet", - "2in1" + "default", + "tablet" ], "deliveryWithInstall": true, "installationFree": false, @@ -45,7 +59,7 @@ "name": "ohos.extension.backup", "resource": "$profile:backup_config" } - ], + ] } ], @@ -59,6 +73,26 @@ ], "when": "always" } + }, + { + "name": "ohos.permission.KEEP_BACKGROUND_RUNNING", + "reason": "$string:EntryAbility_desc", + "usedScene": { + "abilities": [ + "EntryAbility" + ], + "when": "always" + } + }, + { + "name": "ohos.permission.WRITE_MEDIA", + "reason": "$string:EntryAbility_desc", + "usedScene": { + "abilities": [ + "EntryAbility" + ], + "when": "always" + } } ] } diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/element/string.json b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/element/string.json index f94595515a..0423a79e1a 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/element/string.json +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/resources/base/element/string.json @@ -10,7 +10,63 @@ }, { "name": "EntryAbility_label", - "value": "label" + "value": "录屏Sample" + }, + { + "name": "sample_label", + "value": "AVScreenCapture录屏Sample" + }, + { + "name": "saving_file_desc", + "value": "录屏存文件" + }, + { + "name": "streaming_desc", + "value": "录屏取码流" + }, + { + "name": "streaming_surface_mode_desc", + "value": "录屏取码流Surface模式" + }, + { + "name": "list_desc", + "value": "录屏场景列表" + }, + { + "name": "index_desc", + "value": "主页" + }, + { + "name": "other_mode_desc", + "value": "其他场景" + }, + { + "name": "choose_mode_desc", + "value": "选择录屏场景" + }, + { + "name": "start_desc", + "value": "Start" + }, + { + "name": "stop_desc", + "value": "Stop" + }, + { + "name": "saving_file_eng_desc", + "value": "Saving File" + }, + { + "name": "streaming_eng_desc", + "value": "Original Stream" + }, + { + "name": "streaming_surface_mode_eng_desc", + "value": "Original Stream With Surface" + }, + { + "name": "all_mode_desc", + "value": "全量" } ] } \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/mock/Libentry.mock.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/mock/Libentry.mock.ets index c2171716d0..eebf1ed910 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/mock/Libentry.mock.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/mock/Libentry.mock.ets @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + const NativeMock: Record = { 'add': (a: number, b: number) => { return a + b; diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/mock/mock-config.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/mock/mock-config.json5 index 6540976c9a..2c7d2ba82b 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/mock/mock-config.json5 +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/mock/mock-config.json5 @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + { "libentry.so": { "source": "src/mock/Libentry.mock.ets" diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/ets/test/Ability.test.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/ets/test/Ability.test.ets index 85c78f6757..0f8ce9a2c0 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/ets/test/Ability.test.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/ets/test/Ability.test.ets @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + import { hilog } from '@kit.PerformanceAnalysisKit'; import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/ets/test/List.test.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/ets/test/List.test.ets index 794c7dc4ed..1eac52fceb 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/ets/test/List.test.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/ets/test/List.test.ets @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + import abilityTest from './Ability.test'; export default function testsuite() { diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/module.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/module.json5 index 55725a9299..c3fd9dda30 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/module.json5 +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/ohosTest/module.json5 @@ -1,11 +1,25 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + { "module": { "name": "entry_test", "type": "feature", "deviceTypes": [ - "phone", - "tablet", - "2in1" + "default", + "tablet" ], "deliveryWithInstall": true, "installationFree": false diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/test/List.test.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/test/List.test.ets index bb5b5c3731..f1186b1f53 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/test/List.test.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/test/List.test.ets @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + import localUnitTest from './LocalUnit.test'; export default function testsuite() { diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/test/LocalUnit.test.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/test/LocalUnit.test.ets index 165fc1615e..7fc57c77db 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/test/LocalUnit.test.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/test/LocalUnit.test.ets @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; export default function localUnitTest() { diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/log.txt b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/log.txt index ee6425484e..17cc32bea3 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/log.txt +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/log.txt @@ -1 +1,520 @@ -11:42:14:524 log timer task size: 1 +18:20:09:121 log task queue not empty +18:20:09:121 log task size: 1 +18:20:09:121 log before pop task size: 1 +18:20:09:121 log after task size: 0 +18:20:09:631 log timer task size: 1 +18:20:10:396 log task queue not empty +18:20:10:396 log task size: 1 +18:20:10:396 log before pop task size: 1 +18:20:10:396 log after task size: 0 +18:20:10:904 log timer task size: 1 +19:13:41:986 log task queue not empty +19:13:41:986 log task size: 1 +19:13:41:986 log before pop task size: 1 +19:13:41:987 log after task size: 0 +19:13:42:494 log timer task size: 1 +19:13:42:962 log task queue not empty +19:13:42:962 log task size: 1 +19:13:42:962 log before pop task size: 1 +19:13:42:962 log after task size: 0 +19:13:43:334 log task queue not empty +19:13:43:336 log task size: 1 +19:13:43:337 log before pop task size: 1 +19:13:43:337 log after task size: 0 +19:13:43:465 log timer task size: 1 +19:13:43:733 log task queue not empty +19:13:43:734 log task size: 1 +19:13:43:734 log before pop task size: 1 +19:13:43:734 log after task size: 0 +19:13:43:852 log timer task size: 1 +19:13:44:077 log task queue not empty +19:13:44:077 log task size: 1 +19:13:44:077 log before pop task size: 1 +19:13:44:077 log after task size: 0 +19:13:44:208 log task queue not empty +19:13:44:209 log task size: 1 +19:13:44:209 log before pop task size: 1 +19:13:44:209 log after task size: 0 +19:13:44:236 log timer task size: 1 +19:13:44:592 log timer task size: 1 +19:13:44:716 log timer task size: 1 +19:13:47:615 log task queue not empty +19:13:47:615 log task size: 1 +19:13:47:615 log before pop task size: 1 +19:13:47:615 log after task size: 0 +19:13:47:897 log task queue not empty +19:13:47:897 log task size: 1 +19:13:47:898 log before pop task size: 1 +19:13:47:898 log after task size: 0 +19:13:47:965 log task queue not empty +19:13:47:966 log task size: 1 +19:13:47:966 log before pop task size: 1 +19:13:47:966 log after task size: 0 +19:13:48:120 log timer task size: 1 +19:13:48:413 log timer task size: 1 +19:13:48:474 log timer task size: 1 +19:13:48:691 log task queue not empty +19:13:48:691 log task size: 1 +19:13:48:691 log before pop task size: 1 +19:13:48:691 log after task size: 0 +19:13:49:013 log task queue not empty +19:13:49:013 log task size: 1 +19:13:49:013 log before pop task size: 1 +19:13:49:014 log after task size: 0 +19:13:49:077 log task queue not empty +19:13:49:077 log task size: 1 +19:13:49:077 log before pop task size: 1 +19:13:49:077 log after task size: 0 +19:13:49:201 log timer task size: 1 +19:13:49:524 log timer task size: 1 +19:13:49:587 log timer task size: 1 +19:13:51:414 log task queue not empty +19:13:51:414 log task size: 1 +19:13:51:414 log before pop task size: 1 +19:13:51:415 log after task size: 0 +19:13:51:904 log task queue not empty +19:13:51:904 log task size: 1 +19:13:51:904 log before pop task size: 1 +19:13:51:904 log after task size: 0 +19:13:51:918 log timer task size: 1 +19:13:52:203 log task queue not empty +19:13:52:203 log task size: 1 +19:13:52:203 log before pop task size: 1 +19:13:52:203 log after task size: 0 +19:13:52:268 log task queue not empty +19:13:52:268 log task size: 1 +19:13:52:268 log before pop task size: 1 +19:13:52:268 log after task size: 0 +19:13:52:413 log timer task size: 1 +19:13:52:706 log timer task size: 1 +19:13:52:783 log timer task size: 1 +19:13:52:836 log task queue not empty +19:13:52:837 log task size: 1 +19:13:52:837 log before pop task size: 1 +19:13:52:837 log after task size: 0 +19:13:52:886 log task queue not empty +19:13:52:886 log task size: 1 +19:13:52:886 log before pop task size: 1 +19:13:52:886 log after task size: 0 +19:13:53:338 log timer task size: 1 +19:13:53:400 log timer task size: 1 +19:13:55:319 log task queue not empty +19:13:55:319 log task size: 1 +19:13:55:319 log before pop task size: 1 +19:13:55:319 log after task size: 0 +19:13:55:729 log task queue not empty +19:13:55:730 log task size: 1 +19:13:55:730 log before pop task size: 1 +19:13:55:730 log after task size: 0 +19:13:55:821 log timer task size: 1 +19:13:55:975 log task queue not empty +19:13:55:975 log task size: 1 +19:13:55:976 log before pop task size: 1 +19:13:55:976 log after task size: 0 +19:13:56:238 log timer task size: 1 +19:13:56:485 log timer task size: 1 +19:13:56:775 log task queue not empty +19:13:56:776 log task size: 1 +19:13:56:776 log before pop task size: 1 +19:13:56:776 log after task size: 0 +19:13:56:841 log task queue not empty +19:13:56:841 log task size: 1 +19:13:56:841 log before pop task size: 1 +19:13:56:841 log after task size: 0 +19:13:57:287 log timer task size: 1 +19:13:57:349 log timer task size: 1 +19:14:14:524 log task queue not empty +19:14:14:524 log task size: 1 +19:14:14:524 log before pop task size: 1 +19:14:14:524 log after task size: 0 +19:14:15:039 log timer task size: 1 +19:14:16:166 log task queue not empty +19:14:16:166 log task size: 1 +19:14:16:166 log before pop task size: 1 +19:14:16:166 log after task size: 0 +19:14:16:673 log timer task size: 1 +19:14:36:030 log task queue not empty +19:14:36:030 log task size: 1 +19:14:36:030 log before pop task size: 1 +19:14:36:030 log after task size: 0 +19:14:36:514 log task queue not empty +19:14:36:514 log task size: 1 +19:14:36:514 log before pop task size: 1 +19:14:36:514 log after task size: 0 +19:14:36:534 log timer task size: 1 +19:14:37:022 log timer task size: 1 +19:15:12:978 log task queue not empty +19:15:12:978 log task size: 1 +19:15:12:978 log before pop task size: 1 +19:15:12:978 log after task size: 0 +19:15:13:483 log timer task size: 1 +19:15:18:387 log task queue not empty +19:15:18:387 log task size: 1 +19:15:18:387 log before pop task size: 1 +19:15:18:387 log after task size: 0 +19:15:18:388 log task queue not empty +19:15:18:388 log task size: 1 +19:15:18:388 log before pop task size: 1 +19:15:18:388 log after task size: 0 +19:15:18:487 log task queue not empty +19:15:18:487 log task size: 1 +19:15:18:487 log before pop task size: 1 +19:15:18:487 log after task size: 0 +19:15:18:868 log task queue not empty +19:15:18:868 log task size: 1 +19:15:18:868 log before pop task size: 1 +19:15:18:868 log after task size: 0 +19:15:18:903 log timer task size: 1 +19:15:18:996 log timer task size: 1 +19:15:19:013 log task queue not empty +19:15:19:013 log task size: 1 +19:15:19:013 log before pop task size: 1 +19:15:19:013 log after task size: 0 +19:15:19:371 log timer task size: 1 +19:15:19:428 log task queue not empty +19:15:19:429 log task size: 1 +19:15:19:429 log before pop task size: 1 +19:15:19:429 log after task size: 0 +19:15:19:496 log task queue not empty +19:15:19:496 log task size: 1 +19:15:19:496 log before pop task size: 1 +19:15:19:496 log after task size: 0 +19:15:19:524 log timer task size: 1 +19:15:19:931 log timer task size: 1 +19:15:20:011 log timer task size: 1 +19:15:20:324 log task queue not empty +19:15:20:324 log task size: 1 +19:15:20:324 log before pop task size: 1 +19:15:20:324 log after task size: 0 +19:15:20:834 log timer task size: 1 +19:15:21:268 log task queue not empty +19:15:21:269 log task size: 1 +19:15:21:269 log before pop task size: 1 +19:15:21:269 log after task size: 0 +19:15:21:697 log task queue not empty +19:15:21:697 log task size: 1 +19:15:21:697 log before pop task size: 1 +19:15:21:697 log after task size: 0 +19:15:21:780 log timer task size: 1 +19:15:22:205 log timer task size: 1 +19:15:22:261 log task queue not empty +19:15:22:261 log task size: 1 +19:15:22:261 log before pop task size: 1 +19:15:22:261 log after task size: 0 +19:15:22:621 log task queue not empty +19:15:22:621 log task size: 1 +19:15:22:621 log before pop task size: 1 +19:15:22:621 log after task size: 0 +19:15:22:766 log timer task size: 1 +19:15:22:975 log task queue not empty +19:15:22:975 log task size: 1 +19:15:22:975 log before pop task size: 1 +19:15:22:975 log after task size: 0 +19:15:23:127 log timer task size: 1 +19:15:23:315 log task queue not empty +19:15:23:315 log task size: 1 +19:15:23:315 log before pop task size: 1 +19:15:23:315 log after task size: 0 +19:15:23:381 log task queue not empty +19:15:23:381 log task size: 1 +19:15:23:381 log before pop task size: 1 +19:15:23:381 log after task size: 0 +19:15:23:488 log timer task size: 1 +19:15:23:817 log timer task size: 1 +19:15:23:894 log timer task size: 1 +19:15:33:945 log task queue not empty +19:15:33:945 log task size: 1 +19:15:33:946 log before pop task size: 1 +19:15:33:946 log after task size: 0 +19:15:34:056 log task queue not empty +19:15:34:056 log task size: 1 +19:15:34:056 log before pop task size: 1 +19:15:34:056 log after task size: 0 +19:15:34:457 log timer task size: 1 +19:15:34:569 log timer task size: 1 +19:15:36:076 log task queue not empty +19:15:36:076 log task size: 1 +19:15:36:076 log before pop task size: 1 +19:15:36:076 log after task size: 0 +19:15:36:586 log timer task size: 1 +19:15:36:636 log task queue not empty +19:15:36:636 log task size: 1 +19:15:36:636 log before pop task size: 1 +19:15:36:636 log after task size: 0 +19:15:37:146 log timer task size: 1 +19:15:38:352 log task queue not empty +19:15:38:352 log task size: 1 +19:15:38:352 log before pop task size: 1 +19:15:38:352 log after task size: 0 +19:15:38:497 log task queue not empty +19:15:38:498 log task size: 1 +19:15:38:498 log before pop task size: 1 +19:15:38:498 log after task size: 0 +19:15:38:858 log timer task size: 1 +19:15:39:014 log timer task size: 1 +19:15:39:541 log task queue not empty +19:15:39:541 log task size: 1 +19:15:39:542 log before pop task size: 1 +19:15:39:542 log after task size: 0 +19:15:39:740 log task queue not empty +19:15:39:740 log task size: 1 +19:15:39:740 log before pop task size: 1 +19:15:39:740 log after task size: 0 +19:15:39:837 log task queue not empty +19:15:39:837 log task size: 1 +19:15:39:837 log before pop task size: 1 +19:15:39:837 log after task size: 0 +19:15:40:009 log task queue not empty +19:15:40:009 log task size: 1 +19:15:40:009 log before pop task size: 1 +19:15:40:009 log after task size: 0 +19:15:40:044 log timer task size: 1 +19:15:40:137 log task queue not empty +19:15:40:137 log task size: 1 +19:15:40:137 log before pop task size: 1 +19:15:40:137 log after task size: 0 +19:15:40:246 log timer task size: 1 +19:15:40:353 log timer task size: 1 +19:15:40:463 log task queue not empty +19:15:40:463 log task size: 1 +19:15:40:463 log before pop task size: 1 +19:15:40:463 log after task size: 0 +19:15:40:522 log timer task size: 1 +19:15:40:645 log timer task size: 1 +19:15:40:973 log timer task size: 1 +19:15:41:472 log task queue not empty +19:15:41:474 log task size: 1 +19:15:41:474 log before pop task size: 1 +19:15:41:474 log after task size: 0 +19:15:41:986 log timer task size: 1 +19:17:34:364 log task queue not empty +19:17:34:364 log task size: 1 +19:17:34:364 log before pop task size: 1 +19:17:34:364 log after task size: 0 +19:17:34:874 log timer task size: 1 +19:17:35:177 log task queue not empty +19:17:35:178 log task size: 1 +19:17:35:178 log before pop task size: 1 +19:17:35:178 log after task size: 0 +19:17:35:178 log task queue not empty +19:17:35:178 log task size: 1 +19:17:35:178 log before pop task size: 1 +19:17:35:178 log after task size: 0 +19:17:35:179 log task queue not empty +19:17:35:179 log task size: 1 +19:17:35:179 log before pop task size: 1 +19:17:35:179 log after task size: 0 +19:17:35:180 log task queue not empty +19:17:35:180 log task size: 1 +19:17:35:180 log before pop task size: 1 +19:17:35:180 log after task size: 0 +19:17:35:180 log task queue not empty +19:17:35:180 log task size: 1 +19:17:35:180 log before pop task size: 1 +19:17:35:180 log after task size: 0 +19:17:35:181 log task queue not empty +19:17:35:181 log task size: 1 +19:17:35:181 log before pop task size: 1 +19:17:35:181 log after task size: 0 +19:17:35:682 log timer task size: 1 +19:17:35:682 log timer task size: 1 +19:17:35:682 log timer task size: 1 +19:17:36:217 log task queue not empty +19:17:36:217 log task size: 1 +19:17:36:218 log before pop task size: 1 +19:17:36:218 log after task size: 0 +19:17:36:726 log timer task size: 1 +19:17:38:953 log task queue not empty +19:17:38:953 log task size: 1 +19:17:38:953 log before pop task size: 1 +19:17:38:953 log after task size: 0 +19:17:39:465 log timer task size: 1 +19:17:39:529 log task queue not empty +19:17:39:529 log task size: 1 +19:17:39:530 log before pop task size: 1 +19:17:39:530 log after task size: 0 +19:17:39:530 log task queue not empty +19:17:39:530 log task size: 1 +19:17:39:530 log before pop task size: 1 +19:17:39:530 log after task size: 0 +19:17:39:531 log task queue not empty +19:17:39:531 log task size: 1 +19:17:39:531 log before pop task size: 1 +19:17:39:531 log after task size: 0 +19:17:39:531 log task queue not empty +19:17:39:532 log task size: 1 +19:17:39:532 log before pop task size: 1 +19:17:39:532 log after task size: 0 +19:17:39:532 log task queue not empty +19:17:39:532 log task size: 1 +19:17:39:532 log before pop task size: 1 +19:17:39:532 log after task size: 0 +19:17:39:533 log task queue not empty +19:17:39:533 log task size: 1 +19:17:39:533 log before pop task size: 1 +19:17:39:533 log after task size: 0 +19:17:39:533 log task queue not empty +19:17:39:533 log task size: 1 +19:17:39:533 log before pop task size: 1 +19:17:39:534 log after task size: 0 +19:17:39:534 log task queue not empty +19:17:39:534 log task size: 1 +19:17:39:534 log before pop task size: 1 +19:17:39:534 log after task size: 0 +19:17:39:535 log task queue not empty +19:17:39:535 log task size: 1 +19:17:39:535 log before pop task size: 1 +19:17:39:535 log after task size: 0 +19:17:39:535 log task queue not empty +19:17:39:535 log task size: 1 +19:17:39:535 log before pop task size: 1 +19:17:39:535 log after task size: 0 +19:17:39:536 log task queue not empty +19:17:39:536 log task size: 1 +19:17:39:536 log before pop task size: 1 +19:17:39:536 log after task size: 0 +19:17:39:536 log task queue not empty +19:17:39:537 log task size: 1 +19:17:39:537 log before pop task size: 1 +19:17:39:537 log after task size: 0 +19:17:39:537 log task queue not empty +19:17:39:537 log task size: 1 +19:17:39:537 log before pop task size: 1 +19:17:39:537 log after task size: 0 +19:17:39:538 log task queue not empty +19:17:39:538 log task size: 1 +19:17:39:538 log before pop task size: 1 +19:17:39:538 log after task size: 0 +19:17:39:538 log task queue not empty +19:17:39:538 log task size: 1 +19:17:39:539 log before pop task size: 1 +19:17:39:539 log after task size: 0 +19:17:40:031 log timer task size: 1 +19:17:40:047 log timer task size: 1 +19:17:40:047 log timer task size: 1 +19:17:40:047 log timer task size: 1 +19:17:40:047 log timer task size: 1 +19:17:40:047 log timer task size: 1 +19:17:40:047 log timer task size: 1 +19:17:40:583 log task queue not empty +19:17:40:583 log task size: 1 +19:17:40:583 log before pop task size: 1 +19:17:40:583 log after task size: 0 +19:17:41:096 log timer task size: 1 +19:17:41:417 log task queue not empty +19:17:41:417 log task size: 1 +19:17:41:417 log before pop task size: 1 +19:17:41:417 log after task size: 0 +19:17:41:627 log task queue not empty +19:17:41:627 log task size: 1 +19:17:41:627 log before pop task size: 1 +19:17:41:627 log after task size: 0 +19:17:41:919 log timer task size: 1 +19:17:42:139 log timer task size: 1 +19:17:42:197 log task queue not empty +19:17:42:197 log task size: 1 +19:17:42:197 log before pop task size: 1 +19:17:42:197 log after task size: 0 +19:17:42:198 log task queue not empty +19:17:42:198 log task size: 1 +19:17:42:198 log before pop task size: 1 +19:17:42:198 log after task size: 0 +19:17:42:199 log task queue not empty +19:17:42:199 log task size: 1 +19:17:42:199 log before pop task size: 1 +19:17:42:199 log after task size: 0 +19:17:42:199 log task queue not empty +19:17:42:199 log task size: 1 +19:17:42:199 log before pop task size: 1 +19:17:42:199 log after task size: 0 +19:17:42:200 log task queue not empty +19:17:42:200 log task size: 1 +19:17:42:200 log before pop task size: 1 +19:17:42:200 log after task size: 0 +19:17:42:613 log task queue not empty +19:17:42:613 log task size: 1 +19:17:42:613 log before pop task size: 1 +19:17:42:613 log after task size: 0 +19:17:42:614 log task queue not empty +19:17:42:614 log task size: 1 +19:17:42:614 log before pop task size: 1 +19:17:42:614 log after task size: 0 +19:17:42:615 log task queue not empty +19:17:42:615 log task size: 1 +19:17:42:615 log before pop task size: 1 +19:17:42:615 log after task size: 0 +19:17:42:615 log task queue not empty +19:17:42:615 log task size: 1 +19:17:42:616 log before pop task size: 1 +19:17:42:616 log after task size: 0 +19:17:42:616 log task queue not empty +19:17:42:616 log task size: 1 +19:17:42:616 log before pop task size: 1 +19:17:42:616 log after task size: 0 +19:17:42:617 log task queue not empty +19:17:42:617 log task size: 1 +19:17:42:617 log before pop task size: 1 +19:17:42:617 log after task size: 0 +19:17:42:617 log task queue not empty +19:17:42:617 log task size: 1 +19:17:42:617 log before pop task size: 1 +19:17:42:617 log after task size: 0 +19:17:42:618 log task queue not empty +19:17:42:618 log task size: 1 +19:17:42:618 log before pop task size: 1 +19:17:42:618 log after task size: 0 +19:17:42:618 log task queue not empty +19:17:42:618 log task size: 1 +19:17:42:618 log before pop task size: 1 +19:17:42:618 log after task size: 0 +19:17:42:619 log task queue not empty +19:17:42:619 log task size: 1 +19:17:42:619 log before pop task size: 1 +19:17:42:619 log after task size: 0 +19:17:42:619 log task queue not empty +19:17:42:619 log task size: 1 +19:17:42:619 log before pop task size: 1 +19:17:42:619 log after task size: 0 +19:17:42:620 log task queue not empty +19:17:42:620 log task size: 1 +19:17:42:620 log before pop task size: 1 +19:17:42:620 log after task size: 0 +19:17:42:620 log task queue not empty +19:17:42:621 log task size: 1 +19:17:42:621 log before pop task size: 1 +19:17:42:621 log after task size: 0 +19:17:42:621 log task queue not empty +19:17:42:621 log task size: 1 +19:17:42:621 log before pop task size: 1 +19:17:42:621 log after task size: 0 +19:17:42:622 log task queue not empty +19:17:42:622 log task size: 1 +19:17:42:622 log before pop task size: 1 +19:17:42:622 log after task size: 0 +19:17:42:622 log task queue not empty +19:17:42:622 log task size: 1 +19:17:42:622 log before pop task size: 1 +19:17:42:622 log after task size: 0 +19:17:42:623 log task queue not empty +19:17:42:623 log task size: 1 +19:17:42:623 log before pop task size: 1 +19:17:42:623 log after task size: 0 +19:17:42:699 log timer task size: 1 +19:17:42:700 log timer task size: 1 +19:17:42:714 log timer task size: 1 +19:17:42:714 log timer task size: 1 +19:17:43:061 log task queue not empty +19:17:43:062 log task size: 1 +19:17:43:062 log before pop task size: 1 +19:17:43:062 log after task size: 0 +19:17:43:117 log timer task size: 1 +19:17:43:117 log timer task size: 1 +19:17:43:117 log timer task size: 1 +19:17:43:117 log timer task size: 1 +19:17:43:132 log timer task size: 1 +19:17:43:132 log timer task size: 1 +19:17:43:132 log timer task size: 1 +19:17:43:132 log timer task size: 1 +19:17:43:132 log timer task size: 1 +19:17:43:132 log timer task size: 1 +19:17:43:570 log timer task size: 1 diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/oh-package.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/oh-package.json5 index a8aff0c5af..3cd48480d0 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/oh-package.json5 +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/oh-package.json5 @@ -1,3 +1,18 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + { "modelVersion": "5.0.5", "description": "Please describe the basic information.", diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/ohosTest.md b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/ohosTest.md new file mode 100644 index 0000000000..3bcf2dad56 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/ohosTest.md @@ -0,0 +1,10 @@ +# ScreenCaptureSample测试用例归档 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +|----------------|-----------|---------------------------------------------------------|---------------------------|------|------| +| 拉起应用 | 设备正常运行 | | 成功拉起应用 | 是 | Pass | +| 录屏存文件功能 | 进入示例应用 | 1. 点击录屏存文件按钮
    2. 点击Start
    3. 一段时间后点击Stop | 生成录屏文件 | 是 | Pass | +| 录屏取码流功能 | 进入示例应用 | 1. 点击录屏取码流按钮
    2. 点击Start
    3. 一段时间后点击Stop | 生成录屏码流文件、麦克风音频文件和设备内录音频文件 | 是 | Pass | +| 录屏取码流Surface模式 | 进入示例应用 | 1. 点击录屏取码流Surface模式按钮
    2. 点击Start
    3. 一段时间后点击Stop | 生成录屏文件(播放时需要转码) | 是 | Pass | -- Gitee From 10aa9be74dcc029d853d138515a95b22f77fc70e Mon Sep 17 00:00:00 2001 From: xuzhangchi Date: Mon, 26 May 2025 22:39:51 +0800 Subject: [PATCH 08/20] 1 Signed-off-by: xuzhangchi --- .../entry/oh-package-lock.json5 | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/oh-package-lock.json5 diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/oh-package-lock.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/oh-package-lock.json5 deleted file mode 100644 index 5c8c8d6476..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/oh-package-lock.json5 +++ /dev/null @@ -1,18 +0,0 @@ -{ - "meta": { - "stableOrder": true - }, - "lockfileVersion": 3, - "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", - "specifiers": { - "libentry.so@src/main/cpp/types/libentry": "libentry.so@src/main/cpp/types/libentry" - }, - "packages": { - "libentry.so@src/main/cpp/types/libentry": { - "name": "libentry.so", - "version": "1.0.0", - "resolved": "src/main/cpp/types/libentry", - "registryType": "local" - } - } -} \ No newline at end of file -- Gitee From 2a6cb98f35a4c72b9141129841e3d2eed3c2e17f Mon Sep 17 00:00:00 2001 From: xzcbob Date: Mon, 26 May 2025 14:50:12 +0000 Subject: [PATCH 09/20] update code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/CMakeLists.txt. Signed-off-by: xzcbob --- .../ScreenCaptureSample/entry/src/main/cpp/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/CMakeLists.txt b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/CMakeLists.txt index 45e830cd4c..93de6dd25e 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/CMakeLists.txt +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/CMakeLists.txt @@ -13,7 +13,7 @@ include_directories(${NATIVERENDER_ROOT_PATH} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/include) -add_library(entry SHARED napi_init.cpp sample_callback.cpp) +add_library(entry SHARED napi_init.cpp sample_callback.cpp muxer.cpp) target_link_libraries(entry PUBLIC libace_napi.z.so libnative_buffer.so libhilog_ndk.z.so librawfile.z.so libnative_avscreen_capture.so libace_ndk.z.so libnative_media_codecbase.so libnative_media_core.so libnative_media_venc.so libnative_window.so libnative_media_avdemuxer.so libnative_media_avsource.so libnative_image.so librawfile.z.so libnative_media_avmuxer.so libnative_media_adec.so libnative_media_aenc.so -- Gitee From 14262a2be8750d63df30f0ae648632b540ed007d Mon Sep 17 00:00:00 2001 From: xzcbob Date: Mon, 26 May 2025 14:50:45 +0000 Subject: [PATCH 10/20] update code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/main.h. Signed-off-by: xzcbob --- .../ScreenCaptureSample/entry/src/main/cpp/main.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/main.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/main.h index 41d1693075..ea7b725fa8 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/main.h +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/main.h @@ -45,20 +45,26 @@ #include #include #include "sample_callback.h" +#include "muxer.h" static struct OH_AVScreenCapture *g_avCapture = {}; static FILE *micFile_ = nullptr; static FILE *vFile_ = nullptr; static FILE *innerFile_ = nullptr; +std::unique_ptr g_muxer; static char filename[100] = {0}; bool m_isRunning = false; bool m_scSaveFileIsRunning = false; bool m_scSurfaceIsRunning = false; OH_AVCodec *g_videoEnc; +CodecUserData *g_encContext = nullptr; +SampleInfo sampleInfo_; +std::unique_ptr inputVideoThread_; +std::atomic isStarted_{false}; -constexpr uint32_t DEFAULT_WIDTH = 720; +constexpr uint32_t DEFAULT_WIDTH = 4096; // 配置视频帧高度(必须) -constexpr uint32_t DEFAULT_HEIGHT = 1280; +constexpr uint32_t DEFAULT_HEIGHT = 4096; // 配置视频颜色格式(必须) constexpr OH_AVPixelFormat DEFAULT_PIXELFORMAT = AV_PIXEL_FORMAT_NV12; \ No newline at end of file -- Gitee From 0a526b921c76a589b38090289fd167e8a173a7a5 Mon Sep 17 00:00:00 2001 From: xuzhangchi Date: Mon, 26 May 2025 22:52:55 +0800 Subject: [PATCH 11/20] 2 Signed-off-by: xuzhangchi --- .../ScreenCaptureSample/entry/src/main/cpp/muxer.cpp | 0 .../ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/muxer.h | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/muxer.cpp create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/muxer.h diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/muxer.cpp b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/muxer.cpp new file mode 100644 index 0000000000..e69de29bb2 diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/muxer.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/muxer.h new file mode 100644 index 0000000000..e69de29bb2 -- Gitee From 4161a1c24a1950c8d82b00ff82dfca2a21ee1d3a Mon Sep 17 00:00:00 2001 From: xzcbob Date: Mon, 26 May 2025 14:53:11 +0000 Subject: [PATCH 12/20] update code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp. Signed-off-by: xzcbob --- .../entry/src/main/cpp/napi_init.cpp | 80 +++++++++++++++---- 1 file changed, 64 insertions(+), 16 deletions(-) diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp index 883a1777f0..999058144c 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/napi_init.cpp @@ -16,7 +16,6 @@ #include "main.h" using namespace std; -#define LOG_DOMAIN 0x3200 #define LOG_TAG "MY_TAG" static napi_value Add(napi_env env, napi_callback_info info) { @@ -235,7 +234,7 @@ static napi_value StartScreenCapture_02(napi_env env, napi_callback_info info) { OH_RecorderInfo recorderInfo; const std::string SCREEN_CAPTURE_ROOT = "/data/storage/el2/base/files/"; - int32_t outputFd = open((SCREEN_CAPTURE_ROOT + "screen01.mp4").c_str(), O_RDWR | O_CREAT, 0777); + int32_t outputFd = open((SCREEN_CAPTURE_ROOT + "saving_file.mp4").c_str(), O_RDWR | O_CREAT, 0777); std::string fileUrl = "fd://" + std::to_string(outputFd); recorderInfo.url = const_cast(fileUrl.c_str()); recorderInfo.fileFormat = OH_ContainerFormatType::CFT_MPEG_4; @@ -269,14 +268,49 @@ static napi_value StartScreenCapture_02(napi_env env, napi_callback_info info) { } // 开始录屏原始码流SurfaceMode +void ThreadVideoRunMethod() { + while (m_scSurfaceIsRunning) { + OH_LOG_INFO(LOG_APP, "==DEMO== ThreadVideoRunMethod m_scSurfaceIsRunning %{public}d", m_scSurfaceIsRunning); + if (!isStarted_.load()) { + return; + } + std::unique_lock lock(g_encContext->outputMutex_); + bool condRet = g_encContext->outputCond_.wait_for( + lock, 2s, [&]() { return !isStarted_.load() || !g_encContext->outputBufferInfoQueue_.empty(); }); + if (!isStarted_.load()) { + return; + } + if (g_encContext->outputBufferInfoQueue_.empty()) { + continue; + } + CodecBufferInfo bufferInfo = g_encContext->outputBufferInfoQueue_.front(); + g_encContext->outputBufferInfoQueue_.pop(); + if (bufferInfo.attr.flags & AVCODEC_BUFFER_FLAGS_EOS) { + lock.unlock(); + break; + } + lock.unlock(); + if (bufferInfo.buffer != nullptr) { + bufferInfo.attr.pts = (bufferInfo.attr.flags & AVCODEC_BUFFER_FLAGS_CODEC_DATA) + ? 0 + : (g_encContext->outputFrameCount_++ * 1000000 / sampleInfo_.frameRate); + g_muxer->WriteSample(reinterpret_cast(bufferInfo.buffer), bufferInfo.attr); + } + OH_VideoEncoder_FreeOutputBuffer(g_videoEnc, bufferInfo.bufferIndex); + } +} + static napi_value StartScreenCapture_03(napi_env env, napi_callback_info info) { + isStarted_.store(false); + inputVideoThread_ = nullptr; + g_encContext = nullptr; g_avCapture = OH_AVScreenCapture_Create(); if (g_avCapture == nullptr) { OH_LOG_ERROR(LOG_APP, "create screen capture failed"); } OH_AVScreenCaptureConfig config_; SetConfig(config_); - bool isMicrophone = true; + bool isMicrophone = false; OH_AVScreenCapture_SetMicrophoneEnabled(g_avCapture, isMicrophone); OH_AVScreenCapture_SetErrorCallback(g_avCapture, OnError, nullptr); OH_AVScreenCapture_SetStateCallback(g_avCapture, OnStateChange, nullptr); @@ -292,15 +326,17 @@ static napi_value StartScreenCapture_03(napi_env env, napi_callback_info info) { OH_AVCapability *capability = OH_AVCodec_GetCapability(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true); const char *name = OH_AVCapability_GetName(capability); g_videoEnc = OH_VideoEncoder_CreateByName(name); - auto sampleInfo = new SampleInfo; - auto codecUserData = new CodecUserData; - codecUserData->sampleInfo = sampleInfo; + g_muxer = std::make_unique(); + const std::string SCREEN_CAPTURE_ROOT = "/data/storage/el2/base/files/"; + int32_t outputFd = open((SCREEN_CAPTURE_ROOT + "surface.mp4").c_str(), O_RDWR | O_CREAT, 0777); + g_muxer->Create(outputFd); + g_encContext = new CodecUserData; + g_encContext->sampleInfo = &sampleInfo_; // 配置异步回调,调用 OH_VideoEncoder_SetCallback 接口 - int32_t ret = - OH_VideoEncoder_RegisterCallback(g_videoEnc, - {SampleCallback::OnError, SampleCallback::OnStreamChanged, - SampleCallback::OnNeedInputBuffer, SampleCallback::OnNewOutputBuffer}, - codecUserData); + OH_VideoEncoder_RegisterCallback(g_videoEnc, + {SampleCallback::OnError, SampleCallback::OnStreamChanged, + SampleCallback::OnNeedInputBuffer, SampleCallback::OnNewOutputBuffer}, + g_encContext); OH_AVFormat *format = OH_AVFormat_Create(); // 配置视频帧速率 double frameRate = 30.0; @@ -323,9 +359,13 @@ static napi_value StartScreenCapture_03(napi_env env, napi_callback_info info) { // 配置比特率 int64_t bitRate = 3000000; OH_AVFormat_SetIntValue(format, OH_MD_KEY_WIDTH, DEFAULT_WIDTH); + sampleInfo_.videoWidth = DEFAULT_WIDTH; OH_AVFormat_SetIntValue(format, OH_MD_KEY_HEIGHT, DEFAULT_HEIGHT); + sampleInfo_.videoHeight = DEFAULT_HEIGHT; OH_AVFormat_SetIntValue(format, OH_MD_KEY_PIXEL_FORMAT, DEFAULT_PIXELFORMAT); OH_AVFormat_SetDoubleValue(format, OH_MD_KEY_FRAME_RATE, frameRate); + sampleInfo_.frameRate = frameRate; + sampleInfo_.videoCodecMime = sampleInfo_.codecMime.data(); OH_AVFormat_SetIntValue(format, OH_MD_KEY_RANGE_FLAG, rangeFlag); OH_AVFormat_SetIntValue(format, OH_MD_KEY_COLOR_PRIMARIES, primary); OH_AVFormat_SetIntValue(format, OH_MD_KEY_TRANSFER_CHARACTERISTICS, transfer); @@ -346,9 +386,13 @@ static napi_value StartScreenCapture_03(napi_env env, napi_callback_info info) { OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture Started OH_VideoEncoder_GetSurface ret=%{public}d", result); } result = OH_VideoEncoder_Prepare(g_videoEnc); - + g_muxer->Config(sampleInfo_); + g_muxer->Start(); // 启动编码器 int32_t retEnc = OH_VideoEncoder_Start(g_videoEnc); + isStarted_.store(true); + m_scSurfaceIsRunning = true; + inputVideoThread_ = std::make_unique(ThreadVideoRunMethod); // 指定surface开始录屏 result = OH_AVScreenCapture_StartScreenCaptureWithSurface(g_avCapture, nativeWindow); if (result != AV_SCREEN_CAPTURE_ERR_OK) { @@ -356,8 +400,6 @@ static napi_value StartScreenCapture_03(napi_env env, napi_callback_info info) { OH_AVScreenCapture_Release(g_avCapture); } OH_LOG_INFO(LOG_APP, "==DEMO== ScreenCapture Started %{public}d", result); - - m_scSurfaceIsRunning = true; napi_value res; napi_create_int32(env, result, &res); return res; @@ -378,10 +420,16 @@ static napi_value StopScreenCapture(napi_env env, napi_callback_info info) { // 异常处理 } ret = OH_VideoEncoder_Destroy(g_videoEnc); - g_videoEnc = nullptr; if (ret != AV_ERR_OK) { // 异常处理 } + g_videoEnc = nullptr; + g_muxer->Stop(); + m_scSurfaceIsRunning = false; + isStarted_.store(false); + if (inputVideoThread_ && inputVideoThread_->joinable()) { + inputVideoThread_->join(); + } } if (m_scSaveFileIsRunning) { @@ -511,7 +559,7 @@ static napi_module demoModule = { .nm_flags = 0, .nm_filename = nullptr, .nm_register_func = Init, - .nm_modname = "screencapture", + .nm_modname = "entry", .nm_priv = ((void *)0), .reserved = {0}, }; -- Gitee From 90cbc8017ab0a1a08d205a4756bd47c5a55f252c Mon Sep 17 00:00:00 2001 From: xuzhangchi Date: Mon, 26 May 2025 22:54:18 +0800 Subject: [PATCH 13/20] 31 Signed-off-by: xuzhangchi --- .../ScreenCaptureSample/oh-package-lock.json5 | 27 ------------------- 1 file changed, 27 deletions(-) delete mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/oh-package-lock.json5 diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/oh-package-lock.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/oh-package-lock.json5 deleted file mode 100644 index c6f99f5c73..0000000000 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/oh-package-lock.json5 +++ /dev/null @@ -1,27 +0,0 @@ -{ - "meta": { - "stableOrder": true - }, - "lockfileVersion": 3, - "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", - "specifiers": { - "@ohos/hamock@1.0.0": "@ohos/hamock@1.0.0", - "@ohos/hypium@1.0.21": "@ohos/hypium@1.0.21" - }, - "packages": { - "@ohos/hamock@1.0.0": { - "name": "@ohos/hamock", - "version": "1.0.0", - "integrity": "sha512-K6lDPYc6VkKe6ZBNQa9aoG+ZZMiwqfcR/7yAVFSUGIuOAhPvCJAo9+t1fZnpe0dBRBPxj2bxPPbKh69VuyAtDg==", - "resolved": "https://repo.harmonyos.com/ohpm/@ohos/hamock/-/hamock-1.0.0.har", - "registryType": "ohpm" - }, - "@ohos/hypium@1.0.21": { - "name": "@ohos/hypium", - "version": "1.0.21", - "integrity": "sha512-iyKGMXxE+9PpCkqEwu0VykN/7hNpb+QOeIuHwkmZnxOpI+dFZt6yhPB7k89EgV1MiSK/ieV/hMjr5Z2mWwRfMQ==", - "resolved": "https://repo.harmonyos.com/ohpm/@ohos/hypium/-/hypium-1.0.21.har", - "registryType": "ohpm" - } - } -} \ No newline at end of file -- Gitee From 9b4f5cfa1f56f3757d89caf7d1d9aafec7b3cd0a Mon Sep 17 00:00:00 2001 From: xzcbob Date: Mon, 26 May 2025 14:55:21 +0000 Subject: [PATCH 14/20] update code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/muxer.cpp. Signed-off-by: xzcbob --- .../entry/src/main/cpp/muxer.cpp | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/muxer.cpp b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/muxer.cpp index e69de29bb2..83b830fbd2 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/muxer.cpp +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/muxer.cpp @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "muxer.h" +#include "hilog/log.h" + +#undef LOG_TAG +#define LOG_TAG "Muxer" + +namespace { +constexpr int32_t VERTICAL_ANGLE = 90; +constexpr int32_t HORIZONTAL_ANGLE = 0; +} + +Muxer::~Muxer() +{ + Release(); +} + +int32_t Muxer::Create(int32_t fd) +{ + muxer_ = OH_AVMuxer_Create(fd, AV_OUTPUT_FORMAT_MPEG_4); + return 0; +} + +int32_t Muxer::Config(SampleInfo &sampleInfo) +{ + OH_LOG_INFO(LOG_APP, "==DEMO== Config"); + OH_AVFormat *formatVideo = OH_AVFormat_CreateVideoFormat(sampleInfo.codecMime.data(), + sampleInfo.videoWidth, sampleInfo.videoHeight); + + OH_AVFormat_SetDoubleValue(formatVideo, OH_MD_KEY_FRAME_RATE, sampleInfo.frameRate); + OH_AVFormat_SetIntValue(formatVideo, OH_MD_KEY_WIDTH, sampleInfo.videoWidth); + OH_AVFormat_SetIntValue(formatVideo, OH_MD_KEY_HEIGHT, sampleInfo.videoHeight); + OH_AVFormat_SetStringValue(formatVideo, OH_MD_KEY_CODEC_MIME, sampleInfo.codecMime.data()); + + int32_t ret = OH_AVMuxer_AddTrack(muxer_, &videoTrackId_, formatVideo); + OH_AVFormat_Destroy(formatVideo); + OH_LOG_INFO(LOG_APP, "==DEMO== Config End"); + return 0; +} + +int32_t Muxer::Start() +{ + int ret = OH_AVMuxer_Start(muxer_); + return 0; +} + +int32_t Muxer::WriteSample(OH_AVBuffer *buffer, OH_AVCodecBufferAttr &attr) +{ + int32_t ret = OH_AVBuffer_SetBufferAttr(buffer, &attr); + ret = OH_AVMuxer_WriteSampleBuffer(muxer_, videoTrackId_, buffer); + return 0; +} + +int32_t Muxer::Stop() +{ + int32_t ret = OH_AVMuxer_Stop(muxer_); + return 0; +} + +int32_t Muxer::Release() +{ + if (muxer_ != nullptr) { + OH_AVMuxer_Destroy(muxer_); + muxer_ = nullptr; + } + return 0; +} -- Gitee From 37e4882270f20c51ee363b792c3a75f151023ec1 Mon Sep 17 00:00:00 2001 From: xzcbob Date: Mon, 26 May 2025 14:55:41 +0000 Subject: [PATCH 15/20] update code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/muxer.h. Signed-off-by: xzcbob --- .../entry/src/main/cpp/muxer.h | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/muxer.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/muxer.h index e69de29bb2..9930a14a1e 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/muxer.h +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/muxer.h @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MUXER_H +#define MUXER_H +#define LOG_DOMAIN 0x3200 +#define LOG_TAG "MY_SCNDKDEMO" +#include +#include "sample_info.h" +#include "multimedia/player_framework/native_avmuxer.h" + +class Muxer { +public: + Muxer() = default; + ~Muxer(); + + int32_t Create(int32_t fd); + int32_t Config(SampleInfo &sampleInfo); + int32_t Start(); + int32_t WriteSample(OH_AVBuffer *buffer, OH_AVCodecBufferAttr &attr); + + int32_t Stop(); + int32_t Release(); + +private: + OH_AVMuxer *muxer_ = nullptr; + int32_t videoTrackId_ = -1; + int32_t audioTrackId_ = -1; + int32_t coverTrackId_ = -1; +}; + +#endif // MUXER_H \ No newline at end of file -- Gitee From 32cced92c7e9ea823caecf016905fb902fe2d5d8 Mon Sep 17 00:00:00 2001 From: xzcbob Date: Mon, 26 May 2025 14:56:11 +0000 Subject: [PATCH 16/20] 1 Signed-off-by: xzcbob --- .../entry/src/main/cpp/sample_callback.cpp | 26 +++++++------------ 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.cpp b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.cpp index 9d097930aa..b138367659 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.cpp +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.cpp @@ -32,14 +32,15 @@ void SampleCallback::OnError(OH_AVCodec *codec, int32_t errorCode, void *userDat // 设置 OnStreamChanged 回调函数 void SampleCallback::OnStreamChanged(OH_AVCodec *codec, OH_AVFormat *format, void *userData) { // surface模式下,该回调函数无作用 -(void)codec; -(void)format; -(void)userData; + (void)codec; + (void)format; + (void)userData; } // 设置 OH_AVCodecOnNeedInputBuffer 回调函数,编码输入帧送入数据队列 void SampleCallback::OnNeedInputBuffer(OH_AVCodec *codec, uint32_t index, OH_AVBuffer *buffer, void *userData) { // surface模式下,该回调函数无作用,用户通过获取的surface输入数据 + OH_LOG_INFO(LOG_APP, "==DEMO== Video OnNeedInputBuffer"); (void)userData; (void)index; (void)buffer; @@ -49,8 +50,8 @@ void SampleCallback::OnNeedInputBuffer(OH_AVCodec *codec, uint32_t index, OH_AVB (void)codec; CodecUserData *codecUserData = static_cast(userData); std::unique_lock lock(codecUserData->inputMutex_); -// codecUserData->inputBufferInfoQueue_.emplace(index, buffer); -// codecUserData->inputCond_.notify_all(); + codecUserData->inputBufferInfoQueue_.emplace(index, buffer); + codecUserData->inputCond_.notify_all(); } // 设置 OH_AVCodecOnNewOutputBuffer 回调函数,编码完成帧送入输出队列 @@ -59,20 +60,13 @@ void SampleCallback::OnNewOutputBuffer(OH_AVCodec *codec, uint32_t index, OH_AVB // 完成帧的数据buffer送入outBufferQueue队列 // 数据处理,请参考: // - 释放编码帧 + OH_LOG_INFO(LOG_APP, "==DEMO== Video OnNewOutputBuffer"); if (userData == nullptr) { return; } (void)codec; - OH_AVCodecBufferAttr info; - int32_t ret = OH_AVBuffer_GetBufferAttr(buffer, &info); - CodecUserData *codecUserData = static_cast(userData); std::unique_lock lock(codecUserData->outputMutex_); -// codecUserData->outputBufferInfoQueue_.emplace(index, buffer); -// codecUserData->outputCond_.notify_all(); - - ret = OH_VideoEncoder_FreeOutputBuffer(codec, index); - if (ret != AV_ERR_OK) { - // 异常处理 - } -} \ No newline at end of file + codecUserData->outputBufferInfoQueue_.emplace(index, buffer); + codecUserData->outputCond_.notify_all(); +} -- Gitee From a30a269cc4ecca5ab7d6abc2dc20b00f9ecdb858 Mon Sep 17 00:00:00 2001 From: xzcbob Date: Mon, 26 May 2025 14:56:37 +0000 Subject: [PATCH 17/20] 2 Signed-off-by: xzcbob --- .../entry/src/main/cpp/sample_callback.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.h index 3c3536c0c3..2b6be13ee1 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.h +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_callback.h @@ -15,14 +15,22 @@ #ifndef AVCODEC_SAMPLE_CALLBACK_H #define AVCODEC_SAMPLE_CALLBACK_H +#define LOG_DOMAIN 0x3200 +#define LOG_TAG "MY_SCNDKDEMO" #include "sample_info.h" +#include class SampleCallback { public: + SampleCallback() {} + SampleCallback(SampleCallback *p1) {} static void OnError(OH_AVCodec *codec, int32_t errorCode, void *userData); static void OnStreamChanged(OH_AVCodec *codec, OH_AVFormat *format, void *userData); static void OnNeedInputBuffer(OH_AVCodec *codec, uint32_t index, OH_AVBuffer *buffer, void *userData); static void OnNewOutputBuffer(OH_AVCodec *codec, uint32_t index, OH_AVBuffer *buffer, void *userData); + + OH_AVMuxer *muxer_ = nullptr; + int32_t g_videoTrackId = -1; }; #endif //AVCODEC_SAMPLE_CALLBACK_H -- Gitee From 1711b64a3ce1eafdaff4e69974793dcce5448cbc Mon Sep 17 00:00:00 2001 From: xzcbob Date: Mon, 26 May 2025 14:57:13 +0000 Subject: [PATCH 18/20] 1 Signed-off-by: xzcbob --- .../entry/src/main/cpp/sample_info.h | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_info.h b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_info.h index 5ccb2112c3..9f7726786a 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_info.h +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/cpp/sample_info.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2025 Huawei Device Co., Ltd. + * Copyright (C) 2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -23,8 +23,8 @@ #include #include #include -#include "multimedia/player_framework/native_avcodec_base.h" -#include "multimedia/player_framework/native_avbuffer.h" +#include +#include #define ANNEXB_INPUT_ONLY 1 @@ -37,18 +37,20 @@ constexpr int32_t BITRATE_30M = 30 * 1024 * 1024; // 30Mbps struct SampleInfo { int32_t sampleId = 0; + int32_t inputFd = -1; int32_t outFd = -1; int64_t inputFileOffset = 0; int64_t inputFileSize = 0; std::string inputFilePath; std::string outputFilePath; + std::string videoCodecMime = ""; + std::string audioCodecMime = ""; std::string codecMime = MIME_VIDEO_AVC.data(); int32_t videoWidth = 0; int32_t videoHeight = 0; double frameRate = 0.0; int64_t bitrate = 10 * 1024 * 1024; // 10Mbps; - int64_t frameInterval = 0; int32_t perfmode = 0; int64_t durationTime = 0; @@ -62,11 +64,13 @@ struct SampleInfo { int32_t rotation = 0; OHNativeWindow *window = nullptr; + int32_t sampleRate = 44100; + int32_t channelCount = 2; + uint32_t bufferSize = 0; double readTime = 0; double memcpyTime = 0; double writeTime = 0; - void (*PlayDoneCallback)(void *context) = nullptr; void *playDoneCallbackData = nullptr; }; @@ -90,6 +94,21 @@ struct CodecBufferInfo { }; }; +class AEncBufferSignal { +public: + std::mutex inMutex_; + std::mutex outMutex_; + std::mutex startMutex_; + std::condition_variable inCond_; + std::condition_variable outCond_; + std::condition_variable startCond_; + std::queue inQueue_; + std::queue outQueue_; + std::queue inBufferQueue_; + std::queue outBufferQueue_; + OH_AVCodecBufferAttr audioInfo = {0, 0, 0, AVCODEC_BUFFER_FLAGS_NONE}; +}; + class CodecUserData { public: SampleInfo *sampleInfo = nullptr; -- Gitee From 5a43e757da2d03b347e9caf5f4cb372ef8050e7f Mon Sep 17 00:00:00 2001 From: xuzhangchi Date: Thu, 29 May 2025 21:35:12 +0800 Subject: [PATCH 19/20] sample Signed-off-by: xuzhangchi --- .../ScreenCaptureSample/README_zh.md | 2 +- .../ScreenCaptureSample/build-profile.json5 | 6 +- .../entry/build-profile.json5 | 4 + .../entry/oh-package-lock.json5 | 18 ++ .../entry/src/main/ets/pages/Index.ets | 6 +- .../entry/src/main/ets/pages/Menu.ets | 2 +- .../entry/src/main/ets/pages/Scene4.ets | 4 +- .../entry/src/main/ets/pages/Scene99.ets | 162 ++++++++++++++++++ .../ScreenCapture/ScreenCaptureSample/log.txt | 5 + .../ScreenCaptureSample/oh-package-lock.json5 | 27 +++ 10 files changed, 226 insertions(+), 10 deletions(-) create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/oh-package-lock.json5 create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene99.ets create mode 100644 code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/oh-package-lock.json5 diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/README_zh.md b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/README_zh.md index 8ac7552432..d8340addbf 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/README_zh.md +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/README_zh.md @@ -45,7 +45,7 @@ entry/src/main # 录屏demo业务代码 │ Scene1.ets # 录屏存文件场景 │ Scene2.ets # 录屏取码流场景 │ Scene3.ets # 录屏取码流Surface场景 -│ Scene4.ets # 其他场景 +│ Scene99.ets # 其他场景 │ └─resources # 资源文件 ``` diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/build-profile.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/build-profile.json5 index c23fc126c8..2acf21ff66 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/build-profile.json5 +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/build-profile.json5 @@ -35,15 +35,15 @@ "signingConfigs": [ { "name": "default", - "type": "HarmonyOS", + "type": "OpenHarmony", "material": { "certpath": "C:\\Users\\Administrator\\.ohos\\config\\default_ScreenCaptureSample_7ukOyNpC8nTumHEkp8OgkgKW4VEy6wKEsBHrIDg9Q74=.cer", "keyAlias": "debugKey", - "keyPassword": "0000001A6DE2202D2D984A90FF1E544A13AC54BA267BEF351ACC6A1203D72C79F75FF3DBCD2F12CC8147", + "keyPassword": "0000001B18EBA4F6A2FA19E1855B69D994FFB8BDD8AD27CC167B83A6311BBF4334718BFEA0CCF612FADBB5", "profile": "C:\\Users\\Administrator\\.ohos\\config\\default_ScreenCaptureSample_7ukOyNpC8nTumHEkp8OgkgKW4VEy6wKEsBHrIDg9Q74=.p7b", "signAlg": "SHA256withECDSA", "storeFile": "C:\\Users\\Administrator\\.ohos\\config\\default_ScreenCaptureSample_7ukOyNpC8nTumHEkp8OgkgKW4VEy6wKEsBHrIDg9Q74=.p12", - "storePassword": "0000001A3BB1C53BB88A60625556A56C3DD99B1CC7819996C7D8388512B64921D01C628C59B955AEF766" + "storePassword": "0000001BD581446319EB604BB976E70A6776E6FC2EA83A843267D25485CA21419296BB467717F1D75867C2" } } ] diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/build-profile.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/build-profile.json5 index 01bed8940f..6125a7467d 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/build-profile.json5 +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/build-profile.json5 @@ -20,6 +20,10 @@ "path": "./src/main/cpp/CMakeLists.txt", "arguments": "", "cppFlags": "", + "abiFilters": [ + "armeabi-v7a", + "arm64-v8a" + ] } }, "buildOptionSet": [ diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/oh-package-lock.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/oh-package-lock.json5 new file mode 100644 index 0000000000..5c8c8d6476 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/oh-package-lock.json5 @@ -0,0 +1,18 @@ +{ + "meta": { + "stableOrder": true + }, + "lockfileVersion": 3, + "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", + "specifiers": { + "libentry.so@src/main/cpp/types/libentry": "libentry.so@src/main/cpp/types/libentry" + }, + "packages": { + "libentry.so@src/main/cpp/types/libentry": { + "name": "libentry.so", + "version": "1.0.0", + "resolved": "src/main/cpp/types/libentry", + "registryType": "local" + } + } +} \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Index.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Index.ets index 9e32ea0a8e..dbbebae3d3 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Index.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Index.ets @@ -1,7 +1,7 @@ import {Scene1} from './Scene1'; import {Scene2} from './Scene2'; import {Scene3} from './Scene3'; -import {Scene4} from './Scene4'; +import {Scene99} from './Scene99'; class DividerTmp { strokeWidth: Length = 1 @@ -31,8 +31,8 @@ struct Index { Scene2() } else if (name == 'Scene3') { Scene3() - } else if (name == 'Scene4') { - Scene4() + } else if (name == 'Scene99') { + Scene99() } } diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Menu.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Menu.ets index 615b016994..0258fc3a79 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Menu.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Menu.ets @@ -80,7 +80,7 @@ export struct MenuSCComponent { MenuItem({ content: $r('app.string.all_mode_desc') }) .onChange((selected) => { router.pushUrl({ - url: 'pages/Scene4' // 目标url + url: 'pages/Scene99' // 目标url }, router.RouterMode.Single, (err) => { if (err) { console.error(`Invoke pushUrl failed, code is ${err.code}, message is ${err.message}`); diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene4.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene4.ets index 86edb413cf..37230e7b4c 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene4.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene4.ets @@ -17,9 +17,9 @@ import { hilog } from '@kit.PerformanceAnalysisKit'; import testNapi from 'libentry.so'; import {MenuSCComponent} from './Menu'; -@Entry({ routeName : 'Scene4' }) +@Entry({ routeName : 'Scene99' }) @Component -export struct Scene4 { +export struct Scene99 { @State isCapturing: boolean = false; @Consume('pageInfos') pageInfos: NavPathStack; diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene99.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene99.ets new file mode 100644 index 0000000000..37230e7b4c --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene99.ets @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import testNapi from 'libentry.so'; +import {MenuSCComponent} from './Menu'; + +@Entry({ routeName : 'Scene99' }) +@Component +export struct Scene99 { + @State isCapturing: boolean = false; + @Consume('pageInfos') pageInfos: NavPathStack; + + build() { + NavDestination() { + + Column({ space: 15 }) { + Column() { + MenuSCComponent() + Text($r('app.string.all_mode_desc')) + .fontSize(25) + .fontWeight(FontWeight.Bold) + } + .width('100%') + .height('10%').border({ width: 1 }) + + Column() { + Text($r('app.string.saving_file_eng_desc')) + .fontSize(20) + .fontWeight(FontWeight.Bold) + .onClick(() => { + hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3)); + }) + List({ space: 40 }) { + ListItem() { + Button($r('app.string.start_desc'), { type: ButtonType.Circle, stateEffect: true }) + .backgroundColor(0xF55A42) + .width(90) + .height(90) + .onClick(() => { + if (testNapi.startCaptureAsFile() == 0) { + this.isCapturing = true; + } + }) + } + + ListItem() { + } + + ListItem() { + Button($r('app.string.stop_desc'), { type: ButtonType.Normal, stateEffect: true }) + .backgroundColor(0x000000) + .width(85) + .height(85) + .shadow({ radius: 10 }) + .onClick(() => { + if (this.isCapturing) { + testNapi.stopScreenCapture(); + this.isCapturing = false; + } + }) + } + }.listDirection(Axis.Horizontal).lanes({ minLength: 200, maxLength: 300 }) + } + .width('100%') + .height('20%').border({ width: 1 }) + + Column() { + Text($r('app.string.streaming_eng_desc')) + .fontSize(20) + .fontWeight(FontWeight.Bold) + .onClick(() => { + hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3)); + }) + List({ space: 40 }) { + ListItem() { + Button($r('app.string.start_desc'), { type: ButtonType.Circle, stateEffect: true }) + .backgroundColor(0xF55A42) + .width(90) + .height(90) + .onClick(() => { + if (testNapi.startScreenCapture() == 0) { + this.isCapturing = true; + } + }) + } + ListItem() { + } + ListItem() { + Button($r('app.string.stop_desc'), { type: ButtonType.Normal, stateEffect: true }) + .backgroundColor(0x000000) + .width(85) + .height(85) + .shadow({ radius: 10 }) + .onClick(() => { + if (this.isCapturing) { + testNapi.stopScreenCapture(); + this.isCapturing = false; + } + }) + } + }.listDirection(Axis.Horizontal).lanes({ minLength: 200, maxLength: 300 }) + } + .width('100%') + .height('20%').border({ width: 1 }) + + Column() { + Text($r('app.string.streaming_surface_mode_eng_desc')) + .fontSize(20) + .fontWeight(FontWeight.Bold) + .onClick(() => { + hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3)); + }) + List({ space: 40 }) { + ListItem() { + Button($r('app.string.start_desc'), { type: ButtonType.Circle, stateEffect: true }) + .backgroundColor(0xF55A42) + .width(90) + .height(90) + .onClick(() => { + if (testNapi.startScreenCaptureWithSurface() == 0) { + this.isCapturing = true; + } + }) + } + ListItem() { + } + ListItem() { + Button($r('app.string.stop_desc'), { type: ButtonType.Normal, stateEffect: true }) + .backgroundColor(0x000000) + .width(85) + .height(85) + .shadow({ radius: 10 }) + .onClick(() => { + if (this.isCapturing) { + testNapi.stopScreenCapture(); + this.isCapturing = false; + } + }) + } + }.listDirection(Axis.Horizontal).lanes({ minLength: 200, maxLength: 300 }) + } + .width('100%') + .height('20%').border({ width: 1 }) + } + .height('100%') + } + .title($r('app.string.all_mode_desc')) + } +} \ No newline at end of file diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/log.txt b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/log.txt index 17cc32bea3..0efc6c5f6d 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/log.txt +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/log.txt @@ -518,3 +518,8 @@ 19:17:43:132 log timer task size: 1 19:17:43:132 log timer task size: 1 19:17:43:570 log timer task size: 1 +22:58:55:615 log task queue not empty +22:58:55:616 log task size: 1 +22:58:55:616 log before pop task size: 1 +22:58:55:616 log after task size: 0 +22:58:56:133 log timer task size: 1 diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/oh-package-lock.json5 b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/oh-package-lock.json5 new file mode 100644 index 0000000000..c6f99f5c73 --- /dev/null +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/oh-package-lock.json5 @@ -0,0 +1,27 @@ +{ + "meta": { + "stableOrder": true + }, + "lockfileVersion": 3, + "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", + "specifiers": { + "@ohos/hamock@1.0.0": "@ohos/hamock@1.0.0", + "@ohos/hypium@1.0.21": "@ohos/hypium@1.0.21" + }, + "packages": { + "@ohos/hamock@1.0.0": { + "name": "@ohos/hamock", + "version": "1.0.0", + "integrity": "sha512-K6lDPYc6VkKe6ZBNQa9aoG+ZZMiwqfcR/7yAVFSUGIuOAhPvCJAo9+t1fZnpe0dBRBPxj2bxPPbKh69VuyAtDg==", + "resolved": "https://repo.harmonyos.com/ohpm/@ohos/hamock/-/hamock-1.0.0.har", + "registryType": "ohpm" + }, + "@ohos/hypium@1.0.21": { + "name": "@ohos/hypium", + "version": "1.0.21", + "integrity": "sha512-iyKGMXxE+9PpCkqEwu0VykN/7hNpb+QOeIuHwkmZnxOpI+dFZt6yhPB7k89EgV1MiSK/ieV/hMjr5Z2mWwRfMQ==", + "resolved": "https://repo.harmonyos.com/ohpm/@ohos/hypium/-/hypium-1.0.21.har", + "registryType": "ohpm" + } + } +} \ No newline at end of file -- Gitee From 6d7fa1d39c15a96798f5f350dfa362f3f13c7d90 Mon Sep 17 00:00:00 2001 From: xzcbob Date: Thu, 29 May 2025 13:47:56 +0000 Subject: [PATCH 20/20] update code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene4.ets. Signed-off-by: xzcbob --- .../entry/src/main/ets/pages/Scene4.ets | 428 ++++++++++++------ 1 file changed, 295 insertions(+), 133 deletions(-) diff --git a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene4.ets b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene4.ets index 37230e7b4c..1d7195cf9d 100644 --- a/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene4.ets +++ b/code/DocsSample/Media/ScreenCapture/ScreenCaptureSample/entry/src/main/ets/pages/Scene4.ets @@ -13,150 +13,312 @@ * limitations under the License. */ -import { hilog } from '@kit.PerformanceAnalysisKit'; -import testNapi from 'libentry.so'; -import {MenuSCComponent} from './Menu'; +import DateTimeUtil from '../common/utils/DateTimeUtils'; +import picker from '@ohos.file.picker'; +import { BusinessError } from '@ohos.base'; +import { media } from '@kit.MediaKit'; +import fs from '@ohos.file.fs'; +import { common } from '@kit.AbilityKit'; +import { deviceInfo } from '@kit.BasicServicesKit'; + +let context = getContext(this) as common.UIAbilityContext; +let filesDir = context.filesDir; -@Entry({ routeName : 'Scene99' }) @Component -export struct Scene99 { - @State isCapturing: boolean = false; +export struct Scene6 { + @State message: string = 'js录屏存文件'; @Consume('pageInfos') pageInfos: NavPathStack; + private context: Context = getContext(this); + private lastSaveTime: string = ''; + private saveIndex: number = 0; + private outputFd: number | null = null; + private avScreenCaptureRecorder?: media.AVScreenCaptureRecorder; + private displayId:number = 0; + private isStarted: boolean = false; + private filepathSC: string = ''; + @State text: string = "PRESERVE_ASPECT_RATIO" - build() { - NavDestination() { + checkName(name: string): string { + if (this.lastSaveTime == name) { + this.saveIndex += 1; + return `${name}_${this.saveIndex}` + } + this.lastSaveTime = name; + this.saveIndex = 0; + return name; + } - Column({ space: 15 }) { - Column() { - MenuSCComponent() - Text($r('app.string.all_mode_desc')) - .fontSize(25) - .fontWeight(FontWeight.Bold) - } - .width('100%') - .height('10%').border({ width: 1 }) - - Column() { - Text($r('app.string.saving_file_eng_desc')) - .fontSize(20) - .fontWeight(FontWeight.Bold) - .onClick(() => { - hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3)); - }) - List({ space: 40 }) { - ListItem() { - Button($r('app.string.start_desc'), { type: ButtonType.Circle, stateEffect: true }) - .backgroundColor(0xF55A42) - .width(90) - .height(90) - .onClick(() => { - if (testNapi.startCaptureAsFile() == 0) { - this.isCapturing = true; - } - }) - } + StopRecording() { + if (!this.avScreenCaptureRecorder) { + return; + } + this.avScreenCaptureRecorder?.stopRecording(); + if (this.outputFd != undefined && this.outputFd?.valueOf() > 0) { + fs.close(this.outputFd); + } + this.avScreenCaptureRecorder?.release(); + this.isStarted = false; + this.outputFd = -1; + } - ListItem() { - } + async createVideoFd(): Promise { + console.info('==UI the value of the deviceType in'); + let deviceTypeInfo: string = deviceInfo.deviceType; + console.info('==UI the value of the deviceType is :' + deviceTypeInfo); - ListItem() { - Button($r('app.string.stop_desc'), { type: ButtonType.Normal, stateEffect: true }) - .backgroundColor(0x000000) - .width(85) - .height(85) - .shadow({ radius: 10 }) - .onClick(() => { - if (this.isCapturing) { - testNapi.stopScreenCapture(); - this.isCapturing = false; - } - }) - } - }.listDirection(Axis.Horizontal).lanes({ minLength: 200, maxLength: 300 }) - } - .width('100%') - .height('20%').border({ width: 1 }) - - Column() { - Text($r('app.string.streaming_eng_desc')) - .fontSize(20) - .fontWeight(FontWeight.Bold) - .onClick(() => { - hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3)); - }) - List({ space: 40 }) { - ListItem() { - Button($r('app.string.start_desc'), { type: ButtonType.Circle, stateEffect: true }) - .backgroundColor(0xF55A42) - .width(90) - .height(90) - .onClick(() => { - if (testNapi.startScreenCapture() == 0) { - this.isCapturing = true; - } - }) - } - ListItem() { - } - ListItem() { - Button($r('app.string.stop_desc'), { type: ButtonType.Normal, stateEffect: true }) - .backgroundColor(0x000000) - .width(85) - .height(85) - .shadow({ radius: 10 }) - .onClick(() => { - if (this.isCapturing) { - testNapi.stopScreenCapture(); - this.isCapturing = false; - } - }) + const mDateTimeUtil = new DateTimeUtil(); + const displayName = this.checkName(`AVSCJSFile_${mDateTimeUtil.getDate()}_${mDateTimeUtil.getTime()}`) + '.mp4'; + let videoFd: number = 0; + const documentViewPicker = new picker.DocumentViewPicker(); + const documentSaveOptions = new picker.DocumentSaveOptions(); + documentSaveOptions.pickerMode = picker.DocumentPickerMode.DOWNLOAD; + await documentViewPicker.save(documentSaveOptions); + if (deviceInfo.deviceType === '2in1') { + //PC + let filepathSC = '/storage/Users/currentUser/Download/com.demo.avscreencapturendkdemo/' + displayName; + await fs.open(filepathSC, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE).then((file) => { + videoFd = file.fd; + }).catch((err: BusinessError) => { + console.info("open file failed with error message: " + err.message + ", error code: " + err.code); + }) + } else if (deviceInfo.deviceType === 'phone') { + // Phone + const documentViewPicker = new picker.DocumentViewPicker(); + const documentSaveOptions = new picker.DocumentSaveOptions(); + documentSaveOptions.pickerMode = picker.DocumentPickerMode.DOWNLOAD; + await documentViewPicker.save(documentSaveOptions); + this.filepathSC = '/storage/Users/currentUser/Download/com.demo.avscreencapturendkdemo/' + displayName; + console.info('==UI photoViewPicker.save successfully, filepathSC uri: ' + this.filepathSC); + await fs.open(this.filepathSC, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE).then((file) => { + videoFd = file.fd; + }).catch((err: BusinessError) => { + fs.unlinkSync(this.filepathSC); + console.info("==UI open file failed with error message: " + err.message + ", error code: " + err.code); + }) + console.info("==UI selectOutputFilePath createVideoFd videoFd: " + videoFd); + // console.info("==UI createVideoFd filesDir: " + filesDir); ///data/storage/el2/base/haps/screencapture/files + // let file = fs.openSync(filesDir + displayName, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); + // videoFd = file.fd; + } + console.info("==UI createVideoFd videoFd: " + videoFd); + return videoFd; + } + + async wait2Second(): Promise { + const result: string = await new Promise((resolve: Function) => { + setTimeout(() => { + resolve('等待2秒'); + }, 2000); + }); + console.info(result); // 输出: Hello, world! + } + async wait5Second(): Promise { + const result: string = await new Promise((resolve: Function) => { + setTimeout(() => { + resolve('等待2秒'); + }, 5000); + }); + console.info(result); // 输出: Hello, world! + } + async StartRecording(): Promise { + if (this.isStarted === true) { + console.info("==UI isStarted: " + this.outputFd); + return; + } + this.outputFd = await this.createVideoFd() + console.info("==UI outputFd: " + this.outputFd); + for (let i = 0;i < 1 ;i++) { + console.info("==UI i:" + i); + // let videoFdInner: number = 0; + // let filename: string = "AVCodec_"+i+".mp4"; + // let file = fs.openSync(filesDir + filename, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); + // console.info("selectOutputFilePath filesDir: " + filesDir ); + // + // console.info("selectOutputFilePath outputFd: " + file.fd ); + // videoFdInner = file.fd; + + if (this.outputFd != 0) { + console.info("selectOutputFilePath outputFd: " + this.outputFd ); + let avCaptureConfig: media.AVScreenCaptureRecordConfig = { + fd: this.outputFd , + frameWidth: 2472, + frameHeight: 1608, + videoBitrate: 10000000, + audioSampleRate: 48000, + audioChannelCount: 2, + audioBitrate: 96001, + displayId: this.displayId, + preset: media.AVScreenCaptureRecordPreset.SCREEN_RECORD_PRESET_H265_AAC_MP4, + }; + this.avScreenCaptureRecorder = await media.createAVScreenCaptureRecorder(); + await this.avScreenCaptureRecorder.init(avCaptureConfig).then(() => { + console.info('==UI Succeeded in initing avScreenCaptureRecorder'); + }).catch((err: BusinessError) => { + fs.unlinkSync(this.filepathSC); + console.info('==UI Failed to init avScreenCaptureRecorder, error: ' + err.message); + console.info('==UI Failed to init avScreenCaptureRecorder, error: ' + err.code); + }) + + this.avScreenCaptureRecorder.setMicEnabled(true).then(() => { + console.info('==UI Succeeded in setMicEnabled avScreenCaptureRecorder'); + }).catch((err: BusinessError) => { + console.info('==UI Failed to setMicEnabled avScreenCaptureRecorder, error: ' + err.message); + }) + + this.avScreenCaptureRecorder.on('error', (err: BusinessError) => { + console.error('==UI avScreenCaptureRecorder error:' + err.message); + fs.unlinkSync(this.filepathSC); + }) + + this.avScreenCaptureRecorder!.on('stateChange', async (state: media.AVScreenCaptureStateCode) => { + console.info('==UI avScreenCaptureRecorder stateChange to ' + state); + switch (state) { + case media.AVScreenCaptureStateCode.SCREENCAPTURE_STATE_STARTED: + console.info("录屏成功开始后会收到的回调"); + break; + case media.AVScreenCaptureStateCode.SCREENCAPTURE_STATE_CANCELED: + this.avScreenCaptureRecorder?.release(); + this.avScreenCaptureRecorder = undefined; + console.info("== AAA 删除取消的文件"); + console.info("== AAA filepathSC uri: " + this.filepathSC); + fs.unlinkSync(this.filepathSC); + console.info("不允许使用录屏功能"); + break; + case media.AVScreenCaptureStateCode.SCREENCAPTURE_STATE_STOPPED_BY_USER: + this.avScreenCaptureRecorder?.stopRecording(); + this.avScreenCaptureRecorder?.release(); + this.avScreenCaptureRecorder = undefined; + console.info("通过录屏胶囊结束录屏,底层录制会停止"); + break; + case media.AVScreenCaptureStateCode.SCREENCAPTURE_STATE_INTERRUPTED_BY_OTHER: + console.info("录屏因其他中断而停止,底层录制会停止"); + break; + case media.AVScreenCaptureStateCode.SCREENCAPTURE_STATE_STOPPED_BY_CALL: + console.info("录屏过程因通话中断,底层录制会停止"); + break; + case media.AVScreenCaptureStateCode.SCREENCAPTURE_STATE_MIC_UNAVAILABLE: + console.info("录屏麦克风不可用"); + break; + case media.AVScreenCaptureStateCode.SCREENCAPTURE_STATE_MIC_MUTED_BY_USER: + console.info("录屏麦克风被用户静音"); + break; + case media.AVScreenCaptureStateCode.SCREENCAPTURE_STATE_MIC_UNMUTED_BY_USER: + console.info("录屏麦克风被用户取消静音"); + break; + case media.AVScreenCaptureStateCode.SCREENCAPTURE_STATE_ENTER_PRIVATE_SCENE: + // 目前可以从系统直接注册监听到进入隐私场景 + console.info("录屏进入隐私场景"); + break; + case media.AVScreenCaptureStateCode.SCREENCAPTURE_STATE_EXIT_PRIVATE_SCENE: + console.info("录屏退出隐私场景"); + break; + case media.AVScreenCaptureStateCode.SCREENCAPTURE_STATE_STOPPED_BY_USER_SWITCHES: + console.info("用户账号切换,底层录制会停止"); + break; + default: + break; } - }.listDirection(Axis.Horizontal).lanes({ minLength: 200, maxLength: 300 }) + }) + // await avScreenCaptureRecorder.stopRecording(); + // await avScreenCaptureRecorder.release(); + // await this.wait2Second(); + await this.avScreenCaptureRecorder?.startRecording().then(() => { + console.info('==UI Succeeded in starting avScreenCaptureRecorder'); + this.isStarted = true; + }).catch((err: BusinessError) => { + console.info('==UI Failed to start avScreenCaptureRecorder, error: ' + err.message); + }) +// await avScreenCaptureRecorder.startRecording().then(() => { +// console.info('JJ Succeeded in starting avScreenCaptureRecorder'); +// }).catch((err: BusinessError) => { +// console.info('JJ Failed to start avScreenCaptureRecorder, error: ' + err.message); +// // }) +// let windowIDs = [ 0, 333 , 456 ]; +// await avScreenCaptureRecorder.skipPrivacyMode(windowIDs); +// await this.wait5Second(); + +// await avScreenCaptureRecorder.stopRecording().then(() => { +// console.info('JJ Succeeded in stopping avScreenCaptureRecorder'); +// }).catch((err: BusinessError) => { +// console.info('JJ Failed to stop avScreenCaptureRecorder, error: ' + err.message); +// }) +// ///SCREEN_CAPTURE_STATE_INVLID -1 不回调 +// +// await avScreenCaptureRecorder.release().then(() => { +// console.info('JJ Succeeded in releasing avScreenCaptureRecorder'); +// }).catch((err: BusinessError) => { +// console.info('JJ Failed to release avScreenCaptureRecorder, error: ' + err.message); +// }) +// fs.closeSync(file); + //avScreenCaptureRecorder = undefined; + // await this.wait5Second(); } - .width('100%') - .height('20%').border({ width: 1 }) - - Column() { - Text($r('app.string.streaming_surface_mode_eng_desc')) - .fontSize(20) - .fontWeight(FontWeight.Bold) - .onClick(() => { - hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3)); - }) - List({ space: 40 }) { - ListItem() { - Button($r('app.string.start_desc'), { type: ButtonType.Circle, stateEffect: true }) - .backgroundColor(0xF55A42) - .width(90) - .height(90) - .onClick(() => { - if (testNapi.startScreenCaptureWithSurface() == 0) { - this.isCapturing = true; - } - }) - } - ListItem() { - } - ListItem() { - Button($r('app.string.stop_desc'), { type: ButtonType.Normal, stateEffect: true }) - .backgroundColor(0x000000) - .width(85) - .height(85) - .shadow({ radius: 10 }) - .onClick(() => { - if (this.isCapturing) { - testNapi.stopScreenCapture(); - this.isCapturing = false; - } - }) - } - }.listDirection(Axis.Horizontal).lanes({ minLength: 200, maxLength: 300 }) + } + console.info("==UI i: 完成 " ); + } + + build() { + NavDestination() { + Column({ space: 15 }) { + Column() { + Text(this.message) + .fontSize(30) + .fontWeight(FontWeight.Bold) + } + .width('100%') + .height('20%') + + Column() { + List({ space: 40 }) { + ListItem() { + Button('Start', { type: ButtonType.Circle, stateEffect: true }) + .id("Start") + .backgroundColor(0xF55A42) + .width(90) + .height(90) + .onClick(() => { + this.StopRecording(); + this.StartRecording() + }) + } + + ListItem() { + Button('Stop', { type: ButtonType.Normal, stateEffect: true }) + .id("Stop") + .backgroundColor(0x000000) + .width(85) + .height(85) + .shadow({ radius: 10 }) + .onClick(() => { + this.StopRecording(); + }) + } + + + }.listDirection(Axis.Horizontal).lanes({ minLength: 200, maxLength: 300 }) + } + .width('100%') + .height('20%') + + Text("DisplayId") + TextInput({ + text:'-1' + }).onChange((value)=>{ + console.info("==UI displayId:" + value); + this.displayId = parseInt(value); + }) } .width('100%') - .height('20%').border({ width: 1 }) } - .height('100%') - } - .title($r('app.string.all_mode_desc')) + .title('JS存文件') + .onBackPressed(() => { + this.StopRecording(); + this.pageInfos.pop({ + data: "Scene6", + from: "Scene6路由" + }) + return true + }) + } } \ No newline at end of file -- Gitee

    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�P8$xR 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