Merge branch 'tablet'

This commit is contained in:
Sylvain Berfini 2012-04-27 15:46:41 +02:00
commit adcc6657bc
26 changed files with 2425 additions and 166 deletions

View file

@ -7,6 +7,7 @@
<classpathentry kind="src" path="submodules/linphone/coreapi/help/java"/> <classpathentry kind="src" path="submodules/linphone/coreapi/help/java"/>
<classpathentry kind="src" path="src"/> <classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/> <classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry kind="lib" path="libs/aXMLRPC.jar"/> <classpathentry exported="true" kind="lib" path="libs/aXMLRPC.jar"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
<classpathentry kind="output" path="bin/classes"/> <classpathentry kind="output" path="bin/classes"/>
</classpath> </classpath>

View file

@ -2,7 +2,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.linphone" package="org.linphone"
android:versionCode="1220" android:versionName="1.2.2" android:installLocation="auto"> android:versionCode="1220" android:versionName="1.2.2" android:installLocation="auto">
<uses-sdk android:minSdkVersion="3" /> <uses-sdk android:minSdkVersion="3"/>
@ -39,6 +39,7 @@
android:label="@string/app_name" android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar" android:theme="@android:style/Theme.NoTitleBar"
android:launchMode="singleTask" android:launchMode="singleTask"
android:windowSoftInputMode="stateAlwaysHidden|adjustResize"
> <!-- android:alwaysRetainTaskState="true" clearTaskOnLaunch="false"--> > <!-- android:alwaysRetainTaskState="true" clearTaskOnLaunch="false"-->
<intent-filter> <intent-filter>
@ -76,7 +77,7 @@
<!-- android:launchMode="singleTask"--> <!-- android:launchMode="singleTask"-->
<activity android:name="org.linphone.IncallActivity" <activity android:name="org.linphone.IncallActivity"
android:theme="@android:style/Theme.NoTitleBar" android:theme="@android:style/Theme.NoTitleBar"
android:screenOrientation="portrait"> android:configChanges="keyboardHidden|orientation">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
</intent-filter> </intent-filter>
@ -94,14 +95,16 @@
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity android:name="org.linphone.DialerActivity"> <activity android:name="org.linphone.DialerActivity"
android:configChanges="keyboardHidden|orientation">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity android:name="org.linphone.VideoCallActivity" <activity android:name="org.linphone.VideoCallActivity"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:launchMode="singleTop"> android:launchMode="singleTop"
android:configChanges="orientation">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
</intent-filter> </intent-filter>

View file

@ -94,6 +94,7 @@ endif
ifeq ($(wildcard $(linphone-root-dir)/submodules/externals/prebuilts/ffmpeg.mk),) ifeq ($(wildcard $(linphone-root-dir)/submodules/externals/prebuilts/ffmpeg.mk),)
include $(linphone-root-dir)/submodules/externals/build/ffmpeg/Android.mk include $(linphone-root-dir)/submodules/externals/build/ffmpeg/Android.mk
include $(linphone-root-dir)/submodules/externals/build/ffmpeg-no-neon/Android.mk
else else
include $(linphone-root-dir)/submodules/externals/prebuilts/ffmpeg.mk include $(linphone-root-dir)/submodules/externals/prebuilts/ffmpeg.mk
endif endif
@ -117,6 +118,7 @@ endif
include $(linphone-root-dir)/submodules/linphone/build/android/Android.mk include $(linphone-root-dir)/submodules/linphone/build/android/Android.mk
include $(linphone-root-dir)/submodules/linphone/build/android/Android-no-neon.mk
_BUILD_AMR=0 _BUILD_AMR=0
ifneq ($(BUILD_AMRNB), 0) ifneq ($(BUILD_AMRNB), 0)

View file

@ -1,5 +1,5 @@
APP_PROJECT_PATH := $(call my-dir)/../ APP_PROJECT_PATH := $(call my-dir)/../
APP_MODULES :=libspeex libgsm libortp libosip2 libeXosip2 libmediastreamer2 liblinphone APP_MODULES :=libspeex libgsm libortp libosip2 libeXosip2 libmediastreamer2 liblinphone liblinphonenoneon
APP_STL := stlport_static APP_STL := stlport_static
#default values #default values
@ -14,7 +14,9 @@ BUILD_SRTP=1
endif endif
ifeq ($(LINPHONE_VIDEO),1) ifeq ($(LINPHONE_VIDEO),1)
APP_MODULES += libavutil libavcore libavcodec libswscale libvpx APP_MODULES += libavutil libavcore libavcodec libswscale
APP_MODULES += libavutilnoneon libavcorenoneon libavcodecnoneon libswscalenoneon
APP_MODULES += libvpx
endif endif
_BUILD_AMR=0 _BUILD_AMR=0

View file

@ -0,0 +1,122 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="bottom|center_horizontal">
<org.linphone.ui.CameraView
android:id="@+id/video_background"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|bottom"
android:orientation="vertical" >
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/Addresslayout">
<org.linphone.ui.AddressText
android:id="@+id/SipUri"
android:layout_height="wrap_content"
android:hint="sip:"
android:layout_width="fill_parent"
android:lines="1"
android:singleLine="true"
android:layout_weight="0.2"
android:editable="@bool/allow_edit_in_dialer"/>
<org.linphone.ui.EraseButton
android:layout_height="wrap_content"
android:id="@+id/Erase"
style="@style/DialerDigit"
android:layout_width="fill_parent"
android:layout_weight="0.8"
android:text="&lt;"/>
</LinearLayout>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="horizontal">
<org.linphone.ui.Numpad
android:id="@+id/Dialer"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="0.5" />
<LinearLayout
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:layout_weight="0.5"
android:layout_marginLeft="40dp"
android:orientation="vertical">
<org.linphone.ui.CallButton
android:id="@+id/Call"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:layout_weight="3"
android:background="@drawable/clavier_bg"
android:src="@drawable/startcall_green" />
<LinearLayout
android:id="@+id/InCallControls"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:visibility="gone"
android:layout_weight="3" >
<Button
android:id="@+id/AddCall"
style="@style/DialerDigit"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:layout_weight="1"
android:text="@string/AddCallButtonText" />
<Button
android:id="@+id/Back"
style="@style/DialerDigit"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:layout_weight="1"
android:text="@string/CancelButtonText" />
</LinearLayout>
<Button
android:id="@+id/switch_camera"
style="@style/DialerDigit"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:layout_weight="5"
android:visibility="invisible"
android:text="@string/menu_videocall_switch_camera_title" />
<EditText
android:id="@+id/status_label"
android:clickable="false"
android:focusable="false"
android:cursorVisible="false"
android:textSize="12sp"
android:background="#00000000"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:layout_weight="7"
android:textColor="@android:color/white" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</FrameLayout>

View file

@ -0,0 +1,149 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ui="http://schemas.android.com/apk/res/org.linphone"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/conf_header"
android:layout_alignParentTop="true"
android:layout_marginBottom="10dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignWithParentIfMissing="true"
android:minHeight="60sp"
android:background="@drawable/conf_callee_selector_normal" >
<TextView
android:text="@string/conf_conference"
style="@style/callee_address"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center_vertical" />
<ImageButton
android:id="@+id/conf_header_details"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:scaleType="center"
android:src="@drawable/conf_details"/>
</LinearLayout>
<LinearLayout
android:id="@+id/incall_controls_layout"
android:layout_alignParentBottom="true"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="bottom|center_horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<org.linphone.ui.ToggleImageButton
android:id="@+id/toggleMuteMic"
style="@style/incall_control"
ui:checked="@drawable/incall_micro_inverse"
ui:unchecked="@drawable/incall_micro"
ui:bgdrawables="true" />
<ImageButton
android:id="@+id/incallNumpadShow"
style="@style/incall_control"
android:background="@drawable/incall_dialpad" />
<org.linphone.ui.ToggleImageButton
android:id="@+id/toggleSpeaker"
style="@style/incall_control"
ui:checked="@drawable/incall_speaker_inverse"
ui:unchecked="@drawable/incall_speaker"
ui:bgdrawables="true" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageButton
android:id="@+id/addCall"
style="@style/incall_control"
android:background="@drawable/incall_add" />
<ImageButton
android:id="@+id/conf_simple_merge"
style="@style/incall_control"
android:visibility="gone"
android:background="@drawable/incall_merge" />
<org.linphone.ui.ToggleImageButton
android:id="@+id/conf_simple_pause"
style="@style/incall_control"
ui:checked="@drawable/incall_pause_inverse"
ui:unchecked="@drawable/incall_pause"
ui:bgdrawables="true" />
<Button
android:id="@+id/conf_simple_video"
style="@style/incall_control"
android:text="@string/conf_simple_video_bt_txt"
android:background="@drawable/clavier_bg" />
</LinearLayout>
<ImageButton
android:id="@+id/incallHang"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/clavier_bg"
android:minHeight="60dip"
android:src="@drawable/stopcall_red" />
</LinearLayout>
</LinearLayout>
<RelativeLayout
android:id="@+id/picture_wrapper"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_above="@id/incall_controls_layout">
<ImageView
android:id="@+id/incall_picture"
android:visibility="gone"
android:layout_centerInParent="true"
android:paddingBottom="8dip"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:scaleType="fitCenter"
android:minWidth="120dip"
android:minHeight="120dip" />
</RelativeLayout>
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true"
android:dividerHeight="10dip"
android:divider="@android:color/transparent"
android:layout_below="@id/conf_header"
android:layout_above="@id/picture_wrapper"
android:layout_alignWithParentIfMissing="true"
android:fadeScrollbars="false" />
</RelativeLayout>

128
res/layout-xlarge/videocall.xml Executable file
View file

@ -0,0 +1,128 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ui="http://schemas.android.com/apk/res/org.linphone"
android:id="@+id/video_frame"
android:layout_height="fill_parent" android:layout_width="fill_parent">
<org.linphone.mediastream.video.display.GL2JNIView
android:visibility="visible"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:id="@+id/video_surface">
</org.linphone.mediastream.video.display.GL2JNIView>
<SurfaceView
android:layout_height="148dip"
android:layout_width="176dip"
android:id="@+id/video_capture_surface"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="15dip"
android:layout_marginRight="15dip" >
</SurfaceView>
<ImageView
android:layout_width="88dip"
android:layout_height="72dip"
android:id="@+id/imageView1"
android:src="@drawable/video_muted"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="15dip"
android:layout_marginRight="15dip" >
</ImageView>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/QoS"
android:src="@drawable/stat_sys_signal_0"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true" >
</ImageView>
<LinearLayout
android:id="@+id/incall_controls_layout"
android:visibility="gone"
android:layout_alignParentBottom="true"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="bottom|center_horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
style="@style/incall_control"
android:background="@drawable/clavier_bg"
android:id="@+id/switch_camera"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="@string/menu_videocall_switch_camera_title" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<org.linphone.ui.ToggleImageButton
android:id="@+id/toggleMuteMic"
style="@style/incall_control"
ui:checked="@drawable/incall_micro_inverse"
ui:unchecked="@drawable/incall_micro"
ui:bgdrawables="true" />
<ImageButton
android:id="@+id/incallNumpadShow"
style="@style/incall_control"
android:background="@drawable/incall_dialpad" />
<org.linphone.ui.ToggleImageButton
android:id="@+id/toggleSpeaker"
style="@style/incall_control"
ui:checked="@drawable/incall_speaker_inverse"
ui:unchecked="@drawable/incall_speaker"
ui:bgdrawables="true" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageButton
android:id="@+id/addCall"
style="@style/incall_control"
android:background="@drawable/incall_add" />
<org.linphone.ui.ToggleImageButton
android:id="@+id/conf_simple_pause"
style="@style/incall_control"
ui:checked="@drawable/incall_pause_inverse"
ui:unchecked="@drawable/incall_pause"
ui:bgdrawables="true" />
<Button
android:id="@+id/conf_simple_video"
style="@style/incall_control"
android:text="-Video"
android:background="@drawable/clavier_bg" />
</LinearLayout>
<ImageButton
android:id="@+id/incallHang"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/clavier_bg"
android:minHeight="60dip"
android:src="@drawable/stopcall_red" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>

View file

@ -31,6 +31,7 @@ import org.linphone.core.LinphoneCall;
import org.linphone.core.LinphoneCall.State; import org.linphone.core.LinphoneCall.State;
import org.linphone.core.LinphoneCore; import org.linphone.core.LinphoneCore;
import org.linphone.core.Log; import org.linphone.core.Log;
import org.linphone.ui.ToggleImageButton;
import android.app.ListActivity; import android.app.ListActivity;
import android.net.Uri; import android.net.Uri;
@ -85,6 +86,11 @@ public abstract class AbstractCalleesActivity extends ListActivity implements Li
View speaker = findViewById(R.id.toggleSpeaker); View speaker = findViewById(R.id.toggleSpeaker);
speaker.setOnClickListener(this); speaker.setOnClickListener(this);
mSpeakerButton = (Checkable) speaker; mSpeakerButton = (Checkable) speaker;
if (LinphoneManager.getInstance().isSpeakerOn())
{
((ToggleImageButton) speaker).setChecked(true);
speaker.setEnabled(false);
}
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
} }

View file

