Commit 34ade1db12a4f57212d6c4781aced0942a39f990
0 parents
新建短视频编辑示例程序
Showing
33 changed files
with
4609 additions
and
0 deletions
Too many changes to show.
To preserve performance only 33 of 72 files are displayed.
.gitignore
0 → 100644
.idea/gradle.xml
0 → 100644
| 1 | +++ a/.idea/gradle.xml | ||
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<project version="4"> | ||
| 3 | + <component name="GradleSettings"> | ||
| 4 | + <option name="linkedExternalProjectsSettings"> | ||
| 5 | + <GradleProjectSettings> | ||
| 6 | + <option name="distributionType" value="DEFAULT_WRAPPED" /> | ||
| 7 | + <option name="externalProjectPath" value="$PROJECT_DIR$" /> | ||
| 8 | + <option name="modules"> | ||
| 9 | + <set> | ||
| 10 | + <option value="$PROJECT_DIR$" /> | ||
| 11 | + <option value="$PROJECT_DIR$/app" /> | ||
| 12 | + </set> | ||
| 13 | + </option> | ||
| 14 | + <option name="resolveModulePerSourceSet" value="false" /> | ||
| 15 | + </GradleProjectSettings> | ||
| 16 | + </option> | ||
| 17 | + </component> | ||
| 18 | +</project> | ||
| 0 | \ No newline at end of file | 19 | \ No newline at end of file |
.idea/inspectionProfiles/Project_Default.xml
0 → 100644
| 1 | +++ a/.idea/inspectionProfiles/Project_Default.xml | ||
| 1 | +<component name="InspectionProjectProfileManager"> | ||
| 2 | + <profile version="1.0"> | ||
| 3 | + <option name="myName" value="Project Default" /> | ||
| 4 | + <inspection_tool class="JavaDoc" enabled="true" level="WARNING" enabled_by_default="true"> | ||
| 5 | + <option name="TOP_LEVEL_CLASS_OPTIONS"> | ||
| 6 | + <value> | ||
| 7 | + <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" /> | ||
| 8 | + <option name="REQUIRED_TAGS" value="" /> | ||
| 9 | + </value> | ||
| 10 | + </option> | ||
| 11 | + <option name="INNER_CLASS_OPTIONS"> | ||
| 12 | + <value> | ||
| 13 | + <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" /> | ||
| 14 | + <option name="REQUIRED_TAGS" value="" /> | ||
| 15 | + </value> | ||
| 16 | + </option> | ||
| 17 | + <option name="METHOD_OPTIONS"> | ||
| 18 | + <value> | ||
| 19 | + <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" /> | ||
| 20 | + <option name="REQUIRED_TAGS" value="@return@param@throws or @exception" /> | ||
| 21 | + </value> | ||
| 22 | + </option> | ||
| 23 | + <option name="FIELD_OPTIONS"> | ||
| 24 | + <value> | ||
| 25 | + <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" /> | ||
| 26 | + <option name="REQUIRED_TAGS" value="" /> | ||
| 27 | + </value> | ||
| 28 | + </option> | ||
| 29 | + <option name="IGNORE_DEPRECATED" value="false" /> | ||
| 30 | + <option name="IGNORE_JAVADOC_PERIOD" value="true" /> | ||
| 31 | + <option name="IGNORE_DUPLICATED_THROWS" value="false" /> | ||
| 32 | + <option name="IGNORE_POINT_TO_ITSELF" value="false" /> | ||
| 33 | + <option name="myAdditionalJavadocTags" value="date" /> | ||
| 34 | + </inspection_tool> | ||
| 35 | + </profile> | ||
| 36 | +</component> | ||
| 0 | \ No newline at end of file | 37 | \ No newline at end of file |
.idea/misc.xml
0 → 100644
| 1 | +++ a/.idea/misc.xml | ||
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<project version="4"> | ||
| 3 | + <component name="NullableNotNullManager"> | ||
| 4 | + <option name="myDefaultNullable" value="android.support.annotation.Nullable" /> | ||
| 5 | + <option name="myDefaultNotNull" value="android.support.annotation.NonNull" /> | ||
| 6 | + <option name="myNullables"> | ||
| 7 | + <value> | ||
| 8 | + <list size="4"> | ||
| 9 | + <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" /> | ||
| 10 | + <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" /> | ||
| 11 | + <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" /> | ||
| 12 | + <item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" /> | ||
| 13 | + </list> | ||
| 14 | + </value> | ||
| 15 | + </option> | ||
| 16 | + <option name="myNotNulls"> | ||
| 17 | + <value> | ||
| 18 | + <list size="4"> | ||
| 19 | + <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" /> | ||
| 20 | + <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" /> | ||
| 21 | + <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" /> | ||
| 22 | + <item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" /> | ||
| 23 | + </list> | ||
| 24 | + </value> | ||
| 25 | + </option> | ||
| 26 | + </component> | ||
| 27 | + <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> | ||
| 28 | + <output url="file://$PROJECT_DIR$/build/classes" /> | ||
| 29 | + </component> | ||
| 30 | + <component name="ProjectType"> | ||
| 31 | + <option name="id" value="Android" /> | ||
| 32 | + </component> | ||
| 33 | +</project> | ||
| 0 | \ No newline at end of file | 34 | \ No newline at end of file |
.idea/modules.xml
0 → 100644
| 1 | +++ a/.idea/modules.xml | ||
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<project version="4"> | ||
| 3 | + <component name="ProjectModuleManager"> | ||
| 4 | + <modules> | ||
| 5 | + <module fileurl="file://$PROJECT_DIR$/VEUIDemo.iml" filepath="$PROJECT_DIR$/VEUIDemo.iml" /> | ||
| 6 | + <module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" /> | ||
| 7 | + </modules> | ||
| 8 | + </component> | ||
| 9 | +</project> | ||
| 0 | \ No newline at end of file | 10 | \ No newline at end of file |
.idea/runConfigurations.xml
0 → 100644
| 1 | +++ a/.idea/runConfigurations.xml | ||
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | +<project version="4"> | ||
| 3 | + <component name="RunConfigurationProducerService"> | ||
| 4 | + <option name="ignoredProducers"> | ||
| 5 | + <set> | ||
| 6 | + <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" /> | ||
| 7 | + <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" /> | ||
| 8 | + <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" /> | ||
| 9 | + </set> | ||
| 10 | + </option> | ||
| 11 | + </component> | ||
| 12 | +</project> | ||
| 0 | \ No newline at end of file | 13 | \ No newline at end of file |
.idea/vcs.xml
0 → 100644
app/.gitignore
0 → 100644
app/build.gradle
0 → 100644
| 1 | +++ a/app/build.gradle | ||
| 1 | +apply plugin: 'com.android.application' | ||
| 2 | + | ||
| 3 | +android { | ||
| 4 | + compileSdkVersion 26 | ||
| 5 | + defaultConfig { | ||
| 6 | + applicationId "com.rd.ve.demo" | ||
| 7 | + minSdkVersion 15 | ||
| 8 | + targetSdkVersion 26 | ||
| 9 | + versionCode 1 | ||
| 10 | + versionName "1.0" | ||
| 11 | + | ||
| 12 | + ndk { | ||
| 13 | + // 设置支持的SO库架构 | ||
| 14 | + abiFilters 'armeabi-v7a' | ||
| 15 | + } | ||
| 16 | + } | ||
| 17 | + buildTypes { | ||
| 18 | + release { | ||
| 19 | + minifyEnabled false | ||
| 20 | + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' | ||
| 21 | + } | ||
| 22 | + } | ||
| 23 | +} | ||
| 24 | + | ||
| 25 | +dependencies { | ||
| 26 | + implementation fileTree(dir: 'libs', include: ['*.jar']) | ||
| 27 | + implementation 'com.android.support:appcompat-v7:26.1.0' | ||
| 28 | + implementation 'com.android.support.constraint:constraint-layout:1.0.2' | ||
| 29 | + | ||
| 30 | + implementation 'com.cnlive:rdVEUISdk:0.0.6' | ||
| 31 | + | ||
| 32 | + //短视频SDK内部已经引用下面这些库,在使用时请参考 | ||
| 33 | +// compile 'com.facebook.fresco:fresco:1.3.0' | ||
| 34 | +// compile 'com.facebook.fresco:webpsupport:1.3.0' | ||
| 35 | +// compile 'com.squareup.okio:okio:1.13.0' | ||
| 36 | +// compile 'com.squareup.okhttp3:okhttp:3.8.1' | ||
| 37 | +// compile 'com.alibaba:fastjson:1.2.9' | ||
| 38 | +} |
app/proguard-rules.pro
0 → 100644
| 1 | +++ a/app/proguard-rules.pro | ||
| 1 | +# Add project specific ProGuard rules here. | ||
| 2 | +# You can control the set of applied configuration files using the | ||
| 3 | +# proguardFiles setting in build.gradle. | ||
| 4 | +# | ||
| 5 | +# For more details, see | ||
| 6 | +# http://developer.android.com/guide/developing/tools/proguard.html | ||
| 7 | + | ||
| 8 | +# If your project uses WebView with JS, uncomment the following | ||
| 9 | +# and specify the fully qualified class name to the JavaScript interface | ||
| 10 | +# class: | ||
| 11 | +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { | ||
| 12 | +# public *; | ||
| 13 | +#} | ||
| 14 | + | ||
| 15 | +# Uncomment this to preserve the line number information for | ||
| 16 | +# debugging stack traces. | ||
| 17 | +#-keepattributes SourceFile,LineNumberTable | ||
| 18 | + | ||
| 19 | +# If you keep the line number information, uncomment this to | ||
| 20 | +# hide the original source file name. | ||
| 21 | +#-renamesourcefileattribute SourceFile | ||
| 22 | + | ||
| 23 | + | ||
| 24 | +#support.v4/v7 | ||
| 25 | +-keep class android.support.** { *; } | ||
| 26 | +-keep class android.support.v4.** { *; } | ||
| 27 | +-keep public class * extends android.support.v4.** | ||
| 28 | +-keep interface android.support.v4.app.** { *; } | ||
| 29 | +-keep class android.support.v7.** { *; } | ||
| 30 | +-keep public class * extends android.support.v7.** | ||
| 31 | +-keep interface android.support.v7.app.** { *; } | ||
| 32 | +-dontwarn android.support.** | ||
| 33 | +-dontwarn com.alibaba.fastjson.** | ||
| 34 | + | ||
| 35 | +#fresco | ||
| 36 | +-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip | ||
| 37 | +-keep @com.facebook.common.internal.DoNotStrip class * | ||
| 38 | +-keepclassmembers class * { | ||
| 39 | + @com.facebook.common.internal.DoNotStrip *; | ||
| 40 | +} | ||
| 41 | + | ||
| 42 | +-dontwarn okio.** | ||
| 43 | +-dontwarn com.squareup.okhttp.** | ||
| 44 | +-dontwarn okhttp3.** | ||
| 45 | +-dontwarn javax.annotation.** | ||
| 46 | +-dontwarn com.android.volley.toolbox.** | ||
| 47 | +-dontwarn com.facebook.infer.** | ||
| 48 | + | ||
| 49 | +-keep class com.faceunity.** {*;} | ||
| 50 | +-keep class com.spap.** {*;} | ||
| 51 | + | ||
| 52 | + | ||
| 53 | + | ||
| 54 | +-dontwarn com.cnlive.** | ||
| 55 | +-keep com.cnlive.**{*;} | ||
| 56 | + | ||
| 57 | +#水印 | ||
| 58 | +-keepclassmembers class * extends com.rd.recorder.OSDBuilder{ * ;} | ||
| 0 | \ No newline at end of file | 59 | \ No newline at end of file |
app/src/main/AndroidManifest.xml
0 → 100644
| 1 | +++ a/app/src/main/AndroidManifest.xml | ||
| 1 | +<?xml version="1.0" encoding="utf-8"?> | ||
| 2 | +<manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||
| 3 | + package="com.rd.ve.demo"> | ||
| 4 | + | ||
| 5 | + | ||
| 6 | + <supports-screens | ||
| 7 | + android:anyDensity="true" | ||
| 8 | + android:largeScreens="true" | ||
| 9 | + android:normalScreens="true" | ||
| 10 | + android:smallScreens="true"> | ||
| 11 | + </supports-screens> | ||
| 12 | + | ||
| 13 | + <uses-sdk | ||
| 14 | + android:minSdkVersion="16" | ||
| 15 | + android:targetSdkVersion="23"/> | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + | ||
| 19 | + <!-- 必要权限开始 --> | ||
| 20 | + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> | ||
| 21 | + <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> | ||
| 22 | + <uses-permission android:name="android.permission.CAMERA"/> | ||
| 23 | + <uses-permission android:name="android.permission.RECORD_AUDIO"/> | ||
| 24 | + <uses-permission android:name="android.permission.INTERNET"/> | ||
| 25 | + <!-- 需要支持后台或休眠后保存输出时,需添加的权限 --> | ||
| 26 | + <uses-permission android:name="android.permission.WAKE_LOCK"/> | ||
| 27 | + | ||
| 28 | + <uses-permission android:name="android.permission.READ_PHONE_STATE"/> | ||
| 29 | + <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> | ||
| 30 | + <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> | ||
| 31 | + <uses-permission android:name="android.permission.READ_LOGS"/> | ||
| 32 | + | ||
| 33 | + <application | ||
| 34 | + android:name="com.rd.ve.demo.AppImpl" | ||
| 35 | + android:allowBackup="true" | ||
| 36 | + android:configChanges="keyboardHidden" | ||
| 37 | + android:description="@string/app_name" | ||
| 38 | + android:hardwareAccelerated="true" | ||
| 39 | + android:icon="@drawable/ic_launcher" | ||
| 40 | + android:label="@string/app_name" | ||
| 41 | + android:largeHeap="true" | ||
| 42 | + android:theme="@style/Theme.rd.disableSplitTouch"> | ||
| 43 | + <activity | ||
| 44 | + android:name=".MainActivity" | ||
| 45 | + android:screenOrientation="portrait" | ||
| 46 | + android:configChanges="keyboardHidden"> | ||
| 47 | + <intent-filter> | ||
| 48 | + <action android:name="android.intent.action.MAIN"/> | ||
| 49 | + | ||
| 50 | + <category android:name="android.intent.category.LAUNCHER"/> | ||
| 51 | + </intent-filter> | ||
| 52 | + </activity> | ||
| 53 | + <activity | ||
| 54 | + android:name=".VideoPlayerActivity" | ||
| 55 | + android:configChanges="keyboardHidden" | ||
| 56 | + android:screenOrientation="portrait" | ||
| 57 | + android:theme="@style/Theme.rd.fullscreen"> | ||
| 58 | + </activity> | ||
| 59 | + <activity | ||
| 60 | + android:name=".DialogActivity" | ||
| 61 | + android:configChanges="keyboardHidden" | ||
| 62 | + android:screenOrientation="portrait" | ||
| 63 | + android:theme="@style/dialogActivityStyle"> | ||
| 64 | + </activity> | ||
| 65 | + <activity | ||
| 66 | + android:name=".AlbumActivity" | ||
| 67 | + android:configChanges="keyboardHidden" | ||
| 68 | + android:screenOrientation="portrait"> | ||
| 69 | + </activity> | ||
| 70 | + </application> | ||
| 71 | + | ||
| 72 | + | ||
| 73 | +</manifest> | ||
| 0 | \ No newline at end of file | 74 | \ No newline at end of file |
app/src/main/assets/demomedia/android.jpg
0 → 100644
66.3 KB
app/src/main/assets/demomedia/demoVideo1.mp4
0 → 100644
No preview for this file type
app/src/main/assets/demomedia/demoVideo2.mp4
0 → 100644
No preview for this file type
app/src/main/assets/demomedia/demoVideo3.mp4
0 → 100644
No preview for this file type
app/src/main/assets/faceu/BeagleDog.mp3
0 → 100644
No preview for this file type
app/src/main/assets/faceu/YellowEar.mp3
0 → 100644
No preview for this file type
app/src/main/assets/faceu/beagledog.png
0 → 100644
130 KB
app/src/main/assets/faceu/yellowear.png
0 → 100644
163 KB
app/src/main/assets/watermark.png
0 → 100644
6.02 KB
app/src/main/java/com/rd/ve/demo/AlbumActivity.java
0 → 100644
| 1 | +++ a/app/src/main/java/com/rd/ve/demo/AlbumActivity.java | ||
| 1 | +package com.rd.ve.demo; | ||
| 2 | + | ||
| 3 | +import android.app.Activity; | ||
| 4 | +import android.content.Intent; | ||
| 5 | +import android.database.Cursor; | ||
| 6 | +import android.net.Uri; | ||
| 7 | +import android.os.Bundle; | ||
| 8 | +import android.provider.MediaStore; | ||
| 9 | + | ||
| 10 | +import com.cnlive.veuisdk.CNSdkEntry; | ||
| 11 | + | ||
| 12 | +import java.util.ArrayList; | ||
| 13 | + | ||
| 14 | +/** | ||
| 15 | + * xpkUISDK演示页 | ||
| 16 | + */ | ||
| 17 | +public class AlbumActivity extends Activity { | ||
| 18 | + | ||
| 19 | + private final int REQUESTCODE_FOR_SYSTEM_ALBUM = 1; | ||
| 20 | + | ||
| 21 | + @Override | ||
| 22 | + protected void onCreate(Bundle savedInstanceState) { | ||
| 23 | + super.onCreate(savedInstanceState); | ||
| 24 | + // 此activity没有界面,直接调用系统相册 | ||
| 25 | + Intent picture = new Intent(Intent.ACTION_PICK, getIntent().getData()); | ||
| 26 | + startActivityForResult(picture, REQUESTCODE_FOR_SYSTEM_ALBUM); | ||
| 27 | + } | ||
| 28 | + | ||
| 29 | + @Override | ||
| 30 | + protected void onActivityResult(int requestCode, int resultCode, Intent data) { | ||
| 31 | + super.onActivityResult(requestCode, resultCode, data); | ||
| 32 | + if (resultCode == RESULT_OK) { | ||
| 33 | + if (requestCode == REQUESTCODE_FOR_SYSTEM_ALBUM && data != null) { | ||
| 34 | + ArrayList<String> arrPath = new ArrayList<String>(); | ||
| 35 | + // 获取系统返回的媒体地址 | ||
| 36 | + Uri selectedImage = data.getData(); | ||
| 37 | + if ("file".equals(selectedImage.getScheme())) { | ||
| 38 | + arrPath.add(selectedImage.getPath()); | ||
| 39 | + } else { | ||
| 40 | + String[] filePathColumns = { MediaStore.Images.Media.DATA }; | ||
| 41 | + Cursor c = this.getContentResolver().query(selectedImage, | ||
| 42 | + filePathColumns, null, null, null); | ||
| 43 | + c.moveToFirst(); | ||
| 44 | + int columnIndex = c.getColumnIndex(filePathColumns[0]); | ||
| 45 | + String picturePath = c.getString(columnIndex); | ||
| 46 | + arrPath.add(picturePath); | ||
| 47 | + } | ||
| 48 | + // 将媒体地址列表传到sdk接口 | ||
| 49 | + CNSdkEntry.onCustomizeAlbum(this, arrPath); | ||
| 50 | + } | ||
| 51 | + } | ||
| 52 | + AlbumActivity.this.finish(); | ||
| 53 | + } | ||
| 54 | +} |
app/src/main/java/com/rd/ve/demo/AppImpl.java
0 → 100644
| 1 | +++ a/app/src/main/java/com/rd/ve/demo/AppImpl.java | ||
| 1 | +package com.rd.ve.demo; | ||
| 2 | + | ||
| 3 | +import android.app.Application; | ||
| 4 | + | ||
| 5 | +import com.cnlive.veuisdk.CNSdkEntry; | ||
| 6 | + | ||
| 7 | +/** | ||
| 8 | + * ************************集成步骤 ******************* | ||
| 9 | + * <p> | ||
| 10 | + * 1. 在官网注册开发者账户 | ||
| 11 | + * <p> | ||
| 12 | + * 2. 下载SDK和demo代码 | ||
| 13 | + * <p> | ||
| 14 | + * 3. 创建应用,获取appKey和appSecret,导入SDK | ||
| 15 | + * <p> | ||
| 16 | + * ******************************************************* | ||
| 17 | + * <p> | ||
| 18 | + * RdVEUISdk自定义Application | ||
| 19 | + */ | ||
| 20 | +public class AppImpl extends Application { | ||
| 21 | + /** | ||
| 22 | + * 已获取的AppKey | ||
| 23 | + */ | ||
| 24 | + public static final String APP_KEY = "6ecb39f1c12f1a35"; | ||
| 25 | + /** | ||
| 26 | + * 已获取的AppSecret | ||
| 27 | + */ | ||
| 28 | + public static final String APP_SECRET = "22a44768806a23466dd52ecf954ed6b26sICMKN8iw707KYMWLkJoNaMxb5Xal+afScFJ8/exLzxx1bY5Te7WqZzRD6k4EcUwwJ8a8+AeCO/WSG2qUzso/7u0l758MUsfPzjz7Ih2BY="; | ||
| 29 | + | ||
| 30 | + private String mStrCustomPath; | ||
| 31 | + | ||
| 32 | + @Override | ||
| 33 | + public void onCreate() { | ||
| 34 | + super.onCreate(); | ||
| 35 | + initializeSdk(); | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + /** | ||
| 39 | + * 初始化SDK | ||
| 40 | + */ | ||
| 41 | + public void initializeSdk() { | ||
| 42 | + // 这里确定是否启用日志,在调试阶段可开启该选项,方便定位问题。打包为发行版时,此启用无效 | ||
| 43 | + CNSdkEntry.enableDebugLog(true); | ||
| 44 | + // 自定义根目录,如果为空则默认为/sdcard/Android/data/com.rd.ve.demo/files/rdve | ||
| 45 | + mStrCustomPath = getExternalFilesDir("rdve").getAbsolutePath(); | ||
| 46 | + // sdk初始 | ||
| 47 | + CNSdkEntry.initialize(AppImpl.this, mStrCustomPath, APP_KEY, APP_SECRET, | ||
| 48 | + new com.rd.ve.demo.SdkHandler().getCallBack()); | ||
| 49 | + // 自定义Crash handler,实际项目可不加入 | ||
| 50 | +// MyCrashHandler.getInstance().init(this); | ||
| 51 | + faceHanlder = new com.rd.ve.demo.FaceHandler(this); | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + /** | ||
| 55 | + * 获取自定义根目录 | ||
| 56 | + * | ||
| 57 | + * @return | ||
| 58 | + */ | ||
| 59 | + public String getCustomPath() { | ||
| 60 | + return mStrCustomPath; | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + @SuppressWarnings("unused") | ||
| 64 | + private com.rd.ve.demo.FaceHandler faceHanlder; | ||
| 65 | + | ||
| 66 | +} |
app/src/main/java/com/rd/ve/demo/CameraWatermarkBuilder.java
0 → 100644
| 1 | +++ a/app/src/main/java/com/rd/ve/demo/CameraWatermarkBuilder.java | ||
| 1 | +package com.rd.ve.demo; | ||
| 2 | + | ||
| 3 | +import android.content.Context; | ||
| 4 | +import android.graphics.RectF; | ||
| 5 | +import android.support.v4.content.ContextCompat; | ||
| 6 | +import android.text.TextUtils; | ||
| 7 | +import android.text.format.DateFormat; | ||
| 8 | +import android.view.LayoutInflater; | ||
| 9 | +import android.view.View; | ||
| 10 | +import android.widget.TextView; | ||
| 11 | + | ||
| 12 | +import com.cnlive.veuisdk.manager.CNVEOSDBuilder; | ||
| 13 | + | ||
| 14 | +import java.text.SimpleDateFormat; | ||
| 15 | +import java.util.Date; | ||
| 16 | +import java.util.Formatter; | ||
| 17 | +import java.util.Locale; | ||
| 18 | + | ||
| 19 | +public class CameraWatermarkBuilder extends CNVEOSDBuilder { | ||
| 20 | + private final StringBuilder m_sbFormator = new StringBuilder(); | ||
| 21 | + private final Formatter m_formatter = new Formatter(m_sbFormator, | ||
| 22 | + Locale.getDefault()); | ||
| 23 | + private StringBuilder m_sbBuilder = null; | ||
| 24 | + private SimpleDateFormat sdfTime = null; | ||
| 25 | + private boolean isSquare; | ||
| 26 | + private int osdEndbgColor; | ||
| 27 | + | ||
| 28 | + public CameraWatermarkBuilder(Context context, Boolean isSquare) { | ||
| 29 | + super(context, isSquare); | ||
| 30 | + this.isSquare = isSquare; | ||
| 31 | + osdEndbgColor = ContextCompat.getColor(context, R.color.white); | ||
| 32 | + // 水印的宽高 相对于屏幕可见区域的宽高 | ||
| 33 | + if (isSquare) { | ||
| 34 | + setOSDRect(new RectF(0f, 0.7f, 0.8f, 0.99f), null);// 正方形的自定义水印在可视范围的大小 | ||
| 35 | + } else { | ||
| 36 | + setOSDRect(new RectF(0f, 0.15f, 0.5f, 0.3f), new RectF(0.15f, | ||
| 37 | + 0.85f, 0.65f, 1.0f));// 长方形 自定义水印在可视范围的大小 | ||
| 38 | + } | ||
| 39 | + } | ||
| 40 | + | ||
| 41 | + @Override | ||
| 42 | + protected void cleanUp() { | ||
| 43 | + m_sbBuilder = null; | ||
| 44 | + tvOSD = null; | ||
| 45 | + sdfTime = null; | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + @Override | ||
| 49 | + protected View getOSDView(Context context) { | ||
| 50 | + m_sbBuilder = new StringBuilder(); | ||
| 51 | + sdfTime = new SimpleDateFormat("HH:mm:ss S", Locale.getDefault()); | ||
| 52 | + View view = LayoutInflater.from(context).inflate( | ||
| 53 | + R.layout.camera_watermark_layout, null); | ||
| 54 | + onRefreshOSDView(view); | ||
| 55 | + return view; | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + private String buildOSDString(Date date) { | ||
| 59 | + m_sbBuilder.setLength(0); | ||
| 60 | + m_sbBuilder.append(DateFormat.format("yyyy年MM月dd日 ", date)).append( | ||
| 61 | + sdfTime.format(date)); | ||
| 62 | + | ||
| 63 | + return m_sbBuilder.toString(); | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + private TextView tvOSD; | ||
| 67 | + | ||
| 68 | + @Override | ||
| 69 | + protected void onRefreshOSDView(View view) { | ||
| 70 | + if (null == tvOSD) { | ||
| 71 | + tvOSD = (TextView) view.findViewById(R.id.osdInfo); | ||
| 72 | + } | ||
| 73 | + if (TextUtils.isEmpty(str)) { | ||
| 74 | + if (mState == OSDState.header) { | ||
| 75 | + tvOSD.setText(buildOSDString(new Date())); | ||
| 76 | + } else if (mState == OSDState.recording) { | ||
| 77 | + tvOSD.setText(stringForTime(recorderTime, false)); | ||
| 78 | + } else if (mState == OSDState.end) { | ||
| 79 | + tvOSD.setText(buildOSDString(new Date())); | ||
| 80 | + } | ||
| 81 | + } else { | ||
| 82 | + if (mState == OSDState.header) { | ||
| 83 | + tvOSD.setText(str); | ||
| 84 | + } else if (mState == OSDState.recording) { | ||
| 85 | + tvOSD.setText(stringForTime(recorderTime, false)); | ||
| 86 | + } else if (mState == OSDState.end) { | ||
| 87 | + tvOSD.setText(str); | ||
| 88 | + } | ||
| 89 | + } | ||
| 90 | + } | ||
| 91 | + | ||
| 92 | + private static String str = ""; | ||
| 93 | + | ||
| 94 | + public static void setText(String osd) { | ||
| 95 | + str = osd; | ||
| 96 | + } | ||
| 97 | + | ||
| 98 | + @Override | ||
| 99 | + public void setOSDState(OSDState state) { | ||
| 100 | + // TODO Auto-generated method stub | ||
| 101 | + super.setOSDState(state); | ||
| 102 | + | ||
| 103 | + // Log.e("setOSDState", state + ".." + this.toString()); | ||
| 104 | + if (state == OSDState.header) { | ||
| 105 | + setOSDVisible(View.VISIBLE); | ||
| 106 | + if (isSquare) { | ||
| 107 | + setOSDRect(new RectF(0f, 0.7f, 0.8f, 0.99f), null);// 正方形的自定义水印在可视范围的大小 | ||
| 108 | + } else { | ||
| 109 | + setOSDRect(new RectF(0.2f, 0.3f, 0.8f, 0.6f), new RectF(0.1f, | ||
| 110 | + 0.1f, 0.9f, 0.9f));// 长方形 自定义水印在可视范围的大小 | ||
| 111 | + } | ||
| 112 | + | ||
| 113 | + } else if (state == OSDState.recording) { | ||
| 114 | + setOSDVisible(View.INVISIBLE);// demo中,录制进度中的水印呗UI界面组件遮挡,所以水印此时间段不显示 | ||
| 115 | + if (isSquare) { | ||
| 116 | + setOSDRect(new RectF(0f, 0.7f, 0.8f, 0.99f), null);// 正方形的自定义水印在可视范围的大小 | ||
| 117 | + } else { | ||
| 118 | + setOSDRect(new RectF(0f, 0.9f, 0.5f, 1f), new RectF(0.1f, 0.1f, | ||
| 119 | + 0.9f, 0.9f));// 长方形 自定义水印在可视范围的大小 | ||
| 120 | + } | ||
| 121 | + } else if (state == OSDState.end) { | ||
| 122 | + | ||
| 123 | + setOSDVisible(View.VISIBLE); | ||
| 124 | + if (null != tvOSD) { | ||
| 125 | + tvOSD.setBackgroundColor(osdEndbgColor); | ||
| 126 | + } | ||
| 127 | + if (isSquare) { | ||
| 128 | + setOSDRect(new RectF(0f, 0f, 1f, 1f), null);// 正方形的自定义水印在可视范围的大小 | ||
| 129 | + } else { | ||
| 130 | + setOSDRect(new RectF(0f, 0f, 1f, 1f), new RectF(0f, 0f, 1f, 1f));// 长方形 | ||
| 131 | + // 自定义水印在可视范围的大小 | ||
| 132 | + } | ||
| 133 | + } | ||
| 134 | + } | ||
| 135 | + | ||
| 136 | + /** | ||
| 137 | + * 毫秒数转换为时间格式化字符串 支持是否显示小时 | ||
| 138 | + * | ||
| 139 | + * @param timeMs | ||
| 140 | + * @return | ||
| 141 | + */ | ||
| 142 | + private String stringForTime(long timeMs, boolean existsHours) { | ||
| 143 | + boolean bNegative = timeMs < 0;// 是否为负数 | ||
| 144 | + if (bNegative) { | ||
| 145 | + timeMs = -timeMs; | ||
| 146 | + } | ||
| 147 | + int totalSeconds = (int) (timeMs / 1000); | ||
| 148 | + | ||
| 149 | + int seconds = totalSeconds % 60; | ||
| 150 | + int minutes = (totalSeconds / 60) % 60; | ||
| 151 | + int hours = totalSeconds / 3600; | ||
| 152 | + | ||
| 153 | + int ms = (int) (timeMs % 1000); | ||
| 154 | + | ||
| 155 | + m_sbFormator.setLength(0); | ||
| 156 | + try { | ||
| 157 | + if (hours > 0 || existsHours) { | ||
| 158 | + return m_formatter.format("%s%02d:%02d:%02d", | ||
| 159 | + bNegative ? "-" : "", hours, minutes, seconds) | ||
| 160 | + .toString(); | ||
| 161 | + } else { | ||
| 162 | + return m_formatter.format("%s%02d:%02d.%03d", | ||
| 163 | + bNegative ? "- " : "", minutes, seconds, ms).toString(); | ||
| 164 | + } | ||
| 165 | + } catch (Exception ex) { | ||
| 166 | + return ""; | ||
| 167 | + } | ||
| 168 | + } | ||
| 169 | + | ||
| 170 | +} |
app/src/main/java/com/rd/ve/demo/DialogActivity.java
0 → 100644
| 1 | +++ a/app/src/main/java/com/rd/ve/demo/DialogActivity.java | ||
| 1 | +package com.rd.ve.demo; | ||
| 2 | + | ||
| 3 | +import android.app.Activity; | ||
| 4 | +import android.os.Bundle; | ||
| 5 | +import android.view.View; | ||
| 6 | + | ||
| 7 | +import com.cnlive.veuisdk.CNSdkEntry; | ||
| 8 | + | ||
| 9 | +/** | ||
| 10 | + * xpkUISDK确认截取方式演示页 | ||
| 11 | + */ | ||
| 12 | +public class DialogActivity extends Activity { | ||
| 13 | + | ||
| 14 | + private final int RETURN_TRIM_VIDEO = 0; // 返回截取视频 | ||
| 15 | + private final int RETURN_TRIM_TIME = 1; // 返回截取时间 | ||
| 16 | + | ||
| 17 | + @Override | ||
| 18 | + protected void onCreate(Bundle savedInstanceState) { | ||
| 19 | + super.onCreate(savedInstanceState); | ||
| 20 | + setContentView(R.layout.activity_dialog); | ||
| 21 | + } | ||
| 22 | + | ||
| 23 | + public void onClick(View v) { | ||
| 24 | + switch (v.getId()) { | ||
| 25 | + case R.id.btnTrimVideo: | ||
| 26 | + CNSdkEntry.videoTrim(this, RETURN_TRIM_VIDEO); | ||
| 27 | + DialogActivity.this.finish(); | ||
| 28 | + break; | ||
| 29 | + case R.id.btnTrimVideoTime: | ||
| 30 | + CNSdkEntry.videoTrim(this, RETURN_TRIM_TIME); | ||
| 31 | + DialogActivity.this.finish(); | ||
| 32 | + break; | ||
| 33 | + default: | ||
| 34 | + break; | ||
| 35 | + } | ||
| 36 | + } | ||
| 37 | +} |
app/src/main/java/com/rd/ve/demo/FaceHandler.java
0 → 100644
| 1 | +++ a/app/src/main/java/com/rd/ve/demo/FaceHandler.java | ||
| 1 | +package com.rd.ve.demo; | ||
| 2 | + | ||
| 3 | +import android.content.Context; | ||
| 4 | +import android.content.res.AssetManager; | ||
| 5 | +import android.os.AsyncTask; | ||
| 6 | + | ||
| 7 | +import com.cnlive.veuisdk.CNSdkEntry; | ||
| 8 | +import com.cnlive.veuisdk.CNSdkService; | ||
| 9 | +import com.cnlive.veuisdk.manager.CNFaceuConfig; | ||
| 10 | +import com.rd.ve.demo.utils.SDKUtils; | ||
| 11 | + | ||
| 12 | +import java.io.File; | ||
| 13 | + | ||
| 14 | +/** | ||
| 15 | + * 导入人脸贴纸资源 | ||
| 16 | + * | ||
| 17 | + * @author JIAN | ||
| 18 | + * @date 2017-3-18 上午11:36:37 | ||
| 19 | + */ | ||
| 20 | +public class FaceHandler { | ||
| 21 | + | ||
| 22 | + private Context context; | ||
| 23 | + private String root = null; | ||
| 24 | + | ||
| 25 | + private CNFaceuConfig config = null; | ||
| 26 | + | ||
| 27 | + // 自定义网络化加载人脸贴纸资源 | ||
| 28 | + private final String URL = "http://dianbook.17rd.com/api/shortvideo/getfaceprop"; | ||
| 29 | + | ||
| 30 | + public FaceHandler(Context _context) { | ||
| 31 | + context = _context; | ||
| 32 | + | ||
| 33 | + new AsyncTask<Integer, Integer, Integer>() { | ||
| 34 | + AssetManager asset; | ||
| 35 | + | ||
| 36 | + @Override | ||
| 37 | + protected void onPreExecute() { | ||
| 38 | + asset = context.getAssets(); | ||
| 39 | + root = context.getExternalCacheDir() + "/faceu/"; | ||
| 40 | + File f = new File(root); | ||
| 41 | + if (!f.exists()) { | ||
| 42 | + f.mkdirs(); | ||
| 43 | + } | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + ; | ||
| 47 | + | ||
| 48 | + @Override | ||
| 49 | + protected Integer doInBackground(Integer... params) { | ||
| 50 | + config = new CNFaceuConfig(); | ||
| 51 | + // 设置开启美颜时美白的等级 (参数值0.0f-1.0f,开启人脸识别且开启美颜之后生效) | ||
| 52 | + config.setColor_level(0.48f); | ||
| 53 | + // 设置开启美颜时磨皮的等级(参数值0.0f-4.0f,开启人脸识别且开启美颜之后生效) | ||
| 54 | + config.setBlur_level(4.0f); | ||
| 55 | + // 设置开启美颜时瘦脸的等级 (有效参数值0.0f-2.0f,开启人脸识别且开启美颜之后生效) | ||
| 56 | + config.setCheek_thinning(0.68f); | ||
| 57 | + // 设置美颜时大眼的等级(有效参数值0.0f-4.0f,开启人脸识别且开启美颜之后生效) | ||
| 58 | + config.setEye_enlarging(1.53f); | ||
| 59 | + | ||
| 60 | + // 方式一: 加载本地资源 | ||
| 61 | + String dog = root + "BeagleDog.mp3", dogIcon = root | ||
| 62 | + + "beagledog.png"; | ||
| 63 | + String yellowEar = root + "YellowEar.mp3", YellowEarIcon = root | ||
| 64 | + + "yellowear.png"; | ||
| 65 | + addItem(asset, dog, "BeagleDog.mp3", dogIcon, "beagledog.png", | ||
| 66 | + "BeagleDog"); | ||
| 67 | + addItem(asset, yellowEar, "YellowEar.mp3", YellowEarIcon, | ||
| 68 | + "yellowear.png", "YellowEar"); | ||
| 69 | + // 方式二:加载网络资源,设置网络化的人脸贴纸数据接口 | ||
| 70 | + config.enableNetFaceu(true, URL); | ||
| 71 | + | ||
| 72 | + return null; | ||
| 73 | + } | ||
| 74 | + | ||
| 75 | + @Override | ||
| 76 | + protected void onPostExecute(Integer result) { | ||
| 77 | + CNSdkService service = CNSdkEntry.getSdkService(); | ||
| 78 | + if (null != service) { | ||
| 79 | + service.initFaceuConfig(config); | ||
| 80 | + } | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + ; | ||
| 84 | + }.execute(); | ||
| 85 | + | ||
| 86 | + } | ||
| 87 | + | ||
| 88 | + /** | ||
| 89 | + * 新增 | ||
| 90 | + * | ||
| 91 | + * @param asset | ||
| 92 | + * @param path | ||
| 93 | + * @param assMp3 | ||
| 94 | + * @param Icon | ||
| 95 | + * @param assIcon | ||
| 96 | + * @param title | ||
| 97 | + */ | ||
| 98 | + @SuppressWarnings("unused") | ||
| 99 | + private void addItem(AssetManager asset, String path, String assMp3, | ||
| 100 | + String Icon, String assIcon, String title) { | ||
| 101 | + if (!new File(path).exists()) { | ||
| 102 | + SDKUtils.assetRes2File(asset, "faceu/" + assMp3, path); | ||
| 103 | + } | ||
| 104 | + if (!new File(Icon).exists()) { | ||
| 105 | + SDKUtils.assetRes2File(asset, "faceu/" + assIcon, Icon); | ||
| 106 | + } | ||
| 107 | + config.addFaceu(path, Icon, title); | ||
| 108 | + } | ||
| 109 | + | ||
| 110 | +} |
app/src/main/java/com/rd/ve/demo/MainActivity.java
0 → 100644
| 1 | +++ a/app/src/main/java/com/rd/ve/demo/MainActivity.java | ||
| 1 | +package com.rd.ve.demo; | ||
| 2 | + | ||
| 3 | +import android.Manifest; | ||
| 4 | +import android.annotation.SuppressLint; | ||
| 5 | +import android.annotation.TargetApi; | ||
| 6 | +import android.app.Activity; | ||
| 7 | +import android.app.AlertDialog; | ||
| 8 | +import android.app.ProgressDialog; | ||
| 9 | +import android.content.Context; | ||
| 10 | +import android.content.DialogInterface; | ||
| 11 | +import android.content.Intent; | ||
| 12 | +import android.content.SharedPreferences; | ||
| 13 | +import android.content.pm.PackageManager; | ||
| 14 | +import android.graphics.Color; | ||
| 15 | +import android.graphics.Rect; | ||
| 16 | +import android.graphics.RectF; | ||
| 17 | +import android.os.AsyncTask; | ||
| 18 | +import android.os.Build; | ||
| 19 | +import android.os.Bundle; | ||
| 20 | +import android.os.Environment; | ||
| 21 | +import android.text.TextUtils; | ||
| 22 | +import android.util.Log; | ||
| 23 | +import android.util.SparseArray; | ||
| 24 | +import android.view.LayoutInflater; | ||
| 25 | +import android.view.View; | ||
| 26 | +import android.widget.Button; | ||
| 27 | +import android.widget.ProgressBar; | ||
| 28 | +import android.widget.TextView; | ||
| 29 | +import android.widget.Toast; | ||
| 30 | + | ||
| 31 | +import com.cnlive.rdcore.CNVirtualVideo; | ||
| 32 | +import com.cnlive.rdcore.listener.CNExportListener; | ||
| 33 | +import com.cnlive.rdcore.models.CNTrailer; | ||
| 34 | +import com.cnlive.rdcore.models.CNVideoConfig; | ||
| 35 | +import com.cnlive.rdcore.models.CNWatermark; | ||
| 36 | +import com.cnlive.veuisdk.CNSdkEntry; | ||
| 37 | +import com.cnlive.veuisdk.CNSdkService; | ||
| 38 | +import com.cnlive.veuisdk.callback.ICNCompressVideoCallback; | ||
| 39 | +import com.cnlive.veuisdk.manager.CNCameraConfiguration; | ||
| 40 | +import com.cnlive.veuisdk.manager.CNCompressConfiguration; | ||
| 41 | +import com.cnlive.veuisdk.manager.CNEditObject; | ||
| 42 | +import com.cnlive.veuisdk.manager.CNExportConfiguration; | ||
| 43 | +import com.cnlive.veuisdk.manager.CNFaceuInfo; | ||
| 44 | +import com.cnlive.veuisdk.manager.CNTrimConfiguration; | ||
| 45 | +import com.cnlive.veuisdk.manager.CNUIConfiguration; | ||
| 46 | +import com.cnlive.veuisdk.manager.CNVEOSDBuilder; | ||
| 47 | +import com.cnlive.veuisdk.manager.CNVideoMetadataRetriever; | ||
| 48 | +import com.rd.ve.demo.dialog.AlbumConfigDialog; | ||
| 49 | +import com.rd.ve.demo.dialog.AudioConfigDialog; | ||
| 50 | +import com.rd.ve.demo.dialog.CameraConfigDialog; | ||
| 51 | +import com.rd.ve.demo.dialog.CompressConfigDialog; | ||
| 52 | +import com.rd.ve.demo.dialog.ConfigData; | ||
| 53 | +import com.rd.ve.demo.dialog.ConfigDialogListener; | ||
| 54 | +import com.rd.ve.demo.dialog.EditorUIAndExportConfigDialog; | ||
| 55 | +import com.rd.ve.demo.dialog.OsdConfigDialog; | ||
| 56 | +import com.rd.ve.demo.dialog.VideoTrimConfigDialog; | ||
| 57 | +import com.rd.ve.demo.utils.SDKUtils; | ||
| 58 | + | ||
| 59 | +import java.util.ArrayList; | ||
| 60 | + | ||
| 61 | +import static com.cnlive.veuisdk.manager.CNCameraConfiguration.SQUARE_SCREEN_CAN_CHANGE; | ||
| 62 | + | ||
| 63 | + | ||
| 64 | +/** | ||
| 65 | + * xpkUISDK演示页 | ||
| 66 | + */ | ||
| 67 | +@TargetApi(23) | ||
| 68 | +public class MainActivity extends Activity { | ||
| 69 | + private final String TAG = "MainActivity"; | ||
| 70 | + private String EDIT_PICTURE_PATH = Environment | ||
| 71 | + .getExternalStorageDirectory() + "/android.jpg"; | ||
| 72 | + /** | ||
| 73 | + * 导出的横向16:9视频 | ||
| 74 | + */ | ||
| 75 | + private String EDIT_L_VIDEO_PATH = Environment | ||
| 76 | + .getExternalStorageDirectory() + "/demoVideo1.mp4"; | ||
| 77 | + /** | ||
| 78 | + * 瓦罐 | ||
| 79 | + * 测试用1:1方型视频 | ||
| 80 | + */ | ||
| 81 | + private String EDIT_S_VIDEO_PATH = Environment | ||
| 82 | + .getExternalStorageDirectory() + "/demoVideo2.mp4"; | ||
| 83 | + /** | ||
| 84 | + * 测试用竖向9:16视频 | ||
| 85 | + */ | ||
| 86 | + private String EDIT_P_VIDEO_PATH = Environment | ||
| 87 | + .getExternalStorageDirectory() + "/demoVideo3.mp4"; | ||
| 88 | + /** | ||
| 89 | + * 测试用水印图片 | ||
| 90 | + */ | ||
| 91 | + private String EDIT_WATERMARK_PATH = Environment | ||
| 92 | + .getExternalStorageDirectory() + "/watermark.png"; | ||
| 93 | + | ||
| 94 | + /** | ||
| 95 | + * REQUEST_CODE定义:<br> | ||
| 96 | + * 录制 | ||
| 97 | + */ | ||
| 98 | + private final int CAMERA_REQUEST_CODE = 100; | ||
| 99 | + /** | ||
| 100 | + * REQUEST_CODE定义:<br> | ||
| 101 | + * 相册 | ||
| 102 | + */ | ||
| 103 | + private final int ALBUM_REQUEST_CODE = 101; | ||
| 104 | + | ||
| 105 | + /** | ||
| 106 | + * 从相册选折要压缩的文件 | ||
| 107 | + */ | ||
| 108 | + private final int ALBUM_COMPRESS_REQUEST_CODE = 1011; | ||
| 109 | + /** | ||
| 110 | + * 从相册选折要播放的视频 | ||
| 111 | + */ | ||
| 112 | + private final int ALBUM_PLAYER_REQUEST_CODE = 1012; | ||
| 113 | + | ||
| 114 | + /** | ||
| 115 | + * 防篡改录制演示 | ||
| 116 | + */ | ||
| 117 | + private final int CAMERA_ANTI_CHANGE_REQUEST_CODE = 1013; | ||
| 118 | + | ||
| 119 | + /** | ||
| 120 | + * REQUEST_CODE定义:<br> | ||
| 121 | + * 视频编辑 | ||
| 122 | + */ | ||
| 123 | + private final int EDIT_REQUEST_CODE = 102; | ||
| 124 | + /** | ||
| 125 | + * REQUEST_CODE定义:<br> | ||
| 126 | + * 读取外置存储 | ||
| 127 | + */ | ||
| 128 | + private static final int REQUEST_CODE_READ_EXTERNAL_STORAGE_PERMISSIONS = 1; | ||
| 129 | + | ||
| 130 | + /** | ||
| 131 | + * REQUEST_CODE定义:<br> | ||
| 132 | + * 视频截取 | ||
| 133 | + */ | ||
| 134 | + private final int TRIM_REQUEST_CODE = 103; | ||
| 135 | + /** | ||
| 136 | + * REQUEST_CODE定义:<br> | ||
| 137 | + * 视频截取相册选择 | ||
| 138 | + */ | ||
| 139 | + private final int TRIM_ALBUM_REQUEST_CODE = 104; | ||
| 140 | + | ||
| 141 | + /** | ||
| 142 | + * 短视频录制演示request_code | ||
| 143 | + */ | ||
| 144 | + private final int SHORTVIDEO_CAMERA_REQUEST_CODE = 110; | ||
| 145 | + /** | ||
| 146 | + * 短视频录制进入相册演示request_code | ||
| 147 | + */ | ||
| 148 | + private final int SHORTVIDEO_ALBUM_REQUEST_CODE = 111; | ||
| 149 | + /** | ||
| 150 | + * 短视频录制进入相册进入截取演示request_code | ||
| 151 | + */ | ||
| 152 | + private final int SHORTVIDEO_TRIM_REQUEST_CODE = 112; | ||
| 153 | + | ||
| 154 | + /** | ||
| 155 | + * 画中画 | ||
| 156 | + */ | ||
| 157 | + private final int MIX_VIDEO_REQUEST_CODE = 113; | ||
| 158 | + | ||
| 159 | + | ||
| 160 | + /** | ||
| 161 | + * 选折导出的文件(仅视频) | ||
| 162 | + */ | ||
| 163 | + private final int ALBUM_REQUEST_EXPORT_CODE = 114; | ||
| 164 | + | ||
| 165 | + | ||
| 166 | + @Override | ||
| 167 | + protected void onCreate(Bundle savedInstanceState) { | ||
| 168 | + super.onCreate(savedInstanceState); | ||
| 169 | + if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) { | ||
| 170 | + finish(); | ||
| 171 | + return; | ||
| 172 | + } | ||
| 173 | + setContentView(R.layout.activity_main_layout); | ||
| 174 | + | ||
| 175 | + EDIT_PICTURE_PATH = ((AppImpl) getApplication()).getCustomPath() + "/android.jpg"; | ||
| 176 | + EDIT_L_VIDEO_PATH = ((AppImpl) getApplication()).getCustomPath() + "/demoVideo1.mp4"; | ||
| 177 | + EDIT_S_VIDEO_PATH = ((AppImpl) getApplication()).getCustomPath() + "/demoVideo2.mp4"; | ||
| 178 | + EDIT_P_VIDEO_PATH = ((AppImpl) getApplication()).getCustomPath() + "/demoVideo3.mp4"; | ||
| 179 | + EDIT_WATERMARK_PATH = ((AppImpl) getApplication()).getCustomPath() + "/watermark.png"; | ||
| 180 | + | ||
| 181 | + restoreConfigInstanceState(); | ||
| 182 | + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M | ||
| 183 | + && !CNSdkEntry.isInitialized()) { | ||
| 184 | + if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { | ||
| 185 | + requestPermissions( | ||
| 186 | + new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, | ||
| 187 | + REQUEST_CODE_READ_EXTERNAL_STORAGE_PERMISSIONS); | ||
| 188 | + } | ||
| 189 | + } else { | ||
| 190 | + exportDemoResource(); | ||
| 191 | + } | ||
| 192 | + // 初始化秀拍客配置 | ||
| 193 | + initEditorUIAndExportConfig(); | ||
| 194 | + registerAllResultHandlers(); | ||
| 195 | + } | ||
| 196 | + | ||
| 197 | + @Override | ||
| 198 | + protected void onDestroy() { | ||
| 199 | + super.onDestroy(); | ||
| 200 | + CNSdkEntry.onExitApp(this); | ||
| 201 | + } | ||
| 202 | + | ||
| 203 | + /** | ||
| 204 | + * 初始标准编辑及导出配置 | ||
| 205 | + */ | ||
| 206 | + private void initEditorUIAndExportConfig() { | ||
| 207 | + initAndGetConfigData(); | ||
| 208 | + // 视频编辑UI配置 | ||
| 209 | + CNUIConfiguration uiConfig = new CNUIConfiguration() | ||
| 210 | + // 设置是否使用自定义相册 | ||
| 211 | + .setUseCustomAlbum(configData.useCustomAlbum) | ||
| 212 | + // 设置向导化 | ||
| 213 | + .setEnableWizard(configData.enableWizard) | ||
| 214 | + // 设置自动播放 | ||
| 215 | + .setEnableAutoRepeat(configData.enableAutoRepeat) | ||
| 216 | + // 设置MV和mv网络地址 | ||
| 217 | + .setEnableMV(configData.enableMV, ConfigData.WEB_MV_URL) | ||
| 218 | + // 配音模式 | ||
| 219 | + .setVoiceLayoutType(configData.voiceLayoutType) | ||
| 220 | + // 设置秀拍客相册支持格式] | ||
| 221 | + .setAlbumSupportFormatType(configData.albumSupportFormatType) | ||
| 222 | + // 设置默认进入界面画面比例 | ||
| 223 | + .setVideoProportion(configData.videoProportionType) | ||
| 224 | + // 设置滤镜界面风格 | ||
| 225 | + .setFilterLayoutType(configData.filterLayoutType) | ||
| 226 | + // 设置相册媒体选择数量上限(目前只对相册接口生效) | ||
| 227 | + .setMediaCountLimit(configData.albumMediaCountLimit) | ||
| 228 | + // 设置相册是否显示跳转拍摄按钮(目前只对相册接口生效) | ||
| 229 | + .setEnableAlbumCamera(configData.enableAlbumCamera) | ||
| 230 | + // 编辑与导出模块显示与隐藏(默认不设置为显示) | ||
| 231 | + .setEditAndExportModuleVisibility( | ||
| 232 | + CNUIConfiguration.CNEditAndExportModules.SOUNDTRACK, | ||
| 233 | + configData.enableSoundTrack) | ||
| 234 | + | ||
| 235 | + .setEditAndExportModuleVisibility(CNUIConfiguration.CNEditAndExportModules.DUBBING, | ||
| 236 | + configData.enableDubbing) | ||
| 237 | + .setEditAndExportModuleVisibility(CNUIConfiguration.CNEditAndExportModules.FILTER, | ||
| 238 | + configData.enableFilter) | ||
| 239 | + .setEditAndExportModuleVisibility(CNUIConfiguration.CNEditAndExportModules.TITLING, | ||
| 240 | + configData.enableTitling) | ||
| 241 | + .setEditAndExportModuleVisibility( | ||
| 242 | + CNUIConfiguration.CNEditAndExportModules.SPECIAL_EFFECTS, | ||
| 243 | + configData.enableSpecialEffects) | ||
| 244 | + .setEditAndExportModuleVisibility( | ||
| 245 | + CNUIConfiguration.CNEditAndExportModules.CLIP_EDITING, | ||
| 246 | + configData.enableClipEditing) | ||
| 247 | + // 片段编辑模块显示与隐藏(默认不设置为显示) | ||
| 248 | + .setClipEditingModuleVisibility( | ||
| 249 | + CNUIConfiguration.CNClipEditingModules.IMAGE_DURATION_CONTROL, | ||
| 250 | + configData.enableImageDuration) | ||
| 251 | + .setClipEditingModuleVisibility(CNUIConfiguration.CNClipEditingModules.EDIT, | ||
| 252 | + configData.enableEdit) | ||
| 253 | + .setClipEditingModuleVisibility(CNUIConfiguration.CNClipEditingModules.TRIM, | ||
| 254 | + configData.enableTrim) | ||
| 255 | + .setClipEditingModuleVisibility( | ||
| 256 | + CNUIConfiguration.CNClipEditingModules.VIDEO_SPEED_CONTROL, | ||
| 257 | + configData.enableVideoSpeed) | ||
| 258 | + .setClipEditingModuleVisibility(CNUIConfiguration.CNClipEditingModules.SPLIT, | ||
| 259 | + configData.enableSplit) | ||
| 260 | + .setClipEditingModuleVisibility(CNUIConfiguration.CNClipEditingModules.COPY, | ||
| 261 | + configData.enableCopy) | ||
| 262 | + .setClipEditingModuleVisibility(CNUIConfiguration.CNClipEditingModules.PROPORTION, | ||
| 263 | + configData.enableProportion) | ||
| 264 | + .setClipEditingModuleVisibility(CNUIConfiguration.CNClipEditingModules.SORT, | ||
| 265 | + configData.enableSort) | ||
| 266 | + .setClipEditingModuleVisibility(CNUIConfiguration.CNClipEditingModules.TEXT, | ||
| 267 | + configData.enableText) | ||
| 268 | + .setClipEditingModuleVisibility(CNUIConfiguration.CNClipEditingModules.REVERSE, | ||
| 269 | + configData.enableReverse) | ||
| 270 | + .setClipEditingModuleVisibility(CNUIConfiguration.CNClipEditingModules.TRANSITION, true) | ||
| 271 | + | ||
| 272 | + // 设置自定义的网络音乐 | ||
| 273 | + .setMusicUrl(ConfigData.MUSIC_URL) | ||
| 274 | + // 设置云音乐 | ||
| 275 | + .setCloudMusicUrl(ConfigData.CLOUDMUSIC_URL) | ||
| 276 | + //是否显示本地音乐 | ||
| 277 | + .setEnableLocalMusic(configData.enableLocalMusic) | ||
| 278 | + // 字幕、特效在mv的上面 | ||
| 279 | + .setEnableTitlingAndSpecialEffectOuter(configData.enableTitlingAndSpecialEffectOuter); | ||
| 280 | + | ||
| 281 | + // 导出视频参数配置 | ||
| 282 | + CNExportConfiguration exportConfig = new CNExportConfiguration() | ||
| 283 | + // 设置保存路径,传null或不设置 | ||
| 284 | + // 将保存至默认路径(即调用SdkEntry.initialize初始时自定义路径) | ||
| 285 | + .setSavePath(null) | ||
| 286 | + //设置导出时最大边,不设置时,默认为640 | ||
| 287 | + .setExportVideoMaxWH(640) | ||
| 288 | + //设置视频导出码率,Mbps为单位,不设置时,默认为4 | ||
| 289 | + .setExportVideoBitRate(4) | ||
| 290 | + //设置视频导出帧率,,不设置时,默认为30 | ||
| 291 | + .setExportVideoFrameRate(30) | ||
| 292 | + // 设置片尾图片路径,传null或者不设置 将没有片尾 | ||
| 293 | + .setTrailerPath(configData.videoTrailerPath) | ||
| 294 | + // 设置片尾时长 单位s 默认2s | ||
| 295 | + .setTrailerDuration(2) | ||
| 296 | + // 设置导出视频时长 单位ms 传0或者不设置 将导出完整视频 | ||
| 297 | + .setExportVideoDuration(configData.exportVideoDuration) | ||
| 298 | + // 设置图片水印路径 | ||
| 299 | + .setWatermarkPath(configData.enableWatermark ? EDIT_WATERMARK_PATH : null) | ||
| 300 | + // 设置是否使用文字水印(使用文字水印,将不再显示图片水印) | ||
| 301 | + .setEnableTextWatermark(configData.enableTextWatermark) | ||
| 302 | + // 设置文字水印内容(开启文字水印才生效) | ||
| 303 | + .setTextWatermarkContent("watarmark") | ||
| 304 | + // 设置文字水印大小(开启文字水印才生效) | ||
| 305 | + .setTextWatermarkSize(10) | ||
| 306 | + // 设置文字水印颜色(开启文字水印才生效) | ||
| 307 | + .setTextWatermarkColor(Color.WHITE) | ||
| 308 | + // 设置文字水印阴影颜色(开启文字水印才生效) | ||
| 309 | + .setTextWatermarkShadowColor(Color.BLACK) | ||
| 310 | + // 设置水印位置 (文字或图片水印开启才生效) | ||
| 311 | + .setWatermarkShowRectF(configData.watermarkShowRectF); | ||
| 312 | + | ||
| 313 | + // 获取秀拍客配置服务器 | ||
| 314 | + CNSdkService sdkService = CNSdkEntry.getSdkService(); | ||
| 315 | + if (null != sdkService) { | ||
| 316 | + // 初始化所有配置 | ||
| 317 | + sdkService.initConfiguration(exportConfig, uiConfig); | ||
| 318 | + } | ||
| 319 | + } | ||
| 320 | + | ||
| 321 | + /** | ||
| 322 | + * 选折相册资源 | ||
| 323 | + */ | ||
| 324 | + private void initUIAblumConfig() { | ||
| 325 | + // 视频编辑UI配置 | ||
| 326 | + CNUIConfiguration uiConfig = new CNUIConfiguration() | ||
| 327 | + // 设置是否使用自定义相册 | ||
| 328 | + .setUseCustomAlbum(false) | ||
| 329 | + // 设置秀拍客相册支持格式 | ||
| 330 | + .setAlbumSupportFormatType(CNUIConfiguration.ALBUM_SUPPORT_DEFAULT) | ||
| 331 | + // 设置滤镜界面风格 | ||
| 332 | + // 设置相册媒体选择数量上限(目前只对相册接口生效) | ||
| 333 | + .setMediaCountLimit(1) | ||
| 334 | + // 设置相册是否显示跳转拍摄按钮(目前只对相册接口生效) | ||
| 335 | + .setEnableAlbumCamera(false); | ||
| 336 | + | ||
| 337 | + // 获取秀拍客配置服务器 | ||
| 338 | + CNSdkService sdkService = CNSdkEntry.getSdkService(); | ||
| 339 | + if (null != sdkService) { | ||
| 340 | + // 初始化所有配置 | ||
| 341 | + sdkService.initConfiguration(null, uiConfig); | ||
| 342 | + } | ||
| 343 | + } | ||
| 344 | + | ||
| 345 | + /** | ||
| 346 | + * 初始拍摄配置 | ||
| 347 | + * | ||
| 348 | + * @param UIType * 设置录制时默认界面:<br> | ||
| 349 | + * 默认16:9录制:<br> | ||
| 350 | + * CNCameraConfiguration#WIDE_SCREEN_CAN_CHANGE<br> | ||
| 351 | + * 默认1:1:<br> | ||
| 352 | + * CNCameraConfiguration. SQUARE_SCREEN_CAN_CHANGE<br> | ||
| 353 | + * 仅16:9录制:<br> | ||
| 354 | + * CNCameraConfiguration.ONLY_WIDE_SCREEN<br> | ||
| 355 | + * 仅1:1录制:<br> | ||
| 356 | + * CNCameraConfiguration.ONLY_SQUARE_SCREEN | ||
| 357 | + */ | ||
| 358 | + private void initCameraConfig(int UIType) { | ||
| 359 | + CNSdkEntry.getSdkService().initConfiguration( | ||
| 360 | + new CNCameraConfiguration() | ||
| 361 | + // 可设置最小录制时长,0代表不限制 | ||
| 362 | + .setVideoMinTime(configData.cameraMinTime) | ||
| 363 | + // 可设置最大录制时长,0代表不限制 | ||
| 364 | + .setVideoMaxTime(configData.cameraMaxTime) | ||
| 365 | + // 为true代表多次拍摄,拍摄完成一段之后,将保存至相册并开始下一段拍摄,默认为false单次拍摄,拍摄完成后返回资源地址 | ||
| 366 | + .setUseMultiShoot(configData.useMultiShoot) | ||
| 367 | + /** | ||
| 368 | + * 设置录制时默认界面:<br> | ||
| 369 | + * 默认16:9录制:<br> | ||
| 370 | + * CNCameraConfiguration. WIDE_SCREEN_CAN_CHANGE<br> | ||
| 371 | + * 默认1:1:<br> | ||
| 372 | + * CNCameraConfiguration. SQUARE_SCREEN_CAN_CHANGE<br> | ||
| 373 | + * 仅16:9录制:<br> | ||
| 374 | + * CNCameraConfiguration.ONLY_SCREEN_SCREEN 仅1:1录制:<br> | ||
| 375 | + * CNCameraConfiguration.ONLY_SQUARE_SCREEN | ||
| 376 | + */ | ||
| 377 | + .setCameraUIType(UIType) | ||
| 378 | + // 设置拍摄完成后,是否保存至相册(仅单次拍摄方式有效),同时通过onActivityResult及SIMPLE_CAMERA_REQUEST_CODE返回 | ||
| 379 | + .setSaveToAlbum(configData.isSaveToAlbum) | ||
| 380 | + // 设置录制时是否静音,true代表录制后无声音 | ||
| 381 | + .setAudioMute(false) | ||
| 382 | + // 设置是否启用人脸贴纸功能 | ||
| 383 | + .setEnableFaceU(configData.isDefaultFace) | ||
| 384 | + // 设置人脸贴纸鉴权证书 | ||
| 385 | + .setPack(authpack.A()) | ||
| 386 | + // 设置是否默认为后置摄像头 | ||
| 387 | + .setDefaultRearCamera(configData.isDefaultRearCamera) | ||
| 388 | + // 是否显示相册按钮 | ||
| 389 | + .setEnableAlbum(configData.enableAlbum) | ||
| 390 | + // 是否使用自定义相册 | ||
| 391 | + .setUseCustomAlbum(configData.useCustomAlbum) | ||
| 392 | + // 设置隐藏拍摄功能(全部隐藏将强制开启视频拍摄) | ||
| 393 | + .setHideMV(configData.hideMV) | ||
| 394 | + .setHidePhoto(configData.hidePhoto) | ||
| 395 | + .setHideRec(configData.hideRec) | ||
| 396 | + // 设置mv最小时长 | ||
| 397 | + .setCameraMVMinTime(configData.cameraMVMinTime) | ||
| 398 | + // 设置mv最大时长 | ||
| 399 | + .setCameraMVMaxTime(configData.cameraMVMaxTime) | ||
| 400 | + // 开启相机水印时需注册水印 | ||
| 401 | + // CNSdkEntry.registerOSDBuilder(CameraWatermarkBuilder.class); | ||
| 402 | + // 相机录制水印 | ||
| 403 | + .setEnableWatermark(configData.enableCameraWatermark) | ||
| 404 | + // 相机水印片头 | ||
| 405 | + .setCameraTrailerTime(CNVEOSDBuilder.CNOSDState.header, 2f) | ||
| 406 | + // 相机录制结束时片尾水印时长(0-1.0 单位:秒) | ||
| 407 | + .setCameraTrailerTime(CNVEOSDBuilder.CNOSDState.end, | ||
| 408 | + configData.cameraWatermarkEnd) | ||
| 409 | + // 是否启用防篡改录制 | ||
| 410 | + .setEnableAntiChange(configData.enableAntiChange) | ||
| 411 | + // 启用前置输出时镜像 | ||
| 412 | + .setEnableFrontMirror(configData.enableFrontMirror) | ||
| 413 | + // 固定录制界面的方向 | ||
| 414 | + .setOrientation(configData.mRecordOrientation) | ||
| 415 | + // 是否支持录制时播放音乐 | ||
| 416 | + .setEnablePlayMusic(configData.enablePlayMusic) | ||
| 417 | + // 是否美颜 | ||
| 418 | + .setEnableBeauty(configData.enableBeauty)); | ||
| 419 | + } | ||
| 420 | + | ||
| 421 | + /** | ||
| 422 | + * 防篡改录制的相机配置 | ||
| 423 | + */ | ||
| 424 | + private void initCameraAntiChangeConfig() { | ||
| 425 | + | ||
| 426 | + CNCameraConfiguration config = new CNCameraConfiguration() | ||
| 427 | + // 可设置最小录制时长,0代表不限制 | ||
| 428 | + .setVideoMinTime(configData.cameraMinTime) | ||
| 429 | + // 可设置最大录制时长,0代表不限制 | ||
| 430 | + .setVideoMaxTime(configData.cameraMaxTime) | ||
| 431 | + // 为true代表多次拍摄,拍摄完成一段之后,将保存至相册并开始下一段拍摄,默认为false单次拍摄,拍摄完成后返回资源地址 | ||
| 432 | + .setUseMultiShoot(false) | ||
| 433 | + /* | ||
| 434 | + * 仅16:9录制:<br> CNCameraConfiguration.ONLY_WIDE_SCREEN | ||
| 435 | + */ | ||
| 436 | + .setCameraUIType(CNCameraConfiguration.ONLY_WIDE_SCREEN) | ||
| 437 | + // 设置拍摄完成后,是否保存至相册(仅单次拍摄方式有效),同时通过onActivityResult及SIMPLE_CAMERA_REQUEST_CODE返回 | ||
| 438 | + .setSaveToAlbum(true) | ||
| 439 | + // 设置录制时是否静音,true代表录制后无声音 | ||
| 440 | + .setAudioMute(false) | ||
| 441 | + // 设置是否启用人脸贴纸功能 | ||
| 442 | + .setEnableFaceU(configData.isDefaultFace) | ||
| 443 | + // 设置人脸贴纸鉴权证书 | ||
| 444 | + .setPack(authpack.A()) | ||
| 445 | + // 设置是否默认为后置摄像头 | ||
| 446 | + .setDefaultRearCamera(false) | ||
| 447 | + // 是否显示相册按钮 | ||
| 448 | + .setEnableAlbum(true) | ||
| 449 | + // 是否使用自定义相册 | ||
| 450 | + // .useCustomAlbum(configData.useCustomAlbum) | ||
| 451 | + // 设置隐藏拍摄功能(全部隐藏将强制开启视频拍摄) | ||
| 452 | + .setHideMV(true) | ||
| 453 | + .setHidePhoto(true) | ||
| 454 | + .setHideRec(false) | ||
| 455 | + // 设置mv最小时长 | ||
| 456 | + .setCameraMVMinTime(configData.cameraMVMinTime) | ||
| 457 | + // 设置mv最大时长 | ||
| 458 | + .setCameraMVMaxTime(configData.cameraMVMaxTime) | ||
| 459 | + // 开启相机水印时需注册水印 | ||
| 460 | + // CNSdkEntry.registerOSDBuilder(CameraWatermarkBuilder.class); | ||
| 461 | + // 相机录制水印 | ||
| 462 | + .setEnableWatermark(true) | ||
| 463 | + // 相机录制结束时片尾水印时长(0-1.0 单位:秒) | ||
| 464 | + .setCameraTrailerTime(CNVEOSDBuilder.CNOSDState.header, 2f) | ||
| 465 | + .setCameraTrailerTime(CNVEOSDBuilder.CNOSDState.end, 1f) | ||
| 466 | + // 是否启用防篡改录制 | ||
| 467 | + .setEnableAntiChange(true) | ||
| 468 | + .setEnableFrontMirror(true) | ||
| 469 | + .setEnableBeauty(true); | ||
| 470 | + | ||
| 471 | + CNSdkService sdkService = CNSdkEntry.getSdkService(); | ||
| 472 | + if (null != sdkService) { | ||
| 473 | + // 初始化所有配置 | ||
| 474 | + sdkService.initConfiguration(config); | ||
| 475 | + } | ||
| 476 | + } | ||
| 477 | + | ||
| 478 | + /** | ||
| 479 | + * 短视频录制推荐参数 | ||
| 480 | + */ | ||
| 481 | + private void initCameraShortVideoConfig() { | ||
| 482 | + | ||
| 483 | + CNCameraConfiguration cameraConfig = new CNCameraConfiguration() | ||
| 484 | + // 为true代表多次拍摄,拍摄完成一段之后,将保存至相册并开始下一段拍摄,默认为false单次拍摄,拍摄完成后返回资源地址 | ||
| 485 | + .setUseMultiShoot(false) | ||
| 486 | + /** | ||
| 487 | + * 设置录制时默认界面:<br> | ||
| 488 | + * 默认16:9录制:<br> | ||
| 489 | + * CNCameraConfiguration. WIDE_SCREEN_CAN_CHANGE<br> | ||
| 490 | + * 默认1:1:<br> | ||
| 491 | + * CNCameraConfiguration. SQUARE_SCREEN_CAN_CHANGE<br> | ||
| 492 | + * 仅1:1录制:<br> | ||
| 493 | + * CNCameraConfiguration.ONLY_SQUARE_SCREEN | ||
| 494 | + */ | ||
| 495 | + .setCameraUIType(CNCameraConfiguration.ONLY_SQUARE_SCREEN) | ||
| 496 | + // 设置拍摄完成后,是否保存至相册(仅单次拍摄方式有效),同时通过onActivityResult及SIMPLE_CAMERA_REQUEST_CODE返回 | ||
| 497 | + .setSaveToAlbum(true) | ||
| 498 | + // 设置录制时是否静音,true代表录制后无声音 | ||
| 499 | + .setAudioMute(false) | ||
| 500 | + // 设置是否启用人脸贴纸 | ||
| 501 | + .setEnableFaceU(false) | ||
| 502 | + // 设置启用人脸贴纸鉴权证书 | ||
| 503 | + .setPack(authpack.A()) | ||
| 504 | + // 设置是否默认为后置摄像头 | ||
| 505 | + .setDefaultRearCamera(false) | ||
| 506 | + // 是否显示相册按钮 | ||
| 507 | + .setEnableAlbum(true) | ||
| 508 | + // 是否使用自定义相册 | ||
| 509 | + .setUseCustomAlbum(false) | ||
| 510 | + // 设置隐藏拍摄功能(全部隐藏将强制开启视频拍摄) | ||
| 511 | + .setHideMV(false) | ||
| 512 | + .setHidePhoto(true) | ||
| 513 | + .setHideRec(true) | ||
| 514 | + // 设置mv最小时长 | ||
| 515 | + .setCameraMVMinTime(3) | ||
| 516 | + // 设置mv最大时长 | ||
| 517 | + .setCameraMVMaxTime(15) | ||
| 518 | + // 强制美颜 | ||
| 519 | + .setEnableBeauty(true); | ||
| 520 | + // 视频编辑UI配置 | ||
| 521 | + CNUIConfiguration uiConfig = new CNUIConfiguration() | ||
| 522 | + // 设置是否使用自定义相册 | ||
| 523 | + .setUseCustomAlbum(false) | ||
| 524 | + // 设置MV和mv网络地址 | ||
| 525 | + .setEnableMV(true, ConfigData.WEB_MV_URL) | ||
| 526 | + // 设置画面比例为1:1 | ||
| 527 | + .setVideoProportion(CNUIConfiguration.PROPORTION_SQUARE) | ||
| 528 | + // 相册仅支持视频 | ||
| 529 | + .setAlbumSupportFormatType(CNUIConfiguration.ALBUM_SUPPORT_VIDEO_ONLY) | ||
| 530 | + // 设置视频选择最大数量 | ||
| 531 | + .setMediaCountLimit(1) | ||
| 532 | + // 设置隐藏相册中的拍摄按钮 | ||
| 533 | + .setEnableAlbumCamera(false) | ||
| 534 | + //显示配乐 | ||
| 535 | + .setEditAndExportModuleVisibility(CNUIConfiguration.CNEditAndExportModules.SOUNDTRACK, true) | ||
| 536 | + //关闭配音 | ||
| 537 | + .setEditAndExportModuleVisibility(CNUIConfiguration.CNEditAndExportModules.DUBBING, false) | ||
| 538 | + // 隐藏字幕 | ||
| 539 | + .setEditAndExportModuleVisibility(CNUIConfiguration.CNEditAndExportModules.TITLING, | ||
| 540 | + false) | ||
| 541 | + // 隐藏片段编辑 | ||
| 542 | + .setEditAndExportModuleVisibility( | ||
| 543 | + CNUIConfiguration.CNEditAndExportModules.CLIP_EDITING, false) | ||
| 544 | + // 隐藏特效 | ||
| 545 | + .setEditAndExportModuleVisibility( | ||
| 546 | + CNUIConfiguration.CNEditAndExportModules.SPECIAL_EFFECTS, false) | ||
| 547 | + // 启用自动重播 | ||
| 548 | + .setEnableAutoRepeat(true); | ||
| 549 | + | ||
| 550 | + CNTrimConfiguration trimConfig = new CNTrimConfiguration() | ||
| 551 | + //设置实际截取时视频导出最大边,不设置时,默认为640 | ||
| 552 | + .setExportVideoMaxWH(640) | ||
| 553 | + //设置实际截取时视频导出码率,Mbps为单位,不设置时,默认为4 | ||
| 554 | + .setExportVideoBitRate(4) | ||
| 555 | + // 设置默认裁剪区域为1:1 | ||
| 556 | + .setDefault1x1CropMode(true) | ||
| 557 | + // 设置截取返回类型 | ||
| 558 | + .setTrimReturnMode(CNTrimConfiguration.TRIM_RETURN_TIME) | ||
| 559 | + // 设置截取类型 | ||
| 560 | + .setTrimType(CNTrimConfiguration.TRIM_TYPE_SINGLE_FIXED) | ||
| 561 | + // 设置是否显示1:1按钮 | ||
| 562 | + .setEnable1x1(false) | ||
| 563 | + // 设置定长截取时间 | ||
| 564 | + .setTrimDuration(15); | ||
| 565 | + CNSdkEntry.getSdkService().initConfiguration(null, uiConfig, | ||
| 566 | + cameraConfig); | ||
| 567 | + CNSdkEntry.getSdkService().initTrimConfiguration(trimConfig); | ||
| 568 | + } | ||
| 569 | + | ||
| 570 | + /** | ||
| 571 | + * 初始压缩配置 | ||
| 572 | + */ | ||
| 573 | + private void initCompressConfig() { | ||
| 574 | + CNSdkService sdkService = CNSdkEntry.getSdkService(); | ||
| 575 | + if (null != sdkService) { | ||
| 576 | + sdkService | ||
| 577 | + .initCompressConfiguration(new CNCompressConfiguration() | ||
| 578 | + // 设置是否使用硬件加速 | ||
| 579 | + .setEnableHWCode(configData.enableHWCode) | ||
| 580 | + // 设置压缩视频码率 | ||
| 581 | + .setBitRate(configData.compressBitRate) | ||
| 582 | + // 是否显示水印 | ||
| 583 | + .setEnableWatermark(configData.enableCompressWatermark) | ||
| 584 | + // 显示水印的位置 | ||
| 585 | + .setWatermarkPosition( | ||
| 586 | + configData.compressWatermarkShowRect) | ||
| 587 | + // 设置视频分辨率 | ||
| 588 | + .setVideoSize(configData.compressVideoWidth, | ||
| 589 | + configData.compressVideoHeight) | ||
| 590 | + // 设置保存路径 | ||
| 591 | + .setSavePath( | ||
| 592 | + Environment.getExternalStorageDirectory() | ||
| 593 | + + "/xpkVideos/")); | ||
| 594 | + } | ||
| 595 | + } | ||
| 596 | + | ||
| 597 | + /** | ||
| 598 | + * 初始视频截取配置 | ||
| 599 | + */ | ||
| 600 | + private void initTrimConfig() { | ||
| 601 | + CNSdkService sdkService = CNSdkEntry.getSdkService(); | ||
| 602 | + if (null != sdkService) { | ||
| 603 | + sdkService | ||
| 604 | + .initTrimConfiguration(new CNTrimConfiguration() | ||
| 605 | + //设置实际截取时视频导出最大边,不设置时,默认为640 | ||
| 606 | + .setExportVideoMaxWH(640) | ||
| 607 | + //设置实际截取时视频导出码率,Mbps为单位,不设置时,默认为4 | ||
| 608 | + .setExportVideoBitRate(4) | ||
| 609 | + // 设置默认裁剪区域为1:1 | ||
| 610 | + .setDefault1x1CropMode( | ||
| 611 | + configData.default1x1CropMode) | ||
| 612 | + // 设置是否显示1:1裁剪按钮 | ||
| 613 | + .setEnable1x1(configData.enable1x1) | ||
| 614 | + // 设置截取返回类型 | ||
| 615 | + .setTrimReturnMode(configData.mTrimReturnMode) | ||
| 616 | + // 设置截取类型 | ||
| 617 | + .setTrimType(configData.mTrimType) | ||
| 618 | + // 设置两定长截取时间 | ||
| 619 | + .setTrimDuration(configData.trimTime1, configData.trimTime2) | ||
| 620 | + // 设置单个定长截取时间 | ||
| 621 | + .setTrimDuration(configData.trimSingleFixedDuration)); | ||
| 622 | + } | ||
| 623 | + } | ||
| 624 | + | ||
| 625 | + @SuppressLint("NewApi") | ||
| 626 | + @Override | ||
| 627 | + public void onRequestPermissionsResult(int requestCode, | ||
| 628 | + String[] permissions, int[] grantResults) { | ||
| 629 | + switch (requestCode) { | ||
| 630 | + case REQUEST_CODE_READ_EXTERNAL_STORAGE_PERMISSIONS: { | ||
| 631 | + for (int i = 0; i < permissions.length; i++) { | ||
| 632 | + if (grantResults[i] == PackageManager.PERMISSION_GRANTED) { | ||
| 633 | + if (!CNSdkEntry.isInitialized()) { | ||
| 634 | + ((AppImpl) getApplication()).initializeSdk(); | ||
| 635 | + } | ||
| 636 | + exportDemoResource(); | ||
| 637 | + } else { | ||
| 638 | + Toast.makeText(this, "未允许读写存储!", Toast.LENGTH_SHORT).show(); | ||
| 639 | + finish(); | ||
| 640 | + } | ||
| 641 | + } | ||
| 642 | + } | ||
| 643 | + break; | ||
| 644 | + default: { | ||
| 645 | + super.onRequestPermissionsResult(requestCode, permissions, | ||
| 646 | + grantResults); | ||
| 647 | + } | ||
| 648 | + } | ||
| 649 | + } | ||
| 650 | + | ||
| 651 | + | ||
| 652 | + /** | ||
| 653 | + * 响应点击 | ||
| 654 | + * | ||
| 655 | + * @param v | ||
| 656 | + */ | ||
| 657 | + public void onVideo(View v) { | ||
| 658 | + switch (v.getId()) { | ||
| 659 | + case R.id.record_square: // 正方形录制视频,编辑录制后的视频,如果有导出时,导出视频的路径 | ||
| 660 | + CNSdkEntry.registerOSDBuilder(CameraWatermarkBuilder.class); | ||
| 661 | + CameraWatermarkBuilder.setText("");// 可自定义水印显示文本 | ||
| 662 | + initCameraConfig(CNCameraConfiguration.ONLY_SQUARE_SCREEN); | ||
| 663 | + CNSdkEntry.record(this, CAMERA_REQUEST_CODE); | ||
| 664 | + break; | ||
| 665 | + case R.id.record_wide: // 长方形录制视频,编辑录制后的视频,如果有导出时,导出视频的路径 | ||
| 666 | + CNSdkEntry.registerOSDBuilder(CameraWatermarkBuilder.class); | ||
| 667 | + CameraWatermarkBuilder.setText("");// 可自定义水印显示文本 | ||
| 668 | + initCameraConfig(CNCameraConfiguration.ONLY_WIDE_SCREEN); | ||
| 669 | + CNSdkEntry.record(this, CAMERA_REQUEST_CODE); | ||
| 670 | + break; | ||
| 671 | + case R.id.record: // 正方形,长方形可切换录制视频,编辑录制后的视频,如果有导出时,导出视频的路径 | ||
| 672 | + CNSdkEntry.registerOSDBuilder(CameraWatermarkBuilder.class); | ||
| 673 | + CameraWatermarkBuilder.setText("");// 可自定义水印显示文本 | ||
| 674 | + initCameraConfig(SQUARE_SCREEN_CAN_CHANGE); | ||
| 675 | + CNSdkEntry.record(this, CAMERA_REQUEST_CODE); | ||
| 676 | + break; | ||
| 677 | + case R.id.recordAntiChange: // 全屏录制,防篡改录制 | ||
| 678 | + CNSdkEntry.registerOSDBuilder(CameraWatermarkBuilder.class); | ||
| 679 | + String osd = TextUtils.isEmpty(configData.antiChangeText) ? getString(R.string.osd_content) | ||
| 680 | + : configData.antiChangeText; | ||
| 681 | + CameraWatermarkBuilder.setText(osd); | ||
| 682 | + initCameraAntiChangeConfig(); | ||
| 683 | + CNSdkEntry.record(this, CAMERA_ANTI_CHANGE_REQUEST_CODE); | ||
| 684 | + | ||
| 685 | + | ||
| 686 | + break; | ||
| 687 | + | ||
| 688 | + case R.id.directEdit: // 传递资源路径,进入视频编辑,返回导出的视频的地址 | ||
| 689 | + initEditorUIAndExportConfig(); | ||
| 690 | + initCameraConfig(SQUARE_SCREEN_CAN_CHANGE); | ||
| 691 | +// CNSdkEntry.getSdkService().initConfiguration( | ||
| 692 | +// new CNCameraConfiguration()); | ||
| 693 | + ArrayList<String> list = new ArrayList<String>(); | ||
| 694 | + list.add(EDIT_PICTURE_PATH); | ||
| 695 | + list.add(EDIT_L_VIDEO_PATH); | ||
| 696 | + CNSdkEntry.editMedia(MainActivity.this, list, EDIT_REQUEST_CODE); | ||
| 697 | + break; | ||
| 698 | + case R.id.selectMediaAndEdit: // 进入sdk媒体资源的选择界面(图片、视频) | ||
| 699 | + initEditorUIAndExportConfig(); | ||
| 700 | + initCameraConfig(SQUARE_SCREEN_CAN_CHANGE); | ||
| 701 | + CNSdkEntry.selectMedia(this, EDIT_REQUEST_CODE); | ||
| 702 | + break; | ||
| 703 | + case R.id.player: // 播放器 | ||
| 704 | + initUIAblumConfig(); | ||
| 705 | + CNSdkEntry.openAlbum(this, CNUIConfiguration.ALBUM_SUPPORT_VIDEO_ONLY, | ||
| 706 | + ALBUM_PLAYER_REQUEST_CODE); | ||
| 707 | + break; | ||
| 708 | + case R.id.export: | ||
| 709 | + initEditorUIAndExportConfig(); | ||
| 710 | + CNSdkEntry.getSdkService().initConfiguration( | ||
| 711 | + new CNCameraConfiguration()); | ||
| 712 | + CNSdkEntry.openAlbum(this, CNUIConfiguration.ALBUM_SUPPORT_VIDEO_ONLY, | ||
| 713 | + ALBUM_REQUEST_EXPORT_CODE); | ||
| 714 | + break; | ||
| 715 | + case R.id.trim_l: // 截取横屏视频 | ||
| 716 | + initTrimConfig(); | ||
| 717 | + CNSdkEntry.trimVideo(this, EDIT_L_VIDEO_PATH, TRIM_REQUEST_CODE); | ||
| 718 | + break; | ||
| 719 | + case R.id.trim_p: // 截取竖屏视频 | ||
| 720 | + initTrimConfig(); | ||
| 721 | + CNSdkEntry.trimVideo(this, EDIT_P_VIDEO_PATH, TRIM_REQUEST_CODE); | ||
| 722 | + break; | ||
| 723 | + case R.id.trim_s: // 截取正方型视频 | ||
| 724 | + initTrimConfig(); | ||
| 725 | + CNSdkEntry.trimVideo(this, EDIT_S_VIDEO_PATH, TRIM_REQUEST_CODE); | ||
| 726 | + break; | ||
| 727 | + case R.id.trim_alum: | ||
| 728 | + initUIAblumConfig(); | ||
| 729 | + CNSdkEntry.openAlbum(this, CNUIConfiguration.ALBUM_SUPPORT_VIDEO_ONLY, | ||
| 730 | + TRIM_ALBUM_REQUEST_CODE); | ||
| 731 | + break; | ||
| 732 | + case R.id.default_album: // 默认相册(支持图片和视频) | ||
| 733 | + initEditorUIAndExportConfig(); | ||
| 734 | + CNSdkEntry.getSdkService().initConfiguration( | ||
| 735 | + new CNCameraConfiguration()); | ||
| 736 | + CNSdkEntry.openAlbum(this, CNUIConfiguration.ALBUM_SUPPORT_DEFAULT, | ||
| 737 | + ALBUM_REQUEST_CODE); | ||
| 738 | + break; | ||
| 739 | + case R.id.only_video: // 相册只显示视频 | ||
| 740 | + initEditorUIAndExportConfig(); | ||
| 741 | + CNSdkEntry.getSdkService().initConfiguration( | ||
| 742 | + new CNCameraConfiguration()); | ||
| 743 | + CNSdkEntry.openAlbum(this, CNUIConfiguration.ALBUM_SUPPORT_VIDEO_ONLY, | ||
| 744 | + ALBUM_REQUEST_CODE); | ||
| 745 | + break; | ||
| 746 | + case R.id.only_photo: // 相册只显示图片 | ||
| 747 | + initEditorUIAndExportConfig(); | ||
| 748 | + CNSdkEntry.getSdkService().initConfiguration( | ||
| 749 | + new CNCameraConfiguration()); | ||
| 750 | + CNSdkEntry.openAlbum(this, CNUIConfiguration.ALBUM_SUPPORT_IMAGE_ONLY, | ||
| 751 | + ALBUM_REQUEST_CODE); | ||
| 752 | + break; | ||
| 753 | + case R.id.compress: // 压缩视频 | ||
| 754 | + // 选折要压缩的视频 | ||
| 755 | + initUIAblumConfig(); | ||
| 756 | + CNSdkEntry.openAlbum(this, CNUIConfiguration.ALBUM_SUPPORT_VIDEO_ONLY, | ||
| 757 | + ALBUM_COMPRESS_REQUEST_CODE); | ||
| 758 | + break; | ||
| 759 | + case R.id.ui_config: // ui配置 | ||
| 760 | + if (isConfigDialogShow) { | ||
| 761 | + return; | ||
| 762 | + } | ||
| 763 | + new EditorUIAndExportConfigDialog(this, new ConfigDialogListener() { | ||
| 764 | + | ||
| 765 | + @Override | ||
| 766 | + public void onSaveConfigData(ConfigData configData) { | ||
| 767 | + initAndGetConfigData().setConfig(configData); | ||
| 768 | + initEditorUIAndExportConfig(); | ||
| 769 | + initCameraConfig(SQUARE_SCREEN_CAN_CHANGE); | ||
| 770 | + saveConfigInstanceState(); | ||
| 771 | + } | ||
| 772 | + | ||
| 773 | + @Override | ||
| 774 | + public void onDismiss(DialogInterface dialog) { | ||
| 775 | + isConfigDialogShow = false; | ||
| 776 | + } | ||
| 777 | + }, configData); | ||
| 778 | + isConfigDialogShow = true; | ||
| 779 | + break; | ||
| 780 | + case R.id.camera_config: // 拍摄配置 | ||
| 781 | + if (isConfigDialogShow) { | ||
| 782 | + return; | ||
| 783 | + } | ||
| 784 | + new CameraConfigDialog(this, new ConfigDialogListener() { | ||
| 785 | + | ||
| 786 | + @Override | ||
| 787 | + public void onSaveConfigData(ConfigData configData) { | ||
| 788 | + initAndGetConfigData().setConfig(configData); | ||
| 789 | + saveConfigInstanceState(); | ||
| 790 | + } | ||
| 791 | + | ||
| 792 | + @Override | ||
| 793 | + public void onDismiss(DialogInterface dialog) { | ||
| 794 | + isConfigDialogShow = false; | ||
| 795 | + } | ||
| 796 | + }, configData); | ||
| 797 | + isConfigDialogShow = true; | ||
| 798 | + break; | ||
| 799 | + case R.id.trimConfig: // 截取配置 | ||
| 800 | + if (isConfigDialogShow) { | ||
| 801 | + return; | ||
| 802 | + } | ||
| 803 | + new VideoTrimConfigDialog(this, new ConfigDialogListener() { | ||
| 804 | + | ||
| 805 | + @Override | ||
| 806 | + public void onSaveConfigData(ConfigData configData) { | ||
| 807 | + initAndGetConfigData().setConfig(configData); | ||
| 808 | + saveConfigInstanceState(); | ||
| 809 | + } | ||
| 810 | + | ||
| 811 | + @Override | ||
| 812 | + public void onDismiss(DialogInterface dialog) { | ||
| 813 | + isConfigDialogShow = false; | ||
| 814 | + } | ||
| 815 | + }, configData); | ||
| 816 | + isConfigDialogShow = true; | ||
| 817 | + break; | ||
| 818 | + case R.id.album_config: // 相册配置 | ||
| 819 | + if (isConfigDialogShow) { | ||
| 820 | + return; | ||
| 821 | + } | ||
| 822 | + new AlbumConfigDialog(this, new ConfigDialogListener() { | ||
| 823 | + | ||
| 824 | + @Override | ||
| 825 | + public void onSaveConfigData(ConfigData configData) { | ||
| 826 | + initAndGetConfigData().setConfig(configData); | ||
| 827 | + saveConfigInstanceState(); | ||
| 828 | + } | ||
| 829 | + | ||
| 830 | + @Override | ||
| 831 | + public void onDismiss(DialogInterface dialog) { | ||
| 832 | + isConfigDialogShow = false; | ||
| 833 | + } | ||
| 834 | + }, configData); | ||
| 835 | + isConfigDialogShow = true; | ||
| 836 | + break; | ||
| 837 | + case R.id.compress_config: // 压缩配置 | ||
| 838 | + if (isConfigDialogShow) { | ||
| 839 | + return; | ||
| 840 | + } | ||
| 841 | + new CompressConfigDialog(this, new ConfigDialogListener() { | ||
| 842 | + | ||
| 843 | + @Override | ||
| 844 | + public void onSaveConfigData(ConfigData configData) { | ||
| 845 | + initAndGetConfigData().setConfig(configData); | ||
| 846 | + initCompressConfig(); | ||
| 847 | + saveConfigInstanceState(); | ||
| 848 | + } | ||
| 849 | + | ||
| 850 | + @Override | ||
| 851 | + public void onDismiss(DialogInterface dialog) { | ||
| 852 | + isConfigDialogShow = false; | ||
| 853 | + } | ||
| 854 | + }, configData); | ||
| 855 | + isConfigDialogShow = true; | ||
| 856 | + break; | ||
| 857 | + | ||
| 858 | + case R.id.shortVideoEdit:// 15秒短视频 | ||
| 859 | + initCameraShortVideoConfig(); | ||
| 860 | + CNSdkEntry.record(this, SHORTVIDEO_CAMERA_REQUEST_CODE); | ||
| 861 | + break; | ||
| 862 | + case R.id.mixVideoEdit: | ||
| 863 | + registerActivityResultHandler(MIX_VIDEO_REQUEST_CODE, mixVideoResultHandler); | ||
| 864 | + CNSdkEntry.mixVideo(this, MIX_VIDEO_REQUEST_CODE); | ||
| 865 | +// | ||
| 866 | + break; | ||
| 867 | + case R.id.reset_config: | ||
| 868 | + resetConfigInstanceState(); | ||
| 869 | + break; | ||
| 870 | + case R.id.AntiChange_config: | ||
| 871 | + if (isConfigDialogShow) { | ||
| 872 | + return; | ||
| 873 | + } | ||
| 874 | + new OsdConfigDialog(this, new ConfigDialogListener() { | ||
| 875 | + | ||
| 876 | + @Override | ||
| 877 | + public void onSaveConfigData(ConfigData configData) { | ||
| 878 | + MainActivity.this.configData.antiChangeText = configData.antiChangeText; | ||
| 879 | + initCameraAntiChangeConfig(); | ||
| 880 | + saveConfigInstanceState(); | ||
| 881 | + } | ||
| 882 | + | ||
| 883 | + @Override | ||
| 884 | + public void onDismiss(DialogInterface dialog) { | ||
| 885 | + isConfigDialogShow = false; | ||
| 886 | + } | ||
| 887 | + }, configData); | ||
| 888 | + isConfigDialogShow = true; | ||
| 889 | + break; | ||
| 890 | + case R.id.audio_config: | ||
| 891 | + if (isConfigDialogShow) { | ||
| 892 | + return; | ||
| 893 | + } | ||
| 894 | + new AudioConfigDialog(this, new ConfigDialogListener() { | ||
| 895 | + | ||
| 896 | + @Override | ||
| 897 | + public void onSaveConfigData(ConfigData configData) { | ||
| 898 | + | ||
| 899 | + } | ||
| 900 | + | ||
| 901 | + @Override | ||
| 902 | + public void onDismiss(DialogInterface dialog) { | ||
| 903 | + isConfigDialogShow = false; | ||
| 904 | + } | ||
| 905 | + }); | ||
| 906 | + isConfigDialogShow = true; | ||
| 907 | + break; | ||
| 908 | + default: | ||
| 909 | + break; | ||
| 910 | + } | ||
| 911 | + } | ||
| 912 | + | ||
| 913 | + /** | ||
| 914 | + * TODO:registerAllResultHandlers | ||
| 915 | + */ | ||
| 916 | + private void registerAllResultHandlers() { | ||
| 917 | + registerActivityResultHandler(CAMERA_REQUEST_CODE, | ||
| 918 | + cameraResultHandler); | ||
| 919 | + registerActivityResultHandler(CAMERA_ANTI_CHANGE_REQUEST_CODE, | ||
| 920 | + cameraAntiChangeResultHandler); | ||
| 921 | + | ||
| 922 | + registerActivityResultHandler(ALBUM_REQUEST_CODE, | ||
| 923 | + albumResultHandler); | ||
| 924 | + registerActivityResultHandler(ALBUM_COMPRESS_REQUEST_CODE, | ||
| 925 | + albumCompressResultHandler); | ||
| 926 | + | ||
| 927 | + registerActivityResultHandler(EDIT_REQUEST_CODE, editResultHandler); | ||
| 928 | + registerActivityResultHandler(ALBUM_PLAYER_REQUEST_CODE, | ||
| 929 | + albumPlayerResultHandler); | ||
| 930 | + registerActivityResultHandler(TRIM_REQUEST_CODE, trimResultHandler); | ||
| 931 | + registerActivityResultHandler(TRIM_ALBUM_REQUEST_CODE, trimAlbumResultHandler); | ||
| 932 | + | ||
| 933 | + | ||
| 934 | + registerActivityResultHandler(SHORTVIDEO_CAMERA_REQUEST_CODE, | ||
| 935 | + shortvideoCameraResultHandler); | ||
| 936 | + registerActivityResultHandler(SHORTVIDEO_ALBUM_REQUEST_CODE, | ||
| 937 | + shortvideoAlbumResultHandler); | ||
| 938 | + registerActivityResultHandler(SHORTVIDEO_TRIM_REQUEST_CODE, | ||
| 939 | + shortvideoTrimResultHandler); | ||
| 940 | + registerActivityResultHandler(ALBUM_REQUEST_EXPORT_CODE, albumExportResultHandler); | ||
| 941 | + | ||
| 942 | + } | ||
| 943 | + | ||
| 944 | + private ActivityResultHandler cameraResultHandler = new ActivityResultHandler() { | ||
| 945 | + | ||
| 946 | + @Override | ||
| 947 | + public void onActivityResult(Context context, int resultCode, | ||
| 948 | + Intent data) { | ||
| 949 | + if (resultCode == CNSdkEntry.RESULT_CAMERA_TO_ALBUM) { | ||
| 950 | + // 点击拍摄的相册按钮,将返回在此,并在这里做进入相册界面操作 | ||
| 951 | + CNSdkEntry.openAlbum(context, | ||
| 952 | + CNUIConfiguration.ALBUM_SUPPORT_DEFAULT, | ||
| 953 | + ALBUM_REQUEST_CODE); | ||
| 954 | + } else if (resultCode == RESULT_OK) { | ||
| 955 | + // 美颜参数回调 | ||
| 956 | + CNFaceuInfo info = data | ||
| 957 | + .getParcelableExtra(CNSdkEntry.INTENT_KEY_FACEU); | ||
| 958 | + if (null != info) { | ||
| 959 | + Log.e("faceu美颜参数", info.toString()); | ||
| 960 | + } | ||
| 961 | + // 拍摄后返回的媒体路径 | ||
| 962 | + ArrayList<String> arrMediaListPath = new ArrayList<String>(); | ||
| 963 | + String videoPath = data | ||
| 964 | + .getStringExtra(CNSdkEntry.INTENT_KEY_VIDEO_PATH); | ||
| 965 | + String picPath = data | ||
| 966 | + .getStringExtra(CNSdkEntry.INTENT_KEY_PICTURE_PATH); | ||
| 967 | + arrMediaListPath.add(videoPath); | ||
| 968 | + arrMediaListPath.add(picPath); | ||
| 969 | + String logInfo = String.format("Video path:%s,Picture path:%s", | ||
| 970 | + videoPath, picPath); | ||
| 971 | + Log.d(TAG, logInfo); | ||
| 972 | + | ||
| 973 | + | ||
| 974 | + if (configData.albumSupportFormatType == CNUIConfiguration.ALBUM_SUPPORT_IMAGE_ONLY) { | ||
| 975 | + | ||
| 976 | + if (videoPath != null) { | ||
| 977 | + CNSdkEntry.selectMedia(context); | ||
| 978 | + return; | ||
| 979 | + } | ||
| 980 | + } else if (configData.albumSupportFormatType == CNUIConfiguration.ALBUM_SUPPORT_VIDEO_ONLY) { | ||
| 981 | + if (picPath != null) { | ||
| 982 | + CNSdkEntry.selectMedia(context); | ||
| 983 | + return; | ||
| 984 | + } | ||
| 985 | + } | ||
| 986 | + | ||
| 987 | + if (data.getBooleanExtra(CNSdkEntry.INTENT_KEY_USE_MV_EDIT, false)) { | ||
| 988 | + Log.e(TAG, "onActivityResult: mv"); | ||
| 989 | + initCameraShortVideoConfig(); | ||
| 990 | + } else { | ||
| 991 | + Log.e(TAG, "onActivityResult: false"); | ||
| 992 | + initEditorUIAndExportConfig(); | ||
| 993 | + } | ||
| 994 | + CNSdkEntry.editMedia(context, arrMediaListPath); | ||
| 995 | + } | ||
| 996 | + } | ||
| 997 | + }; | ||
| 998 | + | ||
| 999 | + | ||
| 1000 | + private ActivityResultHandler cameraAntiChangeResultHandler = new ActivityResultHandler() { | ||
| 1001 | + | ||
| 1002 | + @Override | ||
| 1003 | + public void onActivityResult(Context context, int resultCode, | ||
| 1004 | + Intent data) { | ||
| 1005 | + if (resultCode == RESULT_OK) { | ||
| 1006 | + String logInfo = String.format("Video path:%s,Picture path:%s", | ||
| 1007 | + data.getStringExtra(CNSdkEntry.INTENT_KEY_VIDEO_PATH), | ||
| 1008 | + data.getStringExtra(CNSdkEntry.INTENT_KEY_PICTURE_PATH)); | ||
| 1009 | + Log.d(TAG, logInfo); | ||
| 1010 | + SDKUtils.onPlayVideo(context, data.getStringExtra(CNSdkEntry.INTENT_KEY_VIDEO_PATH)); | ||
| 1011 | + } | ||
| 1012 | + } | ||
| 1013 | + }; | ||
| 1014 | + private ActivityResultHandler mixVideoResultHandler = new ActivityResultHandler() { | ||
| 1015 | + | ||
| 1016 | + @Override | ||
| 1017 | + public void onActivityResult(Context context, int resultCode, | ||
| 1018 | + Intent data) { | ||
| 1019 | + if (resultCode == RESULT_OK) { | ||
| 1020 | + String logInfo = String.format("mixVideoResultHandler Video path:%s,Picture path:%s", | ||
| 1021 | + data.getStringExtra(CNSdkEntry.INTENT_KEY_VIDEO_PATH), | ||
| 1022 | + data.getStringExtra(CNSdkEntry.INTENT_KEY_PICTURE_PATH)); | ||
| 1023 | + Log.d(TAG, logInfo); | ||
| 1024 | +// onPlayVideo(data.getStringExtra(CNSdkEntry.INTENT_KEY_VIDEO_PATH)); | ||
| 1025 | + | ||
| 1026 | + initEditorUIAndExportConfig(); | ||
| 1027 | + initCameraConfig(SQUARE_SCREEN_CAN_CHANGE); | ||
| 1028 | + ArrayList<String> list = new ArrayList<String>(); | ||
| 1029 | + list.add(data.getStringExtra(CNSdkEntry.INTENT_KEY_VIDEO_PATH)); | ||
| 1030 | + CNSdkEntry.editMedia(MainActivity.this, list, EDIT_REQUEST_CODE); | ||
| 1031 | + | ||
| 1032 | + } | ||
| 1033 | + } | ||
| 1034 | + }; | ||
| 1035 | + | ||
| 1036 | + private ActivityResultHandler albumResultHandler = new ActivityResultHandler() { | ||
| 1037 | + | ||
| 1038 | + @Override | ||
| 1039 | + public void onActivityResult(Context context, int resultCode, | ||
| 1040 | + Intent data) { | ||
| 1041 | + if (resultCode == CNSdkEntry.RESULT_ALBUM_TO_CAMERA) { | ||
| 1042 | + // 点击相册的拍摄按钮,将返回在此,并在这里做进入拍摄界面操作 | ||
| 1043 | + CNSdkEntry.record(context, CAMERA_REQUEST_CODE); | ||
| 1044 | + } else if (resultCode == RESULT_OK) { | ||
| 1045 | + // 返回选择的图片视频地址list | ||
| 1046 | + ArrayList<String> arrMediaListPath = data | ||
| 1047 | + .getStringArrayListExtra(CNSdkEntry.ALBUM_RESULT); | ||
| 1048 | + String logInfo = ""; | ||
| 1049 | + for (String path : arrMediaListPath) { | ||
| 1050 | + Log.d(TAG, path); | ||
| 1051 | + logInfo += path + "\n"; | ||
| 1052 | + } | ||
| 1053 | + Toast.makeText(context, logInfo, Toast.LENGTH_LONG).show(); | ||
| 1054 | + } | ||
| 1055 | + } | ||
| 1056 | + }; | ||
| 1057 | + /** | ||
| 1058 | + * 要导出的视频 | ||
| 1059 | + */ | ||
| 1060 | + private ActivityResultHandler albumExportResultHandler = new ActivityResultHandler() { | ||
| 1061 | + | ||
| 1062 | + @Override | ||
| 1063 | + public void onActivityResult(Context context, int resultCode, | ||
| 1064 | + Intent data) { | ||
| 1065 | + if (resultCode == RESULT_OK) { | ||
| 1066 | + // 返回选择的图片视频地址list | ||
| 1067 | + ArrayList<String> arrMediaListPath = data | ||
| 1068 | + .getStringArrayListExtra(CNSdkEntry.ALBUM_RESULT); | ||
| 1069 | + | ||
| 1070 | + for (String path : arrMediaListPath) { | ||
| 1071 | + CNVideoConfig videoConfig = new CNVideoConfig(); | ||
| 1072 | + float durationS = CNVirtualVideo.getMediaInfo(path, videoConfig, true); | ||
| 1073 | + Log.d(TAG, path + "," + durationS + "," + videoConfig); | ||
| 1074 | + } | ||
| 1075 | + | ||
| 1076 | + CNVideoConfig videoConfig = new CNVideoConfig(); | ||
| 1077 | + videoConfig.setVideoEncodingBitRate(4000 * 1000); | ||
| 1078 | + | ||
| 1079 | + int numChannel = AudioConfigDialog.audioNumChannel; | ||
| 1080 | + if (numChannel == 0) { | ||
| 1081 | + numChannel = videoConfig.getAudioNumChannels(); | ||
| 1082 | + } | ||
| 1083 | + int sampleRate = AudioConfigDialog.audioSampleRate; | ||
| 1084 | + if (sampleRate == 0) { | ||
| 1085 | + sampleRate = videoConfig.getAudioSampleRate(); | ||
| 1086 | + } | ||
| 1087 | + int audioBitRate = AudioConfigDialog.audioBitRate; | ||
| 1088 | + if (audioBitRate == 0) { | ||
| 1089 | + audioBitRate = videoConfig.getAudioBitrate(); | ||
| 1090 | + } | ||
| 1091 | + videoConfig.setAudioEncodingParameters(numChannel, sampleRate, audioBitRate); | ||
| 1092 | + | ||
| 1093 | + //.水印,左下角 | ||
| 1094 | + CNWatermark watermark = new CNWatermark(EDIT_WATERMARK_PATH); | ||
| 1095 | + watermark.setShowRect(new RectF(0, 1f, 1f, 1.0f)); | ||
| 1096 | + //片尾 | ||
| 1097 | + CNTrailer trailer = new CNTrailer(SDKUtils.createVideoTrailerImage(MainActivity.this, "秀友", 480, 50, 50), 2f, 0.5f); | ||
| 1098 | + | ||
| 1099 | + String exportPath = Environment.getExternalStorageDirectory() + "/export.mp4"; | ||
| 1100 | + ExportVideoLisenter mExportListener = new ExportVideoLisenter(exportPath); | ||
| 1101 | + CNSdkEntry.exportVideo(MainActivity.this, videoConfig, arrMediaListPath, exportPath, watermark, trailer, mExportListener); | ||
| 1102 | + } | ||
| 1103 | + } | ||
| 1104 | + }; | ||
| 1105 | + | ||
| 1106 | + /** | ||
| 1107 | + * 导出视频的回调演示 | ||
| 1108 | + */ | ||
| 1109 | + private class ExportVideoLisenter implements CNExportListener { | ||
| 1110 | + private String mPath; | ||
| 1111 | + private AlertDialog mDialog; | ||
| 1112 | + private ProgressBar mProgressBar; | ||
| 1113 | + private Button mBtnCancel; | ||
| 1114 | + private TextView mTvTitle; | ||
| 1115 | + | ||
| 1116 | + public ExportVideoLisenter(String videoPath) { | ||
| 1117 | + mPath = videoPath; | ||
| 1118 | + } | ||
| 1119 | + | ||
| 1120 | + @Override | ||
| 1121 | + public void onExportStart() { | ||
| 1122 | + View v = LayoutInflater.from(MainActivity.this).inflate( | ||
| 1123 | + R.layout.progress_view, null); | ||
| 1124 | + mTvTitle = (TextView) v.findViewById(R.id.tvTitle); | ||
| 1125 | + mTvTitle.setText("正在导出..."); | ||
| 1126 | + mProgressBar = (ProgressBar) v.findViewById(R.id.pbCompress); | ||
| 1127 | + mBtnCancel = (Button) v.findViewById(R.id.btnCancelCompress); | ||
| 1128 | + mBtnCancel.setOnClickListener(new View.OnClickListener() { | ||
| 1129 | + @Override | ||
| 1130 | + public void onClick(View view) { | ||
| 1131 | + CNSdkEntry.cancelExport(); | ||
| 1132 | + } | ||
| 1133 | + }); | ||
| 1134 | + mDialog = new AlertDialog.Builder(MainActivity.this).setView(v) | ||
| 1135 | + .show(); | ||
| 1136 | + mDialog.setCanceledOnTouchOutside(false); | ||
| 1137 | + } | ||
| 1138 | + | ||
| 1139 | + /** | ||
| 1140 | + * 导出进度回调 | ||
| 1141 | + * | ||
| 1142 | + * @param progress 当前进度 | ||
| 1143 | + * @param max 最大进度 | ||
| 1144 | + * @return 返回是否继续执行,false为终止导出 | ||
| 1145 | + */ | ||
| 1146 | + @Override | ||
| 1147 | + public boolean onExporting(int progress, int max) { | ||
| 1148 | + if (mProgressBar != null) { | ||
| 1149 | + mProgressBar.setMax(max); | ||
| 1150 | + mProgressBar.setProgress(progress); | ||
| 1151 | + } | ||
| 1152 | + return true; | ||
| 1153 | + } | ||
| 1154 | + | ||
| 1155 | + @Override | ||
| 1156 | + public void onExportEnd(int result) { | ||
| 1157 | + mDialog.dismiss(); | ||
| 1158 | + if (result >= CNVirtualVideo.RESULT_SUCCESS) { | ||
| 1159 | + SDKUtils.onPlayVideo(MainActivity.this, mPath); | ||
| 1160 | + } else if (result != CNVirtualVideo.RESULT_SAVE_CANCEL) { | ||
| 1161 | + Log.e(TAG, "onExportEnd: " + result); | ||
| 1162 | + Toast.makeText(MainActivity.this, "导出失败" + result, Toast.LENGTH_LONG).show(); | ||
| 1163 | + } | ||
| 1164 | + } | ||
| 1165 | + } | ||
| 1166 | + | ||
| 1167 | + private ActivityResultHandler editResultHandler = new ActivityResultHandler() { | ||
| 1168 | + | ||
| 1169 | + @Override | ||
| 1170 | + public void onActivityResult(Context context, int resultCode, | ||
| 1171 | + Intent data) { | ||
| 1172 | + if (resultCode == RESULT_OK && null != data) { | ||
| 1173 | + String mediaPath = data.getStringExtra(CNSdkEntry.EDIT_RESULT); | ||
| 1174 | + if (mediaPath != null) { | ||
| 1175 | + Log.d(TAG, mediaPath); | ||
| 1176 | + Toast.makeText(context, mediaPath, Toast.LENGTH_LONG) | ||
| 1177 | + .show(); | ||
| 1178 | + } | ||
| 1179 | + } | ||
| 1180 | + } | ||
| 1181 | + }; | ||
| 1182 | + | ||
| 1183 | + private ActivityResultHandler trimResultHandler = new ActivityResultHandler() { | ||
| 1184 | + | ||
| 1185 | + @Override | ||
| 1186 | + public void onActivityResult(Context context, int resultCode, | ||
| 1187 | + Intent data) { | ||
| 1188 | + if (resultCode == RESULT_OK) { | ||
| 1189 | + float startTime = data.getFloatExtra(CNSdkEntry.TRIM_START_TIME, 0f); | ||
| 1190 | + float endTime = data.getFloatExtra(CNSdkEntry.TRIM_END_TIME, 0); | ||
| 1191 | + String path = data.getStringExtra(CNSdkEntry.TRIM_MEDIA_PATH); | ||
| 1192 | + Rect rect = data.getParcelableExtra(CNSdkEntry.TRIM_CROP_RECT); | ||
| 1193 | + String logInfo = "截取开始时间:" + startTime + "s" + ",结束时间:" | ||
| 1194 | + + endTime + "s\n裁剪区域:" + rect + "...视频:" + path; | ||
| 1195 | + Log.d(TAG, logInfo); | ||
| 1196 | + Toast.makeText(context, logInfo, Toast.LENGTH_LONG).show(); | ||
| 1197 | + } | ||
| 1198 | + } | ||
| 1199 | + }; | ||
| 1200 | + | ||
| 1201 | + private ActivityResultHandler trimAlbumResultHandler = new ActivityResultHandler() { | ||
| 1202 | + | ||
| 1203 | + @Override | ||
| 1204 | + public void onActivityResult(Context context, int resultCode, | ||
| 1205 | + Intent data) { | ||
| 1206 | + if (resultCode == RESULT_OK) { | ||
| 1207 | + ArrayList<String> arrCameraMediaListPath = data | ||
| 1208 | + .getStringArrayListExtra(CNSdkEntry.ALBUM_RESULT); | ||
| 1209 | + if (arrCameraMediaListPath != null | ||
| 1210 | + && arrCameraMediaListPath.get(0) != null) { | ||
| 1211 | + String path = arrCameraMediaListPath.get(0); | ||
| 1212 | + initTrimConfig(); | ||
| 1213 | + CNSdkEntry.trimVideo(context, path, TRIM_REQUEST_CODE); | ||
| 1214 | + } | ||
| 1215 | + } | ||
| 1216 | + } | ||
| 1217 | + }; | ||
| 1218 | + | ||
| 1219 | + | ||
| 1220 | + private ActivityResultHandler shortvideoCameraResultHandler = new ActivityResultHandler() { | ||
| 1221 | + | ||
| 1222 | + @Override | ||
| 1223 | + public void onActivityResult(Context context, int resultCode, | ||
| 1224 | + Intent data) { | ||
| 1225 | + if (resultCode == CNSdkEntry.RESULT_CAMERA_TO_ALBUM) { | ||
| 1226 | + // TODO: 按下拍摄的相册按钮,在此进入相册 | ||
| 1227 | + CNSdkEntry.openAlbum(context, | ||
| 1228 | + CNUIConfiguration.ALBUM_SUPPORT_VIDEO_ONLY, | ||
| 1229 | + SHORTVIDEO_ALBUM_REQUEST_CODE); | ||
| 1230 | + } else if (resultCode == RESULT_OK) { | ||
| 1231 | + // TODO: 拍摄完成,在此进入编辑界面 | ||
| 1232 | + CNFaceuInfo info = data | ||
| 1233 | + .getParcelableExtra(CNSdkEntry.INTENT_KEY_FACEU); | ||
| 1234 | + if (null != info) { | ||
| 1235 | + Log.e("faceu美颜参数", info.toString()); | ||
| 1236 | + } | ||
| 1237 | + | ||
| 1238 | + ArrayList<String> arrMediaListPath = new ArrayList<String>(); | ||
| 1239 | + arrMediaListPath.add(data | ||
| 1240 | + .getStringExtra(CNSdkEntry.INTENT_KEY_VIDEO_PATH)); | ||
| 1241 | + CNSdkEntry.editMedia(context, arrMediaListPath); | ||
| 1242 | + } | ||
| 1243 | + } | ||
| 1244 | + }; | ||
| 1245 | + | ||
| 1246 | + private ActivityResultHandler shortvideoAlbumResultHandler = new ActivityResultHandler() { | ||
| 1247 | + | ||
| 1248 | + @Override | ||
| 1249 | + public void onActivityResult(Context context, int resultCode, | ||
| 1250 | + Intent data) { | ||
| 1251 | + if (resultCode == CNSdkEntry.RESULT_ALBUM_TO_CAMERA) { | ||
| 1252 | + // TODO: 按下相册的拍摄按钮,在此进入拍摄界面 | ||
| 1253 | + CNSdkEntry.record(context, SHORTVIDEO_CAMERA_REQUEST_CODE); | ||
| 1254 | + } else if (resultCode == RESULT_OK) { | ||
| 1255 | + // TODO: 选择媒体结束后,在此进入截取界面 | ||
| 1256 | + ArrayList<String> arrCameraMediaListPath = data | ||
| 1257 | + .getStringArrayListExtra(CNSdkEntry.ALBUM_RESULT); | ||
| 1258 | + if (arrCameraMediaListPath != null) { | ||
| 1259 | + if (arrCameraMediaListPath.get(0) != null) { | ||
| 1260 | + String path = arrCameraMediaListPath.get(0); | ||
| 1261 | + // 获取视频信息 | ||
| 1262 | + CNVideoMetadataRetriever vmr = new CNVideoMetadataRetriever(); | ||
| 1263 | + vmr.setDataSource(path); | ||
| 1264 | + float duration = Float | ||
| 1265 | + .valueOf(vmr | ||
| 1266 | + .extractMetadata(CNVideoMetadataRetriever.METADATA_KEY_VIDEO_DURATION)); | ||
| 1267 | + int videoHeight = Integer | ||
| 1268 | + .valueOf(vmr | ||
| 1269 | + .extractMetadata(CNVideoMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)); | ||
| 1270 | + int videoWidth = Integer | ||
| 1271 | + .valueOf(vmr | ||
| 1272 | + .extractMetadata(CNVideoMetadataRetriever.METADATA_KEY_VIDEO_WIDHT)); | ||
| 1273 | + | ||
| 1274 | + if (duration < 15 && videoHeight == videoWidth) { | ||
| 1275 | + // TODO: 视频小于15秒且为正方形视频,将跳过截取,进入编辑界面 | ||
| 1276 | + CNSdkEntry.editMedia(MainActivity.this, | ||
| 1277 | + arrCameraMediaListPath, | ||
| 1278 | + EDIT_REQUEST_CODE); | ||
| 1279 | + return; | ||
| 1280 | + } | ||
| 1281 | + CNSdkEntry.trimVideo(MainActivity.this, | ||
| 1282 | + arrCameraMediaListPath.get(0), | ||
| 1283 | + SHORTVIDEO_TRIM_REQUEST_CODE); | ||
| 1284 | + } | ||
| 1285 | + } | ||
| 1286 | + } | ||
| 1287 | + } | ||
| 1288 | + }; | ||
| 1289 | + | ||
| 1290 | + private ActivityResultHandler shortvideoTrimResultHandler = new ActivityResultHandler() { | ||
| 1291 | + | ||
| 1292 | + @Override | ||
| 1293 | + public void onActivityResult(Context context, int resultCode, | ||
| 1294 | + Intent data) { | ||
| 1295 | + if (resultCode == RESULT_OK) { | ||
| 1296 | + // TODO: 截取完成,在此进入编辑界面 | ||
| 1297 | + CNEditObject eo = new CNEditObject( | ||
| 1298 | + data.getStringExtra(CNSdkEntry.TRIM_MEDIA_PATH)); | ||
| 1299 | + Rect clip = data.getParcelableExtra(CNSdkEntry.TRIM_CROP_RECT); | ||
| 1300 | + if (clip != null) { | ||
| 1301 | + eo.setCropRect(new RectF(clip)); | ||
| 1302 | + } | ||
| 1303 | + eo.setStartTime(data.getFloatExtra(CNSdkEntry.TRIM_START_TIME, 0f)); | ||
| 1304 | + eo.setEndTime(data.getFloatExtra(CNSdkEntry.TRIM_END_TIME, 0f)); | ||
| 1305 | + CNSdkEntry.editMedia(context, eo, EDIT_REQUEST_CODE); | ||
| 1306 | + } | ||
| 1307 | + } | ||
| 1308 | + }; | ||
| 1309 | + | ||
| 1310 | + private ActivityResultHandler albumPlayerResultHandler = new ActivityResultHandler() { | ||
| 1311 | + | ||
| 1312 | + @Override | ||
| 1313 | + public void onActivityResult(Context context, int resultCode, | ||
| 1314 | + Intent data) { | ||
| 1315 | + if (resultCode == RESULT_OK) { | ||
| 1316 | + // 返回选择的视频地址list | ||
| 1317 | + ArrayList<String> arrMediaListPath = data | ||
| 1318 | + .getStringArrayListExtra(CNSdkEntry.ALBUM_RESULT); | ||
| 1319 | + if (arrMediaListPath.size() > 0) { | ||
| 1320 | + if (!TextUtils.isEmpty(arrMediaListPath.get(0))) { | ||
| 1321 | + SDKUtils.onPlayVideo(context, arrMediaListPath.get(0)); | ||
| 1322 | + } | ||
| 1323 | + } | ||
| 1324 | + } | ||
| 1325 | + } | ||
| 1326 | + }; | ||
| 1327 | + | ||
| 1328 | + /** | ||
| 1329 | + * 选择要压缩的视频资源 | ||
| 1330 | + */ | ||
| 1331 | + private ActivityResultHandler albumCompressResultHandler = new ActivityResultHandler() { | ||
| 1332 | + | ||
| 1333 | + @Override | ||
| 1334 | + public void onActivityResult(Context context, int resultCode, | ||
| 1335 | + Intent data) { | ||
| 1336 | + if (resultCode == RESULT_OK) { | ||
| 1337 | + // 返回选择的图片视频地址list | ||
| 1338 | + ArrayList<String> arrMediaListPath = data | ||
| 1339 | + .getStringArrayListExtra(CNSdkEntry.ALBUM_RESULT); | ||
| 1340 | + if (arrMediaListPath.size() > 0) { | ||
| 1341 | + if (!TextUtils.isEmpty(arrMediaListPath.get(0))) { | ||
| 1342 | + CNSdkEntry.onCompressVideo(context, | ||
| 1343 | + arrMediaListPath.get(0), iCompressVideoCallback); | ||
| 1344 | + } | ||
| 1345 | + } | ||
| 1346 | + } | ||
| 1347 | + } | ||
| 1348 | + }; | ||
| 1349 | + | ||
| 1350 | + /** | ||
| 1351 | + * 压缩视频回调函数 | ||
| 1352 | + */ | ||
| 1353 | + private ICNCompressVideoCallback iCompressVideoCallback = new ICNCompressVideoCallback() { | ||
| 1354 | + private AlertDialog dialog; | ||
| 1355 | + private ProgressBar progressBar; | ||
| 1356 | + private Button btnCancel; | ||
| 1357 | + | ||
| 1358 | + @Override | ||
| 1359 | + public void onCompressStart() { | ||
| 1360 | + View v = LayoutInflater.from(MainActivity.this).inflate( | ||
| 1361 | + R.layout.progress_view, null); | ||
| 1362 | + progressBar = (ProgressBar) v.findViewById(R.id.pbCompress); | ||
| 1363 | + btnCancel = (Button) v.findViewById(R.id.btnCancelCompress); | ||
| 1364 | + btnCancel.setOnClickListener(new View.OnClickListener() { | ||
| 1365 | + @Override | ||
| 1366 | + public void onClick(View view) { | ||
| 1367 | + CNSdkEntry.cancelCompressVideo(); | ||
| 1368 | + } | ||
| 1369 | + }); | ||
| 1370 | + dialog = new AlertDialog.Builder(MainActivity.this).setView(v) | ||
| 1371 | + .show(); | ||
| 1372 | + dialog.setCanceledOnTouchOutside(false); | ||
| 1373 | + } | ||
| 1374 | + | ||
| 1375 | + @Override | ||
| 1376 | + public void onProgress(int progress, int max) { | ||
| 1377 | + if (progressBar != null) { | ||
| 1378 | + progressBar.setMax(max); | ||
| 1379 | + progressBar.setProgress(progress); | ||
| 1380 | + } | ||
| 1381 | + } | ||
| 1382 | + | ||
| 1383 | + @Override | ||
| 1384 | + public void onCompressError(String errorLog) { | ||
| 1385 | + Log.e(TAG, errorLog); | ||
| 1386 | + if (dialog != null) { | ||
| 1387 | + dialog.dismiss(); | ||
| 1388 | + dialog = null; | ||
| 1389 | + } | ||
| 1390 | + } | ||
| 1391 | + | ||
| 1392 | + @Override | ||
| 1393 | + public void onCompressComplete(String path) { | ||
| 1394 | + SDKUtils.onPlayVideo(MainActivity.this, path); | ||
| 1395 | + if (dialog != null) { | ||
| 1396 | + dialog.dismiss(); | ||
| 1397 | + dialog = null; | ||
| 1398 | + } | ||
| 1399 | + } | ||
| 1400 | + }; | ||
| 1401 | + | ||
| 1402 | + // 防止多次弹出对话框 | ||
| 1403 | + private boolean isConfigDialogShow; | ||
| 1404 | + private ConfigData configData; | ||
| 1405 | + | ||
| 1406 | + /** | ||
| 1407 | + * 初始化并返回配置 | ||
| 1408 | + */ | ||
| 1409 | + private ConfigData initAndGetConfigData() { | ||
| 1410 | + if (configData == null) { | ||
| 1411 | + configData = new ConfigData(); | ||
| 1412 | + } | ||
| 1413 | + return configData; | ||
| 1414 | + } | ||
| 1415 | + | ||
| 1416 | + /** | ||
| 1417 | + * 导出测试资源 | ||
| 1418 | + */ | ||
| 1419 | + private void exportDemoResource() { | ||
| 1420 | + | ||
| 1421 | + if (!SDKUtils.isValidFile(EDIT_PICTURE_PATH) | ||
| 1422 | + || !SDKUtils.isValidFile(EDIT_L_VIDEO_PATH) | ||
| 1423 | + || !SDKUtils.isValidFile(EDIT_S_VIDEO_PATH) | ||
| 1424 | + || !SDKUtils.isValidFile(EDIT_P_VIDEO_PATH) | ||
| 1425 | + || !SDKUtils.isValidFile(EDIT_WATERMARK_PATH)) { | ||
| 1426 | + new AsyncTask<Integer, Integer, Integer>() { | ||
| 1427 | + private ProgressDialog m_dlgProgress; | ||
| 1428 | + | ||
| 1429 | + | ||
| 1430 | + @Override | ||
| 1431 | + protected void onPreExecute() { | ||
| 1432 | + m_dlgProgress = ProgressDialog.show(MainActivity.this, | ||
| 1433 | + null, "导出测试资源..."); | ||
| 1434 | + } | ||
| 1435 | + | ||
| 1436 | + @Override | ||
| 1437 | + protected Integer doInBackground(Integer... params) { | ||
| 1438 | + SDKUtils.assetRes2File(getAssets(), "demomedia/android.jpg", EDIT_PICTURE_PATH); | ||
| 1439 | + SDKUtils.assetRes2File(getAssets(), "demomedia/demoVideo1.mp4", EDIT_L_VIDEO_PATH); | ||
| 1440 | + SDKUtils.assetRes2File(getAssets(), "demomedia/demoVideo2.mp4", EDIT_S_VIDEO_PATH); | ||
| 1441 | + SDKUtils.assetRes2File(getAssets(), "demomedia/demoVideo3.mp4", EDIT_P_VIDEO_PATH); | ||
| 1442 | + SDKUtils.assetRes2File(getAssets(), "watermark.png", EDIT_WATERMARK_PATH); | ||
| 1443 | + return null; | ||
| 1444 | + } | ||
| 1445 | + | ||
| 1446 | + @Override | ||
| 1447 | + protected void onPostExecute(Integer result) { | ||
| 1448 | + m_dlgProgress.dismiss(); | ||
| 1449 | + m_dlgProgress = null; | ||
| 1450 | + } | ||
| 1451 | + }.execute(); | ||
| 1452 | + } | ||
| 1453 | + } | ||
| 1454 | + | ||
| 1455 | + /** | ||
| 1456 | + * 重置持续化保存的配置 | ||
| 1457 | + */ | ||
| 1458 | + private void resetConfigInstanceState() { | ||
| 1459 | + configData = null; | ||
| 1460 | + Toast.makeText(this, | ||
| 1461 | + "所有设置重置" + (saveConfigInstanceState() ? "成功!" : "失败!"), | ||
| 1462 | + Toast.LENGTH_SHORT).show(); | ||
| 1463 | + } | ||
| 1464 | + | ||
| 1465 | + /** | ||
| 1466 | + * 持续化保存配置 | ||
| 1467 | + */ | ||
| 1468 | + private boolean saveConfigInstanceState() { | ||
| 1469 | + SharedPreferences sharedPreferences = getSharedPreferences("demo", | ||
| 1470 | + Context.MODE_PRIVATE); | ||
| 1471 | + return CNSdkService.saveObject(sharedPreferences, "CONFIG_DATA", | ||
| 1472 | + initAndGetConfigData()); | ||
| 1473 | + } | ||
| 1474 | + | ||
| 1475 | + /** | ||
| 1476 | + * 还原持续久化保存的配置 | ||
| 1477 | + */ | ||
| 1478 | + private void restoreConfigInstanceState() { | ||
| 1479 | + SharedPreferences sharedPreferences = getSharedPreferences("demo", | ||
| 1480 | + Context.MODE_PRIVATE); | ||
| 1481 | + configData = CNSdkService.restoreObject(sharedPreferences, | ||
| 1482 | + "CONFIG_DATA", initAndGetConfigData()); | ||
| 1483 | + } | ||
| 1484 | + | ||
| 1485 | + private SparseArray<ActivityResultHandler> registeredActivityResultHandlers; | ||
| 1486 | + | ||
| 1487 | + /** | ||
| 1488 | + * 注册响应activity result | ||
| 1489 | + * | ||
| 1490 | + * @param requestCode | ||
| 1491 | + * @param handler | ||
| 1492 | + */ | ||
| 1493 | + private void registerActivityResultHandler(int requestCode, | ||
| 1494 | + ActivityResultHandler handler) { | ||
| 1495 | + if (null == registeredActivityResultHandlers) { | ||
| 1496 | + registeredActivityResultHandlers = new SparseArray<ActivityResultHandler>(); | ||
| 1497 | + } | ||
| 1498 | + registeredActivityResultHandlers.put(requestCode, handler); | ||
| 1499 | + } | ||
| 1500 | + | ||
| 1501 | + private interface ActivityResultHandler { | ||
| 1502 | + /** | ||
| 1503 | + * 响应 | ||
| 1504 | + * | ||
| 1505 | + * @param context | ||
| 1506 | + * @param resultCode The integer result code returned by the child activity | ||
| 1507 | + * through its setResult(). | ||
| 1508 | + * @param data An Intent, which can return result data to the caller | ||
| 1509 | + * (various data can be attached to Intent "extras"). | ||
| 1510 | + */ | ||
| 1511 | + void onActivityResult(Context context, int resultCode, Intent data); | ||
| 1512 | + } | ||
| 1513 | + | ||
| 1514 | + @Override | ||
| 1515 | + protected void onActivityResult(int requestCode, int resultCode, Intent data) { | ||
| 1516 | + if (null != registeredActivityResultHandlers) { | ||
| 1517 | + ActivityResultHandler handler = registeredActivityResultHandlers | ||
| 1518 | + .get(requestCode); | ||
| 1519 | + if (null != handler) { | ||
| 1520 | + handler.onActivityResult(this, resultCode, data); | ||
| 1521 | + } | ||
| 1522 | + } | ||
| 1523 | + } | ||
| 1524 | +} |
app/src/main/java/com/rd/ve/demo/SdkHandler.java
0 → 100644
| 1 | +++ a/app/src/main/java/com/rd/ve/demo/SdkHandler.java | ||
| 1 | +package com.rd.ve.demo; | ||
| 2 | + | ||
| 3 | +import android.content.ContentValues; | ||
| 4 | +import android.content.Context; | ||
| 5 | +import android.content.Intent; | ||
| 6 | +import android.media.MediaMetadataRetriever; | ||
| 7 | +import android.provider.MediaStore.Video; | ||
| 8 | +import android.text.TextUtils; | ||
| 9 | +import android.util.Log; | ||
| 10 | + | ||
| 11 | +import com.cnlive.veuisdk.CNSdkEntry; | ||
| 12 | +import com.cnlive.veuisdk.callback.ICNSdkCallBack; | ||
| 13 | +import com.rd.ve.demo.utils.SDKUtils; | ||
| 14 | + | ||
| 15 | +/** | ||
| 16 | + * SDK回调演示用handler | ||
| 17 | + */ | ||
| 18 | +public class SdkHandler { | ||
| 19 | + private String TAG; | ||
| 20 | + | ||
| 21 | + public SdkHandler() { | ||
| 22 | + | ||
| 23 | + TAG = "SdkHandler"; | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + public ICNSdkCallBack getCallBack() { | ||
| 27 | + return isdk; | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + /** | ||
| 31 | + * 响应视频导出<br> | ||
| 32 | + * 1.读取视频信息并写入系统相册<br> | ||
| 33 | + * 2.播放该视频 | ||
| 34 | + * | ||
| 35 | + * @param context 应用上下文 | ||
| 36 | + * @param videoPath 视频路径 | ||
| 37 | + */ | ||
| 38 | + private void onVideoExport(Context context, String videoPath) { | ||
| 39 | + if (!TextUtils.isEmpty(videoPath)) { | ||
| 40 | + // 读取导出视频的媒体信息,如宽度,持续时间等 | ||
| 41 | + MediaMetadataRetriever retriever = new MediaMetadataRetriever(); | ||
| 42 | + try { | ||
| 43 | + retriever.setDataSource(videoPath); | ||
| 44 | + int nVideoWidth = Integer | ||
| 45 | + .parseInt(retriever | ||
| 46 | + .extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH)); | ||
| 47 | + int nVideoHeight = Integer | ||
| 48 | + .parseInt(retriever | ||
| 49 | + .extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)); | ||
| 50 | + int duration = Integer | ||
| 51 | + .parseInt(retriever | ||
| 52 | + .extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)); | ||
| 53 | + // 写入系统相册 | ||
| 54 | + insertToGalleryr(context, videoPath, duration, nVideoWidth, | ||
| 55 | + nVideoHeight); | ||
| 56 | + } catch (Exception ex) { | ||
| 57 | + } finally { | ||
| 58 | + retriever.release(); | ||
| 59 | + } | ||
| 60 | + // 播放该视频 | ||
| 61 | + SDKUtils.onPlayVideo(context, videoPath); | ||
| 62 | + } else { | ||
| 63 | + Log.d(TAG, "获取视频地址失败"); | ||
| 64 | + } | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + private ICNSdkCallBack isdk = new ICNSdkCallBack() { | ||
| 68 | + | ||
| 69 | + /** | ||
| 70 | + * 目标视频的路径 | ||
| 71 | + * | ||
| 72 | + * @param context | ||
| 73 | + * 应用上下文 | ||
| 74 | + * @param exportType | ||
| 75 | + * 回调类型 来自简单录制 {@link CNSdkEntry#CAMERA_EXPORT}<br> | ||
| 76 | + * 来自录制编辑{@link CNSdkEntry#CAMERA_EDIT_EXPORT}<br> | ||
| 77 | + * 来自编辑导出{@link CNSdkEntry#EDIT_EXPORT}<br> | ||
| 78 | + * 来自普通截取视频导出{@link CNSdkEntry#TRIMVIDEO_EXPORT}<br> | ||
| 79 | + * 来自定长截取视频导出{@link CNSdkEntry#TRIMVIDEO_DURATION_EXPORT}<br> | ||
| 80 | + * @param videoPath | ||
| 81 | + */ | ||
| 82 | + @Override | ||
| 83 | + public void onGetVideoPath(Context context, int exportType, | ||
| 84 | + String videoPath) { | ||
| 85 | + | ||
| 86 | + if (exportType == CNSdkEntry.EDIT_EXPORT) { | ||
| 87 | + Log.i(TAG, "getvideoPath 普通编辑"); | ||
| 88 | + } else if (exportType == CNSdkEntry.CAMERA_EXPORT) { | ||
| 89 | + Log.i(TAG, "getvideoPath 简单录制"); | ||
| 90 | + } else if (exportType == CNSdkEntry.CAMERA_EDIT_EXPORT) { | ||
| 91 | + Log.i(TAG, "getvideoPath 录制并编辑"); | ||
| 92 | + } else if (exportType == CNSdkEntry.TRIMVIDEO_EXPORT) { | ||
| 93 | + Log.i(TAG, "getvideoPath 普通截取"); | ||
| 94 | + } else if (exportType == CNSdkEntry.TRIMVIDEO_DURATION_EXPORT) { | ||
| 95 | + Log.i(TAG, "getvideoPath 定长截取" + videoPath); | ||
| 96 | + } else { | ||
| 97 | + Log.e(TAG, "getvideoPath 未知"); | ||
| 98 | + } | ||
| 99 | + | ||
| 100 | + onVideoExport(context, videoPath); | ||
| 101 | + } | ||
| 102 | + | ||
| 103 | + /** | ||
| 104 | + * 响应截取视频时间 | ||
| 105 | + * | ||
| 106 | + * @param context | ||
| 107 | + * 应用上下文 | ||
| 108 | + * @param exportType | ||
| 109 | + * 回调类型 来自普通截取视频的时间导出{@link CNSdkEntry#TRIMVIDEO_EXPORT}<br> | ||
| 110 | + * 来自定长截取视频的时间导出{@link CNSdkEntry#TRIMVIDEO_DURATION_EXPORT}<br> | ||
| 111 | + * @param startTime | ||
| 112 | + * 开始时间 单位:秒 | ||
| 113 | + * @param endTime | ||
| 114 | + * 结束时间 单位:秒 | ||
| 115 | + */ | ||
| 116 | + @Override | ||
| 117 | + public void onGetVideoTrimTime(Context context, int exportType, | ||
| 118 | + float startTime, float endTime) { | ||
| 119 | + Log.e(TAG, "onGetVideoTrimTime: " + exportType + "...>" + startTime + "<>" + endTime); | ||
| 120 | + if (exportType == CNSdkEntry.TRIMVIDEO_EXPORT) { | ||
| 121 | + Log.i(TAG, "onGetVideoTrimTime 普通截取"); | ||
| 122 | + } else if (exportType == CNSdkEntry.TRIMVIDEO_DURATION_EXPORT) { | ||
| 123 | + Log.i(TAG, "onGetVideoTrimTime 定长截取"); | ||
| 124 | + } else { | ||
| 125 | + Log.e(TAG, "onGetVideoTrimTime 未知"); | ||
| 126 | + } | ||
| 127 | + } | ||
| 128 | + | ||
| 129 | + /** | ||
| 130 | + * 响应确认截取按钮 | ||
| 131 | + * | ||
| 132 | + * @param context | ||
| 133 | + * 应用上下文 | ||
| 134 | + * @param exportType | ||
| 135 | + * 来自普通截取的确认 {@link CNSdkEntry#TRIMVIDEO_EXPORT}<br> | ||
| 136 | + * 来自定长截取的确认 {@link CNSdkEntry#TRIMVIDEO_DURATION_EXPORT}<br> | ||
| 137 | + */ | ||
| 138 | + @Override | ||
| 139 | + public void onGetVideoTrim(Context context, int exportType) { | ||
| 140 | + if (exportType == CNSdkEntry.TRIMVIDEO_EXPORT) { | ||
| 141 | + Log.i(TAG, "onGetVideoTrimTime 普通截取的确认按钮"); | ||
| 142 | + } else if (exportType == CNSdkEntry.TRIMVIDEO_DURATION_EXPORT) { | ||
| 143 | + Log.i(TAG, "onGetVideoTrimTime 定长截取的确认按钮"); | ||
| 144 | + } else { | ||
| 145 | + Log.e(TAG, "onGetVideoTrimTime 未知"); | ||
| 146 | + } | ||
| 147 | + Intent intent = new Intent(context, DialogActivity.class); | ||
| 148 | + context.startActivity(intent); | ||
| 149 | + } | ||
| 150 | + | ||
| 151 | + /** | ||
| 152 | + * 响应进入相册(只显示照片、图片) | ||
| 153 | + * | ||
| 154 | + * @param context | ||
| 155 | + * 应用上下文 | ||
| 156 | + */ | ||
| 157 | + @Override | ||
| 158 | + public void onGetPhoto(Context context) { | ||
| 159 | + // 自定义相册调用位置 | ||
| 160 | + Intent intent = new Intent(context, AlbumActivity.class); | ||
| 161 | + intent.setData(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); | ||
| 162 | + context.startActivity(intent); | ||
| 163 | + } | ||
| 164 | + | ||
| 165 | + /** | ||
| 166 | + * 响应进入相册(只显示视频) | ||
| 167 | + * | ||
| 168 | + * @param context | ||
| 169 | + * 应用上下文 | ||
| 170 | + */ | ||
| 171 | + @Override | ||
| 172 | + public void onGetVideo(Context context) { | ||
| 173 | + // 自定义视频集调用位置 | ||
| 174 | + Intent intent = new Intent(context, AlbumActivity.class); | ||
| 175 | + intent.setData(android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI); | ||
| 176 | + context.startActivity(intent); | ||
| 177 | + } | ||
| 178 | + | ||
| 179 | + }; | ||
| 180 | + | ||
| 181 | + /** | ||
| 182 | + * 将视频信息存入相册数据库 | ||
| 183 | + * | ||
| 184 | + * @param path 视频路径 | ||
| 185 | + * @param duration 视频持续时间 | ||
| 186 | + * @param width 视频宽度 | ||
| 187 | + * @param height 视频高度 | ||
| 188 | + */ | ||
| 189 | + private void insertToGalleryr(Context context, String path, int duration, | ||
| 190 | + int width, int height) { | ||
| 191 | + ContentValues videoValues = new ContentValues(); | ||
| 192 | + videoValues.put(Video.Media.TITLE, "未定义"); | ||
| 193 | + videoValues.put(Video.Media.MIME_TYPE, "video/mp4"); | ||
| 194 | + videoValues.put(Video.Media.DATA, path); | ||
| 195 | + videoValues.put(Video.Media.ARTIST, | ||
| 196 | + context.getString(R.string.app_name)); | ||
| 197 | + videoValues.put(Video.Media.DATE_TAKEN, | ||
| 198 | + String.valueOf(System.currentTimeMillis())); | ||
| 199 | + videoValues.put(Video.Media.DESCRIPTION, | ||
| 200 | + context.getString(R.string.app_name)); | ||
| 201 | + videoValues.put(Video.Media.DURATION, duration); | ||
| 202 | + videoValues.put(Video.Media.WIDTH, width); | ||
| 203 | + videoValues.put(Video.Media.HEIGHT, height); | ||
| 204 | + context.getContentResolver().insert(Video.Media.EXTERNAL_CONTENT_URI, | ||
| 205 | + videoValues); | ||
| 206 | + | ||
| 207 | + } | ||
| 208 | + | ||
| 209 | +} |
app/src/main/java/com/rd/ve/demo/VideoPlayerActivity.java
0 → 100644
| 1 | +++ a/app/src/main/java/com/rd/ve/demo/VideoPlayerActivity.java | ||
| 1 | +package com.rd.ve.demo; | ||
| 2 | + | ||
| 3 | +import android.app.Activity; | ||
| 4 | +import android.app.ProgressDialog; | ||
| 5 | +import android.os.Bundle; | ||
| 6 | +import android.util.Log; | ||
| 7 | +import android.view.Gravity; | ||
| 8 | +import android.view.View; | ||
| 9 | +import android.view.View.OnClickListener; | ||
| 10 | +import android.view.animation.Animation; | ||
| 11 | +import android.view.animation.AnimationUtils; | ||
| 12 | +import android.widget.FrameLayout; | ||
| 13 | +import android.widget.FrameLayout.LayoutParams; | ||
| 14 | +import android.widget.ImageView; | ||
| 15 | +import android.widget.SeekBar; | ||
| 16 | +import android.widget.SeekBar.OnSeekBarChangeListener; | ||
| 17 | +import android.widget.TextView; | ||
| 18 | +import android.widget.Toast; | ||
| 19 | + | ||
| 20 | +import com.cnlive.veuisdk.CNVideoView; | ||
| 21 | +import com.cnlive.veuisdk.manager.CNVideoMetadataRetriever; | ||
| 22 | + | ||
| 23 | +import java.util.Formatter; | ||
| 24 | +import java.util.Locale; | ||
| 25 | + | ||
| 26 | +/** | ||
| 27 | + * 播放界面 | ||
| 28 | + */ | ||
| 29 | +public class VideoPlayerActivity extends Activity { | ||
| 30 | + private String TAG = "VideoPlayerActivity"; | ||
| 31 | + public static final String ACTION_PATH = "视频路径"; | ||
| 32 | + private TextView mVideoCurrentPos, mVideoDuration; | ||
| 33 | + private SeekBar mPlayControl; | ||
| 34 | + private ImageView mVideoPlayerState; | ||
| 35 | + private CNVideoView mVideoView; | ||
| 36 | + private ProgressDialog mLoadingDialog; | ||
| 37 | + private FrameLayout mVideoViewParent; | ||
| 38 | + private String mSupportAntiChange; | ||
| 39 | + private float mLastPlayerPosition = -1; | ||
| 40 | + private boolean mLastPlaying = true; | ||
| 41 | + | ||
| 42 | + @Override | ||
| 43 | + protected void onCreate(Bundle savedInstanceState) { | ||
| 44 | + super.onCreate(savedInstanceState); | ||
| 45 | + TAG = this.toString(); | ||
| 46 | + setContentView(R.layout.activity_video_player); | ||
| 47 | + String path = getIntent().getStringExtra(ACTION_PATH); | ||
| 48 | + | ||
| 49 | + // 检索视频信息 | ||
| 50 | + CNVideoMetadataRetriever vmr = new CNVideoMetadataRetriever(); | ||
| 51 | + vmr.setDataSource(path); | ||
| 52 | + | ||
| 53 | + // 读取视频信息 | ||
| 54 | + Log.i(TAG, | ||
| 55 | + "video duration:" | ||
| 56 | + + vmr.extractMetadata(CNVideoMetadataRetriever.METADATA_KEY_VIDEO_DURATION)); | ||
| 57 | + mSupportAntiChange = vmr | ||
| 58 | + .extractMetadata(CNVideoMetadataRetriever.METADATA_KEY_IS_SUPPORT_ANTI_CHANGE); | ||
| 59 | + Log.i(TAG, "is support anti-change:" + mSupportAntiChange); | ||
| 60 | + Log.i(TAG, | ||
| 61 | + "video bit rate:" | ||
| 62 | + + vmr.extractMetadata(CNVideoMetadataRetriever.METADATA_KEY_VIDEO_BIT_RATE)); | ||
| 63 | + Log.i(TAG, | ||
| 64 | + "video width:" | ||
| 65 | + + vmr.extractMetadata(CNVideoMetadataRetriever.METADATA_KEY_VIDEO_WIDHT)); | ||
| 66 | + Log.i(TAG, | ||
| 67 | + "video height:" | ||
| 68 | + + vmr.extractMetadata(CNVideoMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)); | ||
| 69 | + Log.i(TAG, | ||
| 70 | + "video frame rate:" | ||
| 71 | + + vmr.extractMetadata(CNVideoMetadataRetriever.METADATA_KEY_VIDEO_FRAME_RATE)); | ||
| 72 | + | ||
| 73 | + mVideoView = (CNVideoView) findViewById(R.id.svpriview); | ||
| 74 | + mVideoView.setPlayerListener(playerListener); | ||
| 75 | + mVideoView.setVideoPath(path); | ||
| 76 | + mVideoPlayerState = (ImageView) findViewById(R.id.ivPlayerState); | ||
| 77 | + mVideoViewParent = (FrameLayout) findViewById(R.id.videoParentGroup); | ||
| 78 | + mVideoPlayerState.setOnClickListener(new OnClickListener() { | ||
| 79 | + | ||
| 80 | + @Override | ||
| 81 | + public void onClick(View v) { | ||
| 82 | + if (mVideoView.isPlaying()) { | ||
| 83 | + pauseVideo(); | ||
| 84 | + } else { | ||
| 85 | + playVideo(); | ||
| 86 | + } | ||
| 87 | + } | ||
| 88 | + }); | ||
| 89 | + | ||
| 90 | + mVideoView.setOnClickListener(new OnClickListener() { | ||
| 91 | + | ||
| 92 | + @Override | ||
| 93 | + public void onClick(View v) { | ||
| 94 | + if (mVideoView.isPlaying()) { | ||
| 95 | + pauseVideo(); | ||
| 96 | + } else { | ||
| 97 | + playVideo(); | ||
| 98 | + } | ||
| 99 | + } | ||
| 100 | + }); | ||
| 101 | + | ||
| 102 | + mVideoCurrentPos = (TextView) findViewById(R.id.tvEditorCurrentPos); | ||
| 103 | + mVideoDuration = (TextView) findViewById(R.id.tvEditorDuration); | ||
| 104 | + | ||
| 105 | + findViewById(R.id.left).setOnClickListener(new OnClickListener() { | ||
| 106 | + | ||
| 107 | + @Override | ||
| 108 | + public void onClick(View v) { | ||
| 109 | + onBackPressed(); | ||
| 110 | + } | ||
| 111 | + }); | ||
| 112 | + | ||
| 113 | + mPlayControl = (SeekBar) findViewById(R.id.sbEditor); | ||
| 114 | + mPlayControl.setOnSeekBarChangeListener(onSeekbarlistener); | ||
| 115 | + mPlayControl.setMax(100); | ||
| 116 | + mLoadingDialog = ProgressDialog.show(this, null, "正在加载视频..."); | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | + private void prepare() { | ||
| 120 | + mVideoCurrentPos.setText(getTimeString(0)); | ||
| 121 | + mVideoDuration.setText(getTimeString((int) (mVideoView.getDuration() * 1000))); | ||
| 122 | + mPlayControl.setMax((int) (mVideoView.getDuration() * 1000)); | ||
| 123 | + } | ||
| 124 | + | ||
| 125 | + private String getTimeString(int progress) { | ||
| 126 | + return stringForTime(progress, false); | ||
| 127 | + } | ||
| 128 | + | ||
| 129 | + private void onComplete() { | ||
| 130 | + mPlayControl.setProgress(0); | ||
| 131 | + mVideoPlayerState.setImageResource(R.drawable.btn_play); | ||
| 132 | + mVideoPlayerState.setVisibility(View.VISIBLE); | ||
| 133 | + mVideoCurrentPos.setText(getTimeString(0)); | ||
| 134 | + } | ||
| 135 | + | ||
| 136 | + @Override | ||
| 137 | + protected void onPause() { | ||
| 138 | + mLastPlayerPosition = mVideoView.getCurrentPosition(); | ||
| 139 | + mLastPlaying = mVideoView.isPlaying(); | ||
| 140 | + mVideoView.stop(); | ||
| 141 | + super.onPause(); | ||
| 142 | + } | ||
| 143 | + | ||
| 144 | + @Override | ||
| 145 | + protected void onResume() { | ||
| 146 | + if (mLastPlaying) { | ||
| 147 | + playVideo(); | ||
| 148 | + } else { | ||
| 149 | + pauseVideo(); | ||
| 150 | + } | ||
| 151 | + mVideoView.seekTo(mLastPlayerPosition); | ||
| 152 | + super.onResume(); | ||
| 153 | + } | ||
| 154 | + | ||
| 155 | + @Override | ||
| 156 | + protected void onDestroy() { | ||
| 157 | + mVideoView.cleanUp(); | ||
| 158 | + super.onDestroy(); | ||
| 159 | + } | ||
| 160 | + | ||
| 161 | + | ||
| 162 | + private OnSeekBarChangeListener onSeekbarlistener = new OnSeekBarChangeListener() { | ||
| 163 | + private boolean m_bIsPlayingOnSeek; // Seek时是否播放中... | ||
| 164 | + | ||
| 165 | + @Override | ||
| 166 | + public void onProgressChanged(SeekBar seekBar, int progress, | ||
| 167 | + boolean fromUser) { | ||
| 168 | + if (fromUser) { | ||
| 169 | + mVideoCurrentPos.setText(getTimeString(progress)); | ||
| 170 | + mVideoView.seekTo(progress / 1000.0f); | ||
| 171 | + } | ||
| 172 | + } | ||
| 173 | + | ||
| 174 | + @Override | ||
| 175 | + public void onStartTrackingTouch(SeekBar seekBar) { | ||
| 176 | + if (mVideoView.isPlaying()) { | ||
| 177 | + pauseVideo(); | ||
| 178 | + m_bIsPlayingOnSeek = true; | ||
| 179 | + } else { | ||
| 180 | + m_bIsPlayingOnSeek = false; | ||
| 181 | + } | ||
| 182 | + } | ||
| 183 | + | ||
| 184 | + @Override | ||
| 185 | + public void onStopTrackingTouch(SeekBar seekBar) { | ||
| 186 | + if (m_bIsPlayingOnSeek) { | ||
| 187 | + playVideo(); | ||
| 188 | + } | ||
| 189 | + } | ||
| 190 | + }; | ||
| 191 | + | ||
| 192 | + private void playVideo() { | ||
| 193 | + mVideoView.start(); | ||
| 194 | + mVideoPlayerState.setImageResource(R.drawable.btn_pause); | ||
| 195 | + Animation an = AnimationUtils.loadAnimation(getApplicationContext(), | ||
| 196 | + android.R.anim.fade_out); | ||
| 197 | + mVideoPlayerState.setAnimation(an); | ||
| 198 | + mVideoPlayerState.setVisibility(View.INVISIBLE); | ||
| 199 | + } | ||
| 200 | + | ||
| 201 | + private void pauseVideo() { | ||
| 202 | + if (mVideoView.isPlaying()) { | ||
| 203 | + mVideoView.pause(); | ||
| 204 | + } | ||
| 205 | + mVideoPlayerState.setImageResource(R.drawable.btn_play); | ||
| 206 | + mVideoPlayerState.setVisibility(View.VISIBLE); | ||
| 207 | + } | ||
| 208 | + | ||
| 209 | + private CNVideoView.CNPlayerListener playerListener = new CNVideoView.CNPlayerListener() { | ||
| 210 | + | ||
| 211 | + @Override | ||
| 212 | + public void onPlayerPrepare(CNVideoView mediaPlayerControl) { | ||
| 213 | + prepare(); | ||
| 214 | + mLoadingDialog.dismiss(); | ||
| 215 | + if ("yes".equals(mSupportAntiChange)) { | ||
| 216 | + final TextView tv = new TextView(getApplicationContext()); | ||
| 217 | + tv.setText(R.string.video_isAntiChang); | ||
| 218 | + final FrameLayout.LayoutParams lp = new LayoutParams( | ||
| 219 | + FrameLayout.LayoutParams.WRAP_CONTENT, | ||
| 220 | + FrameLayout.LayoutParams.WRAP_CONTENT); | ||
| 221 | + lp.gravity = Gravity.LEFT | Gravity.BOTTOM; | ||
| 222 | + runOnUiThread(new Runnable() { | ||
| 223 | + @Override | ||
| 224 | + public void run() { | ||
| 225 | + mVideoViewParent.addView(tv, lp); | ||
| 226 | + } | ||
| 227 | + }); | ||
| 228 | + | ||
| 229 | + } | ||
| 230 | + } | ||
| 231 | + | ||
| 232 | + @Override | ||
| 233 | + public boolean onPlayerError(CNVideoView mediaPlayerControl, | ||
| 234 | + int what, int extra) { | ||
| 235 | + mLoadingDialog.dismiss(); | ||
| 236 | + Toast.makeText(VideoPlayerActivity.this, | ||
| 237 | + getString(android.R.string.VideoView_error_text_unknown), | ||
| 238 | + Toast.LENGTH_SHORT).show(); | ||
| 239 | + return false; | ||
| 240 | + } | ||
| 241 | + | ||
| 242 | + @Override | ||
| 243 | + public void onPlayerCompletion(CNVideoView mediaPlayerControl) { | ||
| 244 | + onComplete(); | ||
| 245 | + } | ||
| 246 | + | ||
| 247 | + @Override | ||
| 248 | + public void onGetCurrentPosition(CNVideoView mediaPlayerControl, | ||
| 249 | + float position) { | ||
| 250 | + mPlayControl.setProgress((int) (position * 1000)); | ||
| 251 | + mVideoCurrentPos.setText(getTimeString((int) (position * 1000))); | ||
| 252 | + } | ||
| 253 | + }; | ||
| 254 | + | ||
| 255 | + private final StringBuilder m_sbFormator = new StringBuilder(); | ||
| 256 | + private final Formatter m_formatter = new Formatter(m_sbFormator, | ||
| 257 | + Locale.getDefault()); | ||
| 258 | + | ||
| 259 | + /** | ||
| 260 | + * 毫秒数转换为时间格式化字符串 支持是否显示小时 | ||
| 261 | + * | ||
| 262 | + * @param timeMs | ||
| 263 | + * @return | ||
| 264 | + */ | ||
| 265 | + private String stringForTime(long timeMs, boolean existsHours) { | ||
| 266 | + boolean bNegative = timeMs < 0;// 是否为负数 | ||
| 267 | + if (bNegative) { | ||
| 268 | + timeMs = -timeMs; | ||
| 269 | + } | ||
| 270 | + int totalSeconds = (int) (timeMs / 1000); | ||
| 271 | + | ||
| 272 | + int seconds = totalSeconds % 60; | ||
| 273 | + int minutes = (totalSeconds / 60) % 60; | ||
| 274 | + int hours = totalSeconds / 3600; | ||
| 275 | + | ||
| 276 | + m_sbFormator.setLength(0); | ||
| 277 | + try { | ||
| 278 | + if (hours > 0 || existsHours) { | ||
| 279 | + return m_formatter.format("%s%02d:%02d:%02d", | ||
| 280 | + bNegative ? "-" : "", hours, minutes, seconds) | ||
| 281 | + .toString(); | ||
| 282 | + } else { | ||
| 283 | + return m_formatter.format("%s%02d:%02d", bNegative ? "- " : "", | ||
| 284 | + minutes, seconds).toString(); | ||
| 285 | + } | ||
| 286 | + } catch (Exception ex) { | ||
| 287 | + return ""; | ||
| 288 | + } | ||
| 289 | + } | ||
| 290 | +} |
app/src/main/java/com/rd/ve/demo/authpack.java
0 → 100644
| 1 | +++ a/app/src/main/java/com/rd/ve/demo/authpack.java | ||
| 1 | +package com.rd.ve.demo; | ||
| 2 | + | ||
| 3 | +import java.security.MessageDigest; | ||
| 4 | + | ||
| 5 | +public class authpack { | ||
| 6 | + public static int sha1_32(byte[] buf){int ret=0;try{byte[] digest= MessageDigest.getInstance("SHA1").digest(buf);return ((int)(digest[0]&0xff)<<24)+((int)(digest[1]&0xff)<<16)+((int)(digest[2]&0xff)<<8)+((int)(digest[3]&0xff)<<0);}catch(Exception e){}return ret;} | ||
| 7 | + public static byte[] A(){ | ||
| 8 | + byte[] buf=new byte[1128]; | ||
| 9 | + int i=0; | ||
| 10 | + for(i=50;i<63;i++){ buf[0]=(byte)i; if(sha1_32(buf)==1026489091){break;} } | ||
| 11 | + for(i=77;i<96;i++){ buf[1]=(byte)i; if(sha1_32(buf)==-42685041){break;} } | ||
| 12 | + for(i=19;i<33;i++){ buf[2]=(byte)i; if(sha1_32(buf)==1087251408){break;} } | ||
| 13 | + for(i=-48;i<-33;i++){ buf[3]=(byte)i; if(sha1_32(buf)==671492657){break;} } | ||
| 14 | + for(i=-96;i<-87;i++){ buf[4]=(byte)i; if(sha1_32(buf)==141994054){break;} } | ||
| 15 | + for(i=-61;i<-39;i++){ buf[5]=(byte)i; if(sha1_32(buf)==-1548468132){break;} } | ||
| 16 | + for(i=-27;i<-4;i++){ buf[6]=(byte)i; if(sha1_32(buf)==-879384635){break;} } | ||
| 17 | + for(i=-122;i<-108;i++){ buf[7]=(byte)i; if(sha1_32(buf)==-204933618){break;} } | ||
| 18 | + for(i=94;i<104;i++){ buf[8]=(byte)i; if(sha1_32(buf)==1862609372){break;} } | ||
| 19 | + for(i=66;i<77;i++){ buf[9]=(byte)i; if(sha1_32(buf)==1968234787){break;} } | ||
| 20 | + for(i=67;i<80;i++){ buf[10]=(byte)i; if(sha1_32(buf)==2081191704){break;} } | ||
| 21 | + for(i=95;i<114;i++){ buf[11]=(byte)i; if(sha1_32(buf)==745582537){break;} } | ||
| 22 | + for(i=-1;i<24;i++){ buf[12]=(byte)i; if(sha1_32(buf)==1320021058){break;} } | ||
| 23 | + for(i=67;i<76;i++){ buf[13]=(byte)i; if(sha1_32(buf)==-1459665566){break;} } | ||
| 24 | + for(i=105;i<118;i++){ buf[14]=(byte)i; if(sha1_32(buf)==-1494800565){break;} } | ||
| 25 | + for(i=50;i<57;i++){ buf[15]=(byte)i; if(sha1_32(buf)==950232133){break;} } | ||
| 26 | + for(i=-95;i<-83;i++){ buf[16]=(byte)i; if(sha1_32(buf)==1494665726){break;} } | ||
| 27 | + for(i=-128;i<-115;i++){ buf[17]=(byte)i; if(sha1_32(buf)==-375458179){break;} } | ||
| 28 | + for(i=-13;i<4;i++){ buf[18]=(byte)i; if(sha1_32(buf)==-485189447){break;} } | ||
| 29 | + for(i=66;i<88;i++){ buf[19]=(byte)i; if(sha1_32(buf)==-864119659){break;} } | ||
| 30 | + for(i=-64;i<-54;i++){ buf[20]=(byte)i; if(sha1_32(buf)==1948907159){break;} } | ||
| 31 | + for(i=-128;i<-110;i++){ buf[21]=(byte)i; if(sha1_32(buf)==260775010){break;} } | ||
| 32 | + for(i=-85;i<-66;i++){ buf[22]=(byte)i; if(sha1_32(buf)==-101983059){break;} } | ||
| 33 | + for(i=-101;i<-100;i++){ buf[23]=(byte)i; if(sha1_32(buf)==819800102){break;} } | ||
| 34 | + for(i=-110;i<-96;i++){ buf[24]=(byte)i; if(sha1_32(buf)==286617426){break;} } | ||
| 35 | + for(i=-53;i<-33;i++){ buf[25]=(byte)i; if(sha1_32(buf)==106045753){break;} } | ||
| 36 | + for(i=79;i<86;i++){ buf[26]=(byte)i; if(sha1_32(buf)==-148890993){break;} } | ||
| 37 | + for(i=90;i<103;i++){ buf[27]=(byte)i; if(sha1_32(buf)==1149428317){break;} } | ||
| 38 | + for(i=-28;i<-20;i++){ buf[28]=(byte)i; if(sha1_32(buf)==-1589520921){break;} } | ||
| 39 | + for(i=-72;i<-48;i++){ buf[29]=(byte)i; if(sha1_32(buf)==255572270){break;} } | ||
| 40 | + for(i=-64;i<-42;i++){ buf[30]=(byte)i; if(sha1_32(buf)==-972909422){break;} } | ||
| 41 | + for(i=72;i<97;i++){ buf[31]=(byte)i; if(sha1_32(buf)==2092556752){break;} } | ||
| 42 | + for(i=-111;i<-99;i++){ buf[32]=(byte)i; if(sha1_32(buf)==-1149217718){break;} } | ||
| 43 | + for(i=9;i<34;i++){ buf[33]=(byte)i; if(sha1_32(buf)==280342400){break;} } | ||
| 44 | + for(i=44;i<57;i++){ buf[34]=(byte)i; if(sha1_32(buf)==-1356362184){break;} } | ||
| 45 | + for(i=120;i<123;i++){ buf[35]=(byte)i; if(sha1_32(buf)==-1199647633){break;} } | ||
| 46 | + for(i=60;i<70;i++){ buf[36]=(byte)i; if(sha1_32(buf)==1724382504){break;} } | ||
| 47 | + for(i=77;i<96;i++){ buf[37]=(byte)i; if(sha1_32(buf)==-268862044){break;} } | ||
| 48 | + for(i=-59;i<-45;i++){ buf[38]=(byte)i; if(sha1_32(buf)==-406065914){break;} } | ||
| 49 | + for(i=49;i<77;i++){ buf[39]=(byte)i; if(sha1_32(buf)==999130352){break;} } | ||
| 50 | + for(i=-75;i<-60;i++){ buf[40]=(byte)i; if(sha1_32(buf)==127919875){break;} } | ||
| 51 | + for(i=-71;i<-46;i++){ buf[41]=(byte)i; if(sha1_32(buf)==-709598217){break;} } | ||
| 52 | + for(i=-16;i<1;i++){ buf[42]=(byte)i; if(sha1_32(buf)==-463911876){break;} } | ||
| 53 | + for(i=21;i<46;i++){ buf[43]=(byte)i; if(sha1_32(buf)==1759863532){break;} } | ||
| 54 | + for(i=-33;i<-16;i++){ buf[44]=(byte)i; if(sha1_32(buf)==-465868074){break;} } | ||
| 55 | + for(i=8;i<27;i++){ buf[45]=(byte)i; if(sha1_32(buf)==-1291720276){break;} } | ||
| 56 | + for(i=-45;i<-37;i++){ buf[46]=(byte)i; if(sha1_32(buf)==-1550003114){break;} } | ||
| 57 | + for(i=90;i<104;i++){ buf[47]=(byte)i; if(sha1_32(buf)==-1096594607){break;} } | ||
| 58 | + for(i=52;i<68;i++){ buf[48]=(byte)i; if(sha1_32(buf)==1224418497){break;} } | ||
| 59 | + for(i=12;i<27;i++){ buf[49]=(byte)i; if(sha1_32(buf)==946006067){break;} } | ||
| 60 | + for(i=52;i<82;i++){ buf[50]=(byte)i; if(sha1_32(buf)==2036710747){break;} } | ||
| 61 | + for(i=15;i<35;i++){ buf[51]=(byte)i; if(sha1_32(buf)==-1930590580){break;} } | ||
| 62 | + for(i=-73;i<-67;i++){ buf[52]=(byte)i; if(sha1_32(buf)==964995236){break;} } | ||
| 63 | + for(i=72;i<90;i++){ buf[53]=(byte)i; if(sha1_32(buf)==-1140345529){break;} } | ||
| 64 | + for(i=-34;i<-22;i++){ buf[54]=(byte)i; if(sha1_32(buf)==-230038311){break;} } | ||
| 65 | + for(i=53;i<66;i++){ buf[55]=(byte)i; if(sha1_32(buf)==63152070){break;} } | ||
| 66 | + for(i=-7;i<10;i++){ buf[56]=(byte)i; if(sha1_32(buf)==-1422787405){break;} } | ||
| 67 | + for(i=-128;i<-112;i++){ buf[57]=(byte)i; if(sha1_32(buf)==-467281662){break;} } | ||
| 68 | + for(i=29;i<40;i++){ buf[58]=(byte)i; if(sha1_32(buf)==-596886805){break;} } | ||
| 69 | + for(i=-55;i<-38;i++){ buf[59]=(byte)i; if(sha1_32(buf)==-1591146865){break;} } | ||
| 70 | + for(i=-8;i<21;i++){ buf[60]=(byte)i; if(sha1_32(buf)==-595684101){break;} } | ||
| 71 | + for(i=-112;i<-100;i++){ buf[61]=(byte)i; if(sha1_32(buf)==-1897017796){break;} } | ||
| 72 | + for(i=-6;i<-4;i++){ buf[62]=(byte)i; if(sha1_32(buf)==-1649794498){break;} } | ||
| 73 | + for(i=-81;i<-74;i++){ buf[63]=(byte)i; if(sha1_32(buf)==1074577672){break;} } | ||
| 74 | + for(i=32;i<57;i++){ buf[64]=(byte)i; if(sha1_32(buf)==-2113574272){break;} } | ||
| 75 | + for(i=-67;i<-61;i++){ buf[65]=(byte)i; if(sha1_32(buf)==-2004044780){break;} } | ||
| 76 | + for(i=79;i<87;i++){ buf[66]=(byte)i; if(sha1_32(buf)==-1144444353){break;} } | ||
| 77 | + for(i=-127;i<-117;i++){ buf[67]=(byte)i; if(sha1_32(buf)==-1370771997){break;} } | ||
| 78 | + for(i=-93;i<-82;i++){ buf[68]=(byte)i; if(sha1_32(buf)==876595586){break;} } | ||
| 79 | + for(i=-126;i<-103;i++){ buf[69]=(byte)i; if(sha1_32(buf)==1254904090){break;} } | ||
| 80 | + for(i=45;i<62;i++){ buf[70]=(byte)i; if(sha1_32(buf)==1198590385){break;} } | ||
| 81 | + for(i=-6;i<6;i++){ buf[71]=(byte)i; if(sha1_32(buf)==2071679952){break;} } | ||
| 82 | + for(i=-32;i<-10;i++){ buf[72]=(byte)i; if(sha1_32(buf)==-1695262911){break;} } | ||
| 83 | + for(i=81;i<93;i++){ buf[73]=(byte)i; if(sha1_32(buf)==-764759758){break;} } | ||
| 84 | + for(i=51;i<65;i++){ buf[74]=(byte)i; if(sha1_32(buf)==2021787843){break;} } | ||
| 85 | + for(i=-87;i<-78;i++){ buf[75]=(byte)i; if(sha1_32(buf)==698251122){break;} } | ||
| 86 | + for(i=73;i<91;i++){ buf[76]=(byte)i; if(sha1_32(buf)==-1245394124){break;} } | ||
| 87 | + for(i=32;i<50;i++){ buf[77]=(byte)i; if(sha1_32(buf)==527837046){break;} } | ||
| 88 | + for(i=37;i<48;i++){ buf[78]=(byte)i; if(sha1_32(buf)==1815850386){break;} } | ||
| 89 | + for(i=-70;i<-48;i++){ buf[79]=(byte)i; if(sha1_32(buf)==1890345234){break;} } | ||
| 90 | + for(i=12;i<31;i++){ buf[80]=(byte)i; if(sha1_32(buf)==-1960039746){break;} } | ||
| 91 | + for(i=-13;i<-2;i++){ buf[81]=(byte)i; if(sha1_32(buf)==1239352730){break;} } | ||
| 92 | + for(i=-77;i<-68;i++){ buf[82]=(byte)i; if(sha1_32(buf)==-1458772965){break;} } | ||
| 93 | + for(i=4;i<23;i++){ buf[83]=(byte)i; if(sha1_32(buf)==-925152497){break;} } | ||
| 94 | + for(i=-128;i<-117;i++){ buf[84]=(byte)i; if(sha1_32(buf)==-689682024){break;} } | ||
| 95 | + for(i=-18;i<-2;i++){ buf[85]=(byte)i; if(sha1_32(buf)==1278327521){break;} } | ||
| 96 | + for(i=-46;i<-23;i++){ buf[86]=(byte)i; if(sha1_32(buf)==281412100){break;} } | ||
| 97 | + for(i=-86;i<-58;i++){ buf[87]=(byte)i; if(sha1_32(buf)==1728146008){break;} } | ||
| 98 | + for(i=-122;i<-101;i++){ buf[88]=(byte)i; if(sha1_32(buf)==820657961){break;} } | ||
| 99 | + for(i=-11;i<9;i++){ buf[89]=(byte)i; if(sha1_32(buf)==1504869357){break;} } | ||
| 100 | + for(i=79;i<98;i++){ buf[90]=(byte)i; if(sha1_32(buf)==2056192439){break;} } | ||
| 101 | + for(i=-105;i<-79;i++){ buf[91]=(byte)i; if(sha1_32(buf)==280031110){break;} } | ||
| 102 | + for(i=107;i<111;i++){ buf[92]=(byte)i; if(sha1_32(buf)==-1372749050){break;} } | ||
| 103 | + for(i=-28;i<-12;i++){ buf[93]=(byte)i; if(sha1_32(buf)==-71149010){break;} } | ||
| 104 | + for(i=4;i<13;i++){ buf[94]=(byte)i; if(sha1_32(buf)==-439218140){break;} } | ||
| 105 | + for(i=-84;i<-70;i++){ buf[95]=(byte)i; if(sha1_32(buf)==56184702){break;} } | ||
| 106 | + for(i=68;i<83;i++){ buf[96]=(byte)i; if(sha1_32(buf)==-716429757){break;} } | ||
| 107 | + for(i=55;i<61;i++){ buf[97]=(byte)i; if(sha1_32(buf)==-247943948){break;} } | ||
| 108 | + for(i=-23;i<1;i++){ buf[98]=(byte)i; if(sha1_32(buf)==1746476796){break;} } | ||
| 109 | + for(i=-61;i<-46;i++){ buf[99]=(byte)i; if(sha1_32(buf)==1177060452){break;} } | ||
| 110 | + for(i=-113;i<-95;i++){ buf[100]=(byte)i; if(sha1_32(buf)==898465393){break;} } | ||
| 111 | + for(i=-55;i<-48;i++){ buf[101]=(byte)i; if(sha1_32(buf)==-656093597){break;} } | ||
| 112 | + for(i=54;i<73;i++){ buf[102]=(byte)i; if(sha1_32(buf)==1623749862){break;} } | ||
| 113 | + for(i=11;i<22;i++){ buf[103]=(byte)i; if(sha1_32(buf)==-1388212035){break;} } | ||
| 114 | + for(i=106;i<122;i++){ buf[104]=(byte)i; if(sha1_32(buf)==1605688897){break;} } | ||
| 115 | + for(i=-13;i<2;i++){ buf[105]=(byte)i; if(sha1_32(buf)==74042793){break;} } | ||
| 116 | + for(i=33;i<56;i++){ buf[106]=(byte)i; if(sha1_32(buf)==-1443372015){break;} } | ||
| 117 | + for(i=-7;i<-1;i++){ buf[107]=(byte)i; if(sha1_32(buf)==-1815059456){break;} } | ||
| 118 | + for(i=6;i<21;i++){ buf[108]=(byte)i; if(sha1_32(buf)==1631820358){break;} } | ||
| 119 | + for(i=19;i<33;i++){ buf[109]=(byte)i; if(sha1_32(buf)==-1383772869){break;} } | ||
| 120 | + for(i=70;i<86;i++){ buf[110]=(byte)i; if(sha1_32(buf)==1806519799){break;} } | ||
| 121 | + for(i=-55;i<-33;i++){ buf[111]=(byte)i; if(sha1_32(buf)==-1197195816){break;} } | ||
| 122 | + for(i=-101;i<-95;i++){ buf[112]=(byte)i; if(sha1_32(buf)==-740873967){break;} } | ||
| 123 | + for(i=-86;i<-58;i++){ buf[113]=(byte)i; if(sha1_32(buf)==457977614){break;} } | ||
| 124 | + for(i=104;i<128;i++){ buf[114]=(byte)i; if(sha1_32(buf)==153335124){break;} } | ||
| 125 | + for(i=-30;i<-6;i++){ buf[115]=(byte)i; if(sha1_32(buf)==-1158505703){break;} } | ||
| 126 | + for(i=-122;i<-108;i++){ buf[116]=(byte)i; if(sha1_32(buf)==-1520351565){break;} } | ||
| 127 | + for(i=26;i<40;i++){ buf[117]=(byte)i; if(sha1_32(buf)==-1885717297){break;} } | ||
| 128 | + for(i=-11;i<14;i++){ buf[118]=(byte)i; if(sha1_32(buf)==34565569){break;} } | ||
| 129 | + for(i=125;i<128;i++){ buf[119]=(byte)i; if(sha1_32(buf)==2118348766){break;} } | ||
| 130 | + for(i=-31;i<-5;i++){ buf[120]=(byte)i; if(sha1_32(buf)==1343444600){break;} } | ||
| 131 | + for(i=84;i<95;i++){ buf[121]=(byte)i; if(sha1_32(buf)==482927565){break;} } | ||
| 132 | + for(i=-17;i<-1;i++){ buf[122]=(byte)i; if(sha1_32(buf)==-573315349){break;} } | ||
| 133 | + for(i=62;i<91;i++){ buf[123]=(byte)i; if(sha1_32(buf)==-887072109){break;} } | ||
| 134 | + for(i=-65;i<-57;i++){ buf[124]=(byte)i; if(sha1_32(buf)==97027370){break;} } | ||
| 135 | + for(i=72;i<96;i++){ buf[125]=(byte)i; if(sha1_32(buf)==815446864){break;} } | ||
| 136 | + for(i=87;i<115;i++){ buf[126]=(byte)i; if(sha1_32(buf)==570487743){break;} } | ||
| 137 | + for(i=-52;i<-24;i++){ buf[127]=(byte)i; if(sha1_32(buf)==184712765){break;} } | ||
| 138 | + for(i=-70;i<-60;i++){ buf[128]=(byte)i; if(sha1_32(buf)==1339509491){break;} } | ||
| 139 | + for(i=-60;i<-54;i++){ buf[129]=(byte)i; if(sha1_32(buf)==848480842){break;} } | ||
| 140 | + for(i=57;i<80;i++){ buf[130]=(byte)i; if(sha1_32(buf)==632905579){break;} } | ||
| 141 | + for(i=-110;i<-101;i++){ buf[131]=(byte)i; if(sha1_32(buf)==-644702759){break;} } | ||
| 142 | + for(i=-80;i<-64;i++){ buf[132]=(byte)i; if(sha1_32(buf)==1037221862){break;} } | ||
| 143 | + for(i=-48;i<-35;i++){ buf[133]=(byte)i; if(sha1_32(buf)==-1909092798){break;} } | ||
| 144 | + for(i=-65;i<-52;i++){ buf[134]=(byte)i; if(sha1_32(buf)==-1846427147){break;} } | ||
| 145 | + for(i=-99;i<-79;i++){ buf[135]=(byte)i; if(sha1_32(buf)==1744715041){break;} } | ||
| 146 | + for(i=77;i<90;i++){ buf[136]=(byte)i; if(sha1_32(buf)==-717680274){break;} } | ||
| 147 | + for(i=121;i<128;i++){ buf[137]=(byte)i; if(sha1_32(buf)==-816360884){break;} } | ||
| 148 | + for(i=109;i<119;i++){ buf[138]=(byte)i; if(sha1_32(buf)==1423552417){break;} } | ||
| 149 | + for(i=96;i<119;i++){ buf[139]=(byte)i; if(sha1_32(buf)==-1297199044){break;} } | ||
| 150 | + for(i=-37;i<-24;i++){ buf[140]=(byte)i; if(sha1_32(buf)==-257160533){break;} } | ||
| 151 | + for(i=-87;i<-73;i++){ buf[141]=(byte)i; if(sha1_32(buf)==-1124965680){break;} } | ||
| 152 | + for(i=-4;i<25;i++){ buf[142]=(byte)i; if(sha1_32(buf)==-1651474985){break;} } | ||
| 153 | + for(i=-18;i<-10;i++){ buf[143]=(byte)i; if(sha1_32(buf)==1868357429){break;} } | ||
| 154 | + for(i=75;i<97;i++){ buf[144]=(byte)i; if(sha1_32(buf)==-2012358088){break;} } | ||
| 155 | + for(i=-116;i<-107;i++){ buf[145]=(byte)i; if(sha1_32(buf)==-263709464){break;} } | ||
| 156 | + for(i=-20;i<6;i++){ buf[146]=(byte)i; if(sha1_32(buf)==526440419){break;} } | ||
| 157 | + for(i=-5;i<7;i++){ buf[147]=(byte)i; if(sha1_32(buf)==-1976609973){break;} } | ||
| 158 | + for(i=-60;i<-32;i++){ buf[148]=(byte)i; if(sha1_32(buf)==1766008377){break;} } | ||
| 159 | + for(i=-37;i<-18;i++){ buf[149]=(byte)i; if(sha1_32(buf)==1209593613){break;} } | ||
| 160 | + for(i=77;i<93;i++){ buf[150]=(byte)i; if(sha1_32(buf)==-532676351){break;} } | ||
| 161 | + for(i=-128;i<-115;i++){ buf[151]=(byte)i; if(sha1_32(buf)==887668666){break;} } | ||
| 162 | + for(i=-64;i<-44;i++){ buf[152]=(byte)i; if(sha1_32(buf)==523941899){break;} } | ||
| 163 | + for(i=-48;i<-37;i++){ buf[153]=(byte)i; if(sha1_32(buf)==-1253473596){break;} } | ||
| 164 | + for(i=40;i<44;i++){ buf[154]=(byte)i; if(sha1_32(buf)==-1844656960){break;} } | ||
| 165 | + for(i=93;i<115;i++){ buf[155]=(byte)i; if(sha1_32(buf)==-1201973078){break;} } | ||
| 166 | + for(i=-47;i<-27;i++){ buf[156]=(byte)i; if(sha1_32(buf)==1451795337){break;} } | ||
| 167 | + for(i=-28;i<-11;i++){ buf[157]=(byte)i; if(sha1_32(buf)==1618568638){break;} } | ||
| 168 | + for(i=-128;i<-112;i++){ buf[158]=(byte)i; if(sha1_32(buf)==-1035459845){break;} } | ||
| 169 | + for(i=-75;i<-57;i++){ buf[159]=(byte)i; if(sha1_32(buf)==677751476){break;} } | ||
| 170 | + for(i=-64;i<-41;i++){ buf[160]=(byte)i; if(sha1_32(buf)==557836020){break;} } | ||
| 171 | + for(i=-123;i<-101;i++){ buf[161]=(byte)i; if(sha1_32(buf)==-364153946){break;} } | ||
| 172 | + for(i=13;i<27;i++){ buf[162]=(byte)i; if(sha1_32(buf)==-1853023847){break;} } | ||
| 173 | + for(i=41;i<60;i++){ buf[163]=(byte)i; if(sha1_32(buf)==-713079012){break;} } | ||
| 174 | + for(i=78;i<94;i++){ buf[164]=(byte)i; if(sha1_32(buf)==-399447991){break;} } | ||
| 175 | + for(i=-128;i<-114;i++){ buf[165]=(byte)i; if(sha1_32(buf)==-529895527){break;} } | ||
| 176 | + for(i=53;i<67;i++){ buf[166]=(byte)i; if(sha1_32(buf)==560242306){break;} } | ||
| 177 | + for(i=-112;i<-102;i++){ buf[167]=(byte)i; if(sha1_32(buf)==-236696044){break;} } | ||
| 178 | + for(i=-1;i<10;i++){ buf[168]=(byte)i; if(sha1_32(buf)==157166){break;} } | ||
| 179 | + for(i=-128;i<-125;i++){ buf[169]=(byte)i; if(sha1_32(buf)==1388722856){break;} } | ||
| 180 | + for(i=67;i<90;i++){ buf[170]=(byte)i; if(sha1_32(buf)==-55710345){break;} } | ||
| 181 | + for(i=-82;i<-59;i++){ buf[171]=(byte)i; if(sha1_32(buf)==926910257){break;} } | ||
| 182 | + for(i=-5;i<3;i++){ buf[172]=(byte)i; if(sha1_32(buf)==-789404335){break;} } | ||
| 183 | + for(i=24;i<27;i++){ buf[173]=(byte)i; if(sha1_32(buf)==-490406185){break;} } | ||
| 184 | + for(i=20;i<40;i++){ buf[174]=(byte)i; if(sha1_32(buf)==-1372370744){break;} } | ||
| 185 | + for(i=-20;i<0;i++){ buf[175]=(byte)i; if(sha1_32(buf)==980088688){break;} } | ||
| 186 | + for(i=-114;i<-86;i++){ buf[176]=(byte)i; if(sha1_32(buf)==-998548255){break;} } | ||
| 187 | + for(i=38;i<59;i++){ buf[177]=(byte)i; if(sha1_32(buf)==-131763501){break;} } | ||
| 188 | + for(i=-105;i<-76;i++){ buf[178]=(byte)i; if(sha1_32(buf)==1394850591){break;} } | ||
| 189 | + for(i=109;i<128;i++){ buf[179]=(byte)i; if(sha1_32(buf)==-1354080173){break;} } | ||
| 190 | + for(i=-54;i<-41;i++){ buf[180]=(byte)i; if(sha1_32(buf)==-828282431){break;} } | ||
| 191 | + for(i=106;i<121;i++){ buf[181]=(byte)i; if(sha1_32(buf)==-245782807){break;} } | ||
| 192 | + for(i=-116;i<-102;i++){ buf[182]=(byte)i; if(sha1_32(buf)==-1384618283){break;} } | ||
| 193 | + for(i=-63;i<-45;i++){ buf[183]=(byte)i; if(sha1_32(buf)==-2006075939){break;} } | ||
| 194 | + for(i=-121;i<-95;i++){ buf[184]=(byte)i; if(sha1_32(buf)==-321266659){break;} } | ||
| 195 | + for(i=16;i<42;i++){ buf[185]=(byte)i; if(sha1_32(buf)==-847036441){break;} } | ||
| 196 | + for(i=-56;i<-35;i++){ buf[186]=(byte)i; if(sha1_32(buf)==-913222534){break;} } | ||
| 197 | + for(i=90;i<111;i++){ buf[187]=(byte)i; if(sha1_32(buf)==75305619){break;} } | ||
| 198 | + for(i=121;i<128;i++){ buf[188]=(byte)i; if(sha1_32(buf)==-1053634106){break;} } | ||
| 199 | + for(i=-94;i<-89;i++){ buf[189]=(byte)i; if(sha1_32(buf)==-402944795){break;} } | ||
| 200 | + for(i=119;i<128;i++){ buf[190]=(byte)i; if(sha1_32(buf)==-1583243999){break;} } | ||
| 201 | + for(i=98;i<119;i++){ buf[191]=(byte)i; if(sha1_32(buf)==-261411541){break;} } | ||
| 202 | + for(i=-58;i<-46;i++){ buf[192]=(byte)i; if(sha1_32(buf)==1145212668){break;} } | ||
| 203 | + for(i=33;i<46;i++){ buf[193]=(byte)i; if(sha1_32(buf)==742953167){break;} } | ||
| 204 | + for(i=-32;i<-24;i++){ buf[194]=(byte)i; if(sha1_32(buf)==-1255191914){break;} } | ||
| 205 | + for(i=95;i<104;i++){ buf[195]=(byte)i; if(sha1_32(buf)==470407521){break;} } | ||
| 206 | + for(i=27;i<42;i++){ buf[196]=(byte)i; if(sha1_32(buf)==1487319900){break;} } | ||
| 207 | + for(i=-23;i<-13;i++){ buf[197]=(byte)i; if(sha1_32(buf)==-1279051846){break;} } | ||
| 208 | + for(i=4;i<25;i++){ buf[198]=(byte)i; if(sha1_32(buf)==-1789858936){break;} } | ||
| 209 | + for(i=-113;i<-108;i++){ buf[199]=(byte)i; if(sha1_32(buf)==1279702722){break;} } | ||
| 210 | + for(i=-6;i<8;i++){ buf[200]=(byte)i; if(sha1_32(buf)==1784624535){break;} } | ||
| 211 | + for(i=61;i<74;i++){ buf[201]=(byte)i; if(sha1_32(buf)==149602609){break;} } | ||
| 212 | + for(i=3;i<10;i++){ buf[202]=(byte)i; if(sha1_32(buf)==-1686299286){break;} } | ||
| 213 | + for(i=-63;i<-32;i++){ buf[203]=(byte)i; if(sha1_32(buf)==1103026669){break;} } | ||
| 214 | + for(i=101;i<111;i++){ buf[204]=(byte)i; if(sha1_32(buf)==-428129682){break;} } | ||
| 215 | + for(i=-77;i<-54;i++){ buf[205]=(byte)i; if(sha1_32(buf)==645289761){break;} } | ||
| 216 | + for(i=-94;i<-86;i++){ buf[206]=(byte)i; if(sha1_32(buf)==1684406648){break;} } | ||
| 217 | + for(i=75;i<99;i++){ buf[207]=(byte)i; if(sha1_32(buf)==-1801758234){break;} } | ||
| 218 | + for(i=-78;i<-57;i++){ buf[208]=(byte)i; if(sha1_32(buf)==-2115357439){break;} } | ||
| 219 | + for(i=-48;i<-37;i++){ buf[209]=(byte)i; if(sha1_32(buf)==-1467798297){break;} } | ||
| 220 | + for(i=96;i<113;i++){ buf[210]=(byte)i; if(sha1_32(buf)==1740282272){break;} } | ||
| 221 | + for(i=-34;i<-23;i++){ buf[211]=(byte)i; if(sha1_32(buf)==-1940612222){break;} } | ||
| 222 | + for(i=-101;i<-82;i++){ buf[212]=(byte)i; if(sha1_32(buf)==100813956){break;} } | ||
| 223 | + for(i=80;i<97;i++){ buf[213]=(byte)i; if(sha1_32(buf)==228259109){break;} } | ||
| 224 | + for(i=-108;i<-98;i++){ buf[214]=(byte)i; if(sha1_32(buf)==1039509614){break;} } | ||
| 225 | + for(i=53;i<79;i++){ buf[215]=(byte)i; if(sha1_32(buf)==1842179274){break;} } | ||
| 226 | + for(i=102;i<120;i++){ buf[216]=(byte)i; if(sha1_32(buf)==-1115982330){break;} } | ||
| 227 | + for(i=-63;i<-55;i++){ buf[217]=(byte)i; if(sha1_32(buf)==1779733582){break;} } | ||
| 228 | + for(i=-45;i<-43;i++){ buf[218]=(byte)i; if(sha1_32(buf)==914332805){break;} } | ||
| 229 | + for(i=-58;i<-48;i++){ buf[219]=(byte)i; if(sha1_32(buf)==1032608561){break;} } | ||
| 230 | + for(i=-37;i<-32;i++){ buf[220]=(byte)i; if(sha1_32(buf)==1712594732){break;} } | ||
| 231 | + for(i=-25;i<-13;i++){ buf[221]=(byte)i; if(sha1_32(buf)==-127630285){break;} } | ||
| 232 | + for(i=48;i<54;i++){ buf[222]=(byte)i; if(sha1_32(buf)==-140337514){break;} } | ||
| 233 | + for(i=-119;i<-108;i++){ buf[223]=(byte)i; if(sha1_32(buf)==-1982205800){break;} } | ||
| 234 | + for(i=51;i<68;i++){ buf[224]=(byte)i; if(sha1_32(buf)==-1799245280){break;} } | ||
| 235 | + for(i=-39;i<-19;i++){ buf[225]=(byte)i; if(sha1_32(buf)==1391253401){break;} } | ||
| 236 | + for(i=-113;i<-94;i++){ buf[226]=(byte)i; if(sha1_32(buf)==-1950434640){break;} } | ||
| 237 | + for(i=0;i<12;i++){ buf[227]=(byte)i; if(sha1_32(buf)==63768247){break;} } | ||
| 238 | + for(i=49;i<63;i++){ buf[228]=(byte)i; if(sha1_32(buf)==-524498088){break;} } | ||
| 239 | + for(i=-32;i<-16;i++){ buf[229]=(byte)i; if(sha1_32(buf)==-1924310378){break;} } | ||
| 240 | + for(i=-109;i<-99;i++){ buf[230]=(byte)i; if(sha1_32(buf)==-439376361){break;} } | ||
| 241 | + for(i=108;i<123;i++){ buf[231]=(byte)i; if(sha1_32(buf)==2001210056){break;} } | ||
| 242 | + for(i=112;i<119;i++){ buf[232]=(byte)i; if(sha1_32(buf)==335350537){break;} } | ||
| 243 | + for(i=40;i<71;i++){ buf[233]=(byte)i; if(sha1_32(buf)==1199825099){break;} } | ||
| 244 | + for(i=-115;i<-112;i++){ buf[234]=(byte)i; if(sha1_32(buf)==1149669169){break;} } | ||
| 245 | + for(i=-25;i<-8;i++){ buf[235]=(byte)i; if(sha1_32(buf)==-1374234612){break;} } | ||
| 246 | + for(i=-72;i<-52;i++){ buf[236]=(byte)i; if(sha1_32(buf)==-670730360){break;} } | ||
| 247 | + for(i=110;i<126;i++){ buf[237]=(byte)i; if(sha1_32(buf)==92982535){break;} } | ||
| 248 | + for(i=-65;i<-35;i++){ buf[238]=(byte)i; if(sha1_32(buf)==-1830168430){break;} } | ||
| 249 | + for(i=-99;i<-91;i++){ buf[239]=(byte)i; if(sha1_32(buf)==96401034){break;} } | ||
| 250 | + for(i=-62;i<-46;i++){ buf[240]=(byte)i; if(sha1_32(buf)==268500425){break;} } | ||
| 251 | + for(i=50;i<56;i++){ buf[241]=(byte)i; if(sha1_32(buf)==198725117){break;} } | ||
| 252 | + for(i=-61;i<-40;i++){ buf[242]=(byte)i; if(sha1_32(buf)==-1787380362){break;} } | ||
| 253 | + for(i=30;i<43;i++){ buf[243]=(byte)i; if(sha1_32(buf)==-1283696660){break;} } | ||
| 254 | + for(i=-63;i<-39;i++){ buf[244]=(byte)i; if(sha1_32(buf)==1839833326){break;} } | ||
| 255 | + for(i=11;i<17;i++){ buf[245]=(byte)i; if(sha1_32(buf)==840818561){break;} } | ||
| 256 | + for(i=-91;i<-83;i++){ buf[246]=(byte)i; if(sha1_32(buf)==-1030118836){break;} } | ||
| 257 | + for(i=-4;i<11;i++){ buf[247]=(byte)i; if(sha1_32(buf)==-968590522){break;} } | ||
| 258 | + for(i=51;i<61;i++){ buf[248]=(byte)i; if(sha1_32(buf)==-933513505){break;} } | ||
| 259 | + for(i=48;i<53;i++){ buf[249]=(byte)i; if(sha1_32(buf)==-1233465936){break;} } | ||
| 260 | + for(i=-2;i<4;i++){ buf[250]=(byte)i; if(sha1_32(buf)==-901032040){break;} } | ||
| 261 | + for(i=-125;i<-106;i++){ buf[251]=(byte)i; if(sha1_32(buf)==1401445935){break;} } | ||
| 262 | + for(i=77;i<87;i++){ buf[252]=(byte)i; if(sha1_32(buf)==668849818){break;} } | ||
| 263 | + for(i=-18;i<7;i++){ buf[253]=(byte)i; if(sha1_32(buf)==-177296194){break;} } | ||
| 264 | + for(i=-58;i<-51;i++){ buf[254]=(byte)i; if(sha1_32(buf)==-1973172295){break;} } | ||
| 265 | + for(i=-69;i<-52;i++){ buf[255]=(byte)i; if(sha1_32(buf)==-208162370){break;} } | ||
| 266 | + for(i=13;i<15;i++){ buf[256]=(byte)i; if(sha1_32(buf)==1347805561){break;} } | ||
| 267 | + for(i=-28;i<-14;i++){ buf[257]=(byte)i; if(sha1_32(buf)==-2084518264){break;} } | ||
| 268 | + for(i=-25;i<-5;i++){ buf[258]=(byte)i; if(sha1_32(buf)==1993570847){break;} } | ||
| 269 | + for(i=-76;i<-66;i++){ buf[259]=(byte)i; if(sha1_32(buf)==-935509523){break;} } | ||
| 270 | + for(i=24;i<35;i++){ buf[260]=(byte)i; if(sha1_32(buf)==112474446){break;} } | ||
| 271 | + for(i=109;i<126;i++){ buf[261]=(byte)i; if(sha1_32(buf)==-1297366212){break;} } | ||
| 272 | + for(i=88;i<106;i++){ buf[262]=(byte)i; if(sha1_32(buf)==338729316){break;} } | ||
| 273 | + for(i=91;i<115;i++){ buf[263]=(byte)i; if(sha1_32(buf)==-267333354){break;} } | ||
| 274 | + for(i=-61;i<-55;i++){ buf[264]=(byte)i; if(sha1_32(buf)==880088732){break;} } | ||
| 275 | + for(i=9;i<24;i++){ buf[265]=(byte)i; if(sha1_32(buf)==623140631){break;} } | ||
| 276 | + for(i=-10;i<6;i++){ buf[266]=(byte)i; if(sha1_32(buf)==623140631){break;} } | ||
| 277 | + for(i=82;i<102;i++){ buf[267]=(byte)i; if(sha1_32(buf)==1195810338){break;} } | ||
| 278 | + for(i=119;i<128;i++){ buf[268]=(byte)i; if(sha1_32(buf)==-2034614349){break;} } | ||
| 279 | + for(i=-10;i<-1;i++){ buf[269]=(byte)i; if(sha1_32(buf)==-862145325){break;} } | ||
| 280 | + for(i=-117;i<-88;i++){ buf[270]=(byte)i; if(sha1_32(buf)==-19749693){break;} } | ||
| 281 | + for(i=-115;i<-107;i++){ buf[271]=(byte)i; if(sha1_32(buf)==192112580){break;} } | ||
| 282 | + for(i=-88;i<-70;i++){ buf[272]=(byte)i; if(sha1_32(buf)==1386559839){break;} } | ||
| 283 | + for(i=2;i<7;i++){ buf[273]=(byte)i; if(sha1_32(buf)==736786231){break;} } | ||
| 284 | + for(i=28;i<41;i++){ buf[274]=(byte)i; if(sha1_32(buf)==-306335518){break;} } | ||
| 285 | + for(i=45;i<59;i++){ buf[275]=(byte)i; if(sha1_32(buf)==-2138012495){break;} } | ||
| 286 | + for(i=9;i<25;i++){ buf[276]=(byte)i; if(sha1_32(buf)==1044901641){break;} } | ||
| 287 | + for(i=-53;i<-36;i++){ buf[277]=(byte)i; if(sha1_32(buf)==1923190960){break;} } | ||
| 288 | + for(i=54;i<65;i++){ buf[278]=(byte)i; if(sha1_32(buf)==-1008867744){break;} } | ||
| 289 | + for(i=-64;i<-53;i++){ buf[279]=(byte)i; if(sha1_32(buf)==-774020964){break;} } | ||
| 290 | + for(i=-7;i<-6;i++){ buf[280]=(byte)i; if(sha1_32(buf)==226805004){break;} } | ||
| 291 | + for(i=-121;i<-94;i++){ buf[281]=(byte)i; if(sha1_32(buf)==-171118540){break;} } | ||
| 292 | + for(i=66;i<91;i++){ buf[282]=(byte)i; if(sha1_32(buf)==-673022003){break;} } | ||
| 293 | + for(i=45;i<61;i++){ buf[283]=(byte)i; if(sha1_32(buf)==229107163){break;} } | ||
| 294 | + for(i=114;i<124;i++){ buf[284]=(byte)i; if(sha1_32(buf)==-1114126897){break;} } | ||
| 295 | + for(i=-8;i<4;i++){ buf[285]=(byte)i; if(sha1_32(buf)==-1028162051){break;} } | ||
| 296 | + for(i=111;i<115;i++){ buf[286]=(byte)i; if(sha1_32(buf)==-992740296){break;} } | ||
| 297 | + for(i=-108;i<-93;i++){ buf[287]=(byte)i; if(sha1_32(buf)==-791082205){break;} } | ||
| 298 | + for(i=-121;i<-107;i++){ buf[288]=(byte)i; if(sha1_32(buf)==-823010710){break;} } | ||
| 299 | + for(i=-68;i<-62;i++){ buf[289]=(byte)i; if(sha1_32(buf)==-244206690){break;} } | ||
| 300 | + for(i=-56;i<-39;i++){ buf[290]=(byte)i; if(sha1_32(buf)==911614492){break;} } | ||
| 301 | + for(i=-81;i<-51;i++){ buf[291]=(byte)i; if(sha1_32(buf)==1460819513){break;} } | ||
| 302 | + for(i=-71;i<-57;i++){ buf[292]=(byte)i; if(sha1_32(buf)==1334953191){break;} } | ||
| 303 | + for(i=19;i<38;i++){ buf[293]=(byte)i; if(sha1_32(buf)==-1821620999){break;} } | ||
| 304 | + for(i=-85;i<-69;i++){ buf[294]=(byte)i; if(sha1_32(buf)==1355767675){break;} } | ||
| 305 | + for(i=74;i<102;i++){ buf[295]=(byte)i; if(sha1_32(buf)==1143459566){break;} } | ||
| 306 | + for(i=105;i<118;i++){ buf[296]=(byte)i; if(sha1_32(buf)==-1408305208){break;} } | ||
| 307 | + for(i=-125;i<-114;i++){ buf[297]=(byte)i; if(sha1_32(buf)==600567065){break;} } | ||
| 308 | + for(i=-109;i<-96;i++){ buf[298]=(byte)i; if(sha1_32(buf)==-2001836571){break;} } | ||
| 309 | + for(i=-95;i<-79;i++){ buf[299]=(byte)i; if(sha1_32(buf)==847323478){break;} } | ||
| 310 | + for(i=-113;i<-97;i++){ buf[300]=(byte)i; if(sha1_32(buf)==-1014888205){break;} } | ||
| 311 | + for(i=68;i<91;i++){ buf[301]=(byte)i; if(sha1_32(buf)==125250210){break;} } | ||
| 312 | + for(i=-94;i<-86;i++){ buf[302]=(byte)i; if(sha1_32(buf)==-329214136){break;} } | ||
| 313 | + for(i=74;i<90;i++){ buf[303]=(byte)i; if(sha1_32(buf)==-553691710){break;} } | ||
| 314 | + for(i=11;i<16;i++){ buf[304]=(byte)i; if(sha1_32(buf)==-1126512818){break;} } | ||
| 315 | + for(i=-122;i<-103;i++){ buf[305]=(byte)i; if(sha1_32(buf)==-463956902){break;} } | ||
| 316 | + for(i=-76;i<-50;i++){ buf[306]=(byte)i; if(sha1_32(buf)==1642642556){break;} } | ||
| 317 | + for(i=-98;i<-75;i++){ buf[307]=(byte)i; if(sha1_32(buf)==102115368){break;} } | ||
| 318 | + for(i=24;i<48;i++){ buf[308]=(byte)i; if(sha1_32(buf)==-738084413){break;} } | ||
| 319 | + for(i=112;i<125;i++){ buf[309]=(byte)i; if(sha1_32(buf)==-1826214285){break;} } | ||
| 320 | + for(i=-95;i<-75;i++){ buf[310]=(byte)i; if(sha1_32(buf)==418463777){break;} } | ||
| 321 | + for(i=-31;i<-11;i++){ buf[311]=(byte)i; if(sha1_32(buf)==1588644779){break;} } | ||
| 322 | + for(i=95;i<114;i++){ buf[312]=(byte)i; if(sha1_32(buf)==1955993998){break;} } | ||
| 323 | + for(i=48;i<63;i++){ buf[313]=(byte)i; if(sha1_32(buf)==533524947){break;} } | ||
| 324 | + for(i=-106;i<-100;i++){ buf[314]=(byte)i; if(sha1_32(buf)==776241837){break;} } | ||
| 325 | + for(i=39;i<61;i++){ buf[315]=(byte)i; if(sha1_32(buf)==786512856){break;} } | ||
| 326 | + for(i=-38;i<-26;i++){ buf[316]=(byte)i; if(sha1_32(buf)==624413454){break;} } | ||
| 327 | + for(i=-5;i<17;i++){ buf[317]=(byte)i; if(sha1_32(buf)==-1992243122){break;} } | ||
| 328 | + for(i=2;i<25;i++){ buf[318]=(byte)i; if(sha1_32(buf)==1624129640){break;} } | ||
| 329 | + for(i=66;i<78;i++){ buf[319]=(byte)i; if(sha1_32(buf)==-1609121773){break;} } | ||
| 330 | + for(i=-80;i<-60;i++){ buf[320]=(byte)i; if(sha1_32(buf)==-1543176179){break;} } | ||
| 331 | + for(i=-85;i<-67;i++){ buf[321]=(byte)i; if(sha1_32(buf)==1727845517){break;} } | ||
| 332 | + for(i=8;i<29;i++){ buf[322]=(byte)i; if(sha1_32(buf)==1295717331){break;} } | ||
| 333 | + for(i=3;i<16;i++){ buf[323]=(byte)i; if(sha1_32(buf)==1691608951){break;} } | ||
| 334 | + for(i=-53;i<-24;i++){ buf[324]=(byte)i; if(sha1_32(buf)==1884306112){break;} } | ||
| 335 | + for(i=48;i<67;i++){ buf[325]=(byte)i; if(sha1_32(buf)==1212361245){break;} } | ||
| 336 | + for(i=-121;i<-99;i++){ buf[326]=(byte)i; if(sha1_32(buf)==1180206153){break;} } | ||
| 337 | + for(i=-17;i<8;i++){ buf[327]=(byte)i; if(sha1_32(buf)==-2460743){break;} } | ||
| 338 | + for(i=62;i<68;i++){ buf[328]=(byte)i; if(sha1_32(buf)==-402346103){break;} } | ||
| 339 | + for(i=-90;i<-68;i++){ buf[329]=(byte)i; if(sha1_32(buf)==1714528977){break;} } | ||
| 340 | + for(i=-80;i<-69;i++){ buf[330]=(byte)i; if(sha1_32(buf)==1777689203){break;} } | ||
| 341 | + for(i=34;i<35;i++){ buf[331]=(byte)i; if(sha1_32(buf)==-1202977605){break;} } | ||
| 342 | + for(i=55;i<59;i++){ buf[332]=(byte)i; if(sha1_32(buf)==669173026){break;} } | ||
| 343 | + for(i=-52;i<-48;i++){ buf[333]=(byte)i; if(sha1_32(buf)==640080540){break;} } | ||
| 344 | + for(i=61;i<72;i++){ buf[334]=(byte)i; if(sha1_32(buf)==1824153619){break;} } | ||
| 345 | + for(i=-9;i<16;i++){ buf[335]=(byte)i; if(sha1_32(buf)==1822383395){break;} } | ||
| 346 | + for(i=-2;i<24;i++){ buf[336]=(byte)i; if(sha1_32(buf)==1025638548){break;} } | ||
| 347 | + for(i=-116;i<-88;i++){ buf[337]=(byte)i; if(sha1_32(buf)==634184322){break;} } | ||
| 348 | + for(i=0;i<9;i++){ buf[338]=(byte)i; if(sha1_32(buf)==1136149430){break;} } | ||
| 349 | + for(i=-14;i<3;i++){ buf[339]=(byte)i; if(sha1_32(buf)==1678286422){break;} } | ||
| 350 | + for(i=-72;i<-56;i++){ buf[340]=(byte)i; if(sha1_32(buf)==1615974753){break;} } | ||
| 351 | + for(i=-15;i<-2;i++){ buf[341]=(byte)i; if(sha1_32(buf)==1578228752){break;} } | ||
| 352 | + for(i=-121;i<-102;i++){ buf[342]=(byte)i; if(sha1_32(buf)==-511799071){break;} } | ||
| 353 | + for(i=-84;i<-70;i++){ buf[343]=(byte)i; if(sha1_32(buf)==185376009){break;} } | ||
| 354 | + for(i=-128;i<-116;i++){ buf[344]=(byte)i; if(sha1_32(buf)==1032961404){break;} } | ||
| 355 | + for(i=92;i<106;i++){ buf[345]=(byte)i; if(sha1_32(buf)==377530681){break;} } | ||
| 356 | + for(i=-8;i<1;i++){ buf[346]=(byte)i; if(sha1_32(buf)==1651252799){break;} } | ||
| 357 | + for(i=29;i<45;i++){ buf[347]=(byte)i; if(sha1_32(buf)==-542761336){break;} } | ||
| 358 | + for(i=-84;i<-74;i++){ buf[348]=(byte)i; if(sha1_32(buf)==471011576){break;} } | ||
| 359 | + for(i=-32;i<-5;i++){ buf[349]=(byte)i; if(sha1_32(buf)==846454382){break;} } | ||
| 360 | + for(i=100;i<123;i++){ buf[350]=(byte)i; if(sha1_32(buf)==-1907007410){break;} } | ||
| 361 | + for(i=80;i<103;i++){ buf[351]=(byte)i; if(sha1_32(buf)==1745165720){break;} } | ||
| 362 | + for(i=85;i<101;i++){ buf[352]=(byte)i; if(sha1_32(buf)==-84585343){break;} } | ||
| 363 | + for(i=-74;i<-48;i++){ buf[353]=(byte)i; if(sha1_32(buf)==-1912530513){break;} } | ||
| 364 | + for(i=27;i<56;i++){ buf[354]=(byte)i; if(sha1_32(buf)==857859445){break;} } | ||
| 365 | + for(i=34;i<52;i++){ buf[355]=(byte)i; if(sha1_32(buf)==-1155079315){break;} } | ||
| 366 | + for(i=93;i<110;i++){ buf[356]=(byte)i; if(sha1_32(buf)==-1925930555){break;} } | ||
| 367 | + for(i=-75;i<-65;i++){ buf[357]=(byte)i; if(sha1_32(buf)==-687305261){break;} } | ||
| 368 | + for(i=-61;i<-53;i++){ buf[358]=(byte)i; if(sha1_32(buf)==-1526326443){break;} } | ||
| 369 | + for(i=95;i<107;i++){ buf[359]=(byte)i; if(sha1_32(buf)==-2078438685){break;} } | ||
| 370 | + for(i=-39;i<-27;i++){ buf[360]=(byte)i; if(sha1_32(buf)==-1543846085){break;} } | ||
| 371 | + for(i=13;i<26;i++){ buf[361]=(byte)i; if(sha1_32(buf)==19422004){break;} } | ||
| 372 | + for(i=-76;i<-69;i++){ buf[362]=(byte)i; if(sha1_32(buf)==-279372373){break;} } | ||
| 373 | + for(i=18;i<25;i++){ buf[363]=(byte)i; if(sha1_32(buf)==740299287){break;} } | ||
| 374 | + for(i=-41;i<-26;i++){ buf[364]=(byte)i; if(sha1_32(buf)==1474408721){break;} } | ||
| 375 | + for(i=60;i<78;i++){ buf[365]=(byte)i; if(sha1_32(buf)==-1855469950){break;} } | ||
| 376 | + for(i=-52;i<-43;i++){ buf[366]=(byte)i; if(sha1_32(buf)==1630525958){break;} } | ||
| 377 | + for(i=-102;i<-80;i++){ buf[367]=(byte)i; if(sha1_32(buf)==1102203459){break;} } | ||
| 378 | + for(i=-90;i<-85;i++){ buf[368]=(byte)i; if(sha1_32(buf)==409716612){break;} } | ||
| 379 | + for(i=117;i<128;i++){ buf[369]=(byte)i; if(sha1_32(buf)==-25857084){break;} } | ||
| 380 | + for(i=-81;i<-65;i++){ buf[370]=(byte)i; if(sha1_32(buf)==-1298915938){break;} } | ||
| 381 | + for(i=-82;i<-75;i++){ buf[371]=(byte)i; if(sha1_32(buf)==750720493){break;} } | ||
| 382 | + for(i=-128;i<-111;i++){ buf[372]=(byte)i; if(sha1_32(buf)==1086400582){break;} } | ||
| 383 | + for(i=18;i<36;i++){ buf[373]=(byte)i; if(sha1_32(buf)==-1927994188){break;} } | ||
| 384 | + for(i=-107;i<-89;i++){ buf[374]=(byte)i; if(sha1_32(buf)==-534720583){break;} } | ||
| 385 | + for(i=-7;i<17;i++){ buf[375]=(byte)i; if(sha1_32(buf)==1204634911){break;} } | ||
| 386 | + for(i=-122;i<-110;i++){ buf[376]=(byte)i; if(sha1_32(buf)==174539323){break;} } | ||
| 387 | + for(i=119;i<128;i++){ buf[377]=(byte)i; if(sha1_32(buf)==1114955726){break;} } | ||
| 388 | + for(i=-76;i<-67;i++){ buf[378]=(byte)i; if(sha1_32(buf)==-237844818){break;} } | ||
| 389 | + for(i=-97;i<-78;i++){ buf[379]=(byte)i; if(sha1_32(buf)==967352862){break;} } | ||
| 390 | + for(i=-120;i<-107;i++){ buf[380]=(byte)i; if(sha1_32(buf)==-684638680){break;} } | ||
| 391 | + for(i=-48;i<-28;i++){ buf[381]=(byte)i; if(sha1_32(buf)==-505104165){break;} } | ||
| 392 | + for(i=-108;i<-99;i++){ buf[382]=(byte)i; if(sha1_32(buf)==-1291930280){break;} } | ||
| 393 | + for(i=-15;i<2;i++){ buf[383]=(byte)i; if(sha1_32(buf)==277054161){break;} } | ||
| 394 | + for(i=-62;i<-34;i++){ buf[384]=(byte)i; if(sha1_32(buf)==-616175923){break;} } | ||
| 395 | + for(i=-23;i<-6;i++){ buf[385]=(byte)i; if(sha1_32(buf)==-950489604){break;} } | ||
| 396 | + for(i=-113;i<-84;i++){ buf[386]=(byte)i; if(sha1_32(buf)==1107129029){break;} } | ||
| 397 | + for(i=126;i<128;i++){ buf[387]=(byte)i; if(sha1_32(buf)==-538181099){break;} } | ||
| 398 | + for(i=114;i<119;i++){ buf[388]=(byte)i; if(sha1_32(buf)==-2037193922){break;} } | ||
| 399 | + for(i=75;i<105;i++){ buf[389]=(byte)i; if(sha1_32(buf)==-182513800){break;} } | ||
| 400 | + for(i=90;i<97;i++){ buf[390]=(byte)i; if(sha1_32(buf)==-812020454){break;} } | ||
| 401 | + for(i=-55;i<-46;i++){ buf[391]=(byte)i; if(sha1_32(buf)==-44492374){break;} } | ||
| 402 | + for(i=-110;i<-83;i++){ buf[392]=(byte)i; if(sha1_32(buf)==1816459165){break;} } | ||
| 403 | + for(i=108;i<117;i++){ buf[393]=(byte)i; if(sha1_32(buf)==187922115){break;} } | ||
| 404 | + for(i=-103;i<-97;i++){ buf[394]=(byte)i; if(sha1_32(buf)==907949146){break;} } | ||
| 405 | + for(i=88;i<101;i++){ buf[395]=(byte)i; if(sha1_32(buf)==-241323617){break;} } | ||
| 406 | + for(i=-42;i<-19;i++){ buf[396]=(byte)i; if(sha1_32(buf)==113209905){break;} } | ||
| 407 | + for(i=-89;i<-72;i++){ buf[397]=(byte)i; if(sha1_32(buf)==2067435953){break;} } | ||
| 408 | + for(i=-99;i<-82;i++){ buf[398]=(byte)i; if(sha1_32(buf)==55736715){break;} } | ||
| 409 | + for(i=-35;i<-24;i++){ buf[399]=(byte)i; if(sha1_32(buf)==-572027631){break;} } | ||
| 410 | + for(i=99;i<115;i++){ buf[400]=(byte)i; if(sha1_32(buf)==489975963){break;} } | ||
| 411 | + for(i=-14;i<3;i++){ buf[401]=(byte)i; if(sha1_32(buf)==-698740722){break;} } | ||
| 412 | + for(i=-127;i<-113;i++){ buf[402]=(byte)i; if(sha1_32(buf)==1789566105){break;} } | ||
| 413 | + for(i=42;i<46;i++){ buf[403]=(byte)i; if(sha1_32(buf)==1331901651){break;} } | ||
| 414 | + for(i=-86;i<-75;i++){ buf[404]=(byte)i; if(sha1_32(buf)==1576926411){break;} } | ||
| 415 | + for(i=-78;i<-62;i++){ buf[405]=(byte)i; if(sha1_32(buf)==172889634){break;} } | ||
| 416 | + for(i=-128;i<-109;i++){ buf[406]=(byte)i; if(sha1_32(buf)==-1464515411){break;} } | ||
| 417 | + for(i=-127;i<-107;i++){ buf[407]=(byte)i; if(sha1_32(buf)==1052444314){break;} } | ||
| 418 | + for(i=-128;i<-114;i++){ buf[408]=(byte)i; if(sha1_32(buf)==1791553224){break;} } | ||
| 419 | + for(i=-16;i<0;i++){ buf[409]=(byte)i; if(sha1_32(buf)==-1541546883){break;} } | ||
| 420 | + for(i=8;i<28;i++){ buf[410]=(byte)i; if(sha1_32(buf)==-1764105915){break;} } | ||
| 421 | + for(i=-38;i<-29;i++){ buf[411]=(byte)i; if(sha1_32(buf)==-779519121){break;} } | ||
| 422 | + for(i=21;i<39;i++){ buf[412]=(byte)i; if(sha1_32(buf)==-56869024){break;} } | ||
| 423 | + for(i=59;i<77;i++){ buf[413]=(byte)i; if(sha1_32(buf)==425929132){break;} } | ||
| 424 | + for(i=-4;i<13;i++){ buf[414]=(byte)i; if(sha1_32(buf)==425929132){break;} } | ||
| 425 | + for(i=-86;i<-70;i++){ buf[415]=(byte)i; if(sha1_32(buf)==2091378970){break;} } | ||
| 426 | + for(i=-107;i<-78;i++){ buf[416]=(byte)i; if(sha1_32(buf)==715816020){break;} } | ||
| 427 | + for(i=110;i<111;i++){ buf[417]=(byte)i; if(sha1_32(buf)==-332543611){break;} } | ||
| 428 | + for(i=91;i<104;i++){ buf[418]=(byte)i; if(sha1_32(buf)==-946788202){break;} } | ||
| 429 | + for(i=-97;i<-86;i++){ buf[419]=(byte)i; if(sha1_32(buf)==-2033175352){break;} } | ||
| 430 | + for(i=-35;i<-18;i++){ buf[420]=(byte)i; if(sha1_32(buf)==-246590053){break;} } | ||
| 431 | + for(i=-123;i<-110;i++){ buf[421]=(byte)i; if(sha1_32(buf)==-1382635524){break;} } | ||
| 432 | + for(i=67;i<69;i++){ buf[422]=(byte)i; if(sha1_32(buf)==-1154098524){break;} } | ||
| 433 | + for(i=-1;i<20;i++){ buf[423]=(byte)i; if(sha1_32(buf)==20529329){break;} } | ||
| 434 | + for(i=-5;i<4;i++){ buf[424]=(byte)i; if(sha1_32(buf)==427874842){break;} } | ||
| 435 | + for(i=23;i<45;i++){ buf[425]=(byte)i; if(sha1_32(buf)==1984203304){break;} } | ||
| 436 | + for(i=-67;i<-59;i++){ buf[426]=(byte)i; if(sha1_32(buf)==1838578673){break;} } | ||
| 437 | + for(i=102;i<119;i++){ buf[427]=(byte)i; if(sha1_32(buf)==1743854446){break;} } | ||
| 438 | + for(i=6;i<30;i++){ buf[428]=(byte)i; if(sha1_32(buf)==1226065927){break;} } | ||
| 439 | + for(i=-10;i<3;i++){ buf[429]=(byte)i; if(sha1_32(buf)==912871040){break;} } | ||
| 440 | + for(i=-25;i<-18;i++){ buf[430]=(byte)i; if(sha1_32(buf)==1607455553){break;} } | ||
| 441 | + for(i=-1;i<21;i++){ buf[431]=(byte)i; if(sha1_32(buf)==-1944738969){break;} } | ||
| 442 | + for(i=-2;i<18;i++){ buf[432]=(byte)i; if(sha1_32(buf)==-1139871537){break;} } | ||
| 443 | + for(i=43;i<63;i++){ buf[433]=(byte)i; if(sha1_32(buf)==1887627766){break;} } | ||
| 444 | + for(i=-49;i<-24;i++){ buf[434]=(byte)i; if(sha1_32(buf)==453968429){break;} } | ||
| 445 | + for(i=2;i<10;i++){ buf[435]=(byte)i; if(sha1_32(buf)==357645748){break;} } | ||
| 446 | + for(i=-72;i<-57;i++){ buf[436]=(byte)i; if(sha1_32(buf)==-1726211862){break;} } | ||
| 447 | + for(i=31;i<54;i++){ buf[437]=(byte)i; if(sha1_32(buf)==-68007584){break;} } | ||
| 448 | + for(i=25;i<47;i++){ buf[438]=(byte)i; if(sha1_32(buf)==-95745808){break;} } | ||
| 449 | + for(i=-54;i<-31;i++){ buf[439]=(byte)i; if(sha1_32(buf)==-1899274323){break;} } | ||
| 450 | + for(i=-82;i<-55;i++){ buf[440]=(byte)i; if(sha1_32(buf)==850404918){break;} } | ||
| 451 | + for(i=-116;i<-103;i++){ buf[441]=(byte)i; if(sha1_32(buf)==-1957213709){break;} } | ||
| 452 | + for(i=-57;i<-54;i++){ buf[442]=(byte)i; if(sha1_32(buf)==1667174153){break;} } | ||
| 453 | + for(i=-5;i<11;i++){ buf[443]=(byte)i; if(sha1_32(buf)==-1029321236){break;} } | ||
| 454 | + for(i=-23;i<-13;i++){ buf[444]=(byte)i; if(sha1_32(buf)==77423356){break;} } | ||
| 455 | + for(i=92;i<102;i++){ buf[445]=(byte)i; if(sha1_32(buf)==-1274171984){break;} } | ||
| 456 | + for(i=-128;i<-110;i++){ buf[446]=(byte)i; if(sha1_32(buf)==-1234675273){break;} } | ||
| 457 | + for(i=31;i<51;i++){ buf[447]=(byte)i; if(sha1_32(buf)==161226207){break;} } | ||
| 458 | + for(i=107;i<128;i++){ buf[448]=(byte)i; if(sha1_32(buf)==-1943028924){break;} } | ||
| 459 | + for(i=26;i<38;i++){ buf[449]=(byte)i; if(sha1_32(buf)==-1790880854){break;} } | ||
| 460 | + for(i=77;i<105;i++){ buf[450]=(byte)i; if(sha1_32(buf)==1901380983){break;} } | ||
| 461 | + for(i=-38;i<-26;i++){ buf[451]=(byte)i; if(sha1_32(buf)==559462581){break;} } | ||
| 462 | + for(i=-50;i<-29;i++){ buf[452]=(byte)i; if(sha1_32(buf)==1643976942){break;} } | ||
| 463 | + for(i=55;i<72;i++){ buf[453]=(byte)i; if(sha1_32(buf)==-956745419){break;} } | ||
| 464 | + for(i=-1;i<0;i++){ buf[454]=(byte)i; if(sha1_32(buf)==473268167){break;} } | ||
| 465 | + for(i=-61;i<-40;i++){ buf[455]=(byte)i; if(sha1_32(buf)==1817956834){break;} } | ||
| 466 | + for(i=14;i<38;i++){ buf[456]=(byte)i; if(sha1_32(buf)==373284758){break;} } | ||
| 467 | + for(i=94;i<107;i++){ buf[457]=(byte)i; if(sha1_32(buf)==1452037098){break;} } | ||
| 468 | + for(i=-45;i<-29;i++){ buf[458]=(byte)i; if(sha1_32(buf)==610595923){break;} } | ||
| 469 | + for(i=-128;i<-110;i++){ buf[459]=(byte)i; if(sha1_32(buf)==458490632){break;} } | ||
| 470 | + for(i=-120;i<-103;i++){ buf[460]=(byte)i; if(sha1_32(buf)==-95267097){break;} } | ||
| 471 | + for(i=-78;i<-58;i++){ buf[461]=(byte)i; if(sha1_32(buf)==-579208817){break;} } | ||
| 472 | + for(i=84;i<99;i++){ buf[462]=(byte)i; if(sha1_32(buf)==-733951747){break;} } | ||
| 473 | + for(i=16;i<19;i++){ buf[463]=(byte)i; if(sha1_32(buf)==-1632302517){break;} } | ||
| 474 | + for(i=-127;i<-103;i++){ buf[464]=(byte)i; if(sha1_32(buf)==-513335490){break;} } | ||
| 475 | + for(i=-128;i<-98;i++){ buf[465]=(byte)i; if(sha1_32(buf)==-711711599){break;} } | ||
| 476 | + for(i=-97;i<-81;i++){ buf[466]=(byte)i; if(sha1_32(buf)==-83825714){break;} } | ||
| 477 | + for(i=58;i<74;i++){ buf[467]=(byte)i; if(sha1_32(buf)==889359389){break;} } | ||
| 478 | + for(i=3;i<12;i++){ buf[468]=(byte)i; if(sha1_32(buf)==355751750){break;} } | ||
| 479 | + for(i=20;i<43;i++){ buf[469]=(byte)i; if(sha1_32(buf)==-1028898992){break;} } | ||
| 480 | + for(i=31;i<46;i++){ buf[470]=(byte)i; if(sha1_32(buf)==-1859242432){break;} } | ||
| 481 | + for(i=-128;i<-110;i++){ buf[471]=(byte)i; if(sha1_32(buf)==877304689){break;} } | ||
| 482 | + for(i=-68;i<-52;i++){ buf[472]=(byte)i; if(sha1_32(buf)==-2146685493){break;} } | ||
| 483 | + for(i=102;i<126;i++){ buf[473]=(byte)i; if(sha1_32(buf)==-1348162367){break;} } | ||
| 484 | + for(i=-56;i<-36;i++){ buf[474]=(byte)i; if(sha1_32(buf)==1856485533){break;} } | ||
| 485 | + for(i=12;i<25;i++){ buf[475]=(byte)i; if(sha1_32(buf)==-503448029){break;} } | ||
| 486 | + for(i=10;i<29;i++){ buf[476]=(byte)i; if(sha1_32(buf)==-3171719){break;} } | ||
| 487 | + for(i=-60;i<-53;i++){ buf[477]=(byte)i; if(sha1_32(buf)==1910614362){break;} } | ||
| 488 | + for(i=-96;i<-73;i++){ buf[478]=(byte)i; if(sha1_32(buf)==-2130635913){break;} } | ||
| 489 | + for(i=-6;i<11;i++){ buf[479]=(byte)i; if(sha1_32(buf)==-802858346){break;} } | ||
| 490 | + for(i=-128;i<-122;i++){ buf[480]=(byte)i; if(sha1_32(buf)==473346464){break;} } | ||
| 491 | + for(i=24;i<40;i++){ buf[481]=(byte)i; if(sha1_32(buf)==-612014560){break;} } | ||
| 492 | + for(i=7;i<25;i++){ buf[482]=(byte)i; if(sha1_32(buf)==-2095191461){break;} } | ||
| 493 | + for(i=12;i<13;i++){ buf[483]=(byte)i; if(sha1_32(buf)==721606211){break;} } | ||
| 494 | + for(i=82;i<103;i++){ buf[484]=(byte)i; if(sha1_32(buf)==984136015){break;} } | ||
| 495 | + for(i=30;i<43;i++){ buf[485]=(byte)i; if(sha1_32(buf)==-105220005){break;} } | ||
| 496 | + for(i=-2;i<14;i++){ buf[486]=(byte)i; if(sha1_32(buf)==-1652172814){break;} } | ||
| 497 | + for(i=-63;i<-56;i++){ buf[487]=(byte)i; if(sha1_32(buf)==2116560115){break;} } | ||
| 498 | + for(i=-63;i<-33;i++){ buf[488]=(byte)i; if(sha1_32(buf)==308886337){break;} } | ||
| 499 | + for(i=120;i<122;i++){ buf[489]=(byte)i; if(sha1_32(buf)==224064501){break;} } | ||
| 500 | + for(i=101;i<111;i++){ buf[490]=(byte)i; if(sha1_32(buf)==1244859591){break;} } | ||
| 501 | + for(i=-121;i<-101;i++){ buf[491]=(byte)i; if(sha1_32(buf)==1357038436){break;} } | ||
| 502 | + for(i=35;i<48;i++){ buf[492]=(byte)i; if(sha1_32(buf)==377355340){break;} } | ||
| 503 | + for(i=80;i<85;i++){ buf[493]=(byte)i; if(sha1_32(buf)==503003140){break;} } | ||
| 504 | + for(i=-27;i<-20;i++){ buf[494]=(byte)i; if(sha1_32(buf)==-1133747173){break;} } | ||
| 505 | + for(i=-62;i<-35;i++){ buf[495]=(byte)i; if(sha1_32(buf)==-2078478488){break;} } | ||
| 506 | + for(i=41;i<50;i++){ buf[496]=(byte)i; if(sha1_32(buf)==-559579455){break;} } | ||
| 507 | + for(i=123;i<128;i++){ buf[497]=(byte)i; if(sha1_32(buf)==-485331920){break;} } | ||
| 508 | + for(i=-85;i<-67;i++){ buf[498]=(byte)i; if(sha1_32(buf)==-804307943){break;} } | ||
| 509 | + for(i=71;i<98;i++){ buf[499]=(byte)i; if(sha1_32(buf)==1066431810){break;} } | ||
| 510 | + for(i=11;i<34;i++){ buf[500]=(byte)i; if(sha1_32(buf)==-1244557380){break;} } | ||
| 511 | + for(i=-5;i<9;i++){ buf[501]=(byte)i; if(sha1_32(buf)==-1244557380){break;} } | ||
| 512 | + for(i=118;i<128;i++){ buf[502]=(byte)i; if(sha1_32(buf)==341556018){break;} } | ||
| 513 | + for(i=41;i<56;i++){ buf[503]=(byte)i; if(sha1_32(buf)==-4510395){break;} } | ||
| 514 | + for(i=-124;i<-111;i++){ buf[504]=(byte)i; if(sha1_32(buf)==-1188338319){break;} } | ||
| 515 | + for(i=-2;i<12;i++){ buf[505]=(byte)i; if(sha1_32(buf)==-1188338319){break;} } | ||
| 516 | + for(i=4;i<15;i++){ buf[506]=(byte)i; if(sha1_32(buf)==350730014){break;} } | ||
| 517 | + for(i=-64;i<-56;i++){ buf[507]=(byte)i; if(sha1_32(buf)==-1837119620){break;} } | ||
| 518 | + for(i=-52;i<-40;i++){ buf[508]=(byte)i; if(sha1_32(buf)==-1990239896){break;} } | ||
| 519 | + for(i=-30;i<-25;i++){ buf[509]=(byte)i; if(sha1_32(buf)==-937158971){break;} } | ||
| 520 | + for(i=-13;i<7;i++){ buf[510]=(byte)i; if(sha1_32(buf)==-937158971){break;} } | ||
| 521 | + for(i=-94;i<-77;i++){ buf[511]=(byte)i; if(sha1_32(buf)==-847141927){break;} } | ||
| 522 | + for(i=-70;i<-50;i++){ buf[512]=(byte)i; if(sha1_32(buf)==-1659035288){break;} } | ||
| 523 | + for(i=-128;i<-118;i++){ buf[513]=(byte)i; if(sha1_32(buf)==1180575013){break;} } | ||
| 524 | + for(i=73;i<100;i++){ buf[514]=(byte)i; if(sha1_32(buf)==57755191){break;} } | ||
| 525 | + for(i=-128;i<-119;i++){ buf[515]=(byte)i; if(sha1_32(buf)==1140968241){break;} } | ||
| 526 | + for(i=-86;i<-62;i++){ buf[516]=(byte)i; if(sha1_32(buf)==997058755){break;} } | ||
| 527 | + for(i=-88;i<-73;i++){ buf[517]=(byte)i; if(sha1_32(buf)==-942491502){break;} } | ||
| 528 | + for(i=43;i<59;i++){ buf[518]=(byte)i; if(sha1_32(buf)==1059613876){break;} } | ||
| 529 | + for(i=86;i<115;i++){ buf[519]=(byte)i; if(sha1_32(buf)==116084474){break;} } | ||
| 530 | + for(i=24;i<37;i++){ buf[520]=(byte)i; if(sha1_32(buf)==698055700){break;} } | ||
| 531 | + for(i=-6;i<9;i++){ buf[521]=(byte)i; if(sha1_32(buf)==1765018695){break;} } | ||
| 532 | + for(i=-34;i<-14;i++){ buf[522]=(byte)i; if(sha1_32(buf)==1665674686){break;} } | ||
| 533 | + for(i=62;i<88;i++){ buf[523]=(byte)i; if(sha1_32(buf)==-2033372811){break;} } | ||
| 534 | + for(i=9;i<32;i++){ buf[524]=(byte)i; if(sha1_32(buf)==-1023718857){break;} } | ||
| 535 | + for(i=111;i<125;i++){ buf[525]=(byte)i; if(sha1_32(buf)==-643259574){break;} } | ||
| 536 | + for(i=-85;i<-68;i++){ buf[526]=(byte)i; if(sha1_32(buf)==-533470764){break;} } | ||
| 537 | + for(i=9;i<18;i++){ buf[527]=(byte)i; if(sha1_32(buf)==773071802){break;} } | ||
| 538 | + for(i=14;i<40;i++){ buf[528]=(byte)i; if(sha1_32(buf)==-144655867){break;} } | ||
| 539 | + for(i=111;i<114;i++){ buf[529]=(byte)i; if(sha1_32(buf)==542083472){break;} } | ||
| 540 | + for(i=84;i<103;i++){ buf[530]=(byte)i; if(sha1_32(buf)==-725989297){break;} } | ||
| 541 | + for(i=57;i<77;i++){ buf[531]=(byte)i; if(sha1_32(buf)==-814869396){break;} } | ||
| 542 | + for(i=-90;i<-70;i++){ buf[532]=(byte)i; if(sha1_32(buf)==-1858873866){break;} } | ||
| 543 | + for(i=-67;i<-57;i++){ buf[533]=(byte)i; if(sha1_32(buf)==1735718354){break;} } | ||
| 544 | + for(i=-44;i<-41;i++){ buf[534]=(byte)i; if(sha1_32(buf)==-1434914429){break;} } | ||
| 545 | + for(i=90;i<111;i++){ buf[535]=(byte)i; if(sha1_32(buf)==232655445){break;} } | ||
| 546 | + for(i=67;i<74;i++){ buf[536]=(byte)i; if(sha1_32(buf)==1538118481){break;} } | ||
| 547 | + for(i=-115;i<-104;i++){ buf[537]=(byte)i; if(sha1_32(buf)==-429140164){break;} } | ||
| 548 | + for(i=108;i<124;i++){ buf[538]=(byte)i; if(sha1_32(buf)==-1546073184){break;} } | ||
| 549 | + for(i=-8;i<13;i++){ buf[539]=(byte)i; if(sha1_32(buf)==1351199880){break;} } | ||
| 550 | + for(i=-4;i<8;i++){ buf[540]=(byte)i; if(sha1_32(buf)==991784875){break;} } | ||
| 551 | + for(i=103;i<114;i++){ buf[541]=(byte)i; if(sha1_32(buf)==2091841684){break;} } | ||
| 552 | + for(i=53;i<77;i++){ buf[542]=(byte)i; if(sha1_32(buf)==1366258579){break;} } | ||
| 553 | + for(i=-81;i<-71;i++){ buf[543]=(byte)i; if(sha1_32(buf)==1188879873){break;} } | ||
| 554 | + for(i=-43;i<-27;i++){ buf[544]=(byte)i; if(sha1_32(buf)==-1738512036){break;} } | ||
| 555 | + for(i=21;i<32;i++){ buf[545]=(byte)i; if(sha1_32(buf)==-2433973){break;} } | ||
| 556 | + for(i=-40;i<-34;i++){ buf[546]=(byte)i; if(sha1_32(buf)==11300465){break;} } | ||
| 557 | + for(i=64;i<69;i++){ buf[547]=(byte)i; if(sha1_32(buf)==-1124164457){break;} } | ||
| 558 | + for(i=64;i<76;i++){ buf[548]=(byte)i; if(sha1_32(buf)==-1714966521){break;} } | ||
| 559 | + for(i=-43;i<-26;i++){ buf[549]=(byte)i; if(sha1_32(buf)==1380686681){break;} } | ||
| 560 | + for(i=-37;i<-22;i++){ buf[550]=(byte)i; if(sha1_32(buf)==328913474){break;} } | ||
| 561 | + for(i=-59;i<-46;i++){ buf[551]=(byte)i; if(sha1_32(buf)==345983384){break;} } | ||
| 562 | + for(i=-75;i<-67;i++){ buf[552]=(byte)i; if(sha1_32(buf)==-2107355969){break;} } | ||
| 563 | + for(i=-101;i<-89;i++){ buf[553]=(byte)i; if(sha1_32(buf)==-29661160){break;} } | ||
| 564 | + for(i=110;i<128;i++){ buf[554]=(byte)i; if(sha1_32(buf)==-1242723550){break;} } | ||
| 565 | + for(i=-69;i<-58;i++){ buf[555]=(byte)i; if(sha1_32(buf)==-662514361){break;} } | ||
| 566 | + for(i=-58;i<-43;i++){ buf[556]=(byte)i; if(sha1_32(buf)==971339050){break;} } | ||
| 567 | + for(i=-27;i<-23;i++){ buf[557]=(byte)i; if(sha1_32(buf)==-184135978){break;} } | ||
| 568 | + for(i=82;i<104;i++){ buf[558]=(byte)i; if(sha1_32(buf)==304236881){break;} } | ||
| 569 | + for(i=88;i<101;i++){ buf[559]=(byte)i; if(sha1_32(buf)==2114714768){break;} } | ||
| 570 | + for(i=127;i<128;i++){ buf[560]=(byte)i; if(sha1_32(buf)==-2141541585){break;} } | ||
| 571 | + for(i=-109;i<-89;i++){ buf[561]=(byte)i; if(sha1_32(buf)==-621751783){break;} } | ||
| 572 | + for(i=37;i<41;i++){ buf[562]=(byte)i; if(sha1_32(buf)==-560435744){break;} } | ||
| 573 | + for(i=7;i<32;i++){ buf[563]=(byte)i; if(sha1_32(buf)==-965190030){break;} } | ||
| 574 | + for(i=33;i<53;i++){ buf[564]=(byte)i; if(sha1_32(buf)==-1721418526){break;} } | ||
| 575 | + for(i=-105;i<-81;i++){ buf[565]=(byte)i; if(sha1_32(buf)==602396706){break;} } | ||
| 576 | + for(i=-98;i<-94;i++){ buf[566]=(byte)i; if(sha1_32(buf)==-1587448780){break;} } | ||
| 577 | + for(i=-38;i<-17;i++){ buf[567]=(byte)i; if(sha1_32(buf)==-1378183103){break;} } | ||
| 578 | + for(i=76;i<94;i++){ buf[568]=(byte)i; if(sha1_32(buf)==131513627){break;} } | ||
| 579 | + for(i=-49;i<-40;i++){ buf[569]=(byte)i; if(sha1_32(buf)==-210267820){break;} } | ||
| 580 | + for(i=80;i<102;i++){ buf[570]=(byte)i; if(sha1_32(buf)==585402756){break;} } | ||
| 581 | + for(i=65;i<75;i++){ buf[571]=(byte)i; if(sha1_32(buf)==1759516852){break;} } | ||
| 582 | + for(i=4;i<12;i++){ buf[572]=(byte)i; if(sha1_32(buf)==-216095742){break;} } | ||
| 583 | + for(i=49;i<55;i++){ buf[573]=(byte)i; if(sha1_32(buf)==-54029906){break;} } | ||
| 584 | + for(i=0;i<19;i++){ buf[574]=(byte)i; if(sha1_32(buf)==540804074){break;} } | ||
| 585 | + for(i=66;i<92;i++){ buf[575]=(byte)i; if(sha1_32(buf)==-1677520683){break;} } | ||
| 586 | + for(i=-85;i<-70;i++){ buf[576]=(byte)i; if(sha1_32(buf)==1776357716){break;} } | ||
| 587 | + for(i=60;i<75;i++){ buf[577]=(byte)i; if(sha1_32(buf)==1098013748){break;} } | ||
| 588 | + for(i=-24;i<-4;i++){ buf[578]=(byte)i; if(sha1_32(buf)==-1064239134){break;} } | ||
| 589 | + for(i=71;i<91;i++){ buf[579]=(byte)i; if(sha1_32(buf)==-2077890881){break;} } | ||
| 590 | + for(i=-128;i<-104;i++){ buf[580]=(byte)i; if(sha1_32(buf)==-839823746){break;} } | ||
| 591 | + for(i=89;i<105;i++){ buf[581]=(byte)i; if(sha1_32(buf)==-243455362){break;} } | ||
| 592 | + for(i=65;i<84;i++){ buf[582]=(byte)i; if(sha1_32(buf)==-725175448){break;} } | ||
| 593 | + for(i=-69;i<-49;i++){ buf[583]=(byte)i; if(sha1_32(buf)==-1871446807){break;} } | ||
| 594 | + for(i=-104;i<-90;i++){ buf[584]=(byte)i; if(sha1_32(buf)==946379292){break;} } | ||
| 595 | + for(i=-60;i<-48;i++){ buf[585]=(byte)i; if(sha1_32(buf)==127200092){break;} } | ||
| 596 | + for(i=42;i<46;i++){ buf[586]=(byte)i; if(sha1_32(buf)==-443535401){break;} } | ||
| 597 | + for(i=59;i<71;i++){ buf[587]=(byte)i; if(sha1_32(buf)==2104547342){break;} } | ||
| 598 | + for(i=7;i<24;i++){ buf[588]=(byte)i; if(sha1_32(buf)==1746305519){break;} } | ||
| 599 | + for(i=-29;i<-19;i++){ buf[589]=(byte)i; if(sha1_32(buf)==-738940376){break;} } | ||
| 600 | + for(i=-115;i<-107;i++){ buf[590]=(byte)i; if(sha1_32(buf)==-2080725064){break;} } | ||
| 601 | + for(i=31;i<44;i++){ buf[591]=(byte)i; if(sha1_32(buf)==366188013){break;} } | ||
| 602 | + for(i=91;i<97;i++){ buf[592]=(byte)i; if(sha1_32(buf)==-400947442){break;} } | ||
| 603 | + for(i=23;i<44;i++){ buf[593]=(byte)i; if(sha1_32(buf)==1368323480){break;} } | ||
| 604 | + for(i=10;i<34;i++){ buf[594]=(byte)i; if(sha1_32(buf)==1370591272){break;} } | ||
| 605 | + for(i=-31;i<-19;i++){ buf[595]=(byte)i; if(sha1_32(buf)==-1374786213){break;} } | ||
| 606 | + for(i=-111;i<-98;i++){ buf[596]=(byte)i; if(sha1_32(buf)==-986947413){break;} } | ||
| 607 | + for(i=47;i<58;i++){ buf[597]=(byte)i; if(sha1_32(buf)==1362964963){break;} } | ||
| 608 | + for(i=84;i<92;i++){ buf[598]=(byte)i; if(sha1_32(buf)==-596854428){break;} } | ||
| 609 | + for(i=127;i<128;i++){ buf[599]=(byte)i; if(sha1_32(buf)==-1281726988){break;} } | ||
| 610 | + for(i=60;i<78;i++){ buf[600]=(byte)i; if(sha1_32(buf)==897760766){break;} } | ||
| 611 | + for(i=-49;i<-44;i++){ buf[601]=(byte)i; if(sha1_32(buf)==-1455904051){break;} } | ||
| 612 | + for(i=-93;i<-74;i++){ buf[602]=(byte)i; if(sha1_32(buf)==326216376){break;} } | ||
| 613 | + for(i=47;i<56;i++){ buf[603]=(byte)i; if(sha1_32(buf)==466041345){break;} } | ||
| 614 | + for(i=114;i<121;i++){ buf[604]=(byte)i; if(sha1_32(buf)==-694704414){break;} } | ||
| 615 | + for(i=11;i<36;i++){ buf[605]=(byte)i; if(sha1_32(buf)==487288727){break;} } | ||
| 616 | + for(i=-102;i<-95;i++){ buf[606]=(byte)i; if(sha1_32(buf)==-516291533){break;} } | ||
| 617 | + for(i=11;i<30;i++){ buf[607]=(byte)i; if(sha1_32(buf)==-1391687305){break;} } | ||
| 618 | + for(i=-62;i<-42;i++){ buf[608]=(byte)i; if(sha1_32(buf)==-662115007){break;} } | ||
| 619 | + for(i=-95;i<-83;i++){ buf[609]=(byte)i; if(sha1_32(buf)==-1503502125){break;} } | ||
| 620 | + for(i=-70;i<-54;i++){ buf[610]=(byte)i; if(sha1_32(buf)==-2116589672){break;} } | ||
| 621 | + for(i=-66;i<-60;i++){ buf[611]=(byte)i; if(sha1_32(buf)==-2045800164){break;} } | ||
| 622 | + for(i=-103;i<-83;i++){ buf[612]=(byte)i; if(sha1_32(buf)==1023918650){break;} } | ||
| 623 | + for(i=-103;i<-83;i++){ buf[613]=(byte)i; if(sha1_32(buf)==-1024090408){break;} } | ||
| 624 | + for(i=-7;i<13;i++){ buf[614]=(byte)i; if(sha1_32(buf)==-1024090408){break;} } | ||
| 625 | + for(i=-48;i<-25;i++){ buf[615]=(byte)i; if(sha1_32(buf)==-186367657){break;} } | ||
| 626 | + for(i=-61;i<-51;i++){ buf[616]=(byte)i; if(sha1_32(buf)==-1280745075){break;} } | ||
| 627 | + for(i=62;i<78;i++){ buf[617]=(byte)i; if(sha1_32(buf)==-817832341){break;} } | ||
| 628 | + for(i=-128;i<-102;i++){ buf[618]=(byte)i; if(sha1_32(buf)==341473258){break;} } | ||
| 629 | + for(i=32;i<56;i++){ buf[619]=(byte)i; if(sha1_32(buf)==-513466697){break;} } | ||
| 630 | + for(i=-103;i<-93;i++){ buf[620]=(byte)i; if(sha1_32(buf)==1906473064){break;} } | ||
| 631 | + for(i=-47;i<-27;i++){ buf[621]=(byte)i; if(sha1_32(buf)==549306033){break;} } | ||
| 632 | + for(i=1;i<18;i++){ buf[622]=(byte)i; if(sha1_32(buf)==200841762){break;} } | ||
| 633 | + for(i=69;i<92;i++){ buf[623]=(byte)i; if(sha1_32(buf)==-757575212){break;} } | ||
| 634 | + for(i=-64;i<-55;i++){ buf[624]=(byte)i; if(sha1_32(buf)==2068963518){break;} } | ||
| 635 | + for(i=49;i<64;i++){ buf[625]=(byte)i; if(sha1_32(buf)==40423320){break;} } | ||
| 636 | + for(i=11;i<30;i++){ buf[626]=(byte)i; if(sha1_32(buf)==-2018496342){break;} } | ||
| 637 | + for(i=-46;i<-30;i++){ buf[627]=(byte)i; if(sha1_32(buf)==1567810667){break;} } | ||
| 638 | + for(i=-107;i<-93;i++){ buf[628]=(byte)i; if(sha1_32(buf)==1898294265){break;} } | ||
| 639 | + for(i=-128;i<-116;i++){ buf[629]=(byte)i; if(sha1_32(buf)==-1437582410){break;} } | ||
| 640 | + for(i=72;i<88;i++){ buf[630]=(byte)i; if(sha1_32(buf)==479964404){break;} } | ||
| 641 | + for(i=114;i<128;i++){ buf[631]=(byte)i; if(sha1_32(buf)==1846334071){break;} } | ||
| 642 | + for(i=28;i<48;i++){ buf[632]=(byte)i; if(sha1_32(buf)==-1160775469){break;} } | ||
| 643 | + for(i=-126;i<-112;i++){ buf[633]=(byte)i; if(sha1_32(buf)==1092256208){break;} } | ||
| 644 | + for(i=97;i<106;i++){ buf[634]=(byte)i; if(sha1_32(buf)==-1426573959){break;} } | ||
| 645 | + for(i=114;i<128;i++){ buf[635]=(byte)i; if(sha1_32(buf)==-1768499337){break;} } | ||
| 646 | + for(i=85;i<92;i++){ buf[636]=(byte)i; if(sha1_32(buf)==-2072447044){break;} } | ||
| 647 | + for(i=13;i<27;i++){ buf[637]=(byte)i; if(sha1_32(buf)==1512815092){break;} } | ||
| 648 | + for(i=42;i<46;i++){ buf[638]=(byte)i; if(sha1_32(buf)==193495670){break;} } | ||
| 649 | + for(i=-112;i<-94;i++){ buf[639]=(byte)i; if(sha1_32(buf)==518466140){break;} } | ||
| 650 | + for(i=23;i<44;i++){ buf[640]=(byte)i; if(sha1_32(buf)==-586663266){break;} } | ||
| 651 | + for(i=-60;i<-41;i++){ buf[641]=(byte)i; if(sha1_32(buf)==187326791){break;} } | ||
| 652 | + for(i=18;i<29;i++){ buf[642]=(byte)i; if(sha1_32(buf)==517588139){break;} } | ||
| 653 | + for(i=60;i<80;i++){ buf[643]=(byte)i; if(sha1_32(buf)==1243035508){break;} } | ||
| 654 | + for(i=28;i<34;i++){ buf[644]=(byte)i; if(sha1_32(buf)==-2061265734){break;} } | ||
| 655 | + for(i=-25;i<-9;i++){ buf[645]=(byte)i; if(sha1_32(buf)==-1342458252){break;} } | ||
| 656 | + for(i=22;i<44;i++){ buf[646]=(byte)i; if(sha1_32(buf)==-946160035){break;} } | ||
| 657 | + for(i=26;i<27;i++){ buf[647]=(byte)i; if(sha1_32(buf)==-840462199){break;} } | ||
| 658 | + for(i=-128;i<-112;i++){ buf[648]=(byte)i; if(sha1_32(buf)==1797265020){break;} } | ||
| 659 | + for(i=-8;i<0;i++){ buf[649]=(byte)i; if(sha1_32(buf)==144372865){break;} } | ||
| 660 | + for(i=-108;i<-99;i++){ buf[650]=(byte)i; if(sha1_32(buf)==-1295988113){break;} } | ||
| 661 | + for(i=1;i<17;i++){ buf[651]=(byte)i; if(sha1_32(buf)==1654685477){break;} } | ||
| 662 | + for(i=109;i<116;i++){ buf[652]=(byte)i; if(sha1_32(buf)==-1685889233){break;} } | ||
| 663 | + for(i=-5;i<5;i++){ buf[653]=(byte)i; if(sha1_32(buf)==-466808668){break;} } | ||
| 664 | + for(i=17;i<35;i++){ buf[654]=(byte)i; if(sha1_32(buf)==1360505330){break;} } | ||
| 665 | + for(i=5;i<23;i++){ buf[655]=(byte)i; if(sha1_32(buf)==734304122){break;} } | ||
| 666 | + for(i=-75;i<-59;i++){ buf[656]=(byte)i; if(sha1_32(buf)==-53451148){break;} } | ||
| 667 | + for(i=39;i<45;i++){ buf[657]=(byte)i; if(sha1_32(buf)==1378658033){break;} } | ||
| 668 | + for(i=-59;i<-51;i++){ buf[658]=(byte)i; if(sha1_32(buf)==-505423833){break;} } | ||
| 669 | + for(i=-128;i<-121;i++){ buf[659]=(byte)i; if(sha1_32(buf)==2108309185){break;} } | ||
| 670 | + for(i=-92;i<-87;i++){ buf[660]=(byte)i; if(sha1_32(buf)==-776363972){break;} } | ||
| 671 | + for(i=58;i<70;i++){ buf[661]=(byte)i; if(sha1_32(buf)==892794227){break;} } | ||
| 672 | + for(i=37;i<45;i++){ buf[662]=(byte)i; if(sha1_32(buf)==-1765040271){break;} } | ||
| 673 | + for(i=-13;i<10;i++){ buf[663]=(byte)i; if(sha1_32(buf)==1808457439){break;} } | ||
| 674 | + for(i=-44;i<-21;i++){ buf[664]=(byte)i; if(sha1_32(buf)==-619637912){break;} } | ||
| 675 | + for(i=-17;i<-12;i++){ buf[665]=(byte)i; if(sha1_32(buf)==732488013){break;} } | ||
| 676 | + for(i=-86;i<-63;i++){ buf[666]=(byte)i; if(sha1_32(buf)==1653228123){break;} } | ||
| 677 | + for(i=53;i<68;i++){ buf[667]=(byte)i; if(sha1_32(buf)==-471557872){break;} } | ||
| 678 | + for(i=64;i<79;i++){ buf[668]=(byte)i; if(sha1_32(buf)==1376477683){break;} } | ||
| 679 | + for(i=-33;i<-16;i++){ buf[669]=(byte)i; if(sha1_32(buf)==803200658){break;} } | ||
| 680 | + for(i=74;i<84;i++){ buf[670]=(byte)i; if(sha1_32(buf)==-685106876){break;} } | ||
| 681 | + for(i=95;i<115;i++){ buf[671]=(byte)i; if(sha1_32(buf)==-1154979628){break;} } | ||
| 682 | + for(i=-95;i<-77;i++){ buf[672]=(byte)i; if(sha1_32(buf)==-1241566013){break;} } | ||
| 683 | + for(i=-26;i<-8;i++){ buf[673]=(byte)i; if(sha1_32(buf)==44086761){break;} } | ||
| 684 | + for(i=24;i<39;i++){ buf[674]=(byte)i; if(sha1_32(buf)==1549356593){break;} } | ||
| 685 | + for(i=-59;i<-54;i++){ buf[675]=(byte)i; if(sha1_32(buf)==1842896957){break;} } | ||
| 686 | + for(i=-50;i<-30;i++){ buf[676]=(byte)i; if(sha1_32(buf)==-1586479296){break;} } | ||
| 687 | + for(i=52;i<78;i++){ buf[677]=(byte)i; if(sha1_32(buf)==1196832676){break;} } | ||
| 688 | + for(i=-98;i<-81;i++){ buf[678]=(byte)i; if(sha1_32(buf)==-306327135){break;} } | ||
| 689 | + for(i=-43;i<-29;i++){ buf[679]=(byte)i; if(sha1_32(buf)==1381380767){break;} } | ||
| 690 | + for(i=107;i<119;i++){ buf[680]=(byte)i; if(sha1_32(buf)==-692226047){break;} } | ||
| 691 | + for(i=-62;i<-41;i++){ buf[681]=(byte)i; if(sha1_32(buf)==1255714864){break;} } | ||
| 692 | + for(i=-70;i<-43;i++){ buf[682]=(byte)i; if(sha1_32(buf)==672048784){break;} } | ||
| 693 | + for(i=-93;i<-85;i++){ buf[683]=(byte)i; if(sha1_32(buf)==-1607357664){break;} } | ||
| 694 | + for(i=19;i<28;i++){ buf[684]=(byte)i; if(sha1_32(buf)==-1951477696){break;} } | ||
| 695 | + for(i=-56;i<-47;i++){ buf[685]=(byte)i; if(sha1_32(buf)==-469113615){break;} } | ||
| 696 | + for(i=-106;i<-94;i++){ buf[686]=(byte)i; if(sha1_32(buf)==-1802116677){break;} } | ||
| 697 | + for(i=-20;i<1;i++){ buf[687]=(byte)i; if(sha1_32(buf)==-1805301589){break;} } | ||
| 698 | + for(i=3;i<20;i++){ buf[688]=(byte)i; if(sha1_32(buf)==-37962451){break;} } | ||
| 699 | + for(i=-18;i<-1;i++){ buf[689]=(byte)i; if(sha1_32(buf)==-508916088){break;} } | ||
| 700 | + for(i=-12;i<-5;i++){ buf[690]=(byte)i; if(sha1_32(buf)==1666417544){break;} } | ||
| 701 | + for(i=56;i<75;i++){ buf[691]=(byte)i; if(sha1_32(buf)==728914776){break;} } | ||
| 702 | + for(i=30;i<58;i++){ buf[692]=(byte)i; if(sha1_32(buf)==-1441984223){break;} } | ||
| 703 | + for(i=46;i<64;i++){ buf[693]=(byte)i; if(sha1_32(buf)==-591777660){break;} } | ||
| 704 | + for(i=-128;i<-116;i++){ buf[694]=(byte)i; if(sha1_32(buf)==1752534664){break;} } | ||
| 705 | + for(i=-83;i<-59;i++){ buf[695]=(byte)i; if(sha1_32(buf)==-1440186820){break;} } | ||
| 706 | + for(i=69;i<83;i++){ buf[696]=(byte)i; if(sha1_32(buf)==353150266){break;} } | ||
| 707 | + for(i=35;i<38;i++){ buf[697]=(byte)i; if(sha1_32(buf)==-1202434068){break;} } | ||
| 708 | + for(i=27;i<40;i++){ buf[698]=(byte)i; if(sha1_32(buf)==557210801){break;} } | ||
| 709 | + for(i=62;i<72;i++){ buf[699]=(byte)i; if(sha1_32(buf)==-701318733){break;} } | ||
| 710 | + for(i=36;i<46;i++){ buf[700]=(byte)i; if(sha1_32(buf)==-1152707863){break;} } | ||
| 711 | + for(i=-43;i<-31;i++){ buf[701]=(byte)i; if(sha1_32(buf)==-1044286403){break;} } | ||
| 712 | + for(i=-64;i<-47;i++){ buf[702]=(byte)i; if(sha1_32(buf)==2127529559){break;} } | ||
| 713 | + for(i=-78;i<-61;i++){ buf[703]=(byte)i; if(sha1_32(buf)==1065134881){break;} } | ||
| 714 | + for(i=5;i<31;i++){ buf[704]=(byte)i; if(sha1_32(buf)==-1504388356){break;} } | ||
| 715 | + for(i=-93;i<-67;i++){ buf[705]=(byte)i; if(sha1_32(buf)==46755195){break;} } | ||
| 716 | + for(i=-124;i<-108;i++){ buf[706]=(byte)i; if(sha1_32(buf)==1288663445){break;} } | ||
| 717 | + for(i=-94;i<-66;i++){ buf[707]=(byte)i; if(sha1_32(buf)==-823150105){break;} } | ||
| 718 | + for(i=101;i<109;i++){ buf[708]=(byte)i; if(sha1_32(buf)==-600979623){break;} } | ||
| 719 | + for(i=-18;i<8;i++){ buf[709]=(byte)i; if(sha1_32(buf)==-1308439152){break;} } | ||
| 720 | + for(i=-2;i<15;i++){ buf[710]=(byte)i; if(sha1_32(buf)==-583921725){break;} } | ||
| 721 | + for(i=-109;i<-103;i++){ buf[711]=(byte)i; if(sha1_32(buf)==-1035786261){break;} } | ||
| 722 | + for(i=80;i<85;i++){ buf[712]=(byte)i; if(sha1_32(buf)==-224940396){break;} } | ||
| 723 | + for(i=-83;i<-73;i++){ buf[713]=(byte)i; if(sha1_32(buf)==-64432094){break;} } | ||
| 724 | + for(i=-21;i<-9;i++){ buf[714]=(byte)i; if(sha1_32(buf)==-1444858690){break;} } | ||
| 725 | + for(i=39;i<58;i++){ buf[715]=(byte)i; if(sha1_32(buf)==-301620636){break;} } | ||
| 726 | + for(i=99;i<125;i++){ buf[716]=(byte)i; if(sha1_32(buf)==496186792){break;} } | ||
| 727 | + for(i=-30;i<-18;i++){ buf[717]=(byte)i; if(sha1_32(buf)==-480836668){break;} } | ||
| 728 | + for(i=-12;i<8;i++){ buf[718]=(byte)i; if(sha1_32(buf)==919735557){break;} } | ||
| 729 | + for(i=-48;i<-40;i++){ buf[719]=(byte)i; if(sha1_32(buf)==-1764559453){break;} } | ||
| 730 | + for(i=-121;i<-109;i++){ buf[720]=(byte)i; if(sha1_32(buf)==9096437){break;} } | ||
| 731 | + for(i=-66;i<-46;i++){ buf[721]=(byte)i; if(sha1_32(buf)==2130893142){break;} } | ||
| 732 | + for(i=-41;i<-31;i++){ buf[722]=(byte)i; if(sha1_32(buf)==-874171279){break;} } | ||
| 733 | + for(i=-12;i<-1;i++){ buf[723]=(byte)i; if(sha1_32(buf)==-1795967222){break;} } | ||
| 734 | + for(i=-121;i<-110;i++){ buf[724]=(byte)i; if(sha1_32(buf)==-273882432){break;} } | ||
| 735 | + for(i=58;i<71;i++){ buf[725]=(byte)i; if(sha1_32(buf)==-154031605){break;} } | ||
| 736 | + for(i=-54;i<-40;i++){ buf[726]=(byte)i; if(sha1_32(buf)==-1838265974){break;} } | ||
| 737 | + for(i=-121;i<-107;i++){ buf[727]=(byte)i; if(sha1_32(buf)==-892228569){break;} } | ||
| 738 | + for(i=-49;i<-28;i++){ buf[728]=(byte)i; if(sha1_32(buf)==1675128022){break;} } | ||
| 739 | + for(i=-115;i<-100;i++){ buf[729]=(byte)i; if(sha1_32(buf)==-1633676606){break;} } | ||
| 740 | + for(i=103;i<116;i++){ buf[730]=(byte)i; if(sha1_32(buf)==1648270908){break;} } | ||
| 741 | + for(i=96;i<110;i++){ buf[731]=(byte)i; if(sha1_32(buf)==1694902555){break;} } | ||
| 742 | + for(i=-128;i<-107;i++){ buf[732]=(byte)i; if(sha1_32(buf)==554237356){break;} } | ||
| 743 | + for(i=44;i<54;i++){ buf[733]=(byte)i; if(sha1_32(buf)==1342608943){break;} } | ||
| 744 | + for(i=-13;i<3;i++){ buf[734]=(byte)i; if(sha1_32(buf)==1346076392){break;} } | ||
| 745 | + for(i=-73;i<-51;i++){ buf[735]=(byte)i; if(sha1_32(buf)==435984579){break;} } | ||
| 746 | + for(i=-75;i<-46;i++){ buf[736]=(byte)i; if(sha1_32(buf)==-66514260){break;} } | ||
| 747 | + for(i=86;i<93;i++){ buf[737]=(byte)i; if(sha1_32(buf)==834035741){break;} } | ||
| 748 | + for(i=74;i<83;i++){ buf[738]=(byte)i; if(sha1_32(buf)==1096746559){break;} } | ||
| 749 | + for(i=86;i<101;i++){ buf[739]=(byte)i; if(sha1_32(buf)==641358007){break;} } | ||
| 750 | + for(i=65;i<77;i++){ buf[740]=(byte)i; if(sha1_32(buf)==-620751638){break;} } | ||
| 751 | + for(i=74;i<90;i++){ buf[741]=(byte)i; if(sha1_32(buf)==2007783664){break;} } | ||
| 752 | + for(i=-95;i<-79;i++){ buf[742]=(byte)i; if(sha1_32(buf)==-1295752107){break;} } | ||
| 753 | + for(i=-84;i<-64;i++){ buf[743]=(byte)i; if(sha1_32(buf)==505854344){break;} } | ||
| 754 | + for(i=114;i<116;i++){ buf[744]=(byte)i; if(sha1_32(buf)==1715929946){break;} } | ||
| 755 | + for(i=40;i<51;i++){ buf[745]=(byte)i; if(sha1_32(buf)==-44360951){break;} } | ||
| 756 | + for(i=-59;i<-43;i++){ buf[746]=(byte)i; if(sha1_32(buf)==280689592){break;} } | ||
| 757 | + for(i=110;i<117;i++){ buf[747]=(byte)i; if(sha1_32(buf)==1111149458){break;} } | ||
| 758 | + for(i=82;i<89;i++){ buf[748]=(byte)i; if(sha1_32(buf)==-57588639){break;} } | ||
| 759 | + for(i=10;i<32;i++){ buf[749]=(byte)i; if(sha1_32(buf)==-1823827362){break;} } | ||
| 760 | + for(i=9;i<22;i++){ buf[750]=(byte)i; if(sha1_32(buf)==1001717205){break;} } | ||
| 761 | + for(i=9;i<27;i++){ buf[751]=(byte)i; if(sha1_32(buf)==255375472){break;} } | ||
| 762 | + for(i=18;i<29;i++){ buf[752]=(byte)i; if(sha1_32(buf)==1008199932){break;} } | ||
| 763 | + for(i=44;i<62;i++){ buf[753]=(byte)i; if(sha1_32(buf)==-1436568908){break;} } | ||
| 764 | + for(i=104;i<121;i++){ buf[754]=(byte)i; if(sha1_32(buf)==-2069001382){break;} } | ||
| 765 | + for(i=-92;i<-65;i++){ buf[755]=(byte)i; if(sha1_32(buf)==-245701720){break;} } | ||
| 766 | + for(i=11;i<27;i++){ buf[756]=(byte)i; if(sha1_32(buf)==894216801){break;} } | ||
| 767 | + for(i=-58;i<-37;i++){ buf[757]=(byte)i; if(sha1_32(buf)==-72593385){break;} } | ||
| 768 | + for(i=-57;i<-36;i++){ buf[758]=(byte)i; if(sha1_32(buf)==116757579){break;} } | ||
| 769 | + for(i=-6;i<2;i++){ buf[759]=(byte)i; if(sha1_32(buf)==-1472756188){break;} } | ||
| 770 | + for(i=-29;i<-21;i++){ buf[760]=(byte)i; if(sha1_32(buf)==-1049966321){break;} } | ||
| 771 | + for(i=-98;i<-81;i++){ buf[761]=(byte)i; if(sha1_32(buf)==-1643293981){break;} } | ||
| 772 | + for(i=-93;i<-65;i++){ buf[762]=(byte)i; if(sha1_32(buf)==1438153587){break;} } | ||
| 773 | + for(i=-42;i<-11;i++){ buf[763]=(byte)i; if(sha1_32(buf)==-1817455929){break;} } | ||
| 774 | + for(i=-38;i<-32;i++){ buf[764]=(byte)i; if(sha1_32(buf)==1236834313){break;} } | ||
| 775 | + for(i=22;i<32;i++){ buf[765]=(byte)i; if(sha1_32(buf)==-923882541){break;} } | ||
| 776 | + for(i=-94;i<-78;i++){ buf[766]=(byte)i; if(sha1_32(buf)==46514715){break;} } | ||
| 777 | + for(i=-101;i<-78;i++){ buf[767]=(byte)i; if(sha1_32(buf)==-508579659){break;} } | ||
| 778 | + for(i=-93;i<-82;i++){ buf[768]=(byte)i; if(sha1_32(buf)==268005422){break;} } | ||
| 779 | + for(i=118;i<128;i++){ buf[769]=(byte)i; if(sha1_32(buf)==-2082060960){break;} } | ||
| 780 | + for(i=-57;i<-40;i++){ buf[770]=(byte)i; if(sha1_32(buf)==-821050876){break;} } | ||
| 781 | + for(i=-124;i<-110;i++){ buf[771]=(byte)i; if(sha1_32(buf)==1862668243){break;} } | ||
| 782 | + for(i=-70;i<-63;i++){ buf[772]=(byte)i; if(sha1_32(buf)==2134840246){break;} } | ||
| 783 | + for(i=33;i<55;i++){ buf[773]=(byte)i; if(sha1_32(buf)==831801516){break;} } | ||
| 784 | + for(i=70;i<99;i++){ buf[774]=(byte)i; if(sha1_32(buf)==-1337905819){break;} } | ||
| 785 | + for(i=-93;i<-83;i++){ buf[775]=(byte)i; if(sha1_32(buf)==-2116186974){break;} } | ||
| 786 | + for(i=99;i<120;i++){ buf[776]=(byte)i; if(sha1_32(buf)==-1361818230){break;} } | ||
| 787 | + for(i=-4;i<6;i++){ buf[777]=(byte)i; if(sha1_32(buf)==-1361818230){break;} } | ||
| 788 | + for(i=42;i<60;i++){ buf[778]=(byte)i; if(sha1_32(buf)==1254162568){break;} } | ||
| 789 | + for(i=12;i<29;i++){ buf[779]=(byte)i; if(sha1_32(buf)==-1828089339){break;} } | ||
| 790 | + for(i=-72;i<-50;i++){ buf[780]=(byte)i; if(sha1_32(buf)==-22693696){break;} } | ||
| 791 | + for(i=22;i<37;i++){ buf[781]=(byte)i; if(sha1_32(buf)==-392305421){break;} } | ||
| 792 | + for(i=-29;i<-9;i++){ buf[782]=(byte)i; if(sha1_32(buf)==-835117443){break;} } | ||
| 793 | + for(i=-66;i<-60;i++){ buf[783]=(byte)i; if(sha1_32(buf)==2070609038){break;} } | ||
| 794 | + for(i=-29;i<-19;i++){ buf[784]=(byte)i; if(sha1_32(buf)==2013920284){break;} } | ||
| 795 | + for(i=-87;i<-61;i++){ buf[785]=(byte)i; if(sha1_32(buf)==-1713049492){break;} } | ||
| 796 | + for(i=44;i<57;i++){ buf[786]=(byte)i; if(sha1_32(buf)==-1923739910){break;} } | ||
| 797 | + for(i=-89;i<-69;i++){ buf[787]=(byte)i; if(sha1_32(buf)==998980675){break;} } | ||
| 798 | + for(i=99;i<109;i++){ buf[788]=(byte)i; if(sha1_32(buf)==310692790){break;} } | ||
| 799 | + for(i=113;i<118;i++){ buf[789]=(byte)i; if(sha1_32(buf)==-409447107){break;} } | ||
| 800 | + for(i=-115;i<-86;i++){ buf[790]=(byte)i; if(sha1_32(buf)==669468995){break;} } | ||
| 801 | + for(i=43;i<68;i++){ buf[791]=(byte)i; if(sha1_32(buf)==-1024576754){break;} } | ||
| 802 | + for(i=25;i<44;i++){ buf[792]=(byte)i; if(sha1_32(buf)==2048354334){break;} } | ||
| 803 | + for(i=118;i<124;i++){ buf[793]=(byte)i; if(sha1_32(buf)==167595018){break;} } | ||
| 804 | + for(i=43;i<52;i++){ buf[794]=(byte)i; if(sha1_32(buf)==-1812530553){break;} } | ||
| 805 | + for(i=-112;i<-88;i++){ buf[795]=(byte)i; if(sha1_32(buf)==-411513304){break;} } | ||
| 806 | + for(i=40;i<62;i++){ buf[796]=(byte)i; if(sha1_32(buf)==-544499711){break;} } | ||
| 807 | + for(i=6;i<16;i++){ buf[797]=(byte)i; if(sha1_32(buf)==-1384719864){break;} } | ||
| 808 | + for(i=73;i<97;i++){ buf[798]=(byte)i; if(sha1_32(buf)==2139506616){break;} } | ||
| 809 | + for(i=-34;i<-31;i++){ buf[799]=(byte)i; if(sha1_32(buf)==-990430351){break;} } | ||
| 810 | + for(i=53;i<79;i++){ buf[800]=(byte)i; if(sha1_32(buf)==-472644824){break;} } | ||
| 811 | + for(i=-116;i<-104;i++){ buf[801]=(byte)i; if(sha1_32(buf)==-1647841597){break;} } | ||
| 812 | + for(i=90;i<109;i++){ buf[802]=(byte)i; if(sha1_32(buf)==-1339044815){break;} } | ||
| 813 | + for(i=-84;i<-71;i++){ buf[803]=(byte)i; if(sha1_32(buf)==606527180){break;} } | ||
| 814 | + for(i=89;i<106;i++){ buf[804]=(byte)i; if(sha1_32(buf)==973631380){break;} } | ||
| 815 | + for(i=-45;i<-30;i++){ buf[805]=(byte)i; if(sha1_32(buf)==-659099682){break;} } | ||
| 816 | + for(i=87;i<106;i++){ buf[806]=(byte)i; if(sha1_32(buf)==-995684730){break;} } | ||
| 817 | + for(i=-87;i<-67;i++){ buf[807]=(byte)i; if(sha1_32(buf)==2052781879){break;} } | ||
| 818 | + for(i=-55;i<-28;i++){ buf[808]=(byte)i; if(sha1_32(buf)==-360231079){break;} } | ||
| 819 | + for(i=119;i<128;i++){ buf[809]=(byte)i; if(sha1_32(buf)==-1413503367){break;} } | ||
| 820 | + for(i=87;i<98;i++){ buf[810]=(byte)i; if(sha1_32(buf)==1169384068){break;} } | ||
| 821 | + for(i=111;i<128;i++){ buf[811]=(byte)i; if(sha1_32(buf)==1889211506){break;} } | ||
| 822 | + for(i=-18;i<0;i++){ buf[812]=(byte)i; if(sha1_32(buf)==149848895){break;} } | ||
| 823 | + for(i=-21;i<-1;i++){ buf[813]=(byte)i; if(sha1_32(buf)==-1020910290){break;} } | ||
| 824 | + for(i=-99;i<-95;i++){ buf[814]=(byte)i; if(sha1_32(buf)==571335480){break;} } | ||
| 825 | + for(i=0;i<12;i++){ buf[815]=(byte)i; if(sha1_32(buf)==-1596259382){break;} } | ||
| 826 | + for(i=-102;i<-95;i++){ buf[816]=(byte)i; if(sha1_32(buf)==-858687193){break;} } | ||
| 827 | + for(i=-125;i<-113;i++){ buf[817]=(byte)i; if(sha1_32(buf)==427029012){break;} } | ||
| 828 | + for(i=-86;i<-79;i++){ buf[818]=(byte)i; if(sha1_32(buf)==2043800628){break;} } | ||
| 829 | + for(i=-67;i<-49;i++){ buf[819]=(byte)i; if(sha1_32(buf)==-1813846534){break;} } | ||
| 830 | + for(i=-89;i<-71;i++){ buf[820]=(byte)i; if(sha1_32(buf)==-1082324042){break;} } | ||
| 831 | + for(i=56;i<74;i++){ buf[821]=(byte)i; if(sha1_32(buf)==-754499064){break;} } | ||
| 832 | + for(i=58;i<64;i++){ buf[822]=(byte)i; if(sha1_32(buf)==-460697010){break;} } | ||
| 833 | + for(i=19;i<40;i++){ buf[823]=(byte)i; if(sha1_32(buf)==1137045662){break;} } | ||
| 834 | + for(i=-10;i<3;i++){ buf[824]=(byte)i; if(sha1_32(buf)==-521396724){break;} } | ||
| 835 | + for(i=-54;i<-26;i++){ buf[825]=(byte)i; if(sha1_32(buf)==-1120348466){break;} } | ||
| 836 | + for(i=-127;i<-109;i++){ buf[826]=(byte)i; if(sha1_32(buf)==-1873894727){break;} } | ||
| 837 | + for(i=66;i<82;i++){ buf[827]=(byte)i; if(sha1_32(buf)==2135696560){break;} } | ||
| 838 | + for(i=81;i<93;i++){ buf[828]=(byte)i; if(sha1_32(buf)==1091876439){break;} } | ||
| 839 | + for(i=27;i<45;i++){ buf[829]=(byte)i; if(sha1_32(buf)==-1713128159){break;} } | ||
| 840 | + for(i=101;i<119;i++){ buf[830]=(byte)i; if(sha1_32(buf)==580906425){break;} } | ||
| 841 | + for(i=91;i<120;i++){ buf[831]=(byte)i; if(sha1_32(buf)==1535472503){break;} } | ||
| 842 | + for(i=-128;i<-121;i++){ buf[832]=(byte)i; if(sha1_32(buf)==2096930378){break;} } | ||
| 843 | + for(i=90;i<108;i++){ buf[833]=(byte)i; if(sha1_32(buf)==-1582680798){break;} } | ||
| 844 | + for(i=-33;i<-15;i++){ buf[834]=(byte)i; if(sha1_32(buf)==-807374817){break;} } | ||
| 845 | + for(i=-29;i<-15;i++){ buf[835]=(byte)i; if(sha1_32(buf)==607649943){break;} } | ||
| 846 | + for(i=113;i<128;i++){ buf[836]=(byte)i; if(sha1_32(buf)==-615034323){break;} } | ||
| 847 | + for(i=116;i<127;i++){ buf[837]=(byte)i; if(sha1_32(buf)==1689502767){break;} } | ||
| 848 | + for(i=-57;i<-32;i++){ buf[838]=(byte)i; if(sha1_32(buf)==-1604569654){break;} } | ||
| 849 | + for(i=-89;i<-67;i++){ buf[839]=(byte)i; if(sha1_32(buf)==1372534786){break;} } | ||
| 850 | + for(i=116;i<128;i++){ buf[840]=(byte)i; if(sha1_32(buf)==-392651987){break;} } | ||
| 851 | + for(i=103;i<115;i++){ buf[841]=(byte)i; if(sha1_32(buf)==456333378){break;} } | ||
| 852 | + for(i=96;i<102;i++){ buf[842]=(byte)i; if(sha1_32(buf)==-2102428930){break;} } | ||
| 853 | + for(i=-66;i<-53;i++){ buf[843]=(byte)i; if(sha1_32(buf)==1169871193){break;} } | ||
| 854 | + for(i=35;i<65;i++){ buf[844]=(byte)i; if(sha1_32(buf)==1452451205){break;} } | ||
| 855 | + for(i=19;i<36;i++){ buf[845]=(byte)i; if(sha1_32(buf)==300788108){break;} } | ||
| 856 | + for(i=18;i<36;i++){ buf[846]=(byte)i; if(sha1_32(buf)==-1595328647){break;} } | ||
| 857 | + for(i=56;i<69;i++){ buf[847]=(byte)i; if(sha1_32(buf)==1993689579){break;} } | ||
| 858 | + for(i=41;i<48;i++){ buf[848]=(byte)i; if(sha1_32(buf)==-1224132689){break;} } | ||
| 859 | + for(i=-122;i<-101;i++){ buf[849]=(byte)i; if(sha1_32(buf)==218838983){break;} } | ||
| 860 | + for(i=-18;i<-3;i++){ buf[850]=(byte)i; if(sha1_32(buf)==86225471){break;} } | ||
| 861 | + for(i=110;i<121;i++){ buf[851]=(byte)i; if(sha1_32(buf)==1295757216){break;} } | ||
| 862 | + for(i=85;i<101;i++){ buf[852]=(byte)i; if(sha1_32(buf)==-65106615){break;} } | ||
| 863 | + for(i=-93;i<-76;i++){ buf[853]=(byte)i; if(sha1_32(buf)==759307342){break;} } | ||
| 864 | + for(i=-121;i<-101;i++){ buf[854]=(byte)i; if(sha1_32(buf)==789001774){break;} } | ||
| 865 | + for(i=-23;i<2;i++){ buf[855]=(byte)i; if(sha1_32(buf)==-1447834832){break;} } | ||
| 866 | + for(i=-70;i<-61;i++){ buf[856]=(byte)i; if(sha1_32(buf)==-44355954){break;} } | ||
| 867 | + for(i=-112;i<-105;i++){ buf[857]=(byte)i; if(sha1_32(buf)==-1829798433){break;} } | ||
| 868 | + for(i=105;i<120;i++){ buf[858]=(byte)i; if(sha1_32(buf)==618442377){break;} } | ||
| 869 | + for(i=-42;i<-30;i++){ buf[859]=(byte)i; if(sha1_32(buf)==1267522784){break;} } | ||
| 870 | + for(i=4;i<18;i++){ buf[860]=(byte)i; if(sha1_32(buf)==-1591917050){break;} } | ||
| 871 | + for(i=105;i<122;i++){ buf[861]=(byte)i; if(sha1_32(buf)==1371035887){break;} } | ||
| 872 | + for(i=90;i<107;i++){ buf[862]=(byte)i; if(sha1_32(buf)==-1551546972){break;} } | ||
| 873 | + for(i=-12;i<8;i++){ buf[863]=(byte)i; if(sha1_32(buf)==1904109939){break;} } | ||
| 874 | + for(i=-78;i<-62;i++){ buf[864]=(byte)i; if(sha1_32(buf)==-848521623){break;} } | ||
| 875 | + for(i=-87;i<-86;i++){ buf[865]=(byte)i; if(sha1_32(buf)==-28105324){break;} } | ||
| 876 | + for(i=-128;i<-118;i++){ buf[866]=(byte)i; if(sha1_32(buf)==1444337841){break;} } | ||
| 877 | + for(i=-60;i<-45;i++){ buf[867]=(byte)i; if(sha1_32(buf)==-149845483){break;} } | ||
| 878 | + for(i=26;i<51;i++){ buf[868]=(byte)i; if(sha1_32(buf)==115238846){break;} } | ||
| 879 | + for(i=-38;i<-11;i++){ buf[869]=(byte)i; if(sha1_32(buf)==137438883){break;} } | ||
| 880 | + for(i=-92;i<-79;i++){ buf[870]=(byte)i; if(sha1_32(buf)==1335090647){break;} } | ||
| 881 | + for(i=29;i<44;i++){ buf[871]=(byte)i; if(sha1_32(buf)==1699614736){break;} } | ||
| 882 | + for(i=60;i<75;i++){ buf[872]=(byte)i; if(sha1_32(buf)==1965855955){break;} } | ||
| 883 | + for(i=64;i<78;i++){ buf[873]=(byte)i; if(sha1_32(buf)==645498901){break;} } | ||
| 884 | + for(i=-50;i<-33;i++){ buf[874]=(byte)i; if(sha1_32(buf)==1309841305){break;} } | ||
| 885 | + for(i=37;i<44;i++){ buf[875]=(byte)i; if(sha1_32(buf)==969267448){break;} } | ||
| 886 | + for(i=-41;i<-25;i++){ buf[876]=(byte)i; if(sha1_32(buf)==-253200763){break;} } | ||
| 887 | + for(i=-26;i<-12;i++){ buf[877]=(byte)i; if(sha1_32(buf)==1478441362){break;} } | ||
| 888 | + for(i=-20;i<-10;i++){ buf[878]=(byte)i; if(sha1_32(buf)==333652038){break;} } | ||
| 889 | + for(i=-32;i<-6;i++){ buf[879]=(byte)i; if(sha1_32(buf)==676958823){break;} } | ||
| 890 | + for(i=-91;i<-66;i++){ buf[880]=(byte)i; if(sha1_32(buf)==-1201480728){break;} } | ||
| 891 | + for(i=1;i<9;i++){ buf[881]=(byte)i; if(sha1_32(buf)==679978043){break;} } | ||
| 892 | + for(i=-26;i<-4;i++){ buf[882]=(byte)i; if(sha1_32(buf)==-547244730){break;} } | ||
| 893 | + for(i=106;i<122;i++){ buf[883]=(byte)i; if(sha1_32(buf)==-1512798165){break;} } | ||
| 894 | + for(i=0;i<12;i++){ buf[884]=(byte)i; if(sha1_32(buf)==-2014532029){break;} } | ||
| 895 | + for(i=-76;i<-67;i++){ buf[885]=(byte)i; if(sha1_32(buf)==-1790282562){break;} } | ||
| 896 | + for(i=-128;i<-102;i++){ buf[886]=(byte)i; if(sha1_32(buf)==727442242){break;} } | ||
| 897 | + for(i=-15;i<2;i++){ buf[887]=(byte)i; if(sha1_32(buf)==739142986){break;} } | ||
| 898 | + for(i=117;i<127;i++){ buf[888]=(byte)i; if(sha1_32(buf)==1754081610){break;} } | ||
| 899 | + for(i=-42;i<-22;i++){ buf[889]=(byte)i; if(sha1_32(buf)==-781301006){break;} } | ||
| 900 | + for(i=-84;i<-77;i++){ buf[890]=(byte)i; if(sha1_32(buf)==-676630030){break;} } | ||
| 901 | + for(i=-109;i<-98;i++){ buf[891]=(byte)i; if(sha1_32(buf)==-910157857){break;} } | ||
| 902 | + for(i=97;i<112;i++){ buf[892]=(byte)i; if(sha1_32(buf)==2141165867){break;} } | ||
| 903 | + for(i=90;i<117;i++){ buf[893]=(byte)i; if(sha1_32(buf)==187553065){break;} } | ||
| 904 | + for(i=-47;i<-30;i++){ buf[894]=(byte)i; if(sha1_32(buf)==378787916){break;} } | ||
| 905 | + for(i=-86;i<-68;i++){ buf[895]=(byte)i; if(sha1_32(buf)==1833895600){break;} } | ||
| 906 | + for(i=-53;i<-29;i++){ buf[896]=(byte)i; if(sha1_32(buf)==109610088){break;} } | ||
| 907 | + for(i=109;i<118;i++){ buf[897]=(byte)i; if(sha1_32(buf)==-1754096868){break;} } | ||
| 908 | + for(i=-106;i<-98;i++){ buf[898]=(byte)i; if(sha1_32(buf)==991775097){break;} } | ||
| 909 | + for(i=120;i<128;i++){ buf[899]=(byte)i; if(sha1_32(buf)==1681949960){break;} } | ||
| 910 | + for(i=34;i<38;i++){ buf[900]=(byte)i; if(sha1_32(buf)==-249966675){break;} } | ||
| 911 | + for(i=5;i<31;i++){ buf[901]=(byte)i; if(sha1_32(buf)==1503551986){break;} } | ||
| 912 | + for(i=62;i<84;i++){ buf[902]=(byte)i; if(sha1_32(buf)==-2098958776){break;} } | ||
| 913 | + for(i=-66;i<-50;i++){ buf[903]=(byte)i; if(sha1_32(buf)==1826063563){break;} } | ||
| 914 | + for(i=-36;i<-19;i++){ buf[904]=(byte)i; if(sha1_32(buf)==-1761335699){break;} } | ||
| 915 | + for(i=-100;i<-77;i++){ buf[905]=(byte)i; if(sha1_32(buf)==-1714650192){break;} } | ||
| 916 | + for(i=-64;i<-52;i++){ buf[906]=(byte)i; if(sha1_32(buf)==376768973){break;} } | ||
| 917 | + for(i=75;i<89;i++){ buf[907]=(byte)i; if(sha1_32(buf)==-1346985127){break;} } | ||
| 918 | + for(i=46;i<54;i++){ buf[908]=(byte)i; if(sha1_32(buf)==1902286847){break;} } | ||
| 919 | + for(i=-128;i<-125;i++){ buf[909]=(byte)i; if(sha1_32(buf)==626006740){break;} } | ||
| 920 | + for(i=12;i<29;i++){ buf[910]=(byte)i; if(sha1_32(buf)==-1223107398){break;} } | ||
| 921 | + for(i=-2;i<-1;i++){ buf[911]=(byte)i; if(sha1_32(buf)==-1073173256){break;} } | ||
| 922 | + for(i=118;i<128;i++){ buf[912]=(byte)i; if(sha1_32(buf)==-2108227342){break;} } | ||
| 923 | + for(i=3;i<30;i++){ buf[913]=(byte)i; if(sha1_32(buf)==-1902321747){break;} } | ||
| 924 | + for(i=89;i<108;i++){ buf[914]=(byte)i; if(sha1_32(buf)==2060111089){break;} } | ||
| 925 | + for(i=9;i<30;i++){ buf[915]=(byte)i; if(sha1_32(buf)==56354503){break;} } | ||
| 926 | + for(i=97;i<114;i++){ buf[916]=(byte)i; if(sha1_32(buf)==1378981250){break;} } | ||
| 927 | + for(i=-39;i<-29;i++){ buf[917]=(byte)i; if(sha1_32(buf)==2043027633){break;} } | ||
| 928 | + for(i=-128;i<-117;i++){ buf[918]=(byte)i; if(sha1_32(buf)==1841084296){break;} } | ||
| 929 | + for(i=-126;i<-112;i++){ buf[919]=(byte)i; if(sha1_32(buf)==-1845371503){break;} } | ||
| 930 | + for(i=86;i<112;i++){ buf[920]=(byte)i; if(sha1_32(buf)==1055837376){break;} } | ||
| 931 | + for(i=60;i<77;i++){ buf[921]=(byte)i; if(sha1_32(buf)==-1987644133){break;} } | ||
| 932 | + for(i=-13;i<12;i++){ buf[922]=(byte)i; if(sha1_32(buf)==916950688){break;} } | ||
| 933 | + for(i=-20;i<-9;i++){ buf[923]=(byte)i; if(sha1_32(buf)==-1393941709){break;} } | ||
| 934 | + for(i=-114;i<-102;i++){ buf[924]=(byte)i; if(sha1_32(buf)==2146462729){break;} } | ||
| 935 | + for(i=-96;i<-87;i++){ buf[925]=(byte)i; if(sha1_32(buf)==900577137){break;} } | ||
| 936 | + for(i=-9;i<1;i++){ buf[926]=(byte)i; if(sha1_32(buf)==952080992){break;} } | ||
| 937 | + for(i=4;i<12;i++){ buf[927]=(byte)i; if(sha1_32(buf)==313868104){break;} } | ||
| 938 | + for(i=20;i<40;i++){ buf[928]=(byte)i; if(sha1_32(buf)==-1934835353){break;} } | ||
| 939 | + for(i=109;i<128;i++){ buf[929]=(byte)i; if(sha1_32(buf)==-667773145){break;} } | ||
| 940 | + for(i=-117;i<-102;i++){ buf[930]=(byte)i; if(sha1_32(buf)==-889932532){break;} } | ||
| 941 | + for(i=-128;i<-119;i++){ buf[931]=(byte)i; if(sha1_32(buf)==1248952357){break;} } | ||
| 942 | + for(i=61;i<72;i++){ buf[932]=(byte)i; if(sha1_32(buf)==1955082811){break;} } | ||
| 943 | + for(i=-63;i<-37;i++){ buf[933]=(byte)i; if(sha1_32(buf)==2002360824){break;} } | ||
| 944 | + for(i=-82;i<-54;i++){ buf[934]=(byte)i; if(sha1_32(buf)==-1702297925){break;} } | ||
| 945 | + for(i=0;i<13;i++){ buf[935]=(byte)i; if(sha1_32(buf)==-1092443914){break;} } | ||
| 946 | + for(i=-85;i<-72;i++){ buf[936]=(byte)i; if(sha1_32(buf)==398338266){break;} } | ||
| 947 | + for(i=-111;i<-99;i++){ buf[937]=(byte)i; if(sha1_32(buf)==1972721419){break;} } | ||
| 948 | + for(i=-51;i<-37;i++){ buf[938]=(byte)i; if(sha1_32(buf)==1173098319){break;} } | ||
| 949 | + for(i=14;i<31;i++){ buf[939]=(byte)i; if(sha1_32(buf)==-1770035326){break;} } | ||
| 950 | + for(i=-25;i<-22;i++){ buf[940]=(byte)i; if(sha1_32(buf)==1700891957){break;} } | ||
| 951 | + for(i=-109;i<-98;i++){ buf[941]=(byte)i; if(sha1_32(buf)==1258831719){break;} } | ||
| 952 | + for(i=-34;i<-23;i++){ buf[942]=(byte)i; if(sha1_32(buf)==1908976902){break;} } | ||
| 953 | + for(i=-47;i<-40;i++){ buf[943]=(byte)i; if(sha1_32(buf)==-444695674){break;} } | ||
| 954 | + for(i=-51;i<-39;i++){ buf[944]=(byte)i; if(sha1_32(buf)==-670155987){break;} } | ||
| 955 | + for(i=-70;i<-51;i++){ buf[945]=(byte)i; if(sha1_32(buf)==-17828955){break;} } | ||
| 956 | + for(i=-7;i<6;i++){ buf[946]=(byte)i; if(sha1_32(buf)==691616794){break;} } | ||
| 957 | + for(i=-80;i<-68;i++){ buf[947]=(byte)i; if(sha1_32(buf)==1870440759){break;} } | ||
| 958 | + for(i=-25;i<-8;i++){ buf[948]=(byte)i; if(sha1_32(buf)==-1248313889){break;} } | ||
| 959 | + for(i=-104;i<-89;i++){ buf[949]=(byte)i; if(sha1_32(buf)==1347865111){break;} } | ||
| 960 | + for(i=-37;i<-10;i++){ buf[950]=(byte)i; if(sha1_32(buf)==-623127682){break;} } | ||
| 961 | + for(i=46;i<60;i++){ buf[951]=(byte)i; if(sha1_32(buf)==1176180312){break;} } | ||
| 962 | + for(i=61;i<75;i++){ buf[952]=(byte)i; if(sha1_32(buf)==559707475){break;} } | ||
| 963 | + for(i=-128;i<-110;i++){ buf[953]=(byte)i; if(sha1_32(buf)==391582702){break;} } | ||
| 964 | + for(i=11;i<35;i++){ buf[954]=(byte)i; if(sha1_32(buf)==-1909059390){break;} } | ||
| 965 | + for(i=-74;i<-50;i++){ buf[955]=(byte)i; if(sha1_32(buf)==-809850065){break;} } | ||
| 966 | + for(i=23;i<37;i++){ buf[956]=(byte)i; if(sha1_32(buf)==660819959){break;} } | ||
| 967 | + for(i=21;i<35;i++){ buf[957]=(byte)i; if(sha1_32(buf)==-129512629){break;} } | ||
| 968 | + for(i=99;i<119;i++){ buf[958]=(byte)i; if(sha1_32(buf)==1055939414){break;} } | ||
| 969 | + for(i=-9;i<10;i++){ buf[959]=(byte)i; if(sha1_32(buf)==384766190){break;} } | ||
| 970 | + for(i=75;i<101;i++){ buf[960]=(byte)i; if(sha1_32(buf)==436420654){break;} } | ||
| 971 | + for(i=63;i<84;i++){ buf[961]=(byte)i; if(sha1_32(buf)==-845835687){break;} } | ||
| 972 | + for(i=-20;i<-12;i++){ buf[962]=(byte)i; if(sha1_32(buf)==-180714620){break;} } | ||
| 973 | + for(i=-89;i<-70;i++){ buf[963]=(byte)i; if(sha1_32(buf)==-990352734){break;} } | ||
| 974 | + for(i=19;i<40;i++){ buf[964]=(byte)i; if(sha1_32(buf)==-1759186461){break;} } | ||
| 975 | + for(i=83;i<103;i++){ buf[965]=(byte)i; if(sha1_32(buf)==1260642046){break;} } | ||
| 976 | + for(i=47;i<71;i++){ buf[966]=(byte)i; if(sha1_32(buf)==-1963655225){break;} } | ||
| 977 | + for(i=-110;i<-95;i++){ buf[967]=(byte)i; if(sha1_32(buf)==-2014674587){break;} } | ||
| 978 | + for(i=60;i<87;i++){ buf[968]=(byte)i; if(sha1_32(buf)==731720958){break;} } | ||
| 979 | + for(i=-5;i<11;i++){ buf[969]=(byte)i; if(sha1_32(buf)==1995125761){break;} } | ||
| 980 | + for(i=-15;i<-4;i++){ buf[970]=(byte)i; if(sha1_32(buf)==-1643539496){break;} } | ||
| 981 | + for(i=-24;i<-3;i++){ buf[971]=(byte)i; if(sha1_32(buf)==-240153716){break;} } | ||
| 982 | + for(i=106;i<121;i++){ buf[972]=(byte)i; if(sha1_32(buf)==-911350097){break;} } | ||
| 983 | + for(i=-85;i<-66;i++){ buf[973]=(byte)i; if(sha1_32(buf)==-1483965687){break;} } | ||
| 984 | + for(i=-92;i<-70;i++){ buf[974]=(byte)i; if(sha1_32(buf)==1660688960){break;} } | ||
| 985 | + for(i=84;i<90;i++){ buf[975]=(byte)i; if(sha1_32(buf)==-746938704){break;} } | ||
| 986 | + for(i=-83;i<-56;i++){ buf[976]=(byte)i; if(sha1_32(buf)==-1274743017){break;} } | ||
| 987 | + for(i=43;i<71;i++){ buf[977]=(byte)i; if(sha1_32(buf)==1977167210){break;} } | ||
| 988 | + for(i=43;i<62;i++){ buf[978]=(byte)i; if(sha1_32(buf)==1697996828){break;} } | ||
| 989 | + for(i=44;i<55;i++){ buf[979]=(byte)i; if(sha1_32(buf)==1093876592){break;} } | ||
| 990 | + for(i=-17;i<-6;i++){ buf[980]=(byte)i; if(sha1_32(buf)==-284317857){break;} } | ||
| 991 | + for(i=-104;i<-83;i++){ buf[981]=(byte)i; if(sha1_32(buf)==291896077){break;} } | ||
| 992 | + for(i=43;i<58;i++){ buf[982]=(byte)i; if(sha1_32(buf)==2054744778){break;} } | ||
| 993 | + for(i=7;i<16;i++){ buf[983]=(byte)i; if(sha1_32(buf)==1734710959){break;} } | ||
| 994 | + for(i=9;i<34;i++){ buf[984]=(byte)i; if(sha1_32(buf)==-1300797387){break;} } | ||
| 995 | + for(i=69;i<92;i++){ buf[985]=(byte)i; if(sha1_32(buf)==1301800691){break;} } | ||
| 996 | + for(i=115;i<128;i++){ buf[986]=(byte)i; if(sha1_32(buf)==890524621){break;} } | ||
| 997 | + for(i=-5;i<18;i++){ buf[987]=(byte)i; if(sha1_32(buf)==809688494){break;} } | ||
| 998 | + for(i=48;i<62;i++){ buf[988]=(byte)i; if(sha1_32(buf)==825013307){break;} } | ||
| 999 | + for(i=-109;i<-97;i++){ buf[989]=(byte)i; if(sha1_32(buf)==75580688){break;} } | ||
| 1000 | + for(i=72;i<88;i++){ buf[990]=(byte)i; if(sha1_32(buf)==1638486970){break;} } | ||
| 1001 | + for(i=31;i<38;i++){ buf[991]=(byte)i; if(sha1_32(buf)==1870645632){break;} } | ||
| 1002 | + for(i=-50;i<-37;i++){ buf[992]=(byte)i; if(sha1_32(buf)==1675662850){break;} } | ||
| 1003 | + for(i=5;i<18;i++){ buf[993]=(byte)i; if(sha1_32(buf)==-218954138){break;} } | ||
| 1004 | + for(i=-44;i<-19;i++){ buf[994]=(byte)i; if(sha1_32(buf)==2007799196){break;} } | ||
| 1005 | + for(i=-120;i<-112;i++){ buf[995]=(byte)i; if(sha1_32(buf)==1675265809){break;} } | ||
| 1006 | + for(i=-22;i<-5;i++){ buf[996]=(byte)i; if(sha1_32(buf)==-181558918){break;} } | ||
| 1007 | + for(i=80;i<100;i++){ buf[997]=(byte)i; if(sha1_32(buf)==-1596709944){break;} } | ||
| 1008 | + for(i=-88;i<-82;i++){ buf[998]=(byte)i; if(sha1_32(buf)==682108844){break;} } | ||
| 1009 | + for(i=22;i<30;i++){ buf[999]=(byte)i; if(sha1_32(buf)==-1850666762){break;} } | ||
| 1010 | + for(i=100;i<104;i++){ buf[1000]=(byte)i; if(sha1_32(buf)==1337898391){break;} } | ||
| 1011 | + for(i=-123;i<-105;i++){ buf[1001]=(byte)i; if(sha1_32(buf)==-1688956652){break;} } | ||
| 1012 | + for(i=-26;i<0;i++){ buf[1002]=(byte)i; if(sha1_32(buf)==1982097978){break;} } | ||
| 1013 | + for(i=109;i<128;i++){ buf[1003]=(byte)i; if(sha1_32(buf)==-907584281){break;} } | ||
| 1014 | + for(i=105;i<114;i++){ buf[1004]=(byte)i; if(sha1_32(buf)==1661822317){break;} } | ||
| 1015 | + for(i=19;i<44;i++){ buf[1005]=(byte)i; if(sha1_32(buf)==777526153){break;} } | ||
| 1016 | + for(i=-83;i<-67;i++){ buf[1006]=(byte)i; if(sha1_32(buf)==1519798318){break;} } | ||
| 1017 | + for(i=-38;i<-21;i++){ buf[1007]=(byte)i; if(sha1_32(buf)==-701279394){break;} } | ||
| 1018 | + for(i=79;i<86;i++){ buf[1008]=(byte)i; if(sha1_32(buf)==602374986){break;} } | ||
| 1019 | + for(i=-20;i<-6;i++){ buf[1009]=(byte)i; if(sha1_32(buf)==442252003){break;} } | ||
| 1020 | + for(i=-54;i<-28;i++){ buf[1010]=(byte)i; if(sha1_32(buf)==1253559975){break;} } | ||
| 1021 | + for(i=-96;i<-90;i++){ buf[1011]=(byte)i; if(sha1_32(buf)==1666622809){break;} } | ||
| 1022 | + for(i=90;i<99;i++){ buf[1012]=(byte)i; if(sha1_32(buf)==-1908000603){break;} } | ||
| 1023 | + for(i=48;i<71;i++){ buf[1013]=(byte)i; if(sha1_32(buf)==-371004224){break;} } | ||
| 1024 | + for(i=67;i<83;i++){ buf[1014]=(byte)i; if(sha1_32(buf)==-8502336){break;} } | ||
| 1025 | + for(i=86;i<93;i++){ buf[1015]=(byte)i; if(sha1_32(buf)==1757231495){break;} } | ||
| 1026 | + for(i=-23;i<-13;i++){ buf[1016]=(byte)i; if(sha1_32(buf)==900359449){break;} } | ||
| 1027 | + for(i=87;i<98;i++){ buf[1017]=(byte)i; if(sha1_32(buf)==-986514626){break;} } | ||
| 1028 | + for(i=-88;i<-78;i++){ buf[1018]=(byte)i; if(sha1_32(buf)==2073116201){break;} } | ||
| 1029 | + for(i=-48;i<-30;i++){ buf[1019]=(byte)i; if(sha1_32(buf)==-934046340){break;} } | ||
| 1030 | + for(i=-63;i<-50;i++){ buf[1020]=(byte)i; if(sha1_32(buf)==-2090585292){break;} } | ||
| 1031 | + for(i=-62;i<-58;i++){ buf[1021]=(byte)i; if(sha1_32(buf)==122131896){break;} } | ||
| 1032 | + for(i=-122;i<-110;i++){ buf[1022]=(byte)i; if(sha1_32(buf)==-71924606){break;} } | ||
| 1033 | + for(i=102;i<120;i++){ buf[1023]=(byte)i; if(sha1_32(buf)==-2123675754){break;} } | ||
| 1034 | + for(i=-103;i<-88;i++){ buf[1024]=(byte)i; if(sha1_32(buf)==850951926){break;} } | ||
| 1035 | + for(i=-19;i<-2;i++){ buf[1025]=(byte)i; if(sha1_32(buf)==-1023376848){break;} } | ||
| 1036 | + for(i=-45;i<-32;i++){ buf[1026]=(byte)i; if(sha1_32(buf)==1365861846){break;} } | ||
| 1037 | + for(i=-118;i<-92;i++){ buf[1027]=(byte)i; if(sha1_32(buf)==-933282266){break;} } | ||
| 1038 | + for(i=25;i<41;i++){ buf[1028]=(byte)i; if(sha1_32(buf)==-1553792722){break;} } | ||
| 1039 | + for(i=27;i<47;i++){ buf[1029]=(byte)i; if(sha1_32(buf)==8254703){break;} } | ||
| 1040 | + for(i=-1;i<9;i++){ buf[1030]=(byte)i; if(sha1_32(buf)==1714619706){break;} } | ||
| 1041 | + for(i=-15;i<-6;i++){ buf[1031]=(byte)i; if(sha1_32(buf)==-1534016023){break;} } | ||
| 1042 | + for(i=-116;i<-107;i++){ buf[1032]=(byte)i; if(sha1_32(buf)==467553212){break;} } | ||
| 1043 | + for(i=-20;i<-7;i++){ buf[1033]=(byte)i; if(sha1_32(buf)==-1138797784){break;} } | ||
| 1044 | + for(i=29;i<48;i++){ buf[1034]=(byte)i; if(sha1_32(buf)==-1111633880){break;} } | ||
| 1045 | + for(i=-19;i<-8;i++){ buf[1035]=(byte)i; if(sha1_32(buf)==-1106139823){break;} } | ||
| 1046 | + for(i=-75;i<-71;i++){ buf[1036]=(byte)i; if(sha1_32(buf)==313204257){break;} } | ||
| 1047 | + for(i=73;i<81;i++){ buf[1037]=(byte)i; if(sha1_32(buf)==1861053456){break;} } | ||
| 1048 | + for(i=30;i<50;i++){ buf[1038]=(byte)i; if(sha1_32(buf)==642432199){break;} } | ||
| 1049 | + for(i=6;i<22;i++){ buf[1039]=(byte)i; if(sha1_32(buf)==-403907923){break;} } | ||
| 1050 | + for(i=16;i<29;i++){ buf[1040]=(byte)i; if(sha1_32(buf)==225235738){break;} } | ||
| 1051 | + for(i=63;i<83;i++){ buf[1041]=(byte)i; if(sha1_32(buf)==-1112308497){break;} } | ||
| 1052 | + for(i=65;i<74;i++){ buf[1042]=(byte)i; if(sha1_32(buf)==1704959868){break;} } | ||
| 1053 | + for(i=-5;i<17;i++){ buf[1043]=(byte)i; if(sha1_32(buf)==-1456096975){break;} } | ||
| 1054 | + for(i=-44;i<-34;i++){ buf[1044]=(byte)i; if(sha1_32(buf)==-971141685){break;} } | ||
| 1055 | + for(i=-68;i<-49;i++){ buf[1045]=(byte)i; if(sha1_32(buf)==791449520){break;} } | ||
| 1056 | + for(i=-110;i<-90;i++){ buf[1046]=(byte)i; if(sha1_32(buf)==-68763025){break;} } | ||
| 1057 | + for(i=61;i<72;i++){ buf[1047]=(byte)i; if(sha1_32(buf)==1272286847){break;} } | ||
| 1058 | + for(i=92;i<110;i++){ buf[1048]=(byte)i; if(sha1_32(buf)==1311012969){break;} } | ||
| 1059 | + for(i=110;i<123;i++){ buf[1049]=(byte)i; if(sha1_32(buf)==543258193){break;} } | ||
| 1060 | + for(i=-100;i<-81;i++){ buf[1050]=(byte)i; if(sha1_32(buf)==1331377198){break;} } | ||
| 1061 | + for(i=-13;i<16;i++){ buf[1051]=(byte)i; if(sha1_32(buf)==1331377198){break;} } | ||
| 1062 | + for(i=-57;i<-44;i++){ buf[1052]=(byte)i; if(sha1_32(buf)==858607688){break;} } | ||
| 1063 | + for(i=75;i<95;i++){ buf[1053]=(byte)i; if(sha1_32(buf)==-382110362){break;} } | ||
| 1064 | + for(i=60;i<87;i++){ buf[1054]=(byte)i; if(sha1_32(buf)==1091847908){break;} } | ||
| 1065 | + for(i=-53;i<-35;i++){ buf[1055]=(byte)i; if(sha1_32(buf)==-230213279){break;} } | ||
| 1066 | + for(i=112;i<128;i++){ buf[1056]=(byte)i; if(sha1_32(buf)==-1272682456){break;} } | ||
| 1067 | + for(i=77;i<95;i++){ buf[1057]=(byte)i; if(sha1_32(buf)==1899164813){break;} } | ||
| 1068 | + for(i=-103;i<-81;i++){ buf[1058]=(byte)i; if(sha1_32(buf)==-641346495){break;} } | ||
| 1069 | + for(i=-27;i<-20;i++){ buf[1059]=(byte)i; if(sha1_32(buf)==-1616048497){break;} } | ||
| 1070 | + for(i=-95;i<-78;i++){ buf[1060]=(byte)i; if(sha1_32(buf)==-1294488422){break;} } | ||
| 1071 | + for(i=95;i<117;i++){ buf[1061]=(byte)i; if(sha1_32(buf)==1446370419){break;} } | ||
| 1072 | + for(i=30;i<45;i++){ buf[1062]=(byte)i; if(sha1_32(buf)==1818497101){break;} } | ||
| 1073 | + for(i=106;i<128;i++){ buf[1063]=(byte)i; if(sha1_32(buf)==-1125649967){break;} } | ||
| 1074 | + for(i=-11;i<-4;i++){ buf[1064]=(byte)i; if(sha1_32(buf)==-1902142835){break;} } | ||
| 1075 | + for(i=-15;i<12;i++){ buf[1065]=(byte)i; if(sha1_32(buf)==-993652798){break;} } | ||
| 1076 | + for(i=-39;i<-25;i++){ buf[1066]=(byte)i; if(sha1_32(buf)==-1910577630){break;} } | ||
| 1077 | + for(i=82;i<99;i++){ buf[1067]=(byte)i; if(sha1_32(buf)==-1657159241){break;} } | ||
| 1078 | + for(i=8;i<33;i++){ buf[1068]=(byte)i; if(sha1_32(buf)==461256207){break;} } | ||
| 1079 | + for(i=-102;i<-89;i++){ buf[1069]=(byte)i; if(sha1_32(buf)==-1378187077){break;} } | ||
| 1080 | + for(i=-108;i<-98;i++){ buf[1070]=(byte)i; if(sha1_32(buf)==1236053358){break;} } | ||
| 1081 | + for(i=-103;i<-77;i++){ buf[1071]=(byte)i; if(sha1_32(buf)==-1543359085){break;} } | ||
| 1082 | + for(i=-23;i<-7;i++){ buf[1072]=(byte)i; if(sha1_32(buf)==1320296484){break;} } | ||
| 1083 | + for(i=17;i<25;i++){ buf[1073]=(byte)i; if(sha1_32(buf)==1007154888){break;} } | ||
| 1084 | + for(i=113;i<127;i++){ buf[1074]=(byte)i; if(sha1_32(buf)==-1240519044){break;} } | ||
| 1085 | + for(i=-128;i<-118;i++){ buf[1075]=(byte)i; if(sha1_32(buf)==-1215998682){break;} } | ||
| 1086 | + for(i=41;i<58;i++){ buf[1076]=(byte)i; if(sha1_32(buf)==-1091164173){break;} } | ||
| 1087 | + for(i=12;i<21;i++){ buf[1077]=(byte)i; if(sha1_32(buf)==-1095158298){break;} } | ||
| 1088 | + for(i=79;i<92;i++){ buf[1078]=(byte)i; if(sha1_32(buf)==-2040376307){break;} } | ||
| 1089 | + for(i=95;i<115;i++){ buf[1079]=(byte)i; if(sha1_32(buf)==626252750){break;} } | ||
| 1090 | + for(i=81;i<85;i++){ buf[1080]=(byte)i; if(sha1_32(buf)==-427992383){break;} } | ||
| 1091 | + for(i=-70;i<-43;i++){ buf[1081]=(byte)i; if(sha1_32(buf)==1186823212){break;} } | ||
| 1092 | + for(i=68;i<86;i++){ buf[1082]=(byte)i; if(sha1_32(buf)==-1954309330){break;} } | ||
| 1093 | + for(i=0;i<14;i++){ buf[1083]=(byte)i; if(sha1_32(buf)==1513921189){break;} } | ||
| 1094 | + for(i=-117;i<-98;i++){ buf[1084]=(byte)i; if(sha1_32(buf)==1672085876){break;} } | ||
| 1095 | + for(i=90;i<112;i++){ buf[1085]=(byte)i; if(sha1_32(buf)==-1017752107){break;} } | ||
| 1096 | + for(i=-128;i<-113;i++){ buf[1086]=(byte)i; if(sha1_32(buf)==494721408){break;} } | ||
| 1097 | + for(i=-106;i<-88;i++){ buf[1087]=(byte)i; if(sha1_32(buf)==-1850191687){break;} } | ||
| 1098 | + for(i=124;i<128;i++){ buf[1088]=(byte)i; if(sha1_32(buf)==-146304179){break;} } | ||
| 1099 | + for(i=-33;i<-12;i++){ buf[1089]=(byte)i; if(sha1_32(buf)==-1427687069){break;} } | ||
| 1100 | + for(i=20;i<22;i++){ buf[1090]=(byte)i; if(sha1_32(buf)==-397708587){break;} } | ||
| 1101 | + for(i=-11;i<3;i++){ buf[1091]=(byte)i; if(sha1_32(buf)==-1164763051){break;} } | ||
| 1102 | + for(i=-124;i<-108;i++){ buf[1092]=(byte)i; if(sha1_32(buf)==-1241278462){break;} } | ||
| 1103 | + for(i=-55;i<-35;i++){ buf[1093]=(byte)i; if(sha1_32(buf)==1799035669){break;} } | ||
| 1104 | + for(i=-83;i<-77;i++){ buf[1094]=(byte)i; if(sha1_32(buf)==1064792414){break;} } | ||
| 1105 | + for(i=-96;i<-73;i++){ buf[1095]=(byte)i; if(sha1_32(buf)==-2126269675){break;} } | ||
| 1106 | + for(i=68;i<95;i++){ buf[1096]=(byte)i; if(sha1_32(buf)==1532436035){break;} } | ||
| 1107 | + for(i=38;i<53;i++){ buf[1097]=(byte)i; if(sha1_32(buf)==-1145867123){break;} } | ||
| 1108 | + for(i=-128;i<-124;i++){ buf[1098]=(byte)i; if(sha1_32(buf)==-1504168715){break;} } | ||
| 1109 | + for(i=-67;i<-57;i++){ buf[1099]=(byte)i; if(sha1_32(buf)==-1490250024){break;} } | ||
| 1110 | + for(i=-112;i<-92;i++){ buf[1100]=(byte)i; if(sha1_32(buf)==-1186434638){break;} } | ||
| 1111 | + for(i=-109;i<-90;i++){ buf[1101]=(byte)i; if(sha1_32(buf)==-1041389552){break;} } | ||
| 1112 | + for(i=-85;i<-66;i++){ buf[1102]=(byte)i; if(sha1_32(buf)==-692847602){break;} } | ||
| 1113 | + for(i=12;i<26;i++){ buf[1103]=(byte)i; if(sha1_32(buf)==600599554){break;} } | ||
| 1114 | + for(i=64;i<80;i++){ buf[1104]=(byte)i; if(sha1_32(buf)==-82603969){break;} } | ||
| 1115 | + for(i=51;i<61;i++){ buf[1105]=(byte)i; if(sha1_32(buf)==-343897295){break;} } | ||
| 1116 | + for(i=20;i<34;i++){ buf[1106]=(byte)i; if(sha1_32(buf)==1148487121){break;} } | ||
| 1117 | + for(i=-95;i<-72;i++){ buf[1107]=(byte)i; if(sha1_32(buf)==1372693166){break;} } | ||
| 1118 | + for(i=-42;i<-29;i++){ buf[1108]=(byte)i; if(sha1_32(buf)==-785011697){break;} } | ||
| 1119 | + for(i=82;i<106;i++){ buf[1109]=(byte)i; if(sha1_32(buf)==342439853){break;} } | ||
| 1120 | + for(i=4;i<24;i++){ buf[1110]=(byte)i; if(sha1_32(buf)==1685207372){break;} } | ||
| 1121 | + for(i=-102;i<-85;i++){ buf[1111]=(byte)i; if(sha1_32(buf)==2079294259){break;} } | ||
| 1122 | + for(i=-15;i<1;i++){ buf[1112]=(byte)i; if(sha1_32(buf)==1332280368){break;} } | ||
| 1123 | + for(i=106;i<109;i++){ buf[1113]=(byte)i; if(sha1_32(buf)==328268892){break;} } | ||
| 1124 | + for(i=-73;i<-48;i++){ buf[1114]=(byte)i; if(sha1_32(buf)==726302983){break;} } | ||
| 1125 | + for(i=36;i<52;i++){ buf[1115]=(byte)i; if(sha1_32(buf)==335362837){break;} } | ||
| 1126 | + for(i=106;i<122;i++){ buf[1116]=(byte)i; if(sha1_32(buf)==-1900571558){break;} } | ||
| 1127 | + for(i=65;i<73;i++){ buf[1117]=(byte)i; if(sha1_32(buf)==1752804324){break;} } | ||
| 1128 | + for(i=60;i<76;i++){ buf[1118]=(byte)i; if(sha1_32(buf)==1988175030){break;} } | ||
| 1129 | + for(i=-128;i<-118;i++){ buf[1119]=(byte)i; if(sha1_32(buf)==1655750000){break;} } | ||
| 1130 | + for(i=-20;i<-2;i++){ buf[1120]=(byte)i; if(sha1_32(buf)==-793708758){break;} } | ||
| 1131 | + for(i=92;i<103;i++){ buf[1121]=(byte)i; if(sha1_32(buf)==716428476){break;} } | ||
| 1132 | + for(i=-19;i<-3;i++){ buf[1122]=(byte)i; if(sha1_32(buf)==-1772620362){break;} } | ||
| 1133 | + for(i=2;i<33;i++){ buf[1123]=(byte)i; if(sha1_32(buf)==1582983372){break;} } | ||
| 1134 | + for(i=-12;i<0;i++){ buf[1124]=(byte)i; if(sha1_32(buf)==-1487954617){break;} } | ||
| 1135 | + for(i=-127;i<-108;i++){ buf[1125]=(byte)i; if(sha1_32(buf)==-254020274){break;} } | ||
| 1136 | + for(i=63;i<79;i++){ buf[1126]=(byte)i; if(sha1_32(buf)==-1994590525){break;} } | ||
| 1137 | + for(i=1;i<12;i++){ buf[1127]=(byte)i; if(sha1_32(buf)==1443499514){break;} } | ||
| 1138 | + return buf; | ||
| 1139 | + } | ||
| 1140 | +} |
app/src/main/java/com/rd/ve/demo/dialog/AlbumConfigDialog.java
0 → 100644
| 1 | +++ a/app/src/main/java/com/rd/ve/demo/dialog/AlbumConfigDialog.java | ||
| 1 | +package com.rd.ve.demo.dialog; | ||
| 2 | + | ||
| 3 | +import android.app.Activity; | ||
| 4 | +import android.app.AlertDialog; | ||
| 5 | +import android.content.DialogInterface; | ||
| 6 | +import android.content.DialogInterface.OnClickListener; | ||
| 7 | +import android.text.TextUtils; | ||
| 8 | +import android.view.View; | ||
| 9 | +import android.widget.CompoundButton; | ||
| 10 | +import android.widget.EditText; | ||
| 11 | +import android.widget.Switch; | ||
| 12 | + | ||
| 13 | +import com.rd.ve.demo.R; | ||
| 14 | + | ||
| 15 | +/** | ||
| 16 | + * 相册设置对话框 | ||
| 17 | + */ | ||
| 18 | +public class AlbumConfigDialog { | ||
| 19 | + private AlertDialog dialog; | ||
| 20 | + private ConfigData tempData; | ||
| 21 | + private Switch swEnableAlbumCamera; | ||
| 22 | + private EditText etAlbumMediaCountLimit; | ||
| 23 | + | ||
| 24 | + /** | ||
| 25 | + * 构造函数 | ||
| 26 | + */ | ||
| 27 | + public AlbumConfigDialog(Activity activity, | ||
| 28 | + final ConfigDialogListener listener, ConfigData configData) { | ||
| 29 | + tempData = new ConfigData(); | ||
| 30 | + tempData.setConfig(configData); | ||
| 31 | + View view = activity.getLayoutInflater().inflate( | ||
| 32 | + R.layout.album_config_dialog, null); | ||
| 33 | + dialog = new AlertDialog.Builder(activity) | ||
| 34 | + .setView(view) | ||
| 35 | + .setPositiveButton("返回", null) | ||
| 36 | + .setNegativeButton("保存", new OnClickListener() { | ||
| 37 | + | ||
| 38 | + @Override | ||
| 39 | + public void onClick(DialogInterface dialog, int which) { | ||
| 40 | + saveConfigData(); | ||
| 41 | + listener.onSaveConfigData(tempData); | ||
| 42 | + } | ||
| 43 | + }).show(); | ||
| 44 | + dialog.setOnDismissListener(listener); | ||
| 45 | + initDialogView(view); | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + /** | ||
| 49 | + * 初始化拍摄设置对话框 | ||
| 50 | + * | ||
| 51 | + * @param view | ||
| 52 | + */ | ||
| 53 | + private void initDialogView(View view) { | ||
| 54 | + swEnableAlbumCamera = (Switch) view.findViewById(R.id.swEnableAlbumCamera); | ||
| 55 | + swEnableAlbumCamera.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { | ||
| 56 | + @Override | ||
| 57 | + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { | ||
| 58 | + tempData.enableAlbumCamera = isChecked; | ||
| 59 | + } | ||
| 60 | + }); | ||
| 61 | + swEnableAlbumCamera.setChecked(tempData.enableAlbumCamera); | ||
| 62 | + | ||
| 63 | + etAlbumMediaCountLimit = (EditText) view | ||
| 64 | + .findViewById(R.id.etAlbumMediaCountLimit); | ||
| 65 | + if (tempData.albumMediaCountLimit != 0) { | ||
| 66 | + etAlbumMediaCountLimit.setText("" + tempData.albumMediaCountLimit); | ||
| 67 | + } | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + /** | ||
| 71 | + * 保存设置对话框的参数 | ||
| 72 | + */ | ||
| 73 | + private void saveConfigData() { | ||
| 74 | + // 读取相册选择媒体数量上限 | ||
| 75 | + if (etAlbumMediaCountLimit != null) { | ||
| 76 | + if (!TextUtils.isEmpty(etAlbumMediaCountLimit.getText())) { | ||
| 77 | + tempData.albumMediaCountLimit = Integer | ||
| 78 | + .valueOf(etAlbumMediaCountLimit.getText().toString()); | ||
| 79 | + } else { | ||
| 80 | + tempData.albumMediaCountLimit = 0; | ||
| 81 | + } | ||
| 82 | + } | ||
| 83 | + } | ||
| 84 | +} |
app/src/main/java/com/rd/ve/demo/dialog/AudioConfigDialog.java
0 → 100644
| 1 | +++ a/app/src/main/java/com/rd/ve/demo/dialog/AudioConfigDialog.java | ||
| 1 | +package com.rd.ve.demo.dialog; | ||
| 2 | + | ||
| 3 | +import android.app.Activity; | ||
| 4 | +import android.app.AlertDialog; | ||
| 5 | +import android.content.DialogInterface; | ||
| 6 | +import android.content.DialogInterface.OnClickListener; | ||
| 7 | +import android.text.TextUtils; | ||
| 8 | +import android.view.View; | ||
| 9 | +import android.widget.EditText; | ||
| 10 | + | ||
| 11 | +import com.rd.ve.demo.R; | ||
| 12 | + | ||
| 13 | + | ||
| 14 | +/** | ||
| 15 | + * 相册设置对话框 | ||
| 16 | + */ | ||
| 17 | +public class AudioConfigDialog { | ||
| 18 | + private AlertDialog dialog; | ||
| 19 | + private EditText etAudioNumChannel, etAudioSampleRate, etAudioBitRate; | ||
| 20 | + public static int audioNumChannel, audioSampleRate, audioBitRate; | ||
| 21 | + | ||
| 22 | + /** | ||
| 23 | + * 构造函数 | ||
| 24 | + */ | ||
| 25 | + public AudioConfigDialog(Activity activity, final ConfigDialogListener listener) { | ||
| 26 | + View view = activity.getLayoutInflater().inflate( | ||
| 27 | + R.layout.audio_config_dialog, null); | ||
| 28 | + dialog = new AlertDialog.Builder(activity) | ||
| 29 | + .setView(view) | ||
| 30 | + .setPositiveButton("返回", null) | ||
| 31 | + .setNegativeButton("保存", new OnClickListener() { | ||
| 32 | + | ||
| 33 | + @Override | ||
| 34 | + public void onClick(DialogInterface dialog, int which) { | ||
| 35 | + saveConfigData(); | ||
| 36 | + } | ||
| 37 | + }).show(); | ||
| 38 | + dialog.setOnDismissListener(listener); | ||
| 39 | + initDialogView(view); | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + /** | ||
| 43 | + * 初始化拍摄设置对话框 | ||
| 44 | + * | ||
| 45 | + * @param view | ||
| 46 | + */ | ||
| 47 | + private void initDialogView(View view) { | ||
| 48 | + etAudioNumChannel = (EditText) view.findViewById(R.id.etNumChannels); | ||
| 49 | + if (audioNumChannel != 0) { | ||
| 50 | + etAudioNumChannel.setText("" + audioNumChannel); | ||
| 51 | + } | ||
| 52 | + etAudioSampleRate = (EditText) view.findViewById(R.id.etSampleRate); | ||
| 53 | + if (audioSampleRate != 0) { | ||
| 54 | + etAudioSampleRate.setText("" + audioSampleRate); | ||
| 55 | + } | ||
| 56 | + etAudioBitRate = (EditText) view.findViewById(R.id.etAudioBitRate); | ||
| 57 | + if (audioBitRate != 0) { | ||
| 58 | + etAudioBitRate.setText("" + audioBitRate); | ||
| 59 | + } | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + /** | ||
| 63 | + * 保存设置对话框的参数 | ||
| 64 | + */ | ||
| 65 | + private void saveConfigData() { | ||
| 66 | + if (etAudioNumChannel != null) { | ||
| 67 | + if (!TextUtils.isEmpty(etAudioNumChannel.getText())) { | ||
| 68 | + audioNumChannel = Integer | ||
| 69 | + .valueOf(etAudioNumChannel.getText().toString()); | ||
| 70 | + } else { | ||
| 71 | + audioNumChannel = 0; | ||
| 72 | + } | ||
| 73 | + } | ||
| 74 | + if (etAudioSampleRate != null) { | ||
| 75 | + if (!TextUtils.isEmpty(etAudioSampleRate.getText())) { | ||
| 76 | + audioSampleRate = Integer | ||
| 77 | + .valueOf(etAudioSampleRate.getText().toString()); | ||
| 78 | + } else { | ||
| 79 | + audioSampleRate = 0; | ||
| 80 | + } | ||
| 81 | + } | ||
| 82 | + if (etAudioBitRate != null) { | ||
| 83 | + if (!TextUtils.isEmpty(etAudioBitRate.getText())) { | ||
| 84 | + audioBitRate = Integer | ||
| 85 | + .valueOf(etAudioBitRate.getText().toString()); | ||
| 86 | + } else { | ||
| 87 | + audioBitRate = 0; | ||
| 88 | + } | ||
| 89 | + } | ||
| 90 | + } | ||
| 91 | +} |
app/src/main/java/com/rd/ve/demo/dialog/CameraConfigDialog.java
0 → 100644
| 1 | +++ a/app/src/main/java/com/rd/ve/demo/dialog/CameraConfigDialog.java | ||
| 1 | +package com.rd.ve.demo.dialog; | ||
| 2 | + | ||
| 3 | +import android.app.Activity; | ||
| 4 | +import android.app.AlertDialog; | ||
| 5 | +import android.content.DialogInterface; | ||
| 6 | +import android.content.DialogInterface.OnClickListener; | ||
| 7 | +import android.text.TextUtils; | ||
| 8 | +import android.view.View; | ||
| 9 | +import android.widget.CheckBox; | ||
| 10 | +import android.widget.CompoundButton; | ||
| 11 | +import android.widget.CompoundButton.OnCheckedChangeListener; | ||
| 12 | +import android.widget.EditText; | ||
| 13 | +import android.widget.RadioGroup; | ||
| 14 | +import android.widget.Switch; | ||
| 15 | + | ||
| 16 | +import com.cnlive.veuisdk.manager.CNCameraConfiguration; | ||
| 17 | +import com.rd.ve.demo.R; | ||
| 18 | + | ||
| 19 | +/** | ||
| 20 | + * 拍摄设置对话框 | ||
| 21 | + * | ||
| 22 | + */ | ||
| 23 | +public class CameraConfigDialog { | ||
| 24 | + private AlertDialog dialog; | ||
| 25 | + private ConfigData tempData; | ||
| 26 | + private CheckBox cbRec, cbMV, cbPhoto, cbOsd, cbAntiChange, cbFrontMirror,cbRecordSupportPlayMusic, | ||
| 27 | + cbBeauty; | ||
| 28 | + private Switch swIsSaveToAlbum, swEnableAlbum, swUseCustomAlbum; | ||
| 29 | + private RadioGroup rgCameraMode, rgIsRearCamera, rgFaceU, rgOrientation; | ||
| 30 | + private EditText etCameraMaxTime, etCameraMinTime, etCameraMVMaxTime, | ||
| 31 | + etCameraMVMinTime, etCamareOsdEnd; | ||
| 32 | + | ||
| 33 | + /** | ||
| 34 | + * 构造函数 | ||
| 35 | + */ | ||
| 36 | + public CameraConfigDialog(Activity activity, | ||
| 37 | + final ConfigDialogListener listener, ConfigData configData) { | ||
| 38 | + tempData = new ConfigData(); | ||
| 39 | + tempData.setConfig(configData); | ||
| 40 | + View view = activity.getLayoutInflater().inflate( | ||
| 41 | + R.layout.camera_config_dialog, null); | ||
| 42 | + initCameraDialogView(view); | ||
| 43 | + dialog = new AlertDialog.Builder(activity).setView(view) | ||
| 44 | + .setPositiveButton("返回", null) | ||
| 45 | + .setNegativeButton("保存", new OnClickListener() { | ||
| 46 | + | ||
| 47 | + @Override | ||
| 48 | + public void onClick(DialogInterface dialog, int which) { | ||
| 49 | + saveCameraConfigData(); | ||
| 50 | + listener.onSaveConfigData(tempData); | ||
| 51 | + } | ||
| 52 | + }).show(); | ||
| 53 | + dialog.setOnDismissListener(listener); | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + OnCheckedChangeListener CameraCheckListener = new OnCheckedChangeListener() { | ||
| 57 | + | ||
| 58 | + @Override | ||
| 59 | + public void onCheckedChanged(CompoundButton buttonView, | ||
| 60 | + boolean isChecked) { | ||
| 61 | + int id = buttonView.getId(); | ||
| 62 | + if (id == R.id.cbMV) { | ||
| 63 | + tempData.hideMV = !isChecked; | ||
| 64 | + } else if (id == R.id.cbRec) { | ||
| 65 | + tempData.hideRec = !isChecked; | ||
| 66 | + } else if (id == R.id.cbPhoto) { | ||
| 67 | + tempData.hidePhoto = !isChecked; | ||
| 68 | + } else if (id == R.id.cbOsd) { | ||
| 69 | + tempData.enableCameraWatermark = isChecked; | ||
| 70 | + } else if (id == R.id.cbAntiChange) { | ||
| 71 | + tempData.enableAntiChange = isChecked; | ||
| 72 | + } else if (id == R.id.cbFrontMirror) { | ||
| 73 | + tempData.enableFrontMirror = isChecked; | ||
| 74 | + } else if (id == R.id.cbEnableBeauty) { | ||
| 75 | + tempData.enableBeauty = isChecked; | ||
| 76 | + } else if (id == R.id.cbRecordSupportPlayMusic) { | ||
| 77 | + tempData.enablePlayMusic = isChecked; | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | + } | ||
| 81 | + }; | ||
| 82 | + | ||
| 83 | + /** | ||
| 84 | + * 初始化拍摄设置对话框 | ||
| 85 | + * | ||
| 86 | + * @param view | ||
| 87 | + */ | ||
| 88 | + private void initCameraDialogView(View view) { | ||
| 89 | + cbRecordSupportPlayMusic = (CheckBox) view.findViewById(R.id.cbRecordSupportPlayMusic); | ||
| 90 | + cbMV = (CheckBox) view.findViewById(R.id.cbMV); | ||
| 91 | + cbOsd = (CheckBox) view.findViewById(R.id.cbOsd); | ||
| 92 | + cbRec = (CheckBox) view.findViewById(R.id.cbRec); | ||
| 93 | + cbPhoto = (CheckBox) view.findViewById(R.id.cbPhoto); | ||
| 94 | + cbAntiChange = (CheckBox) view.findViewById(R.id.cbAntiChange); | ||
| 95 | + cbFrontMirror = (CheckBox) view.findViewById(R.id.cbFrontMirror); | ||
| 96 | + cbBeauty = (CheckBox) view.findViewById(R.id.cbEnableBeauty); | ||
| 97 | + | ||
| 98 | + cbRecordSupportPlayMusic.setOnCheckedChangeListener(CameraCheckListener); | ||
| 99 | + cbBeauty.setOnCheckedChangeListener(CameraCheckListener); | ||
| 100 | + cbFrontMirror.setOnCheckedChangeListener(CameraCheckListener); | ||
| 101 | + cbAntiChange.setOnCheckedChangeListener(CameraCheckListener); | ||
| 102 | + cbMV.setOnCheckedChangeListener(CameraCheckListener); | ||
| 103 | + cbRec.setOnCheckedChangeListener(CameraCheckListener); | ||
| 104 | + cbPhoto.setOnCheckedChangeListener(CameraCheckListener); | ||
| 105 | + cbOsd.setOnCheckedChangeListener(CameraCheckListener); | ||
| 106 | + | ||
| 107 | + cbRecordSupportPlayMusic.setChecked(tempData.enablePlayMusic); | ||
| 108 | + cbBeauty.setChecked(tempData.enableBeauty); | ||
| 109 | + cbFrontMirror.setChecked(tempData.enableFrontMirror); | ||
| 110 | + cbAntiChange.setChecked(tempData.enableAntiChange); | ||
| 111 | + cbOsd.setChecked(tempData.enableCameraWatermark); | ||
| 112 | + cbMV.setChecked(!tempData.hideMV); | ||
| 113 | + cbRec.setChecked(!tempData.hideRec); | ||
| 114 | + cbPhoto.setChecked(!tempData.hidePhoto); | ||
| 115 | + | ||
| 116 | + // 片尾水印 | ||
| 117 | + etCamareOsdEnd = (EditText) view.findViewById(R.id.etOsdEnd); | ||
| 118 | + if (tempData.cameraWatermarkEnd != 0) { | ||
| 119 | + etCamareOsdEnd.setText("" + tempData.cameraWatermarkEnd); | ||
| 120 | + } | ||
| 121 | + | ||
| 122 | + // 设置拍摄最小时长 | ||
| 123 | + etCameraMinTime = (EditText) view.findViewById(R.id.etCameraMinTime); | ||
| 124 | + if (tempData.cameraMinTime != 0) { | ||
| 125 | + etCameraMinTime.setText("" + tempData.cameraMinTime); | ||
| 126 | + } | ||
| 127 | + | ||
| 128 | + // 设置拍摄最大时长 | ||
| 129 | + etCameraMaxTime = (EditText) view.findViewById(R.id.etCameraMaxTime); | ||
| 130 | + if (tempData.cameraMaxTime != 0) { | ||
| 131 | + etCameraMaxTime.setText("" + tempData.cameraMaxTime); | ||
| 132 | + } | ||
| 133 | + | ||
| 134 | + // 设置MV最小时长 | ||
| 135 | + etCameraMVMinTime = (EditText) view | ||
| 136 | + .findViewById(R.id.etCameraMVMinTime); | ||
| 137 | + if (tempData.cameraMVMinTime != 0) { | ||
| 138 | + etCameraMVMinTime.setText("" + tempData.cameraMVMinTime); | ||
| 139 | + } | ||
| 140 | + | ||
| 141 | + // 设置MV最大时长 | ||
| 142 | + etCameraMVMaxTime = (EditText) view | ||
| 143 | + .findViewById(R.id.etCameraMVMaxTime); | ||
| 144 | + if (tempData.cameraMVMaxTime != 0) { | ||
| 145 | + etCameraMVMaxTime.setText("" + tempData.cameraMVMaxTime); | ||
| 146 | + } | ||
| 147 | + | ||
| 148 | + // 设置横竖屏 | ||
| 149 | + rgOrientation = (RadioGroup) view.findViewById(R.id.rgOrientation); | ||
| 150 | + if (tempData.mRecordOrientation == CNCameraConfiguration.ORIENTATION_PORTRAIT) { | ||
| 151 | + rgOrientation.check(R.id.rbOrientationPortrait); | ||
| 152 | + } else if (tempData.mRecordOrientation == CNCameraConfiguration.ORIENTATION_LANDSCAPE) { | ||
| 153 | + rgOrientation.check(R.id.rbOrientationLandscape); | ||
| 154 | + } else if (tempData.mRecordOrientation == CNCameraConfiguration.ORIENTATION_AUTO) { | ||
| 155 | + rgOrientation.check(R.id.rbOrientationAuto); | ||
| 156 | + } | ||
| 157 | + rgOrientation | ||
| 158 | + .setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { | ||
| 159 | + | ||
| 160 | + @Override | ||
| 161 | + public void onCheckedChanged(RadioGroup group, int checkedId) { | ||
| 162 | + if (checkedId == R.id.rbOrientationPortrait) { | ||
| 163 | + tempData.mRecordOrientation = CNCameraConfiguration.ORIENTATION_PORTRAIT; | ||
| 164 | + } else if (checkedId == R.id.rbOrientationLandscape) { | ||
| 165 | + tempData.mRecordOrientation = CNCameraConfiguration.ORIENTATION_LANDSCAPE; | ||
| 166 | + } else if (checkedId == R.id.rbOrientationAuto) { | ||
| 167 | + tempData.mRecordOrientation = CNCameraConfiguration.ORIENTATION_AUTO; | ||
| 168 | + } | ||
| 169 | + } | ||
| 170 | + }); | ||
| 171 | + | ||
| 172 | + // 设置默认摄像头方向 | ||
| 173 | + rgIsRearCamera = (RadioGroup) view.findViewById(R.id.rgIsRearCamera); | ||
| 174 | + rgIsRearCamera | ||
| 175 | + .setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { | ||
| 176 | + | ||
| 177 | + @Override | ||
| 178 | + public void onCheckedChanged(RadioGroup group, int checkedId) { | ||
| 179 | + if (checkedId == R.id.rbFrontCamera) { | ||
| 180 | + tempData.isDefaultRearCamera = false; | ||
| 181 | + } else if (checkedId == R.id.rbRearCamera) { | ||
| 182 | + tempData.isDefaultRearCamera = true; | ||
| 183 | + } | ||
| 184 | + } | ||
| 185 | + }); | ||
| 186 | + if (tempData.isDefaultRearCamera) { | ||
| 187 | + rgIsRearCamera.check(R.id.rbRearCamera); | ||
| 188 | + } else { | ||
| 189 | + rgIsRearCamera.check(R.id.rbFrontCamera); | ||
| 190 | + } | ||
| 191 | + rgFaceU = (RadioGroup) view.findViewById(R.id.rgCameraFaceGroup); | ||
| 192 | + rgFaceU.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { | ||
| 193 | + | ||
| 194 | + @Override | ||
| 195 | + public void onCheckedChanged(RadioGroup group, int checkedId) { | ||
| 196 | + if (checkedId == R.id.rbEnableFace) { | ||
| 197 | + tempData.isDefaultFace = true; | ||
| 198 | + } else { | ||
| 199 | + tempData.isDefaultFace = false; | ||
| 200 | + } | ||
| 201 | + } | ||
| 202 | + }); | ||
| 203 | + if (tempData.isDefaultFace) { | ||
| 204 | + rgFaceU.check(R.id.rbEnableFace); | ||
| 205 | + } else { | ||
| 206 | + rgFaceU.check(R.id.rbUnableFace); | ||
| 207 | + } | ||
| 208 | + | ||
| 209 | + // 设置拍摄方式 | ||
| 210 | + rgCameraMode = (RadioGroup) view.findViewById(R.id.rgCameraMode); | ||
| 211 | + rgCameraMode | ||
| 212 | + .setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { | ||
| 213 | + | ||
| 214 | + @Override | ||
| 215 | + public void onCheckedChanged(RadioGroup group, int checkedId) { | ||
| 216 | + if (checkedId == R.id.rbMultiShoot) { | ||
| 217 | + tempData.useMultiShoot = true; | ||
| 218 | + } else if (checkedId == R.id.rbSingleShoot) { | ||
| 219 | + tempData.useMultiShoot = false; | ||
| 220 | + } | ||
| 221 | + } | ||
| 222 | + }); | ||
| 223 | + if (tempData.useMultiShoot) { | ||
| 224 | + rgCameraMode.check(R.id.rbMultiShoot); | ||
| 225 | + } else { | ||
| 226 | + rgCameraMode.check(R.id.rbSingleShoot); | ||
| 227 | + } | ||
| 228 | + | ||
| 229 | + // 单次拍摄是否将图片保存至相册 | ||
| 230 | + swIsSaveToAlbum = (Switch) view.findViewById(R.id.swIsSaveToAlbum); | ||
| 231 | + swIsSaveToAlbum | ||
| 232 | + .setOnCheckedChangeListener(new OnCheckedChangeListener() { | ||
| 233 | + | ||
| 234 | + @Override | ||
| 235 | + public void onCheckedChanged(CompoundButton buttonView, | ||
| 236 | + boolean isChecked) { | ||
| 237 | + tempData.isSaveToAlbum = isChecked; | ||
| 238 | + } | ||
| 239 | + }); | ||
| 240 | + swIsSaveToAlbum.setChecked(tempData.isSaveToAlbum); | ||
| 241 | + | ||
| 242 | + // 是否显示相册按钮 | ||
| 243 | + swEnableAlbum = (Switch) view.findViewById(R.id.swEnableAlbum); | ||
| 244 | + swEnableAlbum.setOnCheckedChangeListener(new OnCheckedChangeListener() { | ||
| 245 | + | ||
| 246 | + @Override | ||
| 247 | + public void onCheckedChanged(CompoundButton buttonView, | ||
| 248 | + boolean isChecked) { | ||
| 249 | + tempData.enableAlbum = isChecked; | ||
| 250 | + } | ||
| 251 | + }); | ||
| 252 | + swEnableAlbum.setChecked(tempData.enableAlbum); | ||
| 253 | + | ||
| 254 | + // 是否使用自定义相册 | ||
| 255 | + swUseCustomAlbum = (Switch) view.findViewById(R.id.swUseCustomAlbum); | ||
| 256 | + swUseCustomAlbum | ||
| 257 | + .setOnCheckedChangeListener(new OnCheckedChangeListener() { | ||
| 258 | + | ||
| 259 | + @Override | ||
| 260 | + public void onCheckedChanged(CompoundButton buttonView, | ||
| 261 | + boolean isChecked) { | ||
| 262 | + tempData.useCustomAlbum = isChecked; | ||
| 263 | + } | ||
| 264 | + }); | ||
| 265 | + swUseCustomAlbum.setChecked(tempData.useCustomAlbum); | ||
| 266 | + } | ||
| 267 | + | ||
| 268 | + /** | ||
| 269 | + * 保存录制设置对话框的参数 | ||
| 270 | + */ | ||
| 271 | + private void saveCameraConfigData() { | ||
| 272 | + // 读取最小录制时间 | ||
| 273 | + if (etCameraMinTime != null) { | ||
| 274 | + if (!TextUtils.isEmpty(etCameraMinTime.getText())) { | ||
| 275 | + tempData.cameraMinTime = Integer.valueOf(etCameraMinTime | ||
| 276 | + .getText().toString()); | ||
| 277 | + } else { | ||
| 278 | + tempData.cameraMinTime = 0; | ||
| 279 | + } | ||
| 280 | + } | ||
| 281 | + // 读取最大录制时间 | ||
| 282 | + if (etCameraMaxTime != null) { | ||
| 283 | + if (!TextUtils.isEmpty(etCameraMaxTime.getText())) { | ||
| 284 | + tempData.cameraMaxTime = Integer.valueOf(etCameraMaxTime | ||
| 285 | + .getText().toString()); | ||
| 286 | + } else { | ||
| 287 | + tempData.cameraMaxTime = 0; | ||
| 288 | + } | ||
| 289 | + } | ||
| 290 | + // 读取MV最小时长 | ||
| 291 | + if (etCameraMVMinTime != null) { | ||
| 292 | + if (!TextUtils.isEmpty(etCameraMVMinTime.getText())) { | ||
| 293 | + tempData.cameraMVMinTime = Integer.valueOf(etCameraMVMinTime | ||
| 294 | + .getText().toString()); | ||
| 295 | + } else { | ||
| 296 | + tempData.cameraMVMinTime = 0; | ||
| 297 | + } | ||
| 298 | + } | ||
| 299 | + // 读取MV最大时长 | ||
| 300 | + if (etCameraMVMaxTime != null) { | ||
| 301 | + if (!TextUtils.isEmpty(etCameraMVMaxTime.getText())) { | ||
| 302 | + tempData.cameraMVMaxTime = Integer.valueOf(etCameraMVMaxTime | ||
| 303 | + .getText().toString()); | ||
| 304 | + } else { | ||
| 305 | + tempData.cameraMVMaxTime = 0; | ||
| 306 | + } | ||
| 307 | + } | ||
| 308 | + if (etCamareOsdEnd != null) { | ||
| 309 | + if (!TextUtils.isEmpty(etCamareOsdEnd.getText())) { | ||
| 310 | + float ft = Float.valueOf(etCamareOsdEnd.getText().toString()); | ||
| 311 | + float ftarget = Math.min(1.0f, Math.max(ft, 0)); | ||
| 312 | + tempData.cameraWatermarkEnd = ftarget; | ||
| 313 | + } else { | ||
| 314 | + tempData.cameraWatermarkEnd = 0f; | ||
| 315 | + } | ||
| 316 | + } | ||
| 317 | + } | ||
| 318 | +} |
app/src/main/java/com/rd/ve/demo/dialog/CompressConfigDialog.java
0 → 100644
| 1 | +++ a/app/src/main/java/com/rd/ve/demo/dialog/CompressConfigDialog.java | ||
| 1 | +package com.rd.ve.demo.dialog; | ||
| 2 | + | ||
| 3 | +import android.app.Activity; | ||
| 4 | +import android.app.AlertDialog; | ||
| 5 | +import android.content.DialogInterface; | ||
| 6 | +import android.content.DialogInterface.OnClickListener; | ||
| 7 | +import android.graphics.RectF; | ||
| 8 | +import android.text.TextUtils; | ||
| 9 | +import android.view.View; | ||
| 10 | +import android.widget.CheckBox; | ||
| 11 | +import android.widget.CompoundButton; | ||
| 12 | +import android.widget.CompoundButton.OnCheckedChangeListener; | ||
| 13 | +import android.widget.EditText; | ||
| 14 | +import android.widget.Switch; | ||
| 15 | + | ||
| 16 | +import com.rd.ve.demo.R; | ||
| 17 | + | ||
| 18 | +/** | ||
| 19 | + * 压缩设置对话框 | ||
| 20 | + */ | ||
| 21 | +public class CompressConfigDialog { | ||
| 22 | + private AlertDialog dialog; | ||
| 23 | + private ConfigData tempData; | ||
| 24 | + private CheckBox compressWatermark; | ||
| 25 | + private Switch swEnableHWCode; | ||
| 26 | + private EditText etCompressBitRate, etCompressVideoWidth, | ||
| 27 | + etCompressVideoHeight, etCompressWatermarkXAxis, | ||
| 28 | + etCompressWatermarkYAxis, etCompressWatermarkXZoom, | ||
| 29 | + etCompressWatermarkYZoom; | ||
| 30 | + | ||
| 31 | + /** | ||
| 32 | + * 构造函数 | ||
| 33 | + */ | ||
| 34 | + public CompressConfigDialog(Activity activity, | ||
| 35 | + final ConfigDialogListener listener, ConfigData configData) { | ||
| 36 | + tempData = new ConfigData(); | ||
| 37 | + tempData.setConfig(configData); | ||
| 38 | + View view = activity.getLayoutInflater().inflate( | ||
| 39 | + R.layout.compress_config_dialog, null); | ||
| 40 | + initCompressDialogView(view); | ||
| 41 | + dialog = new AlertDialog.Builder(activity).setView(view) | ||
| 42 | + .setPositiveButton("返回", null) | ||
| 43 | + .setNegativeButton("保存", new OnClickListener() { | ||
| 44 | + | ||
| 45 | + @Override | ||
| 46 | + public void onClick(DialogInterface dialog, int which) { | ||
| 47 | + saveCompressConfigData(); | ||
| 48 | + listener.onSaveConfigData(tempData); | ||
| 49 | + } | ||
| 50 | + }).show(); | ||
| 51 | + dialog.setOnDismissListener(listener); | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + /** | ||
| 55 | + * 初始化压缩设置对话框 | ||
| 56 | + * | ||
| 57 | + * @param view | ||
| 58 | + */ | ||
| 59 | + private void initCompressDialogView(View view) { | ||
| 60 | + // 硬件加速开关 | ||
| 61 | + swEnableHWCode = (Switch) view.findViewById(R.id.swEnableHWcode); | ||
| 62 | + swEnableHWCode.setOnCheckedChangeListener(new OnCheckedChangeListener() { | ||
| 63 | + @Override | ||
| 64 | + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { | ||
| 65 | + tempData.enableHWCode = isChecked; | ||
| 66 | + } | ||
| 67 | + }); | ||
| 68 | + swEnableHWCode.setChecked(tempData.enableHWCode); | ||
| 69 | + | ||
| 70 | + // 水印开关 | ||
| 71 | + compressWatermark = (CheckBox) view | ||
| 72 | + .findViewById(R.id.compressWatermark); | ||
| 73 | + compressWatermark | ||
| 74 | + .setOnCheckedChangeListener(new OnCheckedChangeListener() { | ||
| 75 | + | ||
| 76 | + @Override | ||
| 77 | + public void onCheckedChanged(CompoundButton buttonView, | ||
| 78 | + boolean isChecked) { | ||
| 79 | + tempData.enableCompressWatermark = isChecked; | ||
| 80 | + } | ||
| 81 | + }); | ||
| 82 | + compressWatermark.setChecked(tempData.enableCompressWatermark); | ||
| 83 | + | ||
| 84 | + // 设置压缩视频水印位置 | ||
| 85 | + etCompressWatermarkXAxis = (EditText) view | ||
| 86 | + .findViewById(R.id.etCompressWatermarkXAxis); | ||
| 87 | + etCompressWatermarkYAxis = (EditText) view | ||
| 88 | + .findViewById(R.id.etCompressWatermarkYAxis); | ||
| 89 | + etCompressWatermarkXZoom = (EditText) view | ||
| 90 | + .findViewById(R.id.etCompressWatermarkXZoom); | ||
| 91 | + etCompressWatermarkYZoom = (EditText) view | ||
| 92 | + .findViewById(R.id.etCompressWatermarkYZoom); | ||
| 93 | + if (tempData.compressWatermarkShowRect != null) { | ||
| 94 | + if (tempData.compressWatermarkShowRect.left != 0) { | ||
| 95 | + etCompressWatermarkXAxis.setText("" | ||
| 96 | + + tempData.compressWatermarkShowRect.left); | ||
| 97 | + } | ||
| 98 | + if (tempData.compressWatermarkShowRect.top != 0) { | ||
| 99 | + etCompressWatermarkYAxis.setText("" | ||
| 100 | + + tempData.compressWatermarkShowRect.top); | ||
| 101 | + } | ||
| 102 | + if (tempData.compressWatermarkShowRect.right != 0) { | ||
| 103 | + etCompressWatermarkXZoom.setText("" | ||
| 104 | + + tempData.compressWatermarkShowRect.right); | ||
| 105 | + } | ||
| 106 | + if (tempData.compressWatermarkShowRect.bottom != 0) { | ||
| 107 | + etCompressWatermarkYZoom.setText("" | ||
| 108 | + + tempData.compressWatermarkShowRect.bottom); | ||
| 109 | + } | ||
| 110 | + } | ||
| 111 | + | ||
| 112 | + // 码率 | ||
| 113 | + etCompressBitRate = (EditText) view | ||
| 114 | + .findViewById(R.id.etCompressBitRate); | ||
| 115 | + if (tempData.compressBitRate != 0) { | ||
| 116 | + etCompressBitRate.setText("" + tempData.compressBitRate); | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | + // 视频宽度 | ||
| 120 | + etCompressVideoWidth = (EditText) view | ||
| 121 | + .findViewById(R.id.etCompressVideoWidth); | ||
| 122 | + if (tempData.compressVideoWidth != 0) { | ||
| 123 | + etCompressVideoWidth.setText("" + tempData.compressVideoWidth); | ||
| 124 | + } | ||
| 125 | + | ||
| 126 | + // 视频高度 | ||
| 127 | + etCompressVideoHeight = (EditText) view | ||
| 128 | + .findViewById(R.id.etCompressVideoHeight); | ||
| 129 | + if (tempData.compressVideoHeight != 0) { | ||
| 130 | + etCompressVideoHeight.setText("" + tempData.compressVideoHeight); | ||
| 131 | + } | ||
| 132 | + } | ||
| 133 | + | ||
| 134 | + /** | ||
| 135 | + * 保存压缩设置对话框的参数 | ||
| 136 | + */ | ||
| 137 | + private void saveCompressConfigData() { | ||
| 138 | + // 读取码率 | ||
| 139 | + if (etCompressBitRate != null) { | ||
| 140 | + if (!TextUtils.isEmpty(etCompressBitRate.getText())) { | ||
| 141 | + tempData.compressBitRate = Float.valueOf(etCompressBitRate | ||
| 142 | + .getText().toString()); | ||
| 143 | + } else { | ||
| 144 | + tempData.compressBitRate = 0; | ||
| 145 | + } | ||
| 146 | + } | ||
| 147 | + // 读取视频宽度 | ||
| 148 | + if (etCompressVideoWidth != null) { | ||
| 149 | + if (!TextUtils.isEmpty(etCompressVideoWidth.getText())) { | ||
| 150 | + tempData.compressVideoWidth = Integer | ||
| 151 | + .valueOf(etCompressVideoWidth.getText().toString()); | ||
| 152 | + } else { | ||
| 153 | + tempData.compressVideoWidth = 0; | ||
| 154 | + } | ||
| 155 | + } | ||
| 156 | + // 读取视频高度 | ||
| 157 | + if (etCompressVideoHeight != null) { | ||
| 158 | + if (!TextUtils.isEmpty(etCompressVideoHeight.getText())) { | ||
| 159 | + tempData.compressVideoHeight = Integer | ||
| 160 | + .valueOf(etCompressVideoHeight.getText().toString()); | ||
| 161 | + } else { | ||
| 162 | + tempData.compressVideoHeight = 0; | ||
| 163 | + } | ||
| 164 | + } | ||
| 165 | + // 水印显示位置 | ||
| 166 | + if (etCompressWatermarkXAxis != null) { | ||
| 167 | + float left, top, right, bottom; | ||
| 168 | + if (!TextUtils.isEmpty(etCompressWatermarkXAxis.getText())) { | ||
| 169 | + left = Float.valueOf(etCompressWatermarkXAxis.getText() | ||
| 170 | + .toString()); | ||
| 171 | + } else { | ||
| 172 | + left = 0; | ||
| 173 | + } | ||
| 174 | + if (!TextUtils.isEmpty(etCompressWatermarkYAxis.getText())) { | ||
| 175 | + top = Float.valueOf(etCompressWatermarkYAxis.getText() | ||
| 176 | + .toString()); | ||
| 177 | + } else { | ||
| 178 | + top = 0; | ||
| 179 | + } | ||
| 180 | + if (!TextUtils.isEmpty(etCompressWatermarkXZoom.getText())) { | ||
| 181 | + right = Float.valueOf(etCompressWatermarkXZoom.getText() | ||
| 182 | + .toString()); | ||
| 183 | + } else { | ||
| 184 | + right = 0; | ||
| 185 | + } | ||
| 186 | + if (!TextUtils.isEmpty(etCompressWatermarkYZoom.getText())) { | ||
| 187 | + bottom = Float.valueOf(etCompressWatermarkYZoom.getText() | ||
| 188 | + .toString()); | ||
| 189 | + } else { | ||
| 190 | + bottom = 0; | ||
| 191 | + } | ||
| 192 | + if (tempData.compressWatermarkShowRect == null) { | ||
| 193 | + tempData.compressWatermarkShowRect = new RectF(); | ||
| 194 | + } | ||
| 195 | + tempData.compressWatermarkShowRect.set(left, top, right, bottom); | ||
| 196 | + } | ||
| 197 | + } | ||
| 198 | + | ||
| 199 | +} |