diff --git a/java/impl/org/linphone/tools/H264Helper.java b/java/impl/org/linphone/tools/H264Helper.java new file mode 100644 index 0000000000000000000000000000000000000000..49f4ced2968505b7f461833aacdcb042f6280da8 --- /dev/null +++ b/java/impl/org/linphone/tools/H264Helper.java @@ -0,0 +1,81 @@ +package org.linphone.tools; + + +import android.os.Build; + +import org.linphone.core.LinphoneCore; +import org.linphone.mediastream.Log; + +/** + * Created by brieucviel on 09/12/2016. + */ + +public class H264Helper { + private static String FILTER_NAME_OPENH264_ENC = "MSOpenH264Enc" ; + private static String FILTER_NAME_OPENH264_DEC = "MSOpenH264Dec" ; + private static String FILTER_NAME_MEDIA_CODEC_ENC = "MSMediaCodecH264Enc" ; + private static String FILTER_NAME_MEDIA_CODEC_DEC = "MSMediaCodecH264Dec" ; + + public static String MODE_AUTO = "Auto" ; + public static String MODE_OPENH264 = "OpenH264" ; + public static String MODE_MEDIA_CODEC = "MediaCodec" ; + + + /** + * H264Helper + */ + public H264Helper() { + + } + + + /** + * Define the Codec to use between MediaCodec and OpenH264 + * Possible mode are: + * - Auto to let the system choose in function of you OS version, + * - OpenH264 to enable OpenH264 Encoder and Decoder, + * - Mediacodec to enable Mediacodec only. + * @param mode String value between Auto, OpenH264 and MediaCodec + */ + public static void setH264Mode(String mode, LinphoneCore linphoneCore){ + if(mode.equals(MODE_OPENH264)){ + Log.e("H264Helper"," setH264Mode MODE_OPENH264 - Mode = "+mode); + linphoneCore.getMSFactory().enableFilterFromName(FILTER_NAME_MEDIA_CODEC_DEC , false); + linphoneCore.getMSFactory().enableFilterFromName(FILTER_NAME_MEDIA_CODEC_ENC , false); + linphoneCore.getMSFactory().enableFilterFromName(FILTER_NAME_OPENH264_DEC , true); + linphoneCore.getMSFactory().enableFilterFromName(FILTER_NAME_OPENH264_ENC , true); + }else if(mode.equals(MODE_MEDIA_CODEC)){ + Log.e("H264Helper"," setH264Mode MODE_MEDIA_CODEC - Mode = "+mode); + linphoneCore.getMSFactory().enableFilterFromName(FILTER_NAME_OPENH264_DEC , false); + linphoneCore.getMSFactory().enableFilterFromName(FILTER_NAME_OPENH264_ENC , false); + linphoneCore.getMSFactory().enableFilterFromName(FILTER_NAME_MEDIA_CODEC_DEC , true); + linphoneCore.getMSFactory().enableFilterFromName(FILTER_NAME_MEDIA_CODEC_ENC , true); + }else if(mode.equals(MODE_AUTO)){ + Log.e("H264Helper"," setH264Mode MODE_AUTO - Mode = "+mode); + // if android >= 5.0 use MediaCodec + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { + Log.e("H264Helper"," setH264Mode MODE_AUTO 1 - Mode = "+mode); + Log.i("LinphoneCoreFactoryImpl"," Openh264 disabled on the project, now using MediaCodec"); + linphoneCore.getMSFactory().enableFilterFromName(FILTER_NAME_OPENH264_DEC , false); + linphoneCore.getMSFactory().enableFilterFromName(FILTER_NAME_OPENH264_ENC , false); + linphoneCore.getMSFactory().enableFilterFromName(FILTER_NAME_MEDIA_CODEC_DEC , true); + linphoneCore.getMSFactory().enableFilterFromName(FILTER_NAME_MEDIA_CODEC_ENC , true); + } + //otherwise use OpenH264 + else{ + Log.e("H264Helper"," setH264Mode MODE_AUTO 2 - Mode = "+mode); + Log.i("LinphoneCoreFactoryImpl"," Openh264 enabled on the project"); + linphoneCore.getMSFactory().enableFilterFromName(FILTER_NAME_MEDIA_CODEC_DEC , false); + linphoneCore.getMSFactory().enableFilterFromName(FILTER_NAME_MEDIA_CODEC_ENC , false); + linphoneCore.getMSFactory().enableFilterFromName(FILTER_NAME_OPENH264_DEC , true); + linphoneCore.getMSFactory().enableFilterFromName(FILTER_NAME_OPENH264_ENC , true); + } + }else { + Log.e("LinphoneCoreFactoryImpl"," Error: Openh264 mode not reconized !"); + + } + Log.e("H264Helper"," setH264Mode - Mode = "+mode); + } + +} +