@ -25,11 +25,15 @@ import org.linphone.LinphoneService.LinphoneGuiListener;
import org.linphone.core.LinphoneCall; import org.linphone.core.LinphoneCall;
import org.linphone.core.LinphoneCall.State; import org.linphone.core.LinphoneCall.State;
import org.linphone.core.LinphoneCore.RegistrationState; import org.linphone.core.LinphoneCore.RegistrationState;
import org.linphone.core.LinphoneCoreException;
import org.linphone.core.LinphoneProxyConfig; import org.linphone.core.LinphoneProxyConfig;
import org.linphone.core.Log; import org.linphone.core.Log;
import org.linphone.mediastream.Version;
import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration;
import org.linphone.ui.AddressAware; import org.linphone.ui.AddressAware;
import org.linphone.ui.AddressText; import org.linphone.ui.AddressText;
import org.linphone.ui.CallButton; import org.linphone.ui.CallButton;
import org.linphone.ui.CameraView;
import org.linphone.ui.EraseButton; import org.linphone.ui.EraseButton;
import android.app.Activity; import android.app.Activity;
@ -37,6 +41,9 @@ import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.hardware.Camera;
import android.hardware.Camera.CameraInfo;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
@ -46,6 +53,7 @@ import android.view.View;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
import android.widget.Adapter; import android.widget.Adapter;
import android.widget.Button; import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListAdapter; import android.widget.ListAdapter;
import android.widget.ListView; import android.widget.ListView;
import android.widget.SimpleAdapter; import android.widget.SimpleAdapter;
@ -72,6 +80,8 @@ public class DialerActivity extends Activity implements LinphoneGuiListener {
private AddressText mAddress; private AddressText mAddress;
private CallButton mCall; private CallButton mCall;
private Button mBack, mAddCall, mSwitchCamera;
private LinearLayout mInCallControls;
private static DialerActivity instance; private static DialerActivity instance;
private boolean mPreventDoubleCallOnRotation; private boolean mPreventDoubleCallOnRotation;
@ -80,6 +90,12 @@ public class DialerActivity extends Activity implements LinphoneGuiListener {
protected String username; protected String username;
private String key; private String key;
private CameraView mVideoCaptureView;
private int mCurrentCameraId = 0;
private Camera mCamera;
private static final String CURRENT_ADDRESS = "org.linphone.current-address"; private static final String CURRENT_ADDRESS = "org.linphone.current-address";
private static final String CURRENT_DISPLAYNAME = "org.linphone.current-displayname"; private static final String CURRENT_DISPLAYNAME = "org.linphone.current-displayname";
private static final String PREVENT_DOUBLE_CALL = "prevent_call_on_phone_rotation"; private static final String PREVENT_DOUBLE_CALL = "prevent_call_on_phone_rotation";
@ -189,17 +205,25 @@ public class DialerActivity extends Activity implements LinphoneGuiListener {
} }
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
if (Version.isXLargeScreen(this)) {
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
setContentView(R.layout.dialer); setContentView(R.layout.dialer);
mAddress = (AddressText) findViewById(R.id.SipUri); mAddress = (AddressText) findViewById(R.id.SipUri);
((EraseButton) findViewById(R.id.Erase)).setAddressWidget(mAddress); EraseButton erase = (EraseButton) findViewById(R.id.Erase);
erase.setAddressWidget(mAddress);
erase.requestFocus();
mCall = (CallButton) findViewById(R.id.Call); mCall = (CallButton) findViewById(R.id.Call);
mCall.setAddressWidget(mAddress); mCall.setAddressWidget(mAddress);
mBack = (Button) findViewById(R.id.Back);
mAddCall = (Button) findViewById(R.id.AddCall);
mInCallControls = (LinearLayout) findViewById(R.id.InCallControls);
mStatus = (TextView) findViewById(R.id.status_label); mStatus = (TextView) findViewById(R.id.status_label);
tryToInitTabletUI();
SlidingDrawer drawer = (SlidingDrawer) findViewById(R.id.drawer); SlidingDrawer drawer = (SlidingDrawer) findViewById(R.id.drawer);
if (drawer != null) { if (drawer != null) {
drawer.setOnDrawerScrollListener(new OnDrawerScrollListener() { drawer.setOnDrawerScrollListener(new OnDrawerScrollListener() {
@ -235,9 +259,83 @@ public class DialerActivity extends Activity implements LinphoneGuiListener {
verifiyAccountsActivated(); verifiyAccountsActivated();
displayRegisterStatus(); displayRegisterStatus();
mCall.requestFocus();
} }
private synchronized void tryToInitTabletUI() {
final int numberOfCameras = Camera.getNumberOfCameras();
CameraInfo cameraInfo = new CameraInfo();
for (int i = 0; i < numberOfCameras; i++) {
Camera.getCameraInfo(i, cameraInfo);
if (cameraInfo.facing == CameraInfo.CAMERA_FACING_BACK) {
mCurrentCameraId = i;
}
}
mVideoCaptureView = (CameraView) findViewById(R.id.video_background);
if (mVideoCaptureView != null)
{
if (mCamera == null) {
mCamera = Camera.open(mCurrentCameraId);
}
mVideoCaptureView.setCamera(mCamera, mCurrentCameraId);
mCamera.startPreview();
}
mSwitchCamera = (Button) findViewById(R.id.switch_camera);
if (mSwitchCamera != null)
{
if (AndroidCameraConfiguration.hasSeveralCameras())
mSwitchCamera.setVisibility(View.VISIBLE);
mSwitchCamera.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mCurrentCameraId = (mCurrentCameraId + 1) % numberOfCameras;
mCamera.release();
mVideoCaptureView.setCamera(null, -1);
mCamera = Camera.open(mCurrentCameraId);
mVideoCaptureView.switchCamera(mCamera, mCurrentCameraId);
mCamera.startPreview();
}
});
}
if (mBack != null) {
mBack.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
LinphoneCall call = LinphoneManager.getLc().getCurrentCall();
if (call.getCurrentParamsCopy().getVideoEnabled())
LinphoneActivity.instance().startVideoActivity(call, 0);
else
LinphoneActivity.instance().startIncallActivity();
}
});
}
if (mAddCall != null) {
mAddCall.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
LinphoneCall call = LinphoneManager.getLc().getCurrentCall();
if (call != null && !call.isInConference()) {
LinphoneManager.getLc().pauseCall(call);
} else {
LinphoneManager.getLc().leaveConference();
}
try {
LinphoneManager.getLc().invite(mAddress.getText().toString());
} catch (LinphoneCoreException e) {
Log.e(e);
Toast.makeText(DialerActivity.this, R.string.error_adding_new_call, Toast.LENGTH_LONG).show();
}
}
});
}
}
private void checkIfOutgoingCallIntentReceived() { private void checkIfOutgoingCallIntentReceived() {
if (getIntent().getData() == null) return; if (getIntent().getData() == null) return;
@ -256,7 +354,16 @@ public class DialerActivity extends Activity implements LinphoneGuiListener {
@Override
protected void onPause() {
super.onPause();
if (mCamera != null) {
mCamera.release();
mVideoCaptureView.setCamera(null, -1);
mCamera = null;
}
}
@ -361,7 +468,21 @@ public class DialerActivity extends Activity implements LinphoneGuiListener {
} }
@Override @Override
public void onCallStateChanged(LinphoneCall call, State s, String m) {} public void onCallStateChanged(LinphoneCall call, State s, String m) {
if (mVideoCaptureView != null && mCamera == null && !LinphoneManager.getLc().isIncall())
{
if (mInCallControls != null)
mInCallControls.setVisibility(View.GONE);
mCall.setVisibility(View.VISIBLE);
if (AndroidCameraConfiguration.hasSeveralCameras() && mSwitchCamera != null)
mSwitchCamera.setVisibility(View.VISIBLE);
mCamera = Camera.open(mCurrentCameraId);
mVideoCaptureView.switchCamera(mCamera, mCurrentCameraId);
mCamera.startPreview();
}
}
public void onGlobalStateChangedToOn(String message) { public void onGlobalStateChangedToOn(String message) {
mCall.setEnabled(!LinphoneManager.getLc().isIncall()); mCall.setEnabled(!LinphoneManager.getLc().isIncall());
@ -382,6 +503,29 @@ public class DialerActivity extends Activity implements LinphoneGuiListener {
mStatus.setText(LinphoneManager.getInstance().getLastLcStatusMessage()); mStatus.setText(LinphoneManager.getInstance().getLastLcStatusMessage());
super.onResume(); super.onResume();
if (mInCallControls != null)
mInCallControls.setVisibility(View.GONE);
mCall.setVisibility(View.VISIBLE);
if (AndroidCameraConfiguration.hasSeveralCameras() && mSwitchCamera != null)
mSwitchCamera.setVisibility(View.VISIBLE);
if (mVideoCaptureView != null && mCamera == null && !LinphoneManager.getLc().isIncall())
{
mCamera = Camera.open(mCurrentCameraId);
mVideoCaptureView.switchCamera(mCamera, mCurrentCameraId);
mCamera.startPreview();
} else if (LinphoneManager.getLc().isIncall())
{
if (mInCallControls != null) {
mInCallControls.setVisibility(View.VISIBLE);
mCall.setVisibility(View.GONE);
}
if (mSwitchCamera != null)
mSwitchCamera.setVisibility(View.INVISIBLE);
}
} }
@ -390,5 +534,4 @@ public class DialerActivity extends Activity implements LinphoneGuiListener {
if (LinphoneUtils.onKeyVolumeSoftAdjust(keyCode)) return true; if (LinphoneUtils.onKeyVolumeSoftAdjust(keyCode)) return true;
return super.onKeyDown(keyCode, event); return super.onKeyDown(keyCode, event);
} }
} }

View file

@ -42,8 +42,11 @@ import org.linphone.ui.Numpad;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.content.res.Resources; import android.content.res.Resources;
import android.os.Bundle; import android.os.Bundle;
import android.os.CountDownTimer; import android.os.CountDownTimer;
@ -113,6 +116,9 @@ public class IncallActivity extends AbstractCalleesActivity implements
if (finishIfAutoRestartAfterACrash(savedInstanceState)) { if (finishIfAutoRestartAfterACrash(savedInstanceState)) {
return; return;
} }
if (!Version.isXLargeScreen(this))
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.incall_layout); setContentView(R.layout.incall_layout);
instance = this; instance = this;
@ -318,7 +324,7 @@ public class IncallActivity extends AbstractCalleesActivity implements
public void onClick(View v) { public void onClick(View v) {
switch (v.getId()) { switch (v.getId()) {
case R.id.addCall: case R.id.addCall:
openUriPicker(UriPickerActivity.EXTRA_PICKER_TYPE_ADD, addCallId); finish();
break; break;
case R.id.incallHang: case R.id.incallHang:
terminateCurrentCallOrConferenceOrAll(); terminateCurrentCallOrConferenceOrAll();
@ -346,7 +352,8 @@ public class IncallActivity extends AbstractCalleesActivity implements
((Checkable) v).setChecked(true); ((Checkable) v).setChecked(true);
List<LinphoneCall> pausedCalls = LinphoneUtils.getCallsInState(lc(), Arrays.asList(State.Paused)); List<LinphoneCall> pausedCalls = LinphoneUtils.getCallsInState(lc(), Arrays.asList(State.Paused));
if (pausedCalls.size() == 1) { if (pausedCalls.size() == 1) {
lc().resumeCall(pausedCalls.get(0)); LinphoneCall callToResume = pausedCalls.get(0);
lc().resumeCall(callToResume);
} }
} }
break; break;
@ -588,6 +595,11 @@ public class IncallActivity extends AbstractCalleesActivity implements
} else if (lc().soundResourcesLocked()) { } else if (lc().soundResourcesLocked()) {
return; return;
} else if (State.Paused == actualState) { } else if (State.Paused == actualState) {
if (call != null && call.cameraEnabled() && call.getCurrentParamsCopy().getVideoEnabled())
{
finish();
LinphoneActivity.instance().startVideoActivity(call, 0);
}
lc().resumeCall(call); lc().resumeCall(call);
} }
} }
@ -652,6 +664,18 @@ public class IncallActivity extends AbstractCalleesActivity implements
} }
} }
@Override
public void onConfigurationChanged(Configuration newConfig)
{
if (!Version.isXLargeScreen(this))
{
// Do nothing to not recreate the activity on smartphone if screen is rotated
super.onConfigurationChanged(null);
return;
}
super.onConfigurationChanged(newConfig);
}
private void updateConfItem() { private void updateConfItem() {
boolean confExists = lc().getConferenceSize() > 0; boolean confExists = lc().getConferenceSize() > 0;
View confView = findViewById(R.id.conf_header); View confView = findViewById(R.id.conf_header);

View file

@ -141,6 +141,9 @@ public class IncomingCallActivity extends Activity implements LinphoneOnCallStat
// the above method takes care of Samsung Galaxy S // the above method takes care of Samsung Galaxy S
Toast.makeText(this, R.string.couldnt_accept_call, Toast.LENGTH_LONG); Toast.makeText(this, R.string.couldnt_accept_call, Toast.LENGTH_LONG);
} else { } else {
if (mCall.getCurrentParamsCopy().getVideoEnabled())
LinphoneActivity.instance().startVideoActivity(mCall, 0);
else
LinphoneActivity.instance().startIncallActivity(); LinphoneActivity.instance().startIncallActivity();
} }
} }

View file

@ -23,10 +23,10 @@ import static android.content.Intent.ACTION_MAIN;
import org.linphone.LinphoneSimpleListener.LinphoneOnCallStateChangedListener; import org.linphone.LinphoneSimpleListener.LinphoneOnCallStateChangedListener;
import org.linphone.core.LinphoneCall; import org.linphone.core.LinphoneCall;
import org.linphone.core.LinphoneCore;
import org.linphone.core.Log;
import org.linphone.core.LinphoneCall.State; import org.linphone.core.LinphoneCall.State;
import org.linphone.core.LinphoneCore;
import org.linphone.core.LinphoneCore.RegistrationState; import org.linphone.core.LinphoneCore.RegistrationState;
import org.linphone.core.Log;
import org.linphone.mediastream.Version; import org.linphone.mediastream.Version;
import android.app.AlertDialog; import android.app.AlertDialog;
@ -46,10 +46,10 @@ import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.OrientationEventListener; import android.view.OrientationEventListener;
import android.widget.TabHost.TabSpec;
import android.widget.TabWidget; import android.widget.TabWidget;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import android.widget.TabHost.TabSpec;
public class LinphoneActivity extends TabActivity implements ContactPicked public class LinphoneActivity extends TabActivity implements ContactPicked
, LinphoneOnCallStateChangedListener , LinphoneOnCallStateChangedListener
@ -190,6 +190,15 @@ public class LinphoneActivity extends TabActivity implements ContactPicked
if(LinphoneManager.getLc().isInComingInvitePending()) { if(LinphoneManager.getLc().isInComingInvitePending()) {
startIncomingCallActivity(); startIncomingCallActivity();
} else { } else {
LinphoneCall currentCall = LinphoneManager.getLc().getCurrentCall();
if (currentCall == null)
return;
if (currentCall.getCurrentParamsCopy().getVideoEnabled()) {
currentCall.enableCamera(true);
startVideoActivity(currentCall, 0);
}
else
startIncallActivity(); startIncallActivity();
} }
return; return;
@ -461,31 +470,44 @@ public class LinphoneActivity extends TabActivity implements ContactPicked
} }
if (state==State.IncomingReceived) { if (state==State.IncomingReceived) {
if (call.getCurrentParamsCopy().getVideoEnabled()) startOrientationSensor(); if (call.getCurrentParamsCopy().getVideoEnabled())
startOrientationSensor();
startIncomingCallActivity(); startIncomingCallActivity();
} }
if (state == State.OutgoingInit) { if (state == State.OutgoingInit) {
if (call.getCurrentParamsCopy().getVideoEnabled()) startOrientationSensor(); if (call.getCurrentParamsCopy().getVideoEnabled()) {
startOrientationSensor();
startVideoActivity(call, 0);
} else {
startIncallActivity(); startIncallActivity();
} }
}
if (state == LinphoneCall.State.StreamsRunning && Version.isVideoCapable() && !call.isInConference()) { if (state == LinphoneCall.State.StreamsRunning && Version.isVideoCapable() && !call.isInConference()) {
// call.cameraEnabled() contains the wish of the user // call.cameraEnabled() contains the wish of the user
// set in LinphoneManager#onCallStateChanged(OutgoingInit||IncomingReceived) // set in LinphoneManager#onCallStateChanged(OutgoingInit||IncomingReceived)
boolean videoEnabled = call.cameraEnabled() && call.getCurrentParamsCopy().getVideoEnabled(); boolean videoEnabled = call.getCurrentParamsCopy().getVideoEnabled();
if (videoEnabled) { if (videoEnabled) {
startVideoActivity(call, 1000); finishActivity(incall_activity);
startVideoActivity(call, 0);
} else { } else {
finishActivity(video_activity); finishActivity(video_activity);
startIncallActivity();
} }
} }
if (state == LinphoneCall.State.CallUpdatedByRemote && Version.isVideoCapable()) { if (state == LinphoneCall.State.CallUpdatedByRemote && Version.isVideoCapable()) {
if (VideoCallActivity.launched && !call.getCurrentParamsCopy().getVideoEnabled()) { if (VideoCallActivity.launched && !call.getCurrentParamsCopy().getVideoEnabled()) {
finishActivity(video_activity); finishActivity(video_activity);
startIncallActivity();
} }
} }
if (state == LinphoneCall.State.PausedByRemote) {
finishActivity(video_activity);
startIncallActivity();
}
if (state==State.Error){ if (state==State.Error){
showToast(R.string.call_error, message); showToast(R.string.call_error, message);
} }

