Giter Site home page Giter Site logo

agoralibrary / flutter_agora_rtc_rawdata Goto Github PK

View Code? Open in Web Editor NEW
9.0 2.0 24.0 843 KB

The rawdata plugin for agora_rtc_engine

License: MIT License

CMake 1.82% C++ 92.61% Java 0.88% Kotlin 0.40% Ruby 0.63% Swift 0.52% Objective-C 0.54% Dart 0.82% C 0.31% HTML 0.16% Objective-C++ 1.32%

flutter_agora_rtc_rawdata's Introduction

agora_rtc_rawdata

A flutter plugin that demostrate how to processing rawdata with agora_rtc_engine.

Important

The example plugin only exports four methods to the dart layer that can register or unregister the observer.

class AgoraRtcRawdata {
  static const MethodChannel _channel =
      const MethodChannel('agora_rtc_rawdata');

  static Future<void> registerAudioFrameObserver(int engineHandle) {
    return _channel.invokeMethod('registerAudioFrameObserver', engineHandle);
  }

  static Future<void> unregisterAudioFrameObserver() {
    return _channel.invokeMethod('unregisterAudioFrameObserver');
  }

  static Future<void> registerVideoFrameObserver(int engineHandle) {
    return _channel.invokeMethod('registerVideoFrameObserver', engineHandle);
  }

  static Future<void> unregisterVideoFrameObserver() {
    return _channel.invokeMethod('unregisterVideoFrameObserver');
  }
}

The example plugin changes the color of the video stream by the default:

  • Change local video to green
  • Change remote video to pink

You can find the code at:

If you can program with C++, you should process raw data on the C++ layer to remove code about calling Android and iOS.

You can find the code at:

Installation

You should fork this repository, and modify the code to implement your requirement, such as use third-party beauty SDK.

Usage

import 'package:agora_rtc_engine/rtc_engine.dart';
import 'package:agora_rtc_rawdata/agora_rtc_rawdata.dart';

_initEngine() async {
    var engine = await RtcEngine.create(config.appId);
    await AgoraRtcRawdata.registerAudioFrameObserver(
        await engine.getNativeHandle());
    await AgoraRtcRawdata.registerVideoFrameObserver(
        await engine.getNativeHandle());
}

Resources

  • Doc for agora_rtc_engine
  • Doc for Android raw video data
  • Doc for iOS raw video data

License

MIT

flutter_agora_rtc_rawdata's People

Contributors

lichking-2234 avatar littlegnal avatar uzawa-gmo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

flutter_agora_rtc_rawdata's Issues

Is the example complete?

I imagine the intent of this plug-in is to allow access to video/audio frame raw data. The example, however, registers the audio and video frame observers but does not show include any callback to access frame data. Is the example complete? Can this plug-in be used?

NPE occurs when adding this to deps

Env: Flutter 2.8.0

How to reproduce

  1. Clone the quickstart repo: https://github.com/AgoraIO-Community/Agora-Flutter-Quickstart.git
  2. Add agora_rtc_rawdata on pubspec.yaml
  3. Run it.

Logs

Using software rendering with device Android SDK built for x86. You may get better performance with hardware mode by configuring hardware rendering for your device.
Launching lib\main.dart on Android SDK built for x86 in debug mode...
Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Warning: Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Warning: Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Warning: Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Warning: Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Warning: Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Warning: Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Warning: Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Warning: Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01
Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://schemas.android.com/repository/android/common/01
Warning: Mapping new ns http://schemas.android.com/repository/android/generic/02 to old ns http://schemas.android.com/repository/android/generic/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/addon2/02 to old ns http://schemas.android.com/sdk/android/repo/addon2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/repository2/02 to old ns http://schemas.android.com/sdk/android/repo/repository2/01
Warning: Mapping new ns http://schemas.android.com/sdk/android/repo/sys-img2/02 to old ns http://schemas.android.com/sdk/android/repo/sys-img2/01

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':agora_rtc_rawdata'.
> java.lang.NullPointerException (no error message)

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 2s
Running Gradle task 'assembleDebug'...                              3.3s
Exception: Gradle task assembleDebug failed with exit code 1

onCaptureVideoFrame回调的线程一直在变化引发的问题

demo 中onCaptureVideoFrame回调的线程一直在变化。我们拿到VideoFrame对裸数据进行处理,在处理前我们需要创建glcontext(回到中创建,所以可能是回调中的某个子线程中),那么在关闭通话的时候,我们如何在那个“某个子线程”中销毁glcontext呢,获取获取这个子线程
QQ截图20230515135429

获取数据有问题,I420ToNV12转换错误

首先我是在Android端实现的通过onCaptureVideoFrame获取VideoFrame做自定义渲染,
第一步我会把返回的420数据转换为NV12,在Android端是正常的,用法如下:
VideoFrame.Buffer buffer = videoFrame.getBuffer(); VideoFrame.I420Buffer i420Buffer = buffer.toI420();。
然后使用YuvHelper.I420ToNV12来获取我要的数据。

在flutter的这个例子中,我是这样用的:
YuvHelper.I420ToNV12(byte2Byffer(videoFrame.getyBuffer()), videoFrame.getyStride(), byte2Byffer(videoFrame.getvBuffer()), videoFrame.getvStride(), byte2Byffer(videoFrame.getuBuffer()), videoFrame.getuStride(), videoNV21Buffer, width, height);
结果并没有如我期望的那样,获取的NV12数据是错误的。

因为flutter的videoFrame没有相关toI420()方法,可以直接返回YUV的数据。我上述的用法有问题吗?

