Skip to content

Commit 704d16a

Browse files
author
HeZhengQing
committed
Merge branch 'dev/4.6.0' of github.com:AgoraIO/API-Examples into dev/4.6.0
2 parents 2dd869e + 823f8f3 commit 704d16a

6 files changed

Lines changed: 50 additions & 603 deletions

File tree

Android/APIExample/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,9 @@ follows:
8989
Since version 4.0.0, Agora SDK provides an Extension Interface Framework. Developers could publish their own video/audio extension to Agora Extension Market. In this project includes a sample SimpleFilter example, by default it is disabled.
9090
In order to enable it, you could do as follows:
9191
92-
1. Download [opencv](https://agora-adc-artifacts.s3.cn-north-1.amazonaws.com.cn/androidLibs/opencv4.zip) library, unzip it and copy into Android/APIExample/agora-simple-filter/src/main/libs
92+
1. Download [opencv](https://agora-adc-artifacts.s3.cn-north-1.amazonaws.com.cn/androidLibs/opencv4.zip) library, unzip it and copy into Android/APIExample/agora-simple-filter/src/main/jniLibs
9393
```text
94-
Android/APIExample/agora-simple-filter/src/main/libs
94+
Android/APIExample/agora-simple-filter/src/main/jniLibs
9595
├── arm64-v8a
9696
└── armeabi-v7a
9797
```

Android/APIExample/README.zh.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,9 @@
8585
8686
从4.0.0SDK开始,Agora SDK支持插件系统和开放的云市场帮助开发者发布自己的音视频插件,本项目包含了一个SimpleFilter示例,默认是禁用的状态,如果需要开启编译和使用需要完成以下步骤:
8787
88-
1. 下载 [opencv](https://agora-adc-artifacts.s3.cn-north-1.amazonaws.com.cn/androidLibs/opencv4.zip) 解压后复制到 Android/APIExample/agora-simple-filter/src/main/libs
88+
1. 下载 [opencv](https://agora-adc-artifacts.s3.cn-north-1.amazonaws.com.cn/androidLibs/opencv4.zip) 解压后复制到 Android/APIExample/agora-simple-filter/src/main/jniLibs
8989
```text
90-
Android/APIExample/agora-simple-filter/src/main/libs
90+
Android/APIExample/agora-simple-filter/src/main/jniLibs
9191
├── arm64-v8a
9292
└── armeabi-v7a
9393
```

Android/APIExample/app/src/main/java/io/agora/api/example/examples/advanced/SendDataStream.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ public class SendDataStream extends BaseFragment implements View.OnClickListener
6363
*/
6464
private byte[] data;
6565

66+
private int streamId;
67+
6668
@Nullable
6769
@Override
6870
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@@ -197,9 +199,17 @@ public void onPermissionsResult(boolean allPermissionsGranted, String[] permissi
197199
* {@link SendDataStream#iMetadataObserver}.
198200
* The metadata here can be flexibly replaced according to your own business.*/
199201
data = String.valueOf(new Date().toString()).getBytes(Charset.forName("UTF-8"));
200-
int streamId = engine.createDataStream(true, true);
201-
engine.sendStreamMessage(streamId, data);
202+
sendStreamMessage(data);
203+
}
204+
}
205+
206+
private void sendStreamMessage(byte[] data){
207+
if (streamId == 0) {
208+
// You can call this method to create a data stream and improve the reliability and ordering of data transmission.
209+
// https://api-ref.agora.io/en/voice-sdk/android/4.x/API/class_irtcengine.html#api_irtcengine_createdatastream
210+
streamId = engine.createDataStream(true, true);
202211
}
212+
engine.sendStreamMessage(streamId, data);
203213
}
204214

205215
private void joinChannel(String channelId) {

Android/APIExample/app/src/main/java/io/agora/api/example/examples/advanced/VideoProcessExtension.java

Lines changed: 34 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,8 @@ public class VideoProcessExtension extends BaseFragment implements View.OnClickL
6969
private FrameLayout fl_local, fl_remote;
7070
private LinearLayout controlPanel;
7171
private Button join;
72-
private Switch shapeBeauty, makeUp, beauty, virtualBackground, lightness2, colorful2, noiseReduce2;
72+
private Switch shapeBeauty, beauty, virtualBackground, lightness2, colorful2, noiseReduce2;
7373
private SeekBar seek_lightness, seek_redness, seek_sharpness, seek_videoEnhance, seek_smoothness, seek_strength, seek_skin;
74-
// Makeup
75-
private SeekBar sbBrowStrength, sbLashStrength, sbShadowStrength, sbPupilStrength, sbBlushStrength, sbLipStrength;
76-
private Spinner spinnerBrowStyle, spinnerLashStyle, spinnerShadowStyle, spinnerPupilStyle, spinnerBlushStyle, spinnerLipStyle;
77-
private Spinner spinnerBrowColor, spinnerLashColor, spinnerShadowColor, spinnerPupilColor, spinnerBlushColor, spinnerLipColor;
7874
// Beauty Shape
7975
private SeekBar sbShapeBeautifyAreaIntensity, sbShapeBeautifyStyleIntensity;
8076
private Spinner spinnerShapeBeautyArea, spinnerShapeBeautifyStyle;
@@ -85,7 +81,6 @@ public class VideoProcessExtension extends BaseFragment implements View.OnClickL
8581
private boolean joined = false;
8682
private BeautyOptions beautyOptions = new BeautyOptions();
8783
private FilterEffectOptions filterEffectOptions = new FilterEffectOptions();
88-
private MpOptions makeUpOptions = new MpOptions();
8984
private FaceShapeBeautyOptions faceShapeBeautyOptions = new FaceShapeBeautyOptions();
9085
private FaceShapeAreaOptions faceShapeAreaOptions = new FaceShapeAreaOptions();
9186
private double skinProtect = 1.0;
@@ -110,8 +105,6 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
110105
controlPanel = view.findViewById(R.id.controlPanel);
111106
shapeBeauty = view.findViewById(R.id.switch_face_shape_beautify);
112107
shapeBeauty.setOnCheckedChangeListener(this);
113-
makeUp = view.findViewById(R.id.switch_face_makeup);
114-
makeUp.setOnCheckedChangeListener(this);
115108
beauty = view.findViewById(R.id.switch_face_beautify);
116109
beauty.setOnCheckedChangeListener(this);
117110
lightness2 = view.findViewById(R.id.switch_lightness2);
@@ -148,49 +141,6 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
148141
spinnerShapeBeautifyStyle = view.findViewById(R.id.spinner_shape_beautify_style);
149142
spinnerShapeBeautifyStyle.setOnItemSelectedListener(this);
150143

151-
// Makeup
152-
sbBrowStrength = view.findViewById(R.id.sb_brow_strength);
153-
sbBrowStrength.setOnSeekBarChangeListener(this);
154-
sbLashStrength = view.findViewById(R.id.sb_lash_strength);
155-
sbLashStrength.setOnSeekBarChangeListener(this);
156-
sbShadowStrength = view.findViewById(R.id.sb_shadow_strength);
157-
sbShadowStrength.setOnSeekBarChangeListener(this);
158-
sbPupilStrength = view.findViewById(R.id.sb_pupil_strength);
159-
sbPupilStrength.setOnSeekBarChangeListener(this);
160-
sbBlushStrength = view.findViewById(R.id.sb_blush_strength);
161-
sbBlushStrength.setOnSeekBarChangeListener(this);
162-
sbLipStrength = view.findViewById(R.id.sb_lip_strength);
163-
sbLipStrength.setOnSeekBarChangeListener(this);
164-
165-
spinnerBrowStyle = view.findViewById(R.id.spinner_brow_style);
166-
spinnerLashStyle = view.findViewById(R.id.spinner_lash_style);
167-
spinnerShadowStyle = view.findViewById(R.id.spinner_shadow_style);
168-
spinnerPupilStyle = view.findViewById(R.id.spinner_pupil_style);
169-
spinnerBlushStyle = view.findViewById(R.id.spinner_blush_style);
170-
spinnerLipStyle = view.findViewById(R.id.spinner_lip_style);
171-
172-
spinnerBrowColor = view.findViewById(R.id.spinner_brow_color);
173-
spinnerLashColor = view.findViewById(R.id.spinner_lash_color);
174-
spinnerShadowColor = view.findViewById(R.id.spinner_shadow_color);
175-
spinnerPupilColor = view.findViewById(R.id.spinner_pupil_color);
176-
spinnerBlushColor = view.findViewById(R.id.spinner_blush_color);
177-
spinnerLipColor = view.findViewById(R.id.spinner_lip_color);
178-
179-
spinnerBrowStyle.setOnItemSelectedListener(this);
180-
spinnerLashStyle.setOnItemSelectedListener(this);
181-
spinnerShadowStyle.setOnItemSelectedListener(this);
182-
spinnerPupilStyle.setOnItemSelectedListener(this);
183-
spinnerBlushStyle.setOnItemSelectedListener(this);
184-
spinnerLipStyle.setOnItemSelectedListener(this);
185-
186-
spinnerBrowColor.setOnItemSelectedListener(this);
187-
spinnerLashColor.setOnItemSelectedListener(this);
188-
spinnerShadowColor.setOnItemSelectedListener(this);
189-
spinnerPupilColor.setOnItemSelectedListener(this);
190-
spinnerBlushColor.setOnItemSelectedListener(this);
191-
spinnerLipColor.setOnItemSelectedListener(this);
192-
193-
194144
virtualBgType = view.findViewById(R.id.virtual_bg_type);
195145
virtualBgType.setOnCheckedChangeListener((group, checkedId) -> {
196146
resetVirtualBackground();
@@ -280,7 +230,6 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
280230
}
281231

282232
engine.enableExtension("agora_video_filters_clear_vision", "clear_vision", true);
283-
updateExtensionProperty();
284233
updateFaceShapeBeautyStyleOptions();
285234
} catch (Exception e) {
286235
e.printStackTrace();
@@ -301,12 +250,6 @@ private void updateFaceShapeBeautyStyleOptions() {
301250
}
302251
}
303252

304-
private void updateExtensionProperty() {
305-
if (engine != null) {
306-
engine.setExtensionProperty("agora_video_filters_clear_vision", "clear_vision", "makeup_options", makeUpOptions.toJson(), Constants.MediaSourceType.PRIMARY_CAMERA_SOURCE);
307-
}
308-
}
309-
310253
@Override
311254
public void onDestroy() {
312255
super.onDestroy();
@@ -425,7 +368,38 @@ public void onItemSelected(AdapterView<?> parent, View view, int position, long
425368

426369
switch (parent.getId()) {
427370
case R.id.spinner_shape_beauty_area:
428-
faceShapeAreaOptions.shapeArea = position - 1;
371+
faceShapeAreaOptions.shapeArea = switch (position) {
372+
case 1 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_HEADSCALE;
373+
case 2 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_FOREHEAD;
374+
case 3 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_FACECONTOUR;
375+
case 4 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_FACELENGTH;
376+
case 5 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_FACEWIDTH;
377+
case 6 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_CHEEKBONE;
378+
case 7 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_CHEEK;
379+
case 8 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_MANDIBLE;
380+
case 9 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_CHIN;
381+
case 10 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_EYESCALE;
382+
case 11 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_EYEDISTANCE;
383+
case 12 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_EYEPOSITION;
384+
case 13 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_EYELID;
385+
case 14 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_EYEPUPILS;
386+
case 15 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_EYEINNERCORNER;
387+
case 16 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_EYEOUTERCORNER;
388+
case 17 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_NOSELENGTH;
389+
case 18 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_NOSEWIDTH;
390+
case 19 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_NOSEWING;
391+
case 20 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_NOSEROOT;
392+
case 21 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_NOSEBRIDGE;
393+
case 22 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_NOSETIP;
394+
case 23 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_NOSEGENERAL;
395+
case 24 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_MOUTHSCALE;
396+
case 25 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_MOUTHPOSITION;
397+
case 26 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_MOUTHSMILE;
398+
case 27 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_MOUTHLIP;
399+
case 28 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_EYEBROWPOSITION;
400+
case 29 -> FaceShapeAreaOptions.FACE_SHAPE_AREA_EYEBROWTHICKNESS;
401+
default -> FaceShapeAreaOptions.FACE_SHAPE_AREA_NONE;
402+
};
429403
//get origin beauty option params
430404
FaceShapeAreaOptions originOptions = engine.getFaceShapeAreaOptions(faceShapeAreaOptions.shapeArea);
431405
if (originOptions != null) {
@@ -438,38 +412,7 @@ public void onItemSelected(AdapterView<?> parent, View view, int position, long
438412
faceShapeBeautyOptions.shapeStyle = position;
439413
updateFaceShapeBeautyStyleOptions();
440414
return;
441-
case R.id.spinner_brow_style:
442-
makeUpOptions.browStyle = position;
443-
break;
444-
case R.id.spinner_lash_style:
445-
makeUpOptions.lashStyle = position;
446-
break;
447-
case R.id.spinner_shadow_style:
448-
makeUpOptions.shadowStyle = position;
449-
break;
450-
case R.id.spinner_pupil_style:
451-
makeUpOptions.pupilStyle = position;
452-
break;
453-
case R.id.spinner_blush_style:
454-
makeUpOptions.blushStyle = position;
455-
break;
456-
case R.id.spinner_lip_style:
457-
makeUpOptions.lipStyle = position;
458-
break;
459-
case R.id.spinner_brow_color:
460-
makeUpOptions.browColor = position;
461-
break;
462-
case R.id.spinner_lash_color:
463-
makeUpOptions.lashColor = position;
464-
break;
465-
case R.id.spinner_blush_color:
466-
makeUpOptions.blushColor = position;
467-
break;
468-
case R.id.spinner_lip_color:
469-
makeUpOptions.lipColor = position;
470-
break;
471415
}
472-
updateExtensionProperty();
473416
}
474417

475418
@Override
@@ -486,15 +429,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
486429
return;
487430
}
488431
updateFaceShapeBeautyStyleOptions();
489-
} else if (buttonView.getId() == makeUp.getId()) {
490-
if (isChecked && !engine.isFeatureAvailableOnDevice(Constants.FEATURE_VIDEO_BEAUTY_EFFECT)) {
491-
buttonView.setChecked(false);
492-
Toast.makeText(requireContext(), R.string.feature_unavailable, Toast.LENGTH_SHORT).show();
493-
return;
494-
}
495-
makeUpOptions.enable_mu = isChecked;
496-
updateExtensionProperty();
497-
} else if (buttonView.getId() == beauty.getId()) {
432+
} else if (buttonView.getId() == beauty.getId()) {
498433
if (isChecked && !engine.isFeatureAvailableOnDevice(Constants.FEATURE_VIDEO_BEAUTY_EFFECT)) {
499434
buttonView.setChecked(false);
500435
Toast.makeText(requireContext(), R.string.feature_unavailable, Toast.LENGTH_SHORT).show();
@@ -541,24 +476,6 @@ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
541476
} else if (seekBar.getId() == sbShapeBeautifyStyleIntensity.getId()) {
542477
faceShapeBeautyOptions.styleIntensity = progress;
543478
updateFaceShapeBeautyStyleOptions();
544-
} else if (seekBar.getId() == sbBrowStrength.getId()) {
545-
makeUpOptions.browStrength = value;
546-
updateExtensionProperty();
547-
} else if (seekBar.getId() == sbLashStrength.getId()) {
548-
makeUpOptions.lashStrength = value;
549-
updateExtensionProperty();
550-
} else if (seekBar.getId() == sbShadowStrength.getId()) {
551-
makeUpOptions.shadowStrength = value;
552-
updateExtensionProperty();
553-
} else if (seekBar.getId() == sbPupilStrength.getId()) {
554-
makeUpOptions.pupilStrength = value;
555-
updateExtensionProperty();
556-
} else if (seekBar.getId() == sbBlushStrength.getId()) {
557-
makeUpOptions.blushStrength = value;
558-
updateExtensionProperty();
559-
} else if (seekBar.getId() == sbLipStrength.getId()) {
560-
makeUpOptions.lipStrength = value;
561-
updateExtensionProperty();
562479
} else if (seekBar.getId() == seek_lightness.getId()) {
563480
beautyOptions.lighteningLevel = value;
564481
engine.setBeautyEffectOptions(beauty.isChecked(), beautyOptions);

0 commit comments

Comments
 (0)