View file

@ -618,6 +618,12 @@ public class LinphonePreferencesActivity extends PreferenceActivity implements E
detectVideoCodec(R.string.pref_video_codec_h264_key, "H264"); detectVideoCodec(R.string.pref_video_codec_h264_key, "H264");
if (!Version.hasNeon())
{
// Android without neon doesn't support H264
findPreference(R.string.pref_video_codec_h264_key).setEnabled(false);
findPreference(R.string.pref_video_codec_h264_key).setDefaultValue(false);
}
addEchoPrefsListener(); addEchoPrefsListener();

View file

@ -18,51 +18,76 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
package org.linphone; package org.linphone;
import org.linphone.LinphoneSimpleListener.LinphoneOnCallStateChangedListener; import org.linphone.LinphoneSimpleListener.LinphoneOnCallStateChangedListener;
import org.linphone.core.LinphoneCall; import org.linphone.core.LinphoneCall;
import org.linphone.core.Log;
import org.linphone.core.LinphoneCall.State; import org.linphone.core.LinphoneCall.State;
import org.linphone.core.LinphoneCallParams;
import org.linphone.core.Log;
import org.linphone.mediastream.Version;
import org.linphone.mediastream.video.AndroidVideoWindowImpl; import org.linphone.mediastream.video.AndroidVideoWindowImpl;
import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration; import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration;
import org.linphone.ui.Numpad;
import org.linphone.ui.ToggleImageButton;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface;
import android.content.res.Configuration;
import android.opengl.GLSurfaceView; import android.opengl.GLSurfaceView;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.PowerManager; import android.os.PowerManager;
import android.os.PowerManager.WakeLock; import android.os.PowerManager.WakeLock;
import android.view.Display;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.Surface;
import android.view.SurfaceHolder; import android.view.SurfaceHolder;
import android.view.SurfaceView; import android.view.SurfaceView;
import android.view.View; import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.WindowManager;
import android.widget.Checkable;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
/** /**
* For Android SDK >= 5 * For Android SDK >= 5
*
* @author Guillaume Beraudo * @author Guillaume Beraudo
* *
*/ */
public class VideoCallActivity extends Activity implements LinphoneOnCallStateChangedListener { public class VideoCallActivity extends Activity implements
LinphoneOnCallStateChangedListener, OnClickListener {
private final static int DELAY_BEFORE_HIDING_CONTROLS = 2000;
private static final int numpadDialogId = 1;
private SurfaceView mVideoViewReady; private SurfaceView mVideoViewReady;
private SurfaceView mVideoCaptureViewReady; private SurfaceView mVideoCaptureViewReady;
public static boolean launched = false; public static boolean launched = false;
private LinphoneCall videoCall; private LinphoneCall videoCall;
private WakeLock mWakeLock; private WakeLock mWakeLock;
private Handler refreshHandler = new Handler(); private Handler refreshHandler = new Handler();
private Handler controlsHandler = new Handler();
AndroidVideoWindowImpl androidVideoWindowImpl; AndroidVideoWindowImpl androidVideoWindowImpl;
private Runnable mCallQualityUpdater; private Runnable mCallQualityUpdater, mControls;
private LinearLayout mControlsLayout;
private boolean shouldRestartVideoOnResume = false;
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (!LinphoneManager.isInstanciated() || LinphoneManager.getLc().getCallsNb() == 0) { if (!LinphoneManager.isInstanciated()
Log.e("No service running: avoid crash by finishing ", getClass().getName()); || LinphoneManager.getLc().getCallsNb() == 0) {
Log.e("No service running: avoid crash by finishing ", getClass()
.getName());
// super.onCreate called earlier // super.onCreate called earlier
finish(); finish();
return; return;
@ -72,36 +97,44 @@ public class VideoCallActivity extends Activity implements LinphoneOnCallStateCh
SurfaceView videoView = (SurfaceView) findViewById(R.id.video_surface); SurfaceView videoView = (SurfaceView) findViewById(R.id.video_surface);
//((FrameLayout) findViewById(R.id.video_frame)).bringChildToFront(findViewById(R.id.imageView1)); // ((FrameLayout)
// findViewById(R.id.video_frame)).bringChildToFront(findViewById(R.id.imageView1));
SurfaceView captureView = (SurfaceView) findViewById(R.id.video_capture_surface); SurfaceView captureView = (SurfaceView) findViewById(R.id.video_capture_surface);
captureView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); captureView.getHolder()
.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
/* force surfaces Z ordering */ /* force surfaces Z ordering */
fixZOrder(videoView, captureView); fixZOrder(videoView, captureView);
androidVideoWindowImpl = new AndroidVideoWindowImpl(videoView, captureView); androidVideoWindowImpl = new AndroidVideoWindowImpl(videoView,
androidVideoWindowImpl.setListener(new AndroidVideoWindowImpl.VideoWindowListener() { captureView);
androidVideoWindowImpl
.setListener(new AndroidVideoWindowImpl.VideoWindowListener() {
public void onVideoRenderingSurfaceReady(AndroidVideoWindowImpl vw, SurfaceView surface) { public void onVideoRenderingSurfaceReady(
AndroidVideoWindowImpl vw, SurfaceView surface) {
LinphoneManager.getLc().setVideoWindow(vw); LinphoneManager.getLc().setVideoWindow(vw);
mVideoViewReady = surface; mVideoViewReady = surface;
} }
public void onVideoRenderingSurfaceDestroyed(AndroidVideoWindowImpl vw) { public void onVideoRenderingSurfaceDestroyed(
AndroidVideoWindowImpl vw) {
Log.d("VIDEO WINDOW destroyed!\n"); Log.d("VIDEO WINDOW destroyed!\n");
LinphoneManager.getLc().setVideoWindow(null); LinphoneManager.getLc().setVideoWindow(null);
} }
public void onVideoPreviewSurfaceReady(AndroidVideoWindowImpl vw, SurfaceView surface) { public void onVideoPreviewSurfaceReady(
AndroidVideoWindowImpl vw, SurfaceView surface) {
mVideoCaptureViewReady = surface; mVideoCaptureViewReady = surface;
LinphoneManager.getLc().setPreviewWindow(mVideoCaptureViewReady); LinphoneManager.getLc().setPreviewWindow(
mVideoCaptureViewReady);
} }
public void onVideoPreviewSurfaceDestroyed(AndroidVideoWindowImpl vw) { public void onVideoPreviewSurfaceDestroyed(
AndroidVideoWindowImpl vw) {
// Remove references kept in jni code and restart camera // Remove references kept in jni code and restart camera
// LinphoneManager.getLc().setPreviewWindow(null); LinphoneManager.getLc().setPreviewWindow(null);
// Commented to remove flicker.
} }
}); });
@ -110,89 +143,89 @@ public class VideoCallActivity extends Activity implements LinphoneOnCallStateCh
videoCall = LinphoneManager.getLc().getCurrentCall(); videoCall = LinphoneManager.getLc().getCurrentCall();
if (videoCall != null) { if (videoCall != null) {
LinphoneManager lm = LinphoneManager.getInstance(); LinphoneManager lm = LinphoneManager.getInstance();
if (!lm.shareMyCamera() && !lm.isVideoInitiator() && videoCall.cameraEnabled()) { if (!lm.shareMyCamera() && !lm.isVideoInitiator()
&& videoCall.cameraEnabled()) {
lm.sendStaticImage(true); lm.sendStaticImage(true);
} }
updatePreview(videoCall.cameraEnabled()); updatePreview(videoCall.cameraEnabled());
} }
PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE,Log.TAG); mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK
| PowerManager.ON_AFTER_RELEASE, Log.TAG);
mWakeLock.acquire(); mWakeLock.acquire();
mControlsLayout = (LinearLayout) findViewById(R.id.incall_controls_layout);
videoView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (mControlsLayout != null
&& mControlsLayout.getVisibility() == View.GONE) {
mControlsLayout.setVisibility(View.VISIBLE);
controlsHandler.postDelayed(mControls = new Runnable() {
public void run() {
mControlsLayout.setVisibility(View.GONE);
}
}, DELAY_BEFORE_HIDING_CONTROLS);
return true;
}
return false;
}
});
if (!AndroidCameraConfiguration.hasSeveralCameras()) {
findViewById(R.id.switch_camera).setVisibility(View.GONE);
} }
void updateQualityOfSignalIcon(float quality) if (Version.isXLargeScreen(this)) {
{ findViewById(R.id.toggleMuteMic).setOnClickListener(this);
findViewById(R.id.toggleSpeaker).setOnClickListener(this);
findViewById(R.id.incallNumpadShow).setOnClickListener(this);
findViewById(R.id.addCall).setOnClickListener(this);
findViewById(R.id.incallHang).setOnClickListener(this);
findViewById(R.id.switch_camera).setOnClickListener(this);
findViewById(R.id.conf_simple_pause).setOnClickListener(this);
findViewById(R.id.conf_simple_video).setOnClickListener(this);
if (LinphoneManager.getInstance().isSpeakerOn()) {
ToggleImageButton speaker = (ToggleImageButton) findViewById(R.id.toggleSpeaker);
speaker.setChecked(true);
speaker.setEnabled(false);
}
}
// Hack to force the redraw of the preview
// Camera will be re-enabled in onResume just after anyway
shouldRestartVideoOnResume = true;
LinphoneManager.getLc().getCurrentCall().enableCamera(false);
}
void updateQualityOfSignalIcon(float quality) {
ImageView qos = (ImageView) findViewById(R.id.QoS); ImageView qos = (ImageView) findViewById(R.id.QoS);
if (quality >= 4) // Good Quality if (quality >= 4) // Good Quality
{ {
qos.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_signal_4)); qos.setImageDrawable(getResources().getDrawable(
} R.drawable.stat_sys_signal_4));
else if (quality >= 3) // Average quality } else if (quality >= 3) // Average quality
{ {
qos.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_signal_3)); qos.setImageDrawable(getResources().getDrawable(
} R.drawable.stat_sys_signal_3));
else if (quality >= 2) // Low quality } else if (quality >= 2) // Low quality
{ {
qos.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_signal_2)); qos.setImageDrawable(getResources().getDrawable(
} R.drawable.stat_sys_signal_2));
else if (quality >= 1) // Very low quality } else if (quality >= 1) // Very low quality
{ {
qos.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_signal_1)); qos.setImageDrawable(getResources().getDrawable(
} R.drawable.stat_sys_signal_1));
else // Worst quality } else // Worst quality
{ {
qos.setImageDrawable(getResources().getDrawable(R.drawable.stat_sys_signal_0)); qos.setImageDrawable(getResources().getDrawable(
R.drawable.stat_sys_signal_0));
} }
} }
void updatePreview(boolean cameraCaptureEnabled) {
mVideoCaptureViewReady = null;
if (cameraCaptureEnabled) {
findViewById(R.id.imageView1).setVisibility(View.INVISIBLE);
findViewById(R.id.video_capture_surface).setVisibility(View.VISIBLE);
} else {
findViewById(R.id.video_capture_surface).setVisibility(View.INVISIBLE);
findViewById(R.id.imageView1).setVisibility(View.VISIBLE);
}
findViewById(R.id.video_frame).requestLayout();
}
void fixZOrder(SurfaceView video, SurfaceView preview) {
video.setZOrderOnTop(false);
preview.setZOrderOnTop(true);
}
@Override
protected void onResume() {
super.onResume();
if (mVideoViewReady != null)
((GLSurfaceView)mVideoViewReady).onResume();
launched=true;
LinphoneManager.addListener(this);
refreshHandler.postDelayed(mCallQualityUpdater=new Runnable(){
LinphoneCall mCurrentCall=LinphoneManager.getLc().getCurrentCall();
public void run() {
if (mCurrentCall==null){
mCallQualityUpdater=null;
return;
}
int oldQuality = 0;
float newQuality = mCurrentCall.getCurrentQuality();
if ((int) newQuality != oldQuality){
updateQualityOfSignalIcon(newQuality);
}
if (launched){
refreshHandler.postDelayed(this, 1000);
}else mCallQualityUpdater=null;
}
},1000);
}
private void rewriteToggleCameraItem(MenuItem item) { private void rewriteToggleCameraItem(MenuItem item) {
if (LinphoneManager.getLc().getCurrentCall().cameraEnabled()) { if (LinphoneManager.getLc().getCurrentCall().cameraEnabled()) {
item.setTitle(getString(R.string.menu_videocall_toggle_camera_disable)); item.setTitle(getString(R.string.menu_videocall_toggle_camera_disable));
@ -201,7 +234,6 @@ public class VideoCallActivity extends Activity implements LinphoneOnCallStateCh
} }
} }
private void rewriteChangeResolutionItem(MenuItem item) { private void rewriteChangeResolutionItem(MenuItem item) {
if (BandwidthManager.getInstance().isUserRestriction()) { if (BandwidthManager.getInstance().isUserRestriction()) {
item.setTitle(getString(R.string.menu_videocall_change_resolution_when_low_resolution)); item.setTitle(getString(R.string.menu_videocall_change_resolution_when_low_resolution));
@ -210,15 +242,19 @@ public class VideoCallActivity extends Activity implements LinphoneOnCallStateCh
} }
} }
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
if (Version.isXLargeScreen(this))
return false;
// Inflate the currently selected menu XML resource. // Inflate the currently selected menu XML resource.
MenuInflater inflater = getMenuInflater(); MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.videocall_activity_menu, menu); inflater.inflate(R.menu.videocall_activity_menu, menu);
rewriteToggleCameraItem(menu.findItem(R.id.videocall_menu_toggle_camera)); rewriteToggleCameraItem(menu
rewriteChangeResolutionItem(menu.findItem(R.id.videocall_menu_change_resolution)); .findItem(R.id.videocall_menu_toggle_camera));
rewriteChangeResolutionItem(menu
.findItem(R.id.videocall_menu_change_resolution));
if (!AndroidCameraConfiguration.hasSeveralCameras()) { if (!AndroidCameraConfiguration.hasSeveralCameras()) {
menu.findItem(R.id.videocall_menu_switch_camera).setVisible(false); menu.findItem(R.id.videocall_menu_switch_camera).setVisible(false);
@ -231,26 +267,32 @@ public class VideoCallActivity extends Activity implements LinphoneOnCallStateCh
switch (item.getItemId()) { switch (item.getItemId()) {
case R.id.videocall_menu_back_to_dialer: case R.id.videocall_menu_back_to_dialer:
finish(); finish();
LinphoneActivity.instance().startIncallActivity();
break; break;
case R.id.videocall_menu_change_resolution: case R.id.videocall_menu_change_resolution:
LinphoneManager.getInstance().changeResolution(); LinphoneManager.getInstance().changeResolution();
// previous call will cause graph reconstruction -> regive preview window // previous call will cause graph reconstruction -> regive preview
// window
if (mVideoCaptureViewReady != null) if (mVideoCaptureViewReady != null)
LinphoneManager.getLc().setPreviewWindow(mVideoCaptureViewReady); LinphoneManager.getLc()
.setPreviewWindow(mVideoCaptureViewReady);
rewriteChangeResolutionItem(item); rewriteChangeResolutionItem(item);
break; break;
case R.id.videocall_menu_terminate_call: case R.id.videocall_menu_terminate_call:
LinphoneManager.getInstance().terminateCall(); LinphoneManager.getInstance().terminateCall();
break; break;
case R.id.videocall_menu_toggle_camera: case R.id.videocall_menu_toggle_camera:
boolean camEnabled = LinphoneManager.getInstance().toggleEnableCamera(); boolean camEnabled = LinphoneManager.getInstance()
.toggleEnableCamera();
updatePreview(camEnabled); updatePreview(camEnabled);
Log.e("winwow camera enabled: " + camEnabled); Log.e("winwow camera enabled: " + camEnabled);
rewriteToggleCameraItem(item); rewriteToggleCameraItem(item);
// previous call will cause graph reconstruction -> regive preview window // previous call will cause graph reconstruction -> regive preview
// window
if (camEnabled) { if (camEnabled) {
if (mVideoCaptureViewReady != null) if (mVideoCaptureViewReady != null)
LinphoneManager.getLc().setPreviewWindow(mVideoCaptureViewReady); LinphoneManager.getLc().setPreviewWindow(
mVideoCaptureViewReady);
} else } else
LinphoneManager.getLc().setPreviewWindow(null); LinphoneManager.getLc().setPreviewWindow(null);
break; break;
@ -259,26 +301,92 @@ public class VideoCallActivity extends Activity implements LinphoneOnCallStateCh
id = (id + 1) % AndroidCameraConfiguration.retrieveCameras().length; id = (id + 1) % AndroidCameraConfiguration.retrieveCameras().length;
LinphoneManager.getLc().setVideoDevice(id); LinphoneManager.getLc().setVideoDevice(id);
CallManager.getInstance().updateCall(); CallManager.getInstance().updateCall();
// previous call will cause graph reconstruction -> regive preview window // previous call will cause graph reconstruction -> regive preview
// window
if (mVideoCaptureViewReady != null) if (mVideoCaptureViewReady != null)
LinphoneManager.getLc().setPreviewWindow(mVideoCaptureViewReady); LinphoneManager.getLc()
.setPreviewWindow(mVideoCaptureViewReady);
break; break;
default: default:
Log.e("Unknown menu item [",item,"]"); Log.e("Unknown menu item [", item, "]");
break; break;
} }
return true; return true;
} }
void updatePreview(boolean cameraCaptureEnabled) {
mVideoCaptureViewReady = null;
if (cameraCaptureEnabled) {
findViewById(R.id.imageView1).setVisibility(View.INVISIBLE);
findViewById(R.id.video_capture_surface)
.setVisibility(View.VISIBLE);
} else {
findViewById(R.id.video_capture_surface).setVisibility(
View.INVISIBLE);
findViewById(R.id.imageView1).setVisibility(View.VISIBLE);
}
findViewById(R.id.video_frame).requestLayout();
}
void fixZOrder(SurfaceView video, SurfaceView preview) {
video.setZOrderOnTop(false);
preview.setZOrderOnTop(true);
}
@Override @Override
protected void onResume() {
super.onResume();
if (mVideoViewReady != null)
((GLSurfaceView) mVideoViewReady).onResume();
synchronized (androidVideoWindowImpl) {
LinphoneManager.getLc().setVideoWindow(androidVideoWindowImpl);
}
launched = true;
LinphoneManager.addListener(this);
refreshHandler.postDelayed(mCallQualityUpdater = new Runnable() {
LinphoneCall mCurrentCall = LinphoneManager.getLc()
.getCurrentCall();
public void run() {
if (mCurrentCall == null) {
mCallQualityUpdater = null;
return;
}
int oldQuality = 0;
float newQuality = mCurrentCall.getCurrentQuality();
if ((int) newQuality != oldQuality) {
updateQualityOfSignalIcon(newQuality);
}
if (launched) {
refreshHandler.postDelayed(this, 1000);
} else
mCallQualityUpdater = null;
}
}, 1000);
if (mControlsLayout != null)
mControlsLayout.setVisibility(View.GONE);
if (shouldRestartVideoOnResume) {
LinphoneManager.getLc().getCurrentCall().enableCamera(true);
shouldRestartVideoOnResume = false;
}
}
public boolean onKeyDown(int keyCode, KeyEvent event) { public boolean onKeyDown(int keyCode, KeyEvent event) {
if (LinphoneUtils.onKeyVolumeSoftAdjust(keyCode)) return true; if (LinphoneUtils.onKeyVolumeSoftAdjust(keyCode))
return true;
if (Version.isXLargeScreen(this) && LinphoneUtils.onKeyBackGoHome(this, keyCode, event))
return true;
return super.onKeyDown(keyCode, event); return super.onKeyDown(keyCode, event);
} }
@Override @Override
protected void onDestroy() { protected void onDestroy() {
if (androidVideoWindowImpl != null) { // Prevent linphone from crashing if correspondent hang up while you are rotating if (androidVideoWindowImpl != null) { // Prevent linphone from crashing
// if correspondent hang up
// while you are rotating
androidVideoWindowImpl.release(); androidVideoWindowImpl.release();
} }
super.onDestroy(); super.onDestroy();
@ -286,28 +394,40 @@ public class VideoCallActivity extends Activity implements LinphoneOnCallStateCh
@Override @Override
protected void onPause() { protected void onPause() {
Log.d("onPause VideoCallActivity (isFinishing:", isFinishing(), ", inCall:", LinphoneManager.getLc().isIncall(),")"); Log.d("onPause VideoCallActivity (isFinishing:", isFinishing(),
", inCall:", LinphoneManager.getLc().isIncall(), ")");
LinphoneManager.removeListener(this); LinphoneManager.removeListener(this);
if (isFinishing()) { if (isFinishing()) {
videoCall = null; // release reference videoCall = null; // release reference
} else {
// Send NoWebcam since Android 4.0 can't get the video from the
// webcam if the activity is not in foreground
shouldRestartVideoOnResume = true;
LinphoneManager.getLc().getCurrentCall().enableCamera(false);
} }
launched=false; launched = false;
synchronized (androidVideoWindowImpl) { synchronized (androidVideoWindowImpl) {
/* this call will destroy native opengl renderer /*
* which is used by androidVideoWindowImpl * this call will destroy native opengl renderer which is used by
* androidVideoWindowImpl
*/ */
LinphoneManager.getLc().setVideoWindow(null); LinphoneManager.getLc().setVideoWindow(null);
} }
if (mCallQualityUpdater!=null){ if (mCallQualityUpdater != null) {
refreshHandler.removeCallbacks(mCallQualityUpdater); refreshHandler.removeCallbacks(mCallQualityUpdater);
mCallQualityUpdater=null; mCallQualityUpdater = null;
}
if (mControls != null) {
controlsHandler.removeCallbacks(mControls);
mControls = null;
} }
if (mWakeLock.isHeld()) mWakeLock.release(); if (mWakeLock.isHeld())
mWakeLock.release();
super.onPause(); super.onPause();
if (mVideoViewReady != null) if (mVideoViewReady != null)
((GLSurfaceView)mVideoViewReady).onPause(); ((GLSurfaceView) mVideoViewReady).onPause();
} }
@Override @Override
@ -319,4 +439,123 @@ public class VideoCallActivity extends Activity implements LinphoneOnCallStateCh
finish(); finish();
} }
} }
private void resizePreview() {
Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay();
int rotation = display.getRotation();
LayoutParams params;
int w, h;
if (Version.isXLargeScreen(this)) {
w = 176;
h = 148;
} else {
w = 88;
h = 74;
}
if (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) {
params = new LayoutParams(h, w);
} else {
params = new LayoutParams(w, h);
}
params.setMargins(0, 0, 15, 15);
params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
mVideoCaptureViewReady.setLayoutParams(params);
}
public void onConfigurationChanged(Configuration newConfig) {
resizePreview();
super.onConfigurationChanged(null);
}
private void resetControlsLayoutExpiration() {
if (mControls != null) {
controlsHandler.removeCallbacks(mControls);
}
controlsHandler.postDelayed(mControls = new Runnable() {
public void run() {
mControlsLayout.setVisibility(View.GONE);
}
}, DELAY_BEFORE_HIDING_CONTROLS);
}
public void onClick(View v) {
resetControlsLayoutExpiration();
switch (v.getId()) {
case R.id.incallHang:
terminateCurrentCallOrConferenceOrAll();
break;
case R.id.toggleSpeaker:
if (((Checkable) v).isChecked()) {
LinphoneManager.getInstance().routeAudioToSpeaker();
} else {
LinphoneManager.getInstance().routeAudioToReceiver();
}
break;
case R.id.incallNumpadShow:
showDialog(numpadDialogId);
break;
case R.id.toggleMuteMic:
LinphoneManager.getLc().muteMic(((Checkable) v).isChecked());
break;
case R.id.switch_camera:
int id = LinphoneManager.getLc().getVideoDevice();
id = (id + 1) % AndroidCameraConfiguration.retrieveCameras().length;
LinphoneManager.getLc().setVideoDevice(id);
CallManager.getInstance().updateCall();
// previous call will cause graph reconstruction -> regive preview
// window
if (mVideoCaptureViewReady != null)
LinphoneManager.getLc()
.setPreviewWindow(mVideoCaptureViewReady);
break;
case R.id.conf_simple_pause:
finish();
LinphoneActivity.instance().startIncallActivity();
LinphoneManager.getLc().pauseCall(videoCall);
break;
case R.id.conf_simple_video:
LinphoneCallParams params = videoCall.getCurrentParamsCopy();
params.setVideoEnabled(false);
LinphoneManager.getLc().updateCall(videoCall, params);
break;
case R.id.addCall:
finish();
break;
}
}
protected Dialog onCreateDialog(final int id) {
switch (id) {
case numpadDialogId:
Numpad numpad = new Numpad(this, true);
return new AlertDialog.Builder(this)
.setView(numpad)
.setPositiveButton(R.string.close_button_text,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
dismissDialog(id);
}
}).create();
default:
throw new IllegalArgumentException("unkown dialog id " + id);
}
}
private void terminateCurrentCallOrConferenceOrAll() {
LinphoneCall currentCall = LinphoneManager.getLc().getCurrentCall();
if (currentCall != null) {
LinphoneManager.getLc().terminateCall(currentCall);
} else if (LinphoneManager.getLc().isInConference()) {
LinphoneManager.getLc().terminateConference();
} else {
LinphoneManager.getLc().terminateAllCalls();
}
finish();
}
} }

View file

@ -20,9 +20,12 @@ package org.linphone.core;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import org.linphone.mediastream.Version; import org.linphone.mediastream.Version;
import android.util.Log;
public class LinphoneCoreFactoryImpl extends LinphoneCoreFactory { public class LinphoneCoreFactoryImpl extends LinphoneCoreFactory {
private static void loadOptionalLibrary(String s) { private static void loadOptionalLibrary(String s) {
@ -35,10 +38,17 @@ public class LinphoneCoreFactoryImpl extends LinphoneCoreFactory {
static { static {
// FFMPEG (audio/video) // FFMPEG (audio/video)
if (!hasNeonInCpuFeatures()) {
loadOptionalLibrary("avutilnoneon");
loadOptionalLibrary("swscalenoneon");
loadOptionalLibrary("avcorenoneon");
loadOptionalLibrary("avcodecnoneon");
} else {
loadOptionalLibrary("avutil"); loadOptionalLibrary("avutil");
loadOptionalLibrary("swscale"); loadOptionalLibrary("swscale");
loadOptionalLibrary("avcore"); loadOptionalLibrary("avcore");
loadOptionalLibrary("avcodec"); loadOptionalLibrary("avcodec");
}
// OPENSSL (cryptography) // OPENSSL (cryptography)
// lin prefix avoids collision with libs in /system/lib // lin prefix avoids collision with libs in /system/lib
@ -56,7 +66,11 @@ public class LinphoneCoreFactoryImpl extends LinphoneCoreFactory {
loadOptionalLibrary("bcg729"); loadOptionalLibrary("bcg729");
//Main library //Main library
if (!hasNeonInCpuFeatures()) {
System.loadLibrary("linphonenoneon");
} else {
System.loadLibrary("linphone"); System.loadLibrary("linphone");
}
Version.dumpCapabilities(); Version.dumpCapabilities();
} }
@ -121,4 +135,30 @@ public class LinphoneCoreFactoryImpl extends LinphoneCoreFactory {
public LinphoneFriend createLinphoneFriend() { public LinphoneFriend createLinphoneFriend() {
return createLinphoneFriend(null); return createLinphoneFriend(null);
} }
public static boolean hasNeonInCpuFeatures()
{
ProcessBuilder cmd;
boolean result = false;
try {
String[] args = {"/system/bin/cat", "/proc/cpuinfo"};
cmd = new ProcessBuilder(args);
Process process = cmd.start();
InputStream in = process.getInputStream();
byte[] re = new byte[1024];
while(in.read(re) != -1){
String line = new String(re);
if (line.startsWith("Features")) {
result = line.contains("neon");
break;
}
}
in.close();
} catch(IOException ex){
ex.printStackTrace();
}
return result;
}
} }

View file

@ -20,8 +20,6 @@ package org.linphone.core;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector; import java.util.Vector;

View file

@ -0,0 +1,195 @@
package org.linphone.ui;
import java.io.IOException;
import java.util.List;
import android.content.Context;
import android.hardware.Camera;
import android.hardware.Camera.CameraInfo;
import android.hardware.Camera.Size;
import android.util.AttributeSet;
import android.view.Display;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
public class CameraView extends ViewGroup implements SurfaceHolder.Callback {
public CameraView(Context context, AttributeSet attrs) {
super(context, attrs);
mSurfaceView = new SurfaceView(context);
addView(mSurfaceView);
mHolder = mSurfaceView.getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
CameraView(Context context) {
super(context);
mSurfaceView = new SurfaceView(context);
addView(mSurfaceView);
mHolder = mSurfaceView.getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
SurfaceView mSurfaceView;
SurfaceHolder mHolder;
Size mPreviewSize;
List<Size> mSupportedSizes;
Camera mCamera;
int mCameraId;
public void setCamera(Camera camera, int id) {
mCamera = camera;
mCameraId = id;
if (mCamera != null) {
mSupportedSizes = mCamera.getParameters().getSupportedPreviewSizes();
requestLayout();
}
}
public void switchCamera(Camera camera, int id) {
setCamera(camera, id);
try {
camera.setPreviewDisplay(mHolder);
} catch (IOException exception) {
}
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewSize(mPreviewSize.width, mPreviewSize.height);
requestLayout();
camera.setParameters(parameters);
}
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = resolveSize(getSuggestedMinimumWidth(), widthMeasureSpec);;
int height = resolveSize(getSuggestedMinimumHeight(), heightMeasureSpec);;
setMeasuredDimension(width, height);
if (mSupportedSizes != null) {
mPreviewSize = getOptimalPreviewSize(mSupportedSizes, width, height);
}
Display display = ((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
if (display.getRotation() == Surface.ROTATION_90 || display.getRotation() == Surface.ROTATION_270) {
Size tempSize = mPreviewSize;
mPreviewSize.width = tempSize.height;
mPreviewSize.height = tempSize.width;
}
}
protected void onLayout(boolean changed, int l, int t, int r, int b) {
if (changed && getChildCount() > 0) {
final View child = getChildAt(0);
final int width = r - l;
final int height = b - t;
int previewWidth = width;
int previewHeight = height;
if (mPreviewSize != null) {
previewWidth = mPreviewSize.width;
previewHeight = mPreviewSize.height;
}
// Center the surface view
if (width * previewHeight > height * previewWidth) {
final int scaledChildWidth = previewWidth * height / previewHeight;
child.layout((width - scaledChildWidth) / 2, 0,
(width + scaledChildWidth) / 2, height);
} else {
final int scaledChildHeight = previewHeight * width / previewWidth;
child.layout(0, (height - scaledChildHeight) / 2,
width, (height + scaledChildHeight) / 2);
}
}
}
public void surfaceCreated(SurfaceHolder holder) {
try {
if (mCamera != null) {
mCamera.setPreviewDisplay(holder);
}
} catch (IOException exception) {
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
if (mCamera != null) {
mCamera.stopPreview();
}
}
private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) {
final double ASPECT_TOLERANCE = 0.1;
double targetRatio = (double) w / h;
if (sizes == null) return null;
Size optimalSize = null;
double minDiff = Double.MAX_VALUE;
int targetHeight = h;
for (Size size : sizes) {
double ratio = (double) size.width / size.height;
if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue;
if (Math.abs(size.height - targetHeight) < minDiff) {
optimalSize = size;
minDiff = Math.abs(size.height - targetHeight);
}
}
if (optimalSize == null) {
minDiff = Double.MAX_VALUE;
for (Size size : sizes) {
if (Math.abs(size.height - targetHeight) < minDiff) {
optimalSize = size;
minDiff = Math.abs(size.height - targetHeight);
}
}
}
return optimalSize;
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
if (mCamera == null)
return;
mCamera.stopPreview();
Display display = ((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
Camera.Parameters parameters = mCamera.getParameters();
int rotation = 0;
if(display.getRotation() == Surface.ROTATION_90) {
rotation = 90;
}
else if(display.getRotation() == Surface.ROTATION_270) {
rotation = 270;
}
else if (display.getRotation() == Surface.ROTATION_180) {
rotation = 180;
}
CameraInfo cameraInfo = new CameraInfo();
Camera.getCameraInfo(mCameraId, cameraInfo);
if (cameraInfo.facing == CameraInfo.CAMERA_FACING_FRONT) {
mCamera.setDisplayOrientation((cameraInfo.orientation - rotation + 360) % 360);
} else {
mCamera.setDisplayOrientation((cameraInfo.orientation + rotation) % 360);
}
requestLayout();
mCamera.setParameters(parameters);
mCamera.startPreview();
}
}

View file

@ -0,0 +1,4 @@
include $(linphone-root-dir)/submodules/externals/build/ffmpeg-no-neon/Android_libavutil.mk
include $(linphone-root-dir)/submodules/externals/build/ffmpeg-no-neon/Android_libavcodec.mk
include $(linphone-root-dir)/submodules/externals/build/ffmpeg-no-neon/Android_libswscale.mk
include $(linphone-root-dir)/submodules/externals/build/ffmpeg-no-neon/Android_libavcore.mk

View file

@ -0,0 +1,109 @@
LOCAL_PATH:= $(call my-dir)/../../ffmpeg
include $(CLEAR_VARS)
LOCAL_MODULE := libavcodecnoneon
LOCAL_SRC_FILES = \
libavcodec/allcodecs.c \
libavcodec/aandcttab.c \
libavcodec/arm/dsputil_arm.S.arm \
libavcodec/arm/dsputil_armv6.S.arm \
libavcodec/arm/dsputil_init_arm.c \
libavcodec/arm/dsputil_init_armv5te.c \
libavcodec/arm/dsputil_init_armv6.c \
libavcodec/arm/dsputil_init_neon.c \
libavcodec/arm/dsputil_init_vfp.c \
libavcodec/arm/dsputil_neon.S.neon \
libavcodec/arm/dsputil_vfp.S.neon \
libavcodec/arm/fft_init_arm.c \
libavcodec/arm/fft_neon.S.neon \
libavcodec/arm/h264dsp_init_arm.c \
libavcodec/arm/h264dsp_neon.S.neon \
libavcodec/arm/h264idct_neon.S.neon \
libavcodec/arm/h264pred_init_arm.c \
libavcodec/arm/h264pred_neon.S.neon \
libavcodec/arm/int_neon.S.neon \
libavcodec/arm/jrevdct_arm.S \
libavcodec/arm/mdct_neon.S.neon \
libavcodec/arm/mpegvideo_arm.c \
libavcodec/arm/mpegvideo_armv5te.c \
libavcodec/arm/mpegvideo_armv5te_s.S \
libavcodec/arm/mpegvideo_neon.S.neon \
libavcodec/arm/simple_idct_arm.S \
libavcodec/arm/simple_idct_armv5te.S \
libavcodec/arm/simple_idct_armv6.S \
libavcodec/arm/simple_idct_neon.S.neon \
libavcodec/audioconvert.c.arm \
libavcodec/avpacket.c \
libavcodec/bitstream.c \
libavcodec/bitstream_filter.c \
libavcodec/cabac.c \
libavcodec/dsputil.c.arm \
libavcodec/error_resilience.c \
libavcodec/faandct.c \
libavcodec/faanidct.c \
libavcodec/flvdec.c \
libavcodec/flvenc.c \
libavcodec/fft.c \
libavcodec/golomb.c \
libavcodec/h263.c.arm \
libavcodec/h263_parser.c \
libavcodec/h263dec.c \
libavcodec/h264.c \
libavcodec/h264_cabac.c.arm \
libavcodec/h264_cavlc.c.arm \
libavcodec/h264_direct.c.arm \
libavcodec/h264_loopfilter.c \
libavcodec/h264_ps.c \
libavcodec/h264_refs.c \
libavcodec/h264_sei.c \
libavcodec/h264dsp.c \
libavcodec/h264idct.c \
libavcodec/h264pred.c \
libavcodec/imgconvert.c \
libavcodec/intelh263dec.c \
libavcodec/inverse.c \
libavcodec/ituh263dec.c \
libavcodec/ituh263enc.c \
libavcodec/jfdctfst.c \
libavcodec/jfdctint.c \
libavcodec/jrevdct.c \
libavcodec/mjpeg.c.arm \
libavcodec/mjpegdec.c.arm \
libavcodec/motion_est.c.arm \
libavcodec/mpeg12data.c \
libavcodec/mpeg4video.c.arm \
libavcodec/mpeg4video_parser.c \
libavcodec/mpeg4videodec.c.arm \
libavcodec/mpeg4videoenc.c.arm \
libavcodec/mpegvideo.c.arm \
libavcodec/mpegvideo_enc.c.arm \
libavcodec/opt.c \
libavcodec/options.c \
libavcodec/parser.c \
libavcodec/ratecontrol.c \
libavcodec/raw.c \
libavcodec/resample.c \
libavcodec/resample2.c \
libavcodec/simple_idct.c \
libavcodec/utils.c \
libavcodec/svq3.c \
libavcodec/pthread.c
LOCAL_ARM_MODE := arm
#LOCAL_CFLAGS += -DHAVE_AV_CONFIG_H -Wa,-I$(LOCAL_PATH)/libavcodec/arm
LOCAL_CFLAGS += -DHAVE_AV_CONFIG_H
#for including config.h:
LOCAL_C_INCLUDES += \
$(LOCAL_PATH)/../build/ffmpeg-no-neon \
$(LOCAL_PATH)/libavcodec/arm \
$(LOCAL_PATH)/ \
$(LOCAL_PATH)/libavutil
LOCAL_SHARED_LIBRARIES := libavutilnoneon libavcorenoneon
include $(BUILD_SHARED_LIBRARY)

View file

@ -0,0 +1,27 @@
LOCAL_PATH:= $(call my-dir)/../../ffmpeg/
include $(CLEAR_VARS)
LOCAL_MODULE := libavcorenoneon
LOCAL_SRC_FILES := \
libavcore/imgutils.c \
libavcore/parseutils.c \
libavcore/utils.c
# libavcore/samplefmt.c \
# libavcore/audioconvert.c
LOCAL_CFLAGS += -DHAVE_AV_CONFIG_H
#for including config.h:
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../build/ffmpeg-no-neon $(LOCAL_PATH)/
LOCAL_SHARED_LIBRARIES := libavutilnoneon
include $(BUILD_SHARED_LIBRARY)

View file

@ -0,0 +1,45 @@
LOCAL_PATH:= $(call my-dir)/../../ffmpeg/
include $(CLEAR_VARS)
LOCAL_MODULE := libavutilnoneon
LOCAL_SRC_FILES = \
libavutil/adler32.c \
libavutil/aes.c \
libavutil/arm/cpu.c \
libavutil/avstring.c \
libavutil/base64.c \
libavutil/cpu.c \
libavutil/crc.c \
libavutil/des.c \
libavutil/error.c \
libavutil/eval.c \
libavutil/fifo.c \
libavutil/intfloat_readwrite.c \
libavutil/inverse.c \
libavutil/lfg.c \
libavutil/lls.c \
libavutil/log.c \
libavutil/lzo.c \
libavutil/mathematics.c \
libavutil/md5.c \
libavutil/mem.c \
libavutil/opt.c \
libavutil/pixdesc.c \
libavutil/random_seed.c \
libavutil/rational.c \
libavutil/rc4.c \
libavutil/sha.c \
libavutil/tree.c \
libavutil/utils.c
LOCAL_CFLAGS += -DHAVE_AV_CONFIG_H
LOCAL_ARM_MODE := arm
#for including config.h:
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../build/ffmpeg-no-neon $(LOCAL_PATH)/
include $(BUILD_SHARED_LIBRARY)

View file

@ -0,0 +1,26 @@
##lib swcale###################
LOCAL_PATH:= $(call my-dir)/../../ffmpeg/libswscale/
include $(CLEAR_VARS)
LOCAL_MODULE := libswscalenoneon
LOCAL_SRC_FILES = \
options.c \
rgb2rgb.c \
swscale.c \
utils.c \
yuv2rgb.c
LOCAL_CFLAGS += -DHAVE_AV_CONFIG_H
LOCAL_ARM_MODE := arm
#for including config.h:
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../build/ffmpeg-no-neon \
$(LOCAL_PATH)/ \
$(LOCAL_PATH)/../
LOCAL_SHARED_LIBRARIES := libavutilnoneon
include $(BUILD_SHARED_LIBRARY)

View file

@ -0,0 +1,3 @@
config.h and list of sources files generated by the following configure invocation:
./configure --disable-mmx --prefix=/Users/jehanmonnier/opt --enable-cross-compile --arch=arm --target-os=linux --cc=arm-none-linux-gnueabi-gcc --disable-ffplay --disable-ffmpeg --disable-ffprobe --disable-ffserver --disable-avdevice --disable-avcore --disable-avfilter --disable-network --disable-everything --enable-decoder=mpeg4 --enable-encoder=mpeg4 --enable-decoder=h264 --enable-decoder=mjpeg --disable-avformat --enable-armv6 --enable-armv6t2 --enable-armvfp --enable-neon --enable-pic --extra-cflags='-fPIC -march=armv7-a -mcpu=cortex-a8 -mfloat-abi=softfp -mfpu=neon'

View file

@ -0,0 +1,956 @@
/* Automatically generated by configure - do not modify! */
#ifndef FFMPEG_CONFIG_H
#define FFMPEG_CONFIG_H
#define FFMPEG_CONFIGURATION "--disable-mmx --prefix=/Users/jehanmonnier/opt --enable-cross-compile --arch=arm --target-os=linux --cc=arm-none-linux-gnueabi-gcc --disable-ffplay --disable-ffmpeg --disable-ffprobe --disable-ffserver --disable-avdevice --disable-avcore --disable-avfilter --disable-network --disable-everything --enable-decoder=mpeg4 --enable-encoder=mpeg4 --enable-decoder=h264 --disable-avformat --enable-armv6 --enable-armv6t2 --enable-armvfp --disable-neon --enable-pic --extra-cflags='-fPIC -march=armv7-a -mcpu=cortex-a8 -mfloat-abi=softfp'"
#define FFMPEG_LICENSE "LGPL version 2.1 or later"
#define FFMPEG_DATADIR "/Users/jehanmonnier/opt/share/ffmpeg"
#define CC_TYPE "gcc"
#define CC_VERSION __VERSION__
#define restrict
#define ASMALIGN(ZEROBITS) ".p2align " #ZEROBITS "\n\t"
#define EXTERN_PREFIX ""
#define EXTERN_ASM
#define ARCH_ALPHA 0
#define ARCH_ARM 1
#define ARCH_AVR32 0
#define ARCH_AVR32_AP 0
#define ARCH_AVR32_UC 0
#define ARCH_BFIN 0
#define ARCH_IA64 0
#define ARCH_M68K 0
#define ARCH_MIPS 0
#define ARCH_MIPS64 0
#define ARCH_PARISC 0
#define ARCH_PPC 0
#define ARCH_PPC64 0
#define ARCH_S390 0
#define ARCH_SH4 0
#define ARCH_SPARC 0
#define ARCH_SPARC64 0
#define ARCH_TOMI 0
#define ARCH_X86 0
#define ARCH_X86_32 0
#define ARCH_X86_64 0
#define HAVE_ALTIVEC 0
#define HAVE_AMD3DNOW 0
#define HAVE_AMD3DNOWEXT 0
#define HAVE_ARMV5TE 1
#define HAVE_ARMV6 1
#define HAVE_ARMV6T2 1
#define HAVE_ARMVFP 1
#define HAVE_IWMMXT 0
#define HAVE_MMI 0
#define HAVE_MMX 0
#define HAVE_MMX2 0
#define HAVE_NEON 0
#define HAVE_PPC4XX 0
#define HAVE_SSE 0
#define HAVE_SSSE3 0
#define HAVE_VIS 0
#define HAVE_BIGENDIAN 0
#define HAVE_FAST_UNALIGNED 1
#define HAVE_PTHREADS 1
#define HAVE_W32THREADS 0
#define HAVE_ALIGNED_STACK 0
#define HAVE_ALSA_ASOUNDLIB_H 0
#define HAVE_ALTIVEC_H 0
#define HAVE_ARPA_INET_H 0
#define HAVE_ATTRIBUTE_MAY_ALIAS 1
#define HAVE_ATTRIBUTE_PACKED 1
#define HAVE_BSWAP 0
#define HAVE_CLOSESOCKET 0
#define HAVE_CMOV 0
#define HAVE_CONIO_H 0
#define HAVE_DCBZL 0
#define HAVE_DEV_BKTR_IOCTL_BT848_H 0
#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0
#define HAVE_DEV_IC_BT8XX_H 0
#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0
#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0
#define HAVE_DLFCN_H 1
#define HAVE_DLOPEN 1
#define HAVE_DOS_PATHS 0
#define HAVE_EBP_AVAILABLE 0
#define HAVE_EBX_AVAILABLE 0
#define HAVE_EXP2 1
#define HAVE_EXP2F 1
#define HAVE_FAST_64BIT 0
#define HAVE_FAST_CLZ 1
#define HAVE_FAST_CMOV 0
#define HAVE_FCNTL 1
#define HAVE_FORK 1
#define HAVE_GETADDRINFO 1
#define HAVE_GETHRTIME 0
#define HAVE_GETPROCESSMEMORYINFO 0
#define HAVE_GETPROCESSTIMES 0
#define HAVE_GETRUSAGE 1
#define HAVE_GNU_AS 1
#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1
#define HAVE_IBM_ASM 0
#define HAVE_INET_ATON 1
#define HAVE_INLINE_ASM 1
#define HAVE_ISATTY 1
#define HAVE_LDBRX 0
#define HAVE_LIBDC1394_1 0
#define HAVE_LIBDC1394_2 0
#define HAVE_LLRINT 1
#define HAVE_LLRINTF 1
#define HAVE_LOCAL_ALIGNED_16 0
#define HAVE_LOCAL_ALIGNED_8 0
#define HAVE_LOG2 1
#define HAVE_LOG2F 1
#define HAVE_LOONGSON 0
#define HAVE_LRINT 1
#define HAVE_LRINTF 1
#define HAVE_LZO1X_999_COMPRESS 0
#define HAVE_MACHINE_IOCTL_BT848_H 0
#define HAVE_MACHINE_IOCTL_METEOR_H 0
#define HAVE_MALLOC_H 1
#define HAVE_MEMALIGN 1
#define HAVE_MKSTEMP 1
#define HAVE_PLD 1
#define HAVE_POSIX_MEMALIGN 0
#define HAVE_ROUND 1
#define HAVE_ROUNDF 1
#define HAVE_SDL 0
#define HAVE_SDL_VIDEO_SIZE 0
#define HAVE_SETMODE 0
#define HAVE_SOCKLEN_T 0
#define HAVE_SOUNDCARD_H 0
#define HAVE_POLL_H 1
#define HAVE_SETRLIMIT 1
#define HAVE_STRERROR_R 1
#define HAVE_STRTOK_R 1
#define HAVE_STRUCT_ADDRINFO 0
#define HAVE_STRUCT_IPV6_MREQ 0
#define HAVE_STRUCT_SOCKADDR_IN6 0
#define HAVE_STRUCT_SOCKADDR_SA_LEN 0
#define HAVE_STRUCT_SOCKADDR_STORAGE 0
#define HAVE_SYMVER 1
#define HAVE_SYMVER_GNU_ASM 1
#define HAVE_SYMVER_ASM_LABEL 0
#define HAVE_SYS_MMAN_H 1
#define HAVE_SYS_RESOURCE_H 1
#define HAVE_SYS_SELECT_H 1
#define HAVE_SYS_SOUNDCARD_H 1
#define HAVE_SYS_VIDEOIO_H 0
#define HAVE_TEN_OPERANDS 0
#define HAVE_TERMIOS_H 1
#define HAVE_THREADS 1
#define HAVE_TRUNCF 1
#define HAVE_VFP_ARGS 0
#define HAVE_VIRTUALALLOC 0
#define HAVE_WINSOCK2_H 0
#define HAVE_XFORM_ASM 0
#define HAVE_YASM 0
#define CONFIG_BSFS 0
#define CONFIG_DECODERS 1
#define CONFIG_DEMUXERS 0
#define CONFIG_ENCODERS 1
#define CONFIG_FILTERS 0
#define CONFIG_HWACCELS 0
#define CONFIG_INDEVS 0
#define CONFIG_MUXERS 0
#define CONFIG_OUTDEVS 0
#define CONFIG_PARSERS 1
#define CONFIG_PROTOCOLS 1
#define CONFIG_AANDCT 1
#define CONFIG_AVCODEC 1
#define CONFIG_AVCORE 0
#define CONFIG_AVDEVICE 0
#define CONFIG_AVFILTER 0
#define CONFIG_AVFORMAT 0
#define CONFIG_AVISYNTH 0
#define CONFIG_BZLIB 0
#define CONFIG_DCT 0
#define CONFIG_DOC 0
#define CONFIG_DWT 0
#define CONFIG_DXVA2 0
#define CONFIG_FASTDIV 1
#define CONFIG_FFMPEG 0
#define CONFIG_FFPLAY 0
#define CONFIG_FFPROBE 0
#define CONFIG_FFSERVER 0
#define CONFIG_FFT 0
#define CONFIG_FREI0R 0
#define CONFIG_GOLOMB 1
#define CONFIG_GPL 0
#define CONFIG_GRAY 0
#define CONFIG_H264DSP 1
#define CONFIG_H264PRED 1
#define CONFIG_HARDCODED_TABLES 0
#define CONFIG_HUFFMAN 0
#define CONFIG_LIBDC1394 0
#define CONFIG_LIBDIRAC 0
#define CONFIG_LIBFAAC 0
#define CONFIG_LIBGSM 0
#define CONFIG_LIBMP3LAME 0
#define CONFIG_LIBNUT 0
#define CONFIG_LIBOPENCORE_AMRNB 0
#define CONFIG_LIBOPENCORE_AMRWB 0
#define CONFIG_LIBOPENCV 0
#define CONFIG_LIBOPENJPEG 0
#define CONFIG_LIBRTMP 0
#define CONFIG_LIBSCHROEDINGER 0
#define CONFIG_LIBSPEEX 0
#define CONFIG_LIBTHEORA 0
#define CONFIG_LIBVORBIS 0
#define CONFIG_LIBVPX 0
#define CONFIG_LIBX264 0
#define CONFIG_LIBXAVS 0
#define CONFIG_LIBXVID 0
#define CONFIG_LPC 0
#define CONFIG_LSP 0
#define CONFIG_MDCT 0
#define CONFIG_MEMALIGN_HACK 0
#define CONFIG_MLIB 0
#define CONFIG_MPEGAUDIO_HP 1
#define CONFIG_NETWORK 0
#define CONFIG_NONFREE 0
#define CONFIG_PIC 1
#define CONFIG_POSTPROC 0
#define CONFIG_RDFT 0
#define CONFIG_RUNTIME_CPUDETECT 0
#define CONFIG_SHARED 0
#define CONFIG_SMALL 0
#define CONFIG_SRAM 0
#define CONFIG_STATIC 1
#define CONFIG_SWSCALE 1
#define CONFIG_SWSCALE_ALPHA 1
#define CONFIG_VAAPI 0
#define CONFIG_VDPAU 0
#define CONFIG_VERSION3 0
#define CONFIG_X11GRAB 0
#define CONFIG_ZLIB 0
#define CONFIG_AVUTIL 1
#define CONFIG_GPLV3 0
#define CONFIG_LGPLV3 0
#define CONFIG_AASC_DECODER 0
#define CONFIG_AMV_DECODER 0
#define CONFIG_ANM_DECODER 0
#define CONFIG_ANSI_DECODER 0
#define CONFIG_ASV1_DECODER 0
#define CONFIG_ASV2_DECODER 0
#define CONFIG_AURA_DECODER 0
#define CONFIG_AURA2_DECODER 0
#define CONFIG_AVS_DECODER 0
#define CONFIG_BETHSOFTVID_DECODER 0
#define CONFIG_BFI_DECODER 0
#define CONFIG_BINK_DECODER 0
#define CONFIG_BMP_DECODER 0
#define CONFIG_C93_DECODER 0
#define CONFIG_CAVS_DECODER 0
#define CONFIG_CDGRAPHICS_DECODER 0
#define CONFIG_CINEPAK_DECODER 0
#define CONFIG_CLJR_DECODER 0
#define CONFIG_CSCD_DECODER 0
#define CONFIG_CYUV_DECODER 0
#define CONFIG_DNXHD_DECODER 0
#define CONFIG_DPX_DECODER 0
#define CONFIG_DSICINVIDEO_DECODER 0
#define CONFIG_DVVIDEO_DECODER 0
#define CONFIG_DXA_DECODER 0
#define CONFIG_EACMV_DECODER 0
#define CONFIG_EAMAD_DECODER 0
#define CONFIG_EATGQ_DECODER 0
#define CONFIG_EATGV_DECODER 0
#define CONFIG_EATQI_DECODER 0
#define CONFIG_EIGHTBPS_DECODER 0
#define CONFIG_EIGHTSVX_EXP_DECODER 0
#define CONFIG_EIGHTSVX_FIB_DECODER 0
#define CONFIG_ESCAPE124_DECODER 0
#define CONFIG_FFV1_DECODER 0
#define CONFIG_FFVHUFF_DECODER 0
#define CONFIG_FLASHSV_DECODER 0
#define CONFIG_FLIC_DECODER 0
#define CONFIG_FLV_DECODER 0
#define CONFIG_FOURXM_DECODER 0
#define CONFIG_FRAPS_DECODER 0
#define CONFIG_FRWU_DECODER 0
#define CONFIG_GIF_DECODER 0
#define CONFIG_H261_DECODER 0
#define CONFIG_H263_DECODER 1
#define CONFIG_H263I_DECODER 0
#define CONFIG_H264_DECODER 1
#define CONFIG_H264_VDPAU_DECODER 0
#define CONFIG_HUFFYUV_DECODER 0
#define CONFIG_IDCIN_DECODER 0
#define CONFIG_IFF_BYTERUN1_DECODER 0
#define CONFIG_IFF_ILBM_DECODER 0
#define CONFIG_INDEO2_DECODER 0
#define CONFIG_INDEO3_DECODER 0
#define CONFIG_INDEO5_DECODER 0
#define CONFIG_INTERPLAY_VIDEO_DECODER 0
#define CONFIG_JPEGLS_DECODER 0
#define CONFIG_KGV1_DECODER 0
#define CONFIG_KMVC_DECODER 0
#define CONFIG_LOCO_DECODER 0
#define CONFIG_MDEC_DECODER 0
#define CONFIG_MIMIC_DECODER 0
#define CONFIG_MJPEG_DECODER 1
#define CONFIG_MJPEGB_DECODER 0
#define CONFIG_MMVIDEO_DECODER 0
#define CONFIG_MOTIONPIXELS_DECODER 0
#define CONFIG_MPEG_XVMC_DECODER 0
#define CONFIG_MPEG1VIDEO_DECODER 0
#define CONFIG_MPEG2VIDEO_DECODER 0
#define CONFIG_MPEG4_DECODER 1
#define CONFIG_MPEG4_VDPAU_DECODER 0
#define CONFIG_MPEGVIDEO_DECODER 0
#define CONFIG_MPEG_VDPAU_DECODER 0
#define CONFIG_MPEG1_VDPAU_DECODER 0
#define CONFIG_MSMPEG4V1_DECODER 0
#define CONFIG_MSMPEG4V2_DECODER 0
#define CONFIG_MSMPEG4V3_DECODER 0
#define CONFIG_MSRLE_DECODER 0
#define CONFIG_MSVIDEO1_DECODER 0
#define CONFIG_MSZH_DECODER 0
#define CONFIG_NUV_DECODER 0
#define CONFIG_PAM_DECODER 0
#define CONFIG_PBM_DECODER 0
#define CONFIG_PCX_DECODER 0
#define CONFIG_PGM_DECODER 0
#define CONFIG_PGMYUV_DECODER 0
#define CONFIG_PICTOR_DECODER 0
#define CONFIG_PNG_DECODER 0
#define CONFIG_PPM_DECODER 0
#define CONFIG_PTX_DECODER 0
#define CONFIG_QDRAW_DECODER 0
#define CONFIG_QPEG_DECODER 0
#define CONFIG_QTRLE_DECODER 0
#define CONFIG_R10K_DECODER 0
#define CONFIG_R210_DECODER 0
#define CONFIG_RAWVIDEO_DECODER 0
#define CONFIG_RL2_DECODER 0
#define CONFIG_ROQ_DECODER 0
#define CONFIG_RPZA_DECODER 0
#define CONFIG_RV10_DECODER 0
#define CONFIG_RV20_DECODER 0
#define CONFIG_RV30_DECODER 0
#define CONFIG_RV40_DECODER 0
#define CONFIG_SGI_DECODER 0
#define CONFIG_SMACKER_DECODER 0
#define CONFIG_SMC_DECODER 0
#define CONFIG_SNOW_DECODER 0
#define CONFIG_SP5X_DECODER 0
#define CONFIG_SUNRAST_DECODER 0
#define CONFIG_SVQ1_DECODER 0
#define CONFIG_SVQ3_DECODER 0
#define CONFIG_TARGA_DECODER 0
#define CONFIG_THEORA_DECODER 0
#define CONFIG_THP_DECODER 0
#define CONFIG_TIERTEXSEQVIDEO_DECODER 0
#define CONFIG_TIFF_DECODER 0
#define CONFIG_TMV_DECODER 0
#define CONFIG_TRUEMOTION1_DECODER 0
#define CONFIG_TRUEMOTION2_DECODER 0
#define CONFIG_TSCC_DECODER 0
#define CONFIG_TXD_DECODER 0
#define CONFIG_ULTI_DECODER 0
#define CONFIG_V210_DECODER 0
#define CONFIG_V210X_DECODER 0
#define CONFIG_VB_DECODER 0
#define CONFIG_VC1_DECODER 0
#define CONFIG_VC1_VDPAU_DECODER 0
#define CONFIG_VCR1_DECODER 0
#define CONFIG_VMDVIDEO_DECODER 0
#define CONFIG_VMNC_DECODER 0
#define CONFIG_VP3_DECODER 0
#define CONFIG_VP5_DECODER 0
#define CONFIG_VP6_DECODER 0
#define CONFIG_VP6A_DECODER 0
#define CONFIG_VP6F_DECODER 0
#define CONFIG_VP8_DECODER 0
#define CONFIG_VQA_DECODER 0
#define CONFIG_WMV1_DECODER 0
#define CONFIG_WMV2_DECODER 0
#define CONFIG_WMV3_DECODER 0
#define CONFIG_WMV3_VDPAU_DECODER 0
#define CONFIG_WNV1_DECODER 0
#define CONFIG_XAN_WC3_DECODER 0
#define CONFIG_XL_DECODER 0
#define CONFIG_YOP_DECODER 0
#define CONFIG_ZLIB_DECODER 0
#define CONFIG_ZMBV_DECODER 0
#define CONFIG_AAC_DECODER 0
#define CONFIG_AC3_DECODER 0
#define CONFIG_ALAC_DECODER 0
#define CONFIG_ALS_DECODER 0
#define CONFIG_AMRNB_DECODER 0
#define CONFIG_APE_DECODER 0
#define CONFIG_ATRAC1_DECODER 0
#define CONFIG_ATRAC3_DECODER 0
#define CONFIG_BINKAUDIO_DCT_DECODER 0
#define CONFIG_BINKAUDIO_RDFT_DECODER 0
#define CONFIG_COOK_DECODER 0
#define CONFIG_DCA_DECODER 0
#define CONFIG_DSICINAUDIO_DECODER 0
#define CONFIG_EAC3_DECODER 0
#define CONFIG_FLAC_DECODER 0
#define CONFIG_GSM_DECODER 0
#define CONFIG_GSM_MS_DECODER 0
#define CONFIG_IMC_DECODER 0
#define CONFIG_MACE3_DECODER 0
#define CONFIG_MACE6_DECODER 0
#define CONFIG_MLP_DECODER 0
#define CONFIG_MP1_DECODER 0
#define CONFIG_MP1FLOAT_DECODER 0
#define CONFIG_MP2_DECODER 0
#define CONFIG_MP2FLOAT_DECODER 0
#define CONFIG_MP3_DECODER 0
#define CONFIG_MP3FLOAT_DECODER 0
#define CONFIG_MP3ADU_DECODER 0
#define CONFIG_MP3ADUFLOAT_DECODER 0
#define CONFIG_MP3ON4_DECODER 0
#define CONFIG_MP3ON4FLOAT_DECODER 0
#define CONFIG_MPC7_DECODER 0
#define CONFIG_MPC8_DECODER 0
#define CONFIG_NELLYMOSER_DECODER 0
#define CONFIG_QCELP_DECODER 0
#define CONFIG_QDM2_DECODER 0
#define CONFIG_RA_144_DECODER 0
#define CONFIG_RA_288_DECODER 0
#define CONFIG_SHORTEN_DECODER 0
#define CONFIG_SIPR_DECODER 0
#define CONFIG_SMACKAUD_DECODER 0
#define CONFIG_SONIC_DECODER 0
#define CONFIG_TRUEHD_DECODER 0
#define CONFIG_TRUESPEECH_DECODER 0
#define CONFIG_TTA_DECODER 0
#define CONFIG_TWINVQ_DECODER 0
#define CONFIG_VMDAUDIO_DECODER 0
#define CONFIG_VORBIS_DECODER 0
#define CONFIG_WAVPACK_DECODER 0
#define CONFIG_WMAPRO_DECODER 0
#define CONFIG_WMAV1_DECODER 0
#define CONFIG_WMAV2_DECODER 0
#define CONFIG_WMAVOICE_DECODER 0
#define CONFIG_WS_SND1_DECODER 0
#define CONFIG_PCM_ALAW_DECODER 0
#define CONFIG_PCM_BLURAY_DECODER 0
#define CONFIG_PCM_DVD_DECODER 0
#define CONFIG_PCM_F32BE_DECODER 0
#define CONFIG_PCM_F32LE_DECODER 0
#define CONFIG_PCM_F64BE_DECODER 0
#define CONFIG_PCM_F64LE_DECODER 0
#define CONFIG_PCM_MULAW_DECODER 0
#define CONFIG_PCM_S8_DECODER 0
#define CONFIG_PCM_S16BE_DECODER 0
#define CONFIG_PCM_S16LE_DECODER 0
#define CONFIG_PCM_S16LE_PLANAR_DECODER 0
#define CONFIG_PCM_S24BE_DECODER 0
#define CONFIG_PCM_S24DAUD_DECODER 0
#define CONFIG_PCM_S24LE_DECODER 0
#define CONFIG_PCM_S32BE_DECODER 0
#define CONFIG_PCM_S32LE_DECODER 0
#define CONFIG_PCM_U8_DECODER 0
#define CONFIG_PCM_U16BE_DECODER 0
#define CONFIG_PCM_U16LE_DECODER 0
#define CONFIG_PCM_U24BE_DECODER 0
#define CONFIG_PCM_U24LE_DECODER 0
#define CONFIG_PCM_U32BE_DECODER 0
#define CONFIG_PCM_U32LE_DECODER 0
#define CONFIG_PCM_ZORK_DECODER 0
#define CONFIG_INTERPLAY_DPCM_DECODER 0
#define CONFIG_ROQ_DPCM_DECODER 0
#define CONFIG_SOL_DPCM_DECODER 0
#define CONFIG_XAN_DPCM_DECODER 0
#define CONFIG_ADPCM_4XM_DECODER 0
#define CONFIG_ADPCM_ADX_DECODER 0
#define CONFIG_ADPCM_CT_DECODER 0
#define CONFIG_ADPCM_EA_DECODER 0
#define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0
#define CONFIG_ADPCM_EA_R1_DECODER 0
#define CONFIG_ADPCM_EA_R2_DECODER 0
#define CONFIG_ADPCM_EA_R3_DECODER 0
#define CONFIG_ADPCM_EA_XAS_DECODER 0
#define CONFIG_ADPCM_G722_DECODER 0
#define CONFIG_ADPCM_G726_DECODER 0
#define CONFIG_ADPCM_IMA_AMV_DECODER 0
#define CONFIG_ADPCM_IMA_DK3_DECODER 0
#define CONFIG_ADPCM_IMA_DK4_DECODER 0
#define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0
#define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0
#define CONFIG_ADPCM_IMA_ISS_DECODER 0
#define CONFIG_ADPCM_IMA_QT_DECODER 0
#define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0
#define CONFIG_ADPCM_IMA_WAV_DECODER 0
#define CONFIG_ADPCM_IMA_WS_DECODER 0
#define CONFIG_ADPCM_MS_DECODER 0
#define CONFIG_ADPCM_SBPRO_2_DECODER 0
#define CONFIG_ADPCM_SBPRO_3_DECODER 0
#define CONFIG_ADPCM_SBPRO_4_DECODER 0
#define CONFIG_ADPCM_SWF_DECODER 0
#define CONFIG_ADPCM_THP_DECODER 0
#define CONFIG_ADPCM_XA_DECODER 0
#define CONFIG_ADPCM_YAMAHA_DECODER 0
#define CONFIG_DVBSUB_DECODER 0
#define CONFIG_DVDSUB_DECODER 0
#define CONFIG_PGSSUB_DECODER 0
#define CONFIG_XSUB_DECODER 0
#define CONFIG_LIBDIRAC_DECODER 0
#define CONFIG_LIBGSM_DECODER 0
#define CONFIG_LIBGSM_MS_DECODER 0
#define CONFIG_LIBOPENCORE_AMRNB_DECODER 0
#define CONFIG_LIBOPENCORE_AMRWB_DECODER 0
#define CONFIG_LIBOPENJPEG_DECODER 0
#define CONFIG_LIBSCHROEDINGER_DECODER 0
#define CONFIG_LIBSPEEX_DECODER 0
#define CONFIG_LIBVPX_DECODER 0
#define CONFIG_A64MULTI_ENCODER 0
#define CONFIG_A64MULTI5_ENCODER 0
#define CONFIG_ASV1_ENCODER 0
#define CONFIG_ASV2_ENCODER 0
#define CONFIG_BMP_ENCODER 0
#define CONFIG_DNXHD_ENCODER 0
#define CONFIG_DVVIDEO_ENCODER 0
#define CONFIG_FFV1_ENCODER 0
#define CONFIG_FFVHUFF_ENCODER 0
#define CONFIG_FLASHSV_ENCODER 0
#define CONFIG_FLV_ENCODER 0
#define CONFIG_GIF_ENCODER 0
#define CONFIG_H261_ENCODER 0
#define CONFIG_H263_ENCODER 1
#define CONFIG_H263P_ENCODER 0
#define CONFIG_HUFFYUV_ENCODER 0
#define CONFIG_JPEGLS_ENCODER 0
#define CONFIG_LJPEG_ENCODER 0
#define CONFIG_MJPEG_ENCODER 0
#define CONFIG_MPEG1VIDEO_ENCODER 0
#define CONFIG_MPEG2VIDEO_ENCODER 0
#define CONFIG_MPEG4_ENCODER 1
#define CONFIG_MSMPEG4V1_ENCODER 0
#define CONFIG_MSMPEG4V2_ENCODER 0
#define CONFIG_MSMPEG4V3_ENCODER 0
#define CONFIG_PAM_ENCODER 0
#define CONFIG_PBM_ENCODER 0
#define CONFIG_PCX_ENCODER 0
#define CONFIG_PGM_ENCODER 0
#define CONFIG_PGMYUV_ENCODER 0
#define CONFIG_PNG_ENCODER 0
#define CONFIG_PPM_ENCODER 0
#define CONFIG_QTRLE_ENCODER 0
#define CONFIG_RAWVIDEO_ENCODER 0
#define CONFIG_ROQ_ENCODER 0
#define CONFIG_RV10_ENCODER 0
#define CONFIG_RV20_ENCODER 0
#define CONFIG_SGI_ENCODER 0
#define CONFIG_SNOW_ENCODER 0
#define CONFIG_SVQ1_ENCODER 0
#define CONFIG_TARGA_ENCODER 0
#define CONFIG_TIFF_ENCODER 0
#define CONFIG_V210_ENCODER 0
#define CONFIG_WMV1_ENCODER 0
#define CONFIG_WMV2_ENCODER 0
#define CONFIG_ZLIB_ENCODER 0
#define CONFIG_ZMBV_ENCODER 0
#define CONFIG_AAC_ENCODER 0
#define CONFIG_AC3_ENCODER 0
#define CONFIG_ALAC_ENCODER 0
#define CONFIG_FLAC_ENCODER 0
#define CONFIG_MP2_ENCODER 0
#define CONFIG_NELLYMOSER_ENCODER 0
#define CONFIG_RA_144_ENCODER 0
#define CONFIG_SONIC_ENCODER 0
#define CONFIG_SONIC_LS_ENCODER 0
#define CONFIG_VORBIS_ENCODER 0
#define CONFIG_WMAV1_ENCODER 0
#define CONFIG_WMAV2_ENCODER 0
#define CONFIG_PCM_ALAW_ENCODER 0
#define CONFIG_PCM_F32BE_ENCODER 0
#define CONFIG_PCM_F32LE_ENCODER 0
#define CONFIG_PCM_F64BE_ENCODER 0
#define CONFIG_PCM_F64LE_ENCODER 0
#define CONFIG_PCM_MULAW_ENCODER 0
#define CONFIG_PCM_S8_ENCODER 0
#define CONFIG_PCM_S16BE_ENCODER 0
#define CONFIG_PCM_S16LE_ENCODER 0
#define CONFIG_PCM_S24BE_ENCODER 0
#define CONFIG_PCM_S24DAUD_ENCODER 0
#define CONFIG_PCM_S24LE_ENCODER 0
#define CONFIG_PCM_S32BE_ENCODER 0
#define CONFIG_PCM_S32LE_ENCODER 0
#define CONFIG_PCM_U8_ENCODER 0
#define CONFIG_PCM_U16BE_ENCODER 0
#define CONFIG_PCM_U16LE_ENCODER 0
#define CONFIG_PCM_U24BE_ENCODER 0
#define CONFIG_PCM_U24LE_ENCODER 0
#define CONFIG_PCM_U32BE_ENCODER 0
#define CONFIG_PCM_U32LE_ENCODER 0
#define CONFIG_PCM_ZORK_ENCODER 0
#define CONFIG_ROQ_DPCM_ENCODER 0
#define CONFIG_ADPCM_ADX_ENCODER 0
#define CONFIG_ADPCM_G722_ENCODER 0
#define CONFIG_ADPCM_G726_ENCODER 0
#define CONFIG_ADPCM_IMA_QT_ENCODER 0
#define CONFIG_ADPCM_IMA_WAV_ENCODER 0
#define CONFIG_ADPCM_MS_ENCODER 0
#define CONFIG_ADPCM_SWF_ENCODER 0
#define CONFIG_ADPCM_YAMAHA_ENCODER 0
#define CONFIG_DVBSUB_ENCODER 0
#define CONFIG_DVDSUB_ENCODER 0
#define CONFIG_XSUB_ENCODER 0
#define CONFIG_LIBDIRAC_ENCODER 0
#define CONFIG_LIBFAAC_ENCODER 0
#define CONFIG_LIBGSM_ENCODER 0
#define CONFIG_LIBGSM_MS_ENCODER 0
#define CONFIG_LIBMP3LAME_ENCODER 0
#define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0
#define CONFIG_LIBSCHROEDINGER_ENCODER 0
#define CONFIG_LIBTHEORA_ENCODER 0
#define CONFIG_LIBVORBIS_ENCODER 0
#define CONFIG_LIBVPX_ENCODER 0
#define CONFIG_LIBX264_ENCODER 0
#define CONFIG_LIBXAVS_ENCODER 0
#define CONFIG_LIBXVID_ENCODER 0
#define CONFIG_H263_VAAPI_HWACCEL 0
#define CONFIG_H264_DXVA2_HWACCEL 0
#define CONFIG_H264_VAAPI_HWACCEL 0
#define CONFIG_MPEG2_DXVA2_HWACCEL 0
#define CONFIG_MPEG2_VAAPI_HWACCEL 0
#define CONFIG_MPEG4_VAAPI_HWACCEL 0
#define CONFIG_VC1_DXVA2_HWACCEL 0
#define CONFIG_VC1_VAAPI_HWACCEL 0
#define CONFIG_WMV3_DXVA2_HWACCEL 0
#define CONFIG_WMV3_VAAPI_HWACCEL 0
#define CONFIG_AAC_PARSER 0
#define CONFIG_AC3_PARSER 0
#define CONFIG_CAVSVIDEO_PARSER 0
#define CONFIG_DCA_PARSER 0
#define CONFIG_DIRAC_PARSER 0
#define CONFIG_DNXHD_PARSER 0
#define CONFIG_DVBSUB_PARSER 0
#define CONFIG_DVDSUB_PARSER 0
#define CONFIG_H261_PARSER 0
#define CONFIG_H263_PARSER 1
#define CONFIG_H264_PARSER 0
#define CONFIG_MJPEG_PARSER 0
#define CONFIG_MLP_PARSER 0
#define CONFIG_MPEG4VIDEO_PARSER 1
#define CONFIG_MPEGAUDIO_PARSER 0
#define CONFIG_MPEGVIDEO_PARSER 0
#define CONFIG_PNM_PARSER 0
#define CONFIG_VC1_PARSER 0
#define CONFIG_VP3_PARSER 0
#define CONFIG_VP8_PARSER 0
#define CONFIG_AAC_ADTSTOASC_BSF 0
#define CONFIG_CHOMP_BSF 0
#define CONFIG_DUMP_EXTRADATA_BSF 0
#define CONFIG_H264_MP4TOANNEXB_BSF 0
#define CONFIG_IMX_DUMP_HEADER_BSF 0
#define CONFIG_MJPEGA_DUMP_HEADER_BSF 0
#define CONFIG_MP3_HEADER_COMPRESS_BSF 0
#define CONFIG_MP3_HEADER_DECOMPRESS_BSF 0
#define CONFIG_MOV2TEXTSUB_BSF 0
#define CONFIG_NOISE_BSF 0
#define CONFIG_REMOVE_EXTRADATA_BSF 0
#define CONFIG_TEXT2MOVSUB_BSF 0
#define CONFIG_AAC_DEMUXER 0
#define CONFIG_AC3_DEMUXER 0
#define CONFIG_AEA_DEMUXER 0
#define CONFIG_AIFF_DEMUXER 0
#define CONFIG_AMR_DEMUXER 0
#define CONFIG_ANM_DEMUXER 0
#define CONFIG_APC_DEMUXER 0
#define CONFIG_APE_DEMUXER 0
#define CONFIG_APPLEHTTP_DEMUXER 0
#define CONFIG_ASF_DEMUXER 0
#define CONFIG_ASS_DEMUXER 0
#define CONFIG_AU_DEMUXER 0
#define CONFIG_AVI_DEMUXER 0
#define CONFIG_AVISYNTH_DEMUXER 0
#define CONFIG_AVS_DEMUXER 0
#define CONFIG_BETHSOFTVID_DEMUXER 0
#define CONFIG_BFI_DEMUXER 0
#define CONFIG_BINK_DEMUXER 0
#define CONFIG_C93_DEMUXER 0
#define CONFIG_CAF_DEMUXER 0
#define CONFIG_CAVSVIDEO_DEMUXER 0
#define CONFIG_CDG_DEMUXER 0
#define CONFIG_DAUD_DEMUXER 0
#define CONFIG_DIRAC_DEMUXER 0
#define CONFIG_DNXHD_DEMUXER 0
#define CONFIG_DSICIN_DEMUXER 0
#define CONFIG_DTS_DEMUXER 0
#define CONFIG_DV_DEMUXER 0
#define CONFIG_DXA_DEMUXER 0
#define CONFIG_EA_DEMUXER 0
#define CONFIG_EA_CDATA_DEMUXER 0
#define CONFIG_EAC3_DEMUXER 0
#define CONFIG_FFM_DEMUXER 0
#define CONFIG_FILMSTRIP_DEMUXER 0
#define CONFIG_FLAC_DEMUXER 0
#define CONFIG_FLIC_DEMUXER 0
#define CONFIG_FLV_DEMUXER 0
#define CONFIG_FOURXM_DEMUXER 0
#define CONFIG_G722_DEMUXER 0
#define CONFIG_GSM_DEMUXER 0
#define CONFIG_GXF_DEMUXER 0
#define CONFIG_H261_DEMUXER 0
#define CONFIG_H263_DEMUXER 0
#define CONFIG_H264_DEMUXER 0
#define CONFIG_IDCIN_DEMUXER 0
#define CONFIG_IFF_DEMUXER 0
#define CONFIG_IMAGE2_DEMUXER 0
#define CONFIG_IMAGE2PIPE_DEMUXER 0
#define CONFIG_INGENIENT_DEMUXER 0
#define CONFIG_IPMOVIE_DEMUXER 0
#define CONFIG_ISS_DEMUXER 0
#define CONFIG_IV8_DEMUXER 0
#define CONFIG_IVF_DEMUXER 0
#define CONFIG_LMLM4_DEMUXER 0
#define CONFIG_M4V_DEMUXER 0
#define CONFIG_MATROSKA_DEMUXER 0
#define CONFIG_MJPEG_DEMUXER 0
#define CONFIG_MLP_DEMUXER 0
#define CONFIG_MM_DEMUXER 0
#define CONFIG_MMF_DEMUXER 0
#define CONFIG_MOV_DEMUXER 0
#define CONFIG_MP3_DEMUXER 0
#define CONFIG_MPC_DEMUXER 0
#define CONFIG_MPC8_DEMUXER 0
#define CONFIG_MPEGPS_DEMUXER 0
#define CONFIG_MPEGTS_DEMUXER 0
#define CONFIG_MPEGTSRAW_DEMUXER 0
#define CONFIG_MPEGVIDEO_DEMUXER 0
#define CONFIG_MSNWC_TCP_DEMUXER 0
#define CONFIG_MTV_DEMUXER 0
#define CONFIG_MVI_DEMUXER 0
#define CONFIG_MXF_DEMUXER 0
#define CONFIG_NC_DEMUXER 0
#define CONFIG_NSV_DEMUXER 0
#define CONFIG_NUT_DEMUXER 0
#define CONFIG_NUV_DEMUXER 0
#define CONFIG_OGG_DEMUXER 0
#define CONFIG_OMA_DEMUXER 0
#define CONFIG_PCM_ALAW_DEMUXER 0
#define CONFIG_PCM_MULAW_DEMUXER 0
#define CONFIG_PCM_F64BE_DEMUXER 0
#define CONFIG_PCM_F64LE_DEMUXER 0
#define CONFIG_PCM_F32BE_DEMUXER 0
#define CONFIG_PCM_F32LE_DEMUXER 0
#define CONFIG_PCM_S32BE_DEMUXER 0
#define CONFIG_PCM_S32LE_DEMUXER 0
#define CONFIG_PCM_S24BE_DEMUXER 0
#define CONFIG_PCM_S24LE_DEMUXER 0
#define CONFIG_PCM_S16BE_DEMUXER 0
#define CONFIG_PCM_S16LE_DEMUXER 0
#define CONFIG_PCM_S8_DEMUXER 0
#define CONFIG_PCM_U32BE_DEMUXER 0
#define CONFIG_PCM_U32LE_DEMUXER 0
#define CONFIG_PCM_U24BE_DEMUXER 0
#define CONFIG_PCM_U24LE_DEMUXER 0
#define CONFIG_PCM_U16BE_DEMUXER 0
#define CONFIG_PCM_U16LE_DEMUXER 0
#define CONFIG_PCM_U8_DEMUXER 0
#define CONFIG_PVA_DEMUXER 0
#define CONFIG_QCP_DEMUXER 0
#define CONFIG_R3D_DEMUXER 0
#define CONFIG_RAWVIDEO_DEMUXER 0
#define CONFIG_RL2_DEMUXER 0
#define CONFIG_RM_DEMUXER 0
#define CONFIG_ROQ_DEMUXER 0
#define CONFIG_RPL_DEMUXER 0
#define CONFIG_RSO_DEMUXER 0
#define CONFIG_RTSP_DEMUXER 0
#define CONFIG_SDP_DEMUXER 0
#define CONFIG_SEGAFILM_DEMUXER 0
#define CONFIG_SHORTEN_DEMUXER 0
#define CONFIG_SIFF_DEMUXER 0
#define CONFIG_SMACKER_DEMUXER 0
#define CONFIG_SOL_DEMUXER 0
#define CONFIG_SOX_DEMUXER 0
#define CONFIG_SRT_DEMUXER 0
#define CONFIG_STR_DEMUXER 0
#define CONFIG_SWF_DEMUXER 0
#define CONFIG_THP_DEMUXER 0
#define CONFIG_TIERTEXSEQ_DEMUXER 0
#define CONFIG_TMV_DEMUXER 0
#define CONFIG_TRUEHD_DEMUXER 0
#define CONFIG_TTA_DEMUXER 0
#define CONFIG_TXD_DEMUXER 0
#define CONFIG_TTY_DEMUXER 0
#define CONFIG_VC1_DEMUXER 0
#define CONFIG_VC1T_DEMUXER 0
#define CONFIG_VMD_DEMUXER 0
#define CONFIG_VOC_DEMUXER 0
#define CONFIG_VQF_DEMUXER 0
#define CONFIG_W64_DEMUXER 0
#define CONFIG_WAV_DEMUXER 0
#define CONFIG_WC3_DEMUXER 0
#define CONFIG_WSAUD_DEMUXER 0
#define CONFIG_WSVQA_DEMUXER 0
#define CONFIG_WV_DEMUXER 0
#define CONFIG_XA_DEMUXER 0
#define CONFIG_YOP_DEMUXER 0
#define CONFIG_YUV4MPEGPIPE_DEMUXER 0
#define CONFIG_LIBNUT_DEMUXER 0
#define CONFIG_A64_MUXER 0
#define CONFIG_AC3_MUXER 0
#define CONFIG_ADTS_MUXER 0
#define CONFIG_AIFF_MUXER 0
#define CONFIG_AMR_MUXER 0
#define CONFIG_ASF_MUXER 0
#define CONFIG_ASS_MUXER 0
#define CONFIG_ASF_STREAM_MUXER 0
#define CONFIG_AU_MUXER 0
#define CONFIG_AVI_MUXER 0
#define CONFIG_AVM2_MUXER 0
#define CONFIG_CAVSVIDEO_MUXER 0
#define CONFIG_CRC_MUXER 0
#define CONFIG_DAUD_MUXER 0
#define CONFIG_DIRAC_MUXER 0
#define CONFIG_DNXHD_MUXER 0
#define CONFIG_DTS_MUXER 0
#define CONFIG_DV_MUXER 0
#define CONFIG_EAC3_MUXER 0
#define CONFIG_FFM_MUXER 0
#define CONFIG_FILMSTRIP_MUXER 0
#define CONFIG_FLAC_MUXER 0
#define CONFIG_FLV_MUXER 0
#define CONFIG_FRAMECRC_MUXER 0
#define CONFIG_FRAMEMD5_MUXER 0
#define CONFIG_G722_MUXER 0
#define CONFIG_GIF_MUXER 0
#define CONFIG_GXF_MUXER 0
#define CONFIG_H261_MUXER 0
#define CONFIG_H263_MUXER 0
#define CONFIG_H264_MUXER 0
#define CONFIG_IMAGE2_MUXER 0
#define CONFIG_IMAGE2PIPE_MUXER 0
#define CONFIG_IPOD_MUXER 0
#define CONFIG_M4V_MUXER 0
#define CONFIG_MD5_MUXER 0
#define CONFIG_MATROSKA_MUXER 0
#define CONFIG_MATROSKA_AUDIO_MUXER 0
#define CONFIG_MJPEG_MUXER 0
#define CONFIG_MLP_MUXER 0
#define CONFIG_MMF_MUXER 0
#define CONFIG_MOV_MUXER 0
#define CONFIG_MP2_MUXER 0
#define CONFIG_MP3_MUXER 0
#define CONFIG_MP4_MUXER 0
#define CONFIG_MPEG1SYSTEM_MUXER 0
#define CONFIG_MPEG1VCD_MUXER 0
#define CONFIG_MPEG1VIDEO_MUXER 0
#define CONFIG_MPEG2DVD_MUXER 0
#define CONFIG_MPEG2SVCD_MUXER 0
#define CONFIG_MPEG2VIDEO_MUXER 0
#define CONFIG_MPEG2VOB_MUXER 0
#define CONFIG_MPEGTS_MUXER 0
#define CONFIG_MPJPEG_MUXER 0
#define CONFIG_MXF_MUXER 0
#define CONFIG_MXF_D10_MUXER 0
#define CONFIG_NULL_MUXER 0
#define CONFIG_NUT_MUXER 0
#define CONFIG_OGG_MUXER 0
#define CONFIG_PCM_ALAW_MUXER 0
#define CONFIG_PCM_MULAW_MUXER 0
#define CONFIG_PCM_F64BE_MUXER 0
#define CONFIG_PCM_F64LE_MUXER 0
#define CONFIG_PCM_F32BE_MUXER 0
#define CONFIG_PCM_F32LE_MUXER 0
#define CONFIG_PCM_S32BE_MUXER 0
#define CONFIG_PCM_S32LE_MUXER 0
#define CONFIG_PCM_S24BE_MUXER 0
#define CONFIG_PCM_S24LE_MUXER 0
#define CONFIG_PCM_S16BE_MUXER 0
#define CONFIG_PCM_S16LE_MUXER 0
#define CONFIG_PCM_S8_MUXER 0
#define CONFIG_PCM_U32BE_MUXER 0
#define CONFIG_PCM_U32LE_MUXER 0
#define CONFIG_PCM_U24BE_MUXER 0
#define CONFIG_PCM_U24LE_MUXER 0
#define CONFIG_PCM_U16BE_MUXER 0
#define CONFIG_PCM_U16LE_MUXER 0
#define CONFIG_PCM_U8_MUXER 0
#define CONFIG_PSP_MUXER 0
#define CONFIG_RAWVIDEO_MUXER 0
#define CONFIG_RM_MUXER 0
#define CONFIG_ROQ_MUXER 0
#define CONFIG_RSO_MUXER 0
#define CONFIG_RTP_MUXER 0
#define CONFIG_RTSP_MUXER 0
#define CONFIG_SOX_MUXER 0
#define CONFIG_SPDIF_MUXER 0
#define CONFIG_SRT_MUXER 0
#define CONFIG_SWF_MUXER 0
#define CONFIG_TG2_MUXER 0
#define CONFIG_TGP_MUXER 0
#define CONFIG_TRUEHD_MUXER 0
#define CONFIG_VC1T_MUXER 0
#define CONFIG_VOC_MUXER 0
#define CONFIG_WAV_MUXER 0
#define CONFIG_WEBM_MUXER 0
#define CONFIG_YUV4MPEGPIPE_MUXER 0
#define CONFIG_LIBNUT_MUXER 0
#define CONFIG_ANULL_FILTER 0
#define CONFIG_ANULLSRC_FILTER 0
#define CONFIG_ANULLSINK_FILTER 0
#define CONFIG_ASPECT_FILTER 0
#define CONFIG_BLACKFRAME_FILTER 0
#define CONFIG_CROP_FILTER 0
#define CONFIG_DRAWBOX_FILTER 0
#define CONFIG_FIFO_FILTER 0
#define CONFIG_FORMAT_FILTER 0
#define CONFIG_FREI0R_FILTER 0
#define CONFIG_HFLIP_FILTER 0
#define CONFIG_NOFORMAT_FILTER 0
#define CONFIG_NULL_FILTER 0
#define CONFIG_OCV_SMOOTH_FILTER 0
#define CONFIG_PAD_FILTER 0
#define CONFIG_PIXDESCTEST_FILTER 0
#define CONFIG_PIXELASPECT_FILTER 0
#define CONFIG_SCALE_FILTER 0
#define CONFIG_SLICIFY_FILTER 0
#define CONFIG_UNSHARP_FILTER 0
#define CONFIG_VFLIP_FILTER 0
#define CONFIG_YADIF_FILTER 0
#define CONFIG_BUFFER_FILTER 0
#define CONFIG_COLOR_FILTER 0
#define CONFIG_NULLSRC_FILTER 0
#define CONFIG_NULLSINK_FILTER 0
#define CONFIG_CONCAT_PROTOCOL 0
#define CONFIG_FILE_PROTOCOL 0
#define CONFIG_GOPHER_PROTOCOL 0
#define CONFIG_HTTP_PROTOCOL 0
#define CONFIG_MMSH_PROTOCOL 0
#define CONFIG_MMST_PROTOCOL 0
#define CONFIG_MD5_PROTOCOL 0
#define CONFIG_PIPE_PROTOCOL 0
#define CONFIG_RTMP_PROTOCOL 0
#define CONFIG_RTMPT_PROTOCOL 0
#define CONFIG_RTMPE_PROTOCOL 0
#define CONFIG_RTMPTE_PROTOCOL 0
#define CONFIG_RTMPS_PROTOCOL 0
#define CONFIG_RTP_PROTOCOL 0
#define CONFIG_TCP_PROTOCOL 0
#define CONFIG_UDP_PROTOCOL 0
#define CONFIG_ALSA_INDEV 0
#define CONFIG_BKTR_INDEV 0
#define CONFIG_DV1394_INDEV 0
#define CONFIG_JACK_INDEV 0
#define CONFIG_OSS_INDEV 0
#define CONFIG_V4L2_INDEV 0
#define CONFIG_V4L_INDEV 0
#define CONFIG_VFWCAP_INDEV 0
#define CONFIG_X11_GRAB_DEVICE_INDEV 0
#define CONFIG_LIBDC1394_INDEV 0
#define CONFIG_ALSA_OUTDEV 0
#define CONFIG_OSS_OUTDEV 0
/*added by hand after ffmpeg update */
#define CONFIG_LAGARITH_DECODER 0
#define CONFIG_AAC_LATM_DECODER 0
#define CONFIG_AC3_FIXED_ENCODER 0
#define CONFIG_AMRWB_DECODER 0
#define CONFIG_PCM_LXF_DECODER 0
#define CONFIG_ASS_ENCODER 0
#define CONFIG_ASS_DECODER 0
#define CONFIG_SRT_DECODER 0
#define CONFIG_AAC_LATM_PARSER 0
#define CONFIG_FLAC_PARSER 0
#define CONFIG_MJPEG2JPEG_BSF 0
#endif /* FFMPEG_CONFIG_H */

View file

@ -0,0 +1,6 @@
/* Generated by ffconf */
#ifndef AVUTIL_AVCONFIG_H
#define AVUTIL_AVCONFIG_H
#define AV_HAVE_BIGENDIAN 0
#define AV_HAVE_FAST_UNALIGNED 1
#endif /* AVUTIL_AVCONFIG_H */

@ -1 +1 @@
Subproject commit edad295e0596eebc7ca4aed7472e0e3bdc696b41 Subproject commit 53d5f0c2bf8a5fbbfb04ce4126db81ff3da38916