The example is not working

Abstract

I cloned the repository and ran the example Flutter app, but it does not work. I suppose the observer functions such as onCaptureVideoFrame are not called.

Detail

The README says the plugin will change the local video to green, and I can confirm that the documentation is correct according to these lines (code).
However, running the app in the Android emulator (API 30) and my Android smartphone (Android 11), no changes in local and remote video were observed.

Of course I have called registerAudioFrameObserver and registerVideoFrameObserver in _initEngine() just like the README usage example.
After my printf-debugging, it seems like observer functions like onCaptureVideoFrame are not called though registerVideoFrameObserver was surely called.

Raw data capturing is critical to my project, and I would be happy if you could help me with this.

Does onCaptureVideoFrame(videoFrame: VideoFrame): Boolean run on an UI Thread?

Hello,

Does onCaptureVideoFrame(videoFrame: VideoFrame): runs on an UI Thread?

If it doesn't, then I can use Tasks.await to make MLKit's FaceDetector.process synchronous without freezing the whole app.

abstract Task<List<Face>> | process(MlImage image)Detects human faces from the supplied image.

Thank you so much!

How to migrate to 6.0.0?

I'm trying to migrate a project that depends on this plugin to the 6.0.0-beta.1 version of Flutter SDK, without losing Raw Data functionality.

In 6.0.0, the RtcEngine class in Dart doesn't seem to have getNativeHandle() method anymore, and probably there are a few other things that need to be changed in this repo to make it work with the new SDK NG.

What are the necessary changes to perform a migration?

Asynchronous Support

Hello.

The function onCaptureVideoFrame seems to be synchonous. That mean I wouldnt be able to use any asynchonous function like, for example, com.google.mlkit.vision.face.FaceDetector to detect faces:

override fun onCaptureVideoFrame(videoFrame: VideoFrame): Boolean {
              Arrays.fill(videoFrame.getuBuffer(), 0)
              Arrays.fill(videoFrame.getvBuffer(), 0)
              return true
            }

Don't we need a consumer object for this situations? How can I make the frame ready ascynchronously?

just like the

var consumer: AgoraVideoFrameConsumer

Thank you!

More Meaningful Example

Hello. Can I have an example of how to use this package.

The example contained is of just two lines

override fun onCaptureVideoFrame(videoFrame: VideoFrame): Boolean {
              Arrays.fill(videoFrame.getuBuffer(), 0)
              Arrays.fill(videoFrame.getvBuffer(), 0)
              return true
            }

I need more examples of how to convert VideoFrame to Java byte array or to a Java Bitmap, and also from java bitmap

Thank you!

BLACK SCREEN on TargetSdkVersion 31

Even in the example the TargetsdkVersion is set to 29 which is quite low as you can't quite use it for playstore either because their requirements are atleast 31.

Here is what happens when i try to shift to targetsdkversion 31. P.s code works fine when i am using the targetsdkversion 29.

I/sticker (31352): methodCall: {method=config} I/sticker (31352): methodCall: {method=selectedItem, index=0} I/makeup (31352): methodCall: {method=config} I/makeup (31352): methodCall: {method=selectedItem, index=0} I/faceunity(31352): methodCall: config I/beauty (31352): methodCall: {method=config} I/faceunity(31352): methodCall: getPerformanceLevel I/FUMakeup(31352): FUMakeupAdapter methodCall: configMakeup, arguments: {method=configMakeup} I/FaceUnity-CNamaSDK(31352): [07/22/23-17:31:45][thread 32001][info][NamaContext.cpp:1533] created item name: face_beautification_v2 I/FaceUnity-CNamaSDK(31352): [07/22/23-17:31:45][thread 32001][info][CNamaSDK.cpp:814] fuCreateItemFromPackage: handle = 1, item_name = I/flutter (31352): I/flutter (31352): ╔╣ Request ║ GET I/flutter (31352): ║ https://dev-api.heartlive.net/api/utils/board-bg-images I/flutter (31352): ╚══════════════════════════════════════════════════════════════════════════════════════════╝ D/spdlog (31352): [2023-07-22 17:31:45.292] [31352] [debug] [iris_rtc_engine_impl.cc:114] api name RtcEngine_enableAudio params {} I/agora.io(31352): (00000149): RtcEngine::enableAudio(this:0xb400006ec3aa0f70, void) I/agora.io(31352): (00000150): RtcEngine::enableAudioPlayoutInternal(this:0xb400006ec3aa0f70, enabled:1) I/agora.io(31352): (00000151): RtcEngine::enableLocalAudio(this:0xb400006ec3aa0f70, enabled:1) I/agora.io(31352): (00000152): RtcEngine::enableLocalAudioInternal(this:0xb400006ec3aa0f70, enabled:1) W/agora.io(31352): [CHP] updateMediaOptions in wrong state 1, conn id 0 I/agora.io(31352): [CHM] updateMediaOptions fail. connection: channelId: uid:0 userId: I/agora.io(31352): (00000153): RtcEngine::setParametersInternal(this:0xb400006ec3aa0f70, parameters:[{"che.audio.record":true}]) I/agora.io(31352): [rp] {"che.audio.record":true} I/agora.io(31352): on set parameters doc='{"che.audio.record":true}', ret=0 I/agora.io(31352): (00000154): LocalAudioTrackMediaPlayerImpl::setEnabled(this:0xb400006e93a85470, enable:1) I/agora.io(31352): (00000155): LocalAudioTrackImpl::setEnabled(this:0xb400006e93a85470, enable: 1) W/agora.io(31352): [CHP] updateMediaOptions in wrong state 1, conn id 0 I/agora.io(31352): (00000156): RtcEngine::setParametersInternal(this:0xb400006ec3aa0f70, parameters:[{"che.audio.enabled":true}]) D/spdlog (31352): [2023-07-22 17:31:45.310] [31352] [debug] [iris_rtc_engine_impl.cc:132] ret 0 result {"result":0} I/agora.io(31352): [rp] {"che.audio.enabled":true} I/agora.io(31352): on set parameters doc='{"che.audio.enabled":true}', ret=-11 D/spdlog (31352): [2023-07-22 17:31:45.329] [31352] [debug] [iris_rtc_engine_impl.cc:114] api name RtcEngine_enableVideo params {} I/agora.io(31352): (00000157): RtcEngine::enableVideo(this:0xb400006ec3aa0f70, void) I/agora.io(31352): API call to enable video I/agora.io(31352): (00000158): RtcEngine::setParametersInternal(this:0xb400006ec3aa0f70, parameters:[{"rtc.video.enabled":true}]) I/agora.io(31352): (00000159): RtcEngine::enableLocalVideo(this:0xb400006ec3aa0f70, enabled:1) I/agora.io(31352): [rp] {"rtc.video.enabled":true} I/agora.io(31352): [CONN-0][CALLCTX]: API call to enable video I/agora.io(31352): on set parameters doc='{"rtc.video.enabled":true}', ret=0 I/agora.io(31352): (00000160): RtcEngine::enableLocalVideoInternal(this:0xb400006ec3aa0f70, enabled:1) W/agora.io(31352): [CHP] updateMediaOptions in wrong state 1, conn id 0 I/agora.io(31352): (00000161): AgoraService::createAudioDeviceManager(this:0xb400006e83ab82b0, void) I/agora.io(31352): (00000162): AudioDeviceManagerImpl::setDefaultAudioRouting(this:0xb400006e23ae4f30, route:3) D/spdlog (31352): [2023-07-22 17:31:45.334] [31352] [debug] [iris_rtc_engine_impl.cc:132] ret 0 result {"result":0} D/spdlog (31352): [2023-07-22 17:31:45.335] [31352] [debug] [iris_rtc_engine_impl.cc:114] api name RtcEngine_setClientRole params {"options":null,"role":1} I/agora.io(31352): (00000163): RtcEngine::setClientRole(this:0xb400006ec3aa0f70, role:1) I/agora.io(31352): (00000164): RtcEngine::setClientRoleInternal(this:0xb400006ec3aa0f70, role:1) I/agora.io(31352): (00000165): RtcEngine::setClientRoleInternal(this:0xb400006ec3aa0f70, role:1, audience latency level: 2) W/agora.io(31352): [CHP] updateMediaOptions in wrong state 1, conn id 0 I/agora.io(31352): [CHM] updateMediaOptions fail. connection: channelId: uid:0 userId: D/spdlog (31352): [2023-07-22 17:31:45.343] [31352] [debug] [iris_rtc_engine_impl.cc:132] ret 0 result {"result":0} D/spdlog (31352): [2023-07-22 17:31:45.351] [31352] [debug] [iris_rtc_engine_impl.cc:114] api name RtcEngine_startPreview2 params {"sourceType":0} I/agora.io(31352): (00000166): RtcEngine::startPreview(this:0xb400006ec3aa0f70, sourceType:0) I/agora.io(31352): [LVTM]: createLocalCameraTrack I/agora.io(31352): (00000167): MediaNodeFactoryImpl::createCameraCapturer(this:0xb400006e33a88de0, void) I/CameraManagerGlobal(31352): Connecting to camera service I/agora.io(31352): device_info_android.cc: (line 149): : num_cameras_=2 I/agora.io(31352): device_info_android.cc: (line 172): camera index: 1 info: device_name=camera2 1, facing front, device_id=1 I/agora.io(31352): device_info_android.cc: (line 172): camera index: 0 info: device_name=camera2 0, facing back, device_id=0 I/agora.io(31352): [LVTM]: register observer to camera capture I/agora.io(31352): (00000168): VideoModuleSourceCamera::setCameraSource(this:0xb400006ed5141a00, source:1) I/agora.io(31352): (00000169): AgoraService::createCameraVideoTrack(this:0xb400006e83ab82b0, videoSource:0xb400006ed5141a00) W/agora.io(31352): [AGS]: TDS value found for camera output format : 0 I/agora.io(31352): [LVC]: id 1 is created I/agora.io(31352): [BW]: BaseWorker (AgLocalCtrlCamera) started: 0xb400006eb3b14590 I/agora.io(31352): [BW]: BaseWorker (AgLocalDataCamera) started: 0xb400006eb3af7710 I/agora.io(31352): (00000170): VideoModuleSourceCamera::setCaptureFormat(this:0xb400006ed5141a00, capture_format:(width:640, height:360, fps:15)) I/agora.io(31352): [VW]: Construct watermark object, this: 0xb400006e53aac910. I/agora.io(31352): [VW]: Construct watermark object, this: 0xb400006e53ada490. I/agora.io(31352): [LVT]: Load extension filters, size: 2 I/agora.io(31352): ExtensionControlImpl::Get Extension Control 0xb400006e53a904b0 I/agora.io(31352): (00000171): VideoFrameRotator::setOutputFormat(this:0xb400006df3bb65f0, format:(width:640, height:360, fps:15, fixed:1)) I/agora.io(31352): [LVT]: Create new node, internal_id: agora_video_filters_clear_vision%%clear_vision, node: 0xb400006ed5243d50 I/agora.io(31352): [Extension]: segmentation: createVideoFilter I/agora.io(31352): ExtensionControlImpl::Get Extension Control 0xb400006e53a904b0 I/agora.io(31352): (00000172): VideoFrameRotator::setOutputFormat(this:0xb400006df3bb81b0, format:(width:640, height:360, fps:15, fixed:1)) I/agora.io(31352): [Extension]: SEGVideoFilter: start I/agora.io(31352): [LVT]: Create new node, internal_id: agora_video_filters_segmentation%%portrait_segmentation, node: 0xb400006ed519d880 I/agora.io(31352): [LVT]: Set Default encoder configuration I/agora.io(31352): [VNE]: no TDS value found for enable_hw_encoder I/agora.io(31352): [VNE]: no TDS value found for che.hardware_encoding I/agora.io(31352): [VNE]: no TDS value found for che.video.h264.hwenc I/agora.io(31352): [VNE]: no TDS value found for low_stream_enable_hw_encoder I/agora.io(31352): [VNE]: no TDS value found for enable_minor_stream_intra_request I/agora.io(31352): [VNE]: no TDS value found for video_skip_enable I/agora.io(31352): (00000173): VideoFrameAdapter::setOutputFormat(this:0xb400006e83ac77f0, format:(width:640, height:360, fps:15)) I/agora.io(31352): update request format, [w:640, h:360, fps:15], reset format table I/agora.io(31352): [AGS]: Create camera video track 0xb400006ed513bb10. I/agora.io(31352): (00000174): LocalVideoTrackImpl::setEnabled(this:0xb400006ed513bb10, enable:0) I/agora.io(31352): [LVTM]: add rw video observer proxy for track: 0xb400006ed513bb10 I/agora.io(31352): (00000175): MediaNodeFactoryImpl::createObservableVideoFilter(this:0xb400006e33a88de0, observer:0x0, trackInfo:(ownerUid:0, trackId:0, channelId:(null), streamType:0, codecType2, encodedFrameOnly:0)) I/agora.io(31352): (00000176): VideoFrameRotator::setOutputRotation(this:0xb400006df3bb6a10, rotation:0) I/agora.io(31352): (00000177): LocalVideoTrackImpl::addVideoFilter(this:0xb400006ed513bb10, filter:0xb400006ea3ab8a90) I/agora.io(31352): (00000178): MediaNodeFactoryImpl::createObservableVideoFilter(this:0xb400006e33a88de0, observer:0x0, trackInfo:(ownerUid:0, trackId:0, channelId:(null), streamType:0, codecType2, encodedFrameOnly:0)) I/agora.io(31352): (00000179): VideoFrameRotator::setOutputRotation(this:0xb400006df3bb9bf0, rotation:0) I/agora.io(31352): (00000180): LocalVideoTrackImpl::addVideoFilter(this:0xb400006ed513bb10, filter:0xb400006ea3ab3850) I/agora.io(31352): [LVTM]: add video observer to track if need, sourceType: 0, observer: 0xb400006e23ad6bf0, processMode: 1 I/agora.io(31352): [LVTM]: set rw video observer 0xb400006e23ad6bf0 to track: 0xb400006ed513bb10 I/agora.io(31352): (00000181): LocalVideoTrackImpl::addVideoFilter(this:0xb400006ed513bb10, filter:0xb400006e43b5f380) I/agora.io(31352): (00000182): LocalVideoTrackImpl::addVideoFilter(this:0xb400006ed513bb10, filter:0xb400006e23b076d0) I/agora.io(31352): ExtensionControlImpl::Get Extension Control 0xb400006e53a904b0 I/agora.io(31352): (00000183): VideoFrameRotator::setOutputFormat(this:0xb400006df3bb9ad0, format:(width:640, height:360, fps:15, fixed:1)) I/agora.io(31352): [Extension]: PVCVideoFilter: start I/agora.io(31352): API call to start preview for 0: create local camera track I/agora.io(31352): [LVTM]: Start preview, sourceType: 0. I/agora.io(31352): (00000184): MediaNodeFactoryImpl::createVideoRenderer(this:0xb400006e33a88de0, void) I/agora.io(31352): [LVTM]: setRenderMode, create video 0 renderer I/agora.io(31352): (00000185): LocalVideoTrackImpl::addRenderer(this:0xb400006ed513bb10, videoRenderer:0xb400006e43b0e2f0) I/agora.io(31352): [VRW]: constructor I/agora.io(31352): (00000186): VideoFrameRotator::setOutputFormat(this:0xb400006df3bbab20, format:(width:640, height:360, fps:15, fixed:1)) I/agora.io(31352): (00000187): LocalVideoTrackImpl::setEnabled(this:0xb400006ed513bb10, enable:1) I/agora.io(31352): [LVT]: Load extension filters, size: 2 I/agora.io(31352): [LVT]: Use node from filter map, internal_id: agora_video_filters_clear_vision%%clear_vision, node: 0xb400006ed5243d50 I/agora.io(31352): [LVT]: Use node from filter map, internal_id: agora_video_filters_segmentation%%portrait_segmentation, node: 0xb400006ed519d880 I/agora.io(31352): (00000188): VideoFrameWatermarker::onSinkWantsChanged(this:0xb400006e23b01af0, rotation_applied:0, black_frames: 0, max_pixel_count: 2147483647, target_pixel_count: 0, max_framerate_fps: 2147483647) I/agora.io(31352): (00000189): VideoFrameWatermarker::onSinkWantsChanged(this:0xb400006e23b01af0, rotation_applied:0, black_frames: 0, max_pixel_count: 2147483647, target_pixel_count: 0, max_framerate_fps: 2147483647) I/agora.io(31352): (00000190): VideoFrameWatermarker::onSinkWantsChanged(this:0xb400006e23b01af0, rotation_applied:0, black_frames: 0, max_pixel_count: 2147483647, target_pixel_count: 0, max_framerate_fps: 2147483647) I/agora.io(31352): (00000191): VideoFrameWatermarker::onSinkWantsChanged(this:0xb400006e23b01af0, rotation_applied:0, black_frames: 0, max_pixel_count: 2147483647, target_pixel_count: 0, max_framerate_fps: 2147483647) I/agora.io(31352): (00000192): VideoFrameWatermarker::onSinkWantsChanged(this:0xb400006e23b01af0, rotation_applied:0, black_frames: 0, max_pixel_count: 2147483647, target_pixel_count: 0, max_framerate_fps: 2147483647) I/agora.io(31352): (00000193): VideoFrameWatermarker::onSinkWantsChanged(this:0xb400006e23b01af0, rotation_applied:0, black_frames: 0, max_pixel_count: 2147483647, target_pixel_count: 0, max_framerate_fps: 2147483647) I/agora.io(31352): (00000194): VideoFrameWatermarker::onSinkWantsChanged(this:0xb400006e23b01af0, rotation_applied:0, black_frames: 0, max_pixel_count: 2147483647, target_pixel_count: 0, max_framerate_fps: 2147483647) I/agora.io(31352): (00000195): VideoFrameWatermarker::onSinkWantsChanged(this:0xb400006e23b01af0, rotation_applied:0, black_frames: 0, max_pixel_count: 2147483647, target_pixel_count: 0, max_framerate_fps: 2147483647) I/agora.io(31352): (00000196): VideoFrameWatermarker::onSinkWantsChanged(this:0xb400006e23b0a3d0, rotation_applied:0, black_frames: 0, max_pixel_count: 2147483647, target_pixel_count: 0, max_framerate_fps: 2147483647) I/agora.io(31352): (00000197): VideoFrameWatermarker::onSinkWantsChanged(this:0xb400006e23b01af0, rotation_applied:0, black_frames: 0, max_pixel_count: 2147483647, target_pixel_count: 0, max_framerate_fps: 2147483647) I/agora.io(31352): (00000198): VideoFrameWatermarker::onSinkWantsChanged(this:0xb400006e23b0a3d0, rotation_applied:0, black_frames: 0, max_pixel_count: 2147483647, target_pixel_count: 0, max_framerate_fps: 2147483647) I/agora.io(31352): (00000199): VideoFrameWatermarker::onSinkWantsChanged(this:0xb400006e23b01af0, rotation_applied:0, black_frames: 0, max_pixel_count: 2147483647, target_pixel_count: 0, max_framerate_fps: 2147483647) I/agora.io(31352): (00000200): VideoFrameWatermarker::onSinkWantsChanged(this:0xb400006e23b0a3d0, rotation_applied:0, black_frames: 0, max_pixel_count: 2147483647, target_pixel_count: 0, max_framerate_fps: 2147483647) I/agora.io(31352): [LVT]: local video state: 1 error:0 I/agora.io(31352): (00000201): RtcEngineEventHandlerCallback::onLocalVideoStateChanged->onLocalVideoStateChanged(this:0xb400006e43b11a28, state: 1, errorCode: 0) W/agora.io(31352): [BW]: (long time task) [ExternalThread ==> AgMajor] rtc_engine_impl.cpp:6260: pickup time 0, execute time 127, overall time 127 I/agora.io(31352): ResourceManager:onLocalAddVideoFilter, track_id 1, filter_name: agora_video_filters_clear_vision%%clear_vision I/agora.io(31352): ResourceManager:onLocalAddVideoFilter, track_id 1, filter_name: agora_video_filters_segmentation%%portrait_segmentation I/agora.io(31352): ResourceManager:onLocalAddVideoFilter, track_id 1, filter_name: pvc.io.agora.builtin I/agora.io(31352): (00000202): VideoModuleSourceCamera::doStart(this:0xb400006ed5141a00, void) I/agora.io(31352): ResourceManager:onLocalFilterStatusChanged, track_id 1, filter_name: pvc.io.agora.builtin D/spdlog (31352): [2023-07-22 17:31:45.479] [31352] [debug] [iris_rtc_engine_impl.cc:132] ret 0 result {"result":0} I/agora.io(31352): [BW]: BaseWorker (AgVideoRenderDev_2) started: 0xb400006eb3af56b0 I/agora.io(31352): video_renderer_android.cpp: (line 37): VideoRendererAndroid() I/agora.io(31352): [VRW]: constructor done I/agora.io(31352): device_info_android.cc: (line 149): : num_cameras_=2 W/meiyan (31352): NativeContext_Android::initContext enter, sharedContext: 0x0 D/spdlog (31352): [2023-07-22 17:31:45.486] [31352] [debug] [iris_rtc_engine_impl.cc:114] api name RtcEngine_getNativeHandle params {} D/spdlog (31352): [2023-07-22 17:31:45.488] [31352] [debug] [iris_rtc_engine_impl.cc:132] ret 0 result {"result":12970367399067393184} W/meiyan (31352): [DEBUG] Surface created! I/agora.io(31352): [Extension]: VideoProcess extension init success I/agora.io(31352): device_info_android.cc: (line 172): camera index: 1 info: device_name=camera2 1, facing front, device_id=1 E/flutter (31352): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: type 'double' is not a subtype of type 'int' in type cast E/flutter (31352): #0 RtcEngineImpl.getNativeHandle E/flutter (31352): <asynchronous suspension> E/flutter (31352): #1 new StreamBloc.<anonymous closure> E/flutter (31352): <asynchronous suspension> E/flutter (31352): #2 Bloc.on.<anonymous closure>.handleEvent E/flutter (31352): <asynchronous suspension> E/flutter (31352): I/agora.io(31352): device_info_android.cc: (line 172): camera index: 0 info: device_name=camera2 0, facing back, device_id=0 I/agora.io(31352): [VMSC] find index 1 which unique name "camera2 1, facing front" match request camera source 1 which facing "front" I/agora.io(31352): device_info_android.cc: (line 149): : num_cameras_=2 I/agora.io(31352): device_info_android.cc: (line 172): camera index: 1 info: device_name=camera2 1, facing front, device_id=1 I/agora.io(31352): device_info_android.cc: (line 172): camera index: 0 info: device_name=camera2 0, facing back, device_id=0 I/agora.io(31352): EglBase14: SDK version: 31. isEGL14Supported: true I/agora.io(31352): EglBase14: SDK version: 31. isEGL14Supported: true I/agora.io(31352): EglBase14: SDK version: 31. isEGL14Supported: true W/agora.io(31352): VideoCaptureFactory: createVideoCapture() 1, captureToTexture: false, camera_selected: -1, camera_selected_level: 2, pqFirst: true I/agora.io(31352): EglBase14: SDK version: 31. isEGL14Supported: true I/flutter (31352): eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZXNzaW9uSWQiOiI2NGJhYTdjNzczNGIxZjJkMTc0OTg5M2IiLCJzZXNzaW9uVVVJRCI6ImFhZjE3NDQwLWU5ODEtNGE5Zi04NTJmLWQ3Nzc1NDE2OWJjZSIsImlhdCI6MTY4OTk1NDI0N30.bwLSy4XGl_c14HjxMjj2BO8OqDPqpJEY-do3OU52k2k I/agora.io(31352): EglBase14: makeCurrent()io.agora.base.internal.video.EglBase14@edb6cf2 I/agora.io(31352): TextureBufferPool: VideoCapturerThread init buffer pool, ownGlThread: false cnt: 4 I/BufferQueueConsumer(31352): [](id:7a7800000002,api:0,p:-1,c:31352) connect: controlledByApp=true W/agora.io(31352): VideoCaptureCamera2: face detect no change E/agora.io(31352): device_info_android.cc: (line 124): unsupported videoType 0 I/agora.io(31352): VideoCaptureCamera2: allocate: requested (640 x 360) @15fps I/agora.io(31352): VideoCaptureCamera2: format list: [{width=4608, fps=20, format=35, height=3456}, {width=4608, fps=20, format=35, height=2592}, {width=4160, fps=20, format=35, height=3120}, {width=4160, fps=20, format=35, height=2352}, {width=4032, fps=20, format=35, height=3024}, {width=4032, fps=20, format=35, height=2268}, {width=3840, fps=30, format=35, height=2160}, {width=3264, fps=30, format=35, height=2448}, {width=3264, fps=30, format=35, height=1840}, {width=3120, fps=30, format=35, height=1440}, {width=3072, fps=30, format=35, height=1418}, {width=2944, fps=30, format=35, height=1656}, {width=2560, fps=30, format=35, height=1920}, {width=2560, fps=30, format=35, height=1440}, {width=2560, fps=30, format=35, height=1280}, {width=2340, fps=30, format=35, height=1080}, {width=2280, fps=30, format=35, height=1080}, {width=2176, fps=30, format=35, height=2176}, {width=1920, fps=30, format=35, height=1440}, {width=1920, fps=30, format=35, height=1088}, {width=1920, fps=30, format=35, height=1080}, {width=1600, fps=30, format=35, height=1200}, {width=1600, fps=30, format=35, height=720}, {width=1560, fps=30, format=35, height=720}, {width=1520, fps=30, format=35, height=720}, {width=1440, fps=30, format=35, height=1088}, {width=1440, fps=30, format=35, height=1080}, {width=1440, fps=30, format=35, height=720}, {width=1280, fps=30, format=35, height=960}, {width=1280, fps=30, format=35, height=768}, {width=1280, fps=30, format=35, height=720}, {width=1080, fps=30, format=35, height=1080}, {width=1080, fps=30, format=35, height=720}, {width=1024, fps=30, format=35, height=768}, {width=960, fps=30, format=35, height=720}, {width=960, fps=30, format=35, height=540}, {width=800, fps=30, format=35, height=600}, {width=720, fps=30, format=35, height=720}, {width=720, fps=30, format=35, height=480}, {width=640, fps=30, format=35, height=480}, {width=352, fps=30, format=35, height=288}, {width=320, fps=30, format=35, height=240}, {width=192, fps=30, format=35, height=144}, {width=192, fps=30, format=35, height=108}, {width=176, fps=30, format=35, height=144}, {width=160, fps=30, format=35, height=96}] E/agora.io(31352): device_info_android.cc: (line 87): unsupported pixel format: 0 W/agora.io(31352): device_info_impl.cc: (line 326): Best camera format: 640x480@30fps, color format: 1 I/agora.io(31352): VideoCaptureCamera2: fpsRanges: [[10, 10], [5, 15], [15, 15], [15, 20], [20, 20], [24, 24], [5, 30], [30, 30]] I/agora.io(31352): VideoCaptureCamera: findBestFrameRateRange [{"min":10000,"max":10000}, {"min":5000,"max":15000}, {"min":15000,"max":15000}, {"min":15000,"max":20000}, {"min":20000,"max":20000}, {"min":24000,"max":24000}, {"min":5000,"max":30000}, {"min":30000,"max":30000}] I/agora.io(31352): VideoCaptureCamera: sorted fps Ranges List order by max first:[{"min":10000,"max":10000}, {"min":5000,"max":15000}, {"min":15000,"max":15000}, {"min":15000,"max":20000}, {"min":20000,"max":20000}, {"min":24000,"max":24000}, {"min":5000,"max":30000}, {"min":30000,"max":30000}] I/agora.io(31352): VideoCaptureCamera: set fps : {"min":5000,"max":15000} to camera in PQ first mode, request:15000 I/agora.io(31352): VideoCaptureCamera2: allocate: matched (640 x 480) @[5 - 15] I/agora.io(31352): VideoCaptureCamera2: allocate() face detection: 1 15 true I/agora.io(31352): VideoCaptureCamera2: startCaptureMaybeAsync() I/agora.io(31352): VideoCaptureCamera2: changeCameraStateAndNotify() 0 W/libc (31352): Access denied finding property "persist.vendor.camera.privapp.list" W/com.heartlive(31352): type=1400 audit(0.0:18878): avc: denied { read } for comm=4167566964656F537263446576202D name="u:object_r:vendor_camera_mtk_prop:s0" dev="tmpfs" ino=9104 scontext=u:r:untrusted_app:s0:c232,c258,c512,c768 tcontext=u:object_r:vendor_camera_mtk_prop:s0 tclass=file permissive=0 app=com.heartlive I/agora.io(31352): VideoCaptureCamera2: CameraDevice.StateCallback onOpened I/agora.io(31352): [VMSC]: update last_capture_format: width:640, height:360, fps:15 I/agora.io(31352): update request format, [w:640, h:360, fps:15], reset format table I/agora.io(31352): VideoCaptureCamera2: changeCameraStateAndNotify() 1 W/agora.io(31352): video_capture_impl.cc: (line 328): Regulator set output format, width: 640, height: 360, fps: 15, fixed: 0 I/agora.io(31352): [VMSC]: Start camera capturing with cap: width:640, height:480, fps:15 I/BufferQueueConsumer(31352): [](id:7a7800000003,api:0,p:-1,c:31352) connect: controlledByApp=true I/agora.io(31352): VideoCaptureCamera2: isExposureSupported AE mode = 0 I/agora.io(31352): VideoCaptureCamera2: isExposureSupported AE mode = 1 W/agora.io(31352): VideoCaptureCamera2: face detect not ready I/agora.io(31352): VideoCaptureCamera2: face dedect, numDetectedFaces: 15 I/agora.io(31352): [VMSC]: onCameraStarted callback I/agora.io(31352): (00000203): VideoRendererWrapper::getViewMetaInfo(this:0xb400006e43b0e2f0, void) W/agora.io(31352): [BW]: (long time task) [AgMajor --> AgVideoSrcDev] state_machine.cpp:202: pickup time 0, execute time 384, overall time 384 W/agora.io(31352): [BW]: (long time task) [AgMajor --> AgVideoSrcDev] state_machine.cpp:100: pickup time 383, execute time 0, overall time 383 I/flutter (31352): I/flutter (31352): ╔╣ Response ║ GET ║ Status: 200 OK I/flutter (31352): ║ https://dev-api.heartlive.net/api/utils/board-bg-images I/flutter (31352): ╚══════════════════════════════════════════════════════════════════════════════════════════╝ I/BufferQueueProducer(31352): [ImageReader-640x480f23m2-31352-0](id:7a7800000003,api:4,p:868,c:31352) connect: api=4 producerControlledByApp=false I/agora.io(31352): VideoCaptureCamera2: CrPreviewSessionListener.onConfigured I/agora.io(31352): VideoCaptureCamera2: CrPreviewSessionListener.onConfigured facedetect: 0 I/agora.io(31352): VideoCaptureCamera2: changeCameraStateAndNotify() 2 I/agora.io(31352): video_capture_android.cc: (line 389): OnStarted() I/agora.io(31352): capture regulator, old[w:0, h:0], new[w:640, h:480] I/agora.io(31352): adapter resetResolutionTable. I/agora.io(31352): VAdapt(0xb400006e73ad7650[REG]) in:1(640x480) out:1(640x360) cropped:640x360 scaled:1 changes:0 ts:21227022interv:66666666 decimator:0|15.00|0 I/agora.io(31352): camera capture out color space info: color_range 2, color_matrix 6 I/agora.io(31352): [VFA]: dimension changed received, width 640, height 360, tick: 2 W/agora.io(31352): fallback to I420, buffer type 1, requested type 4 format 0 I/agora.io(31352): [Extension]: VideoProcess frame type changed: 0 I/agora.io(31352): onAgoraVideoFrame observer:0xb400006e23ad6bf0, position:1, channelId:, uid:0, frame(w:360, h:640, r:0) I/agora.io(31352): [VNR] Local stream(0) first rendered with resolution 360 * 640 I/agora.io(31352): (00000204): RtcEngineEventHandlerCallback::onVideoSizeChanged->onVideoSizeChanged(this:0xb400006e43b11a28, uid:0, width:360, height:640, rotation:0) I/agora.io(31352): onAgoraVideoFrame observer:0xb400006e23ad6bf0, position:4, channelId:, uid:0, frame(w:360, h:640, r:0) I/agora.io(31352): VAdapt(0xb400006e73ad7650[REG]) Drop Frame, in:2(640x480) out:1 scaled:1 changes:0 ts:21227044 interv:66666666 W/agora.io(31352): fallback to I420, buffer type 1, requested type 4 format 0 I/agora.io(31352): onAgoraVideoFrame observer:0xb400006e23ad6bf0, position:1, channelId:, uid:0, frame(w:360, h:640, r:0) I/agora.io(31352): onAgoraVideoFrame observer:0xb400006e23ad6bf0, position:4, channelId:, uid:0, frame(w:360, h:640, r:0) W/agora.io(31352): fallback to I420, buffer type 1, requested type 4 format 0 I/agora.io(31352): onAgoraVideoFrame observer:0xb400006e23ad6bf0, position:1, channelId:, uid:0, frame(w:360, h:640, r:0) I/agora.io(31352): onAgoraVideoFrame observer:0xb400006e23ad6bf0, position:4, channelId:, uid:0, frame(w:360, h:640, r:0) W/agora.io(31352): ... (ignore to avoid too many logs) I/agora.io(31352): onAgoraVideoFrame observer:0xb400006e23ad6bf0, position:1, channelId:, uid:0, frame(w:360, h:640, r:0) I/agora.io(31352): onAgoraVideoFrame observer:0xb400006e23ad6bf0, position:4, channelId:, uid:0, frame(w:360, h:640, r:0) I/agora.io(31352): onAgoraVideoFrame observer:0xb400006e23ad6bf0, position:1, channelId:, uid:0, frame(w:360, h:640, r:0) I/agora.io(31352): onAgoraVideoFrame observer:0xb400006e23ad6bf0, position:4, channelId:, uid:0, frame(w:360, h:640, r:0) I/agora.io(31352): onAgoraVideoFrame observer:0xb400006e23ad6bf0, position:1, channelId:, uid:0, frame(w:360, h:640, r:0) I/agora.io(31352): onAgoraVideoFrame observer:0xb400006e23ad6bf0, position:4, channelId:, uid:0, frame(w:360, h:640, r:0) I/agora.io(31352): onAgoraVideoFrame observer:0xb400006e23ad6bf0, position:1, channelId:, uid:0, frame(w:360, h:640, r:0) I/agora.io(31352): onAgoraVideoFrame observer:0xb400006e23ad6bf0, position:4, channelId:, uid:0, frame(w:360, h:640, r:0) I/agora.io(31352): onAgoraVideoFrame observer:0xb400006e23ad6bf0, position:1, channelId:, uid:0, frame(w:360, h:640, r:0) I/agora.io(31352): onAgoraVideoFrame observer:0xb400006e23ad6bf0, position:4, channelId:, uid:0, frame(w:360, h:640, r:0) I/agora.io(31352): onAgoraVideoFrame observer:0xb400006e23ad6bf0, position:1, channelId:, uid:0, frame(w:360, h:640, r:0) I/agora.io(31352): onAgoraVideoFrame observer:0xb400006e23ad6bf0, position:4, channelId:, uid:0, frame(w:360, h:640, r:0) I/agora.io(31352): onAgoraVideoFrame observer:0xb400006e23ad6bf0, position:1, channelId:, uid:0, frame(w:360, h:640, r:0) I/agora.io(31352): onAgoraVideoFrame observer:0xb400006e23ad6bf0, position:4, channelId:, uid:0, frame(w:360, h:640, r:0) I/agora.io(31352): ... (ignore to avoid too many logs) I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): VAdapt(0xb400006e73ad7650[REG]) in:183(640x480) out:181(640x360) cropped:640x360 scaled:1 changes:0 ts:21239449interv:66666666 decimator:15|15.00|15 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): VAdapt(0xb400006e73ad7650[REG]) in:363(640x480) out:361(640x360) cropped:640x360 scaled:1 changes:0 ts:21251781interv:66666666 decimator:15|15.00|15 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): VAdapt(0xb400006e73ad7650[REG]) in:543(640x480) out:541(640x360) cropped:640x360 scaled:1 changes:0 ts:21264105interv:66666666 decimator:15|15.00|15 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): VAdapt(0xb400006e73ad7650[REG]) in:723(640x480) out:721(640x360) cropped:640x360 scaled:1 changes:0 ts:21276424interv:66666666 decimator:15|15.00|15 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): VAdapt(0xb400006e73ad7650[REG]) in:903(640x480) out:901(640x360) cropped:640x360 scaled:1 changes:0 ts:21288762interv:66666666 decimator:15|15.00|15 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): VAdapt(0xb400006e73ad7650[REG]) in:1083(640x480) out:1081(640x360) cropped:640x360 scaled:1 changes:0 ts:21301087interv:66666666 decimator:15|15.00|15 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): VAdapt(0xb400006e73ad7650[REG]) in:1263(640x480) out:1261(640x360) cropped:640x360 scaled:1 changes:0 ts:21313417interv:66666666 decimator:15|15.00|15 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0 I/agora.io(31352): [Extension]: BeautyEngine process avg time:0

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.