Ok, I'll see what I can do. Thanks.
Atsushi Eno wrote: > > It would be helpful if you can file two archives of your reproducible > project on bugzilla - one that works, and one that does not. They would > help spot the difference. > What I tried was exactly from your post, but since it is email and > whitespace differences could matter. > > Atsushi Eno > > On 2011/08/09 0:56, WyrmUK wrote: >> Well this is just it. It does work perfectly every time some builds, >> throws >> an exception every time on others (causing the app to crash), and just >> page >> faults every time on others (again causing the app to crash). This seems >> to >> point to a mandroid issue because it's not like it sometimes works and >> sometimes page-faults with a single build, if it works for a build then >> it >> always works in that build; but there may be something I'm missing - or >> there may be a work-around. I can't catch the exception either as it just >> kills the app. Would be good to get some comment from someone who knows >> more >> about the Mono system and ARM devices and why this might be happening. It >> could be just a byte-alignment issue and a command line option fixes it. >> But >> I don't know. >> Anyone? >> >> >> Atsushi Eno wrote: >>> Actually, I tried it, but I could never get it working fine. It just >>> shows black screen and ended up with crash (I don't remember correctly). >>> Should this equivalent code work in Java form? >>> >>> Atsushi Eno >>> >>>> Hi. >>>> I'm trying to implement an activity which previews the camera and >>>> allows >>>> a >>>> picture to be taken. >>>> However I get rather mixed results with each build. One time it will >>>> work >>>> fine, but I might make a change such as adding a comment and re-compile >>>> and >>>> I get an error when setting the ISurfaceHolderCallback, then I might >>>> take >>>> the comment out and re-compile and I get a page fault, then I can do >>>> something else and it works again! It seems that it's compile/build >>>> related >>>> because if I build and it happens to work it will always work; but if I >>>> build and it crashes then it will always crash. The below failed with >>>> the >>>> exception shown, then I took the '.' off the end of the comment, >>>> re-compiled >>>> and it then worked!!! >>>> Is there an issue here or am I failing to set something up properly? >>>> I'm running this on a Dell Streak 5. >>>> >>>> This is a snapshot from ADB of one of the errors: >>>> >>>> I/ActivityManager( 146): Starting activity: Intent { >>>> cmp=uk.co.reach.reachcloud/reachmobilecc.PictureActivity } >>>> I/CameraView( 2699): Adding Callback >>>> F/PrintK ( 2699):<2>Exception!!! each.reachcloud: unhandled page fault >>>> (11) at 0xed006d4e, code 0x005 >>>> I/MonoDroid( 2699): UNHANDLED EXCEPTION: System.NullReferenceException: >>>> Object reference not set to an instance of an object >>>> I/MonoDroid( 2699): at >>>> Android.Views.ISurfaceHolderCallbackAdapter.GetHandle >>>> (Android.Views.ISurfaceHolderCallback)<0x00038> >>>> I/MonoDroid( 2699): at Android.Views.ISurfaceHolderInvoker.AddCallback >>>> (Android.Views.ISurfaceHolderCallback)<0x000bf> >>>> I/MonoDroid( 2699): at ReachMobileCC.PictureActivity.OnResume >>>> ()<0x00073> >>>> I/MonoDroid( 2699): at Android.App.Activity.n_OnResume (intptr,intptr) >>>> <0x00033> >>>> I/MonoDroid( 2699): at (wrapper dynamic-method) >>>> object.38c0d09b-61f8-491e-b367-fbed8a6fb14a (intptr,intptr)<0x0002b> >>>> E/mono ( 2699): >>>> E/mono ( 2699): Unhandled Exception: System.NullReferenceException: >>>> Object reference not set to an instance of an object >>>> E/mono ( 2699): at >>>> Android.Views.ISurfaceHolderCallbackAdapter.GetHandle >>>> (ISurfaceHolderCallback instance) [0x00000] in<filename unknown>:0 >>>> E/mono ( 2699): at Android.Views.ISurfaceHolderInvoker.AddCallback >>>> (ISurfaceHolderCallback callback) [0x00000] in<filename unknown>:0 >>>> E/mono ( 2699): at ReachMobileCC.PictureActivity.OnResume () >>>> [0x00000] >>>> in<filename unknown>:0 >>>> E/mono ( 2699): at Android.App.Activity.n_OnResume (IntPtr jnienv, >>>> IntPtr native__this) [0x00000] in<filename unknown>:0 >>>> E/mono ( 2699): at (wrapper dynamic-method) >>>> object:38c0d09b-61f8-491e-b367-fbed8a6fb14a (intptr,intptr) >>>> I/ActivityManager( 146): Process uk.co.reach.reachcloud (pid 2699) has >>>> died. >>>> >>>> This is the activity class: >>>> >>>> using System; >>>> using System.Collections.Generic; >>>> using System.Linq; >>>> using System.Text; >>>> >>>> using Android.App; >>>> using Android.Content; >>>> using Android.Hardware; >>>> using Android.OS; >>>> using Android.Runtime; >>>> using Android.Views; >>>> using Android.Widget; >>>> using Android.Util; >>>> >>>> namespace ReachMobileCC >>>> { >>>> [Activity(Label = "@string/TakePicture", ConfigurationChanges = >>>> Android.Content.PM.ConfigChanges.Orientation | >>>> Android.Content.PM.ConfigChanges.Keyboard | >>>> Android.Content.PM.ConfigChanges.KeyboardHidden)] >>>> public class PictureActivity : Activity, ISurfaceHolderCallback, >>>> Camera.IPictureCallback >>>> { >>>> #region Fields >>>> >>>> private bool _previewing = false; >>>> private Camera _camera = null; >>>> >>>> #endregion >>>> >>>> public static byte[] JpegData { get; set; } >>>> >>>> #region Event Handlers >>>> >>>> protected override void OnCreate(Bundle bundle) >>>> { >>>> base.OnCreate(bundle); >>>> SetContentView(Resource.Layout.Picture); >>>> FindViewById<Button>(Resource.Id.TakePicture).Click += >>>> TakePictureClick; >>>> } >>>> >>>> protected override void OnResume() >>>> { >>>> base.OnResume(); >>>> var holder = >>>> FindViewById<SurfaceView>(Resource.Id.PicturePreview).Holder; >>>> Log.Info("CameraView", "Adding Callback"); >>>> holder.AddCallback(this); >>>> Log.Info("CameraView", "Added Callback"); >>>> holder.SetType(SurfaceType.PushBuffers); >>>> } >>>> >>>> public override bool OnKeyDown(Keycode keyCode, KeyEvent e) >>>> { >>>> if (keyCode == Keycode.Back&& _previewing) >>>> { >>>> StopPreviewAndExit(false); >>>> return true; >>>> } >>>> if ((keyCode == Keycode.Camera || keyCode == >>>> Keycode.DpadCenter) >>>> && _previewing) >>>> { >>>> TakePictureClick(this, new EventArgs()); >>>> return true; >>>> } >>>> return base.OnKeyDown(keyCode, e); >>>> } >>>> >>>> void TakePictureClick(object sender, EventArgs e) >>>> { >>>> if (_camera != null) >>>> _camera.TakePicture(null, null, this); >>>> } >>>> >>>> #endregion >>>> >>>> #region ISurfaceHolderCallback Members >>>> >>>> public void SurfaceChanged(ISurfaceHolder holder, int format, >>>> int >>>> width, int height) >>>> { >>>> if (_camera != null) >>>> { >>>> if (_previewing) _camera.StopPreview(); >>>> var parameters = _camera.GetParameters(); >>>> var previewSize = >>>> GetNearestPreviewSize(parameters.SupportedPreviewSizes, width, height); >>>> parameters.SetPreviewSize(previewSize.Width, >>>> previewSize.Height); >>>> if >>>> (parameters.SupportedFocusModes.Contains(Camera.Parameters.FocusModeAuto)) >>>> parameters.FocusMode = >>>> Camera.Parameters.FocusModeAuto; >>>> else if >>>> (parameters.SupportedFocusModes.Contains(Camera.Parameters.FocusModeInfinity)) >>>> parameters.FocusMode = >>>> Camera.Parameters.FocusModeInfinity; >>>> parameters.SetRotation(90); // TODO: Match to window >>>> orientation. >>>> _camera.SetParameters(parameters); >>>> _camera.SetPreviewDisplay(holder); >>>> _camera.StartPreview(); >>>> _previewing = true; >>>> } >>>> } >>>> >>>> public void SurfaceCreated(ISurfaceHolder holder) >>>> { >>>> _camera = Android.Hardware.Camera.Open(); >>>> } >>>> >>>> public void SurfaceDestroyed(ISurfaceHolder holder) >>>> { >>>> StopPreview(); >>>> } >>>> >>>> #endregion >>>> >>>> #region IPictureCallback Members >>>> >>>> public void OnPictureTaken(byte[] data, >>>> Android.Hardware.Camera >>>> camera) >>>> { >>>> JpegData = data; >>>> StopPreviewAndExit(true); >>>> } >>>> >>>> #endregion >>>> >>>> #region Helper Methods >>>> >>>> private Camera.Size GetNearestPreviewSize(IList<Camera.Size> >>>> sizes, >>>> int width, int height) >>>> { >>>> Camera.Size nearestSize = sizes[0]; >>>> int diff = 99999; >>>> foreach (var size in sizes) >>>> { >>>> if (size.Width> width || size.Height> height) >>>> continue; >>>> var comp = (width - size.Width) + (height - >>>> size.Height); >>>> if (comp< diff) >>>> { >>>> comp = diff; >>>> nearestSize = size; >>>> } >>>> } >>>> return nearestSize; >>>> } >>>> >>>> public void StopPreview() >>>> { >>>> if (_camera != null) >>>> { >>>> _camera.StopPreview(); >>>> _camera.Release(); >>>> _camera = null; >>>> } >>>> } >>>> >>>> public void StopPreviewAndExit(bool ok) >>>> { >>>> StopPreview(); >>>> SetResult(ok ? Result.Ok : Result.Canceled, new >>>> Intent(this.ApplicationContext, typeof(PictureActivity))); >>>> Finish(); >>>> } >>>> >>>> #endregion >>>> } >>>> } >>>> >>>> This is the layout: >>>> >>>> <?xml version="1.0" encoding="utf-8"?> >>>> <RelativeLayout >>>> xmlns:android="http://schemas.android.com/apk/res/android" >>>> android:layout_width="fill_parent" >>>> android:layout_height="fill_parent"> >>>> <Button >>>> android:id="@+id/TakePicture" >>>> android:layout_width="fill_parent" >>>> android:layout_height="wrap_content" >>>> android:text="@string/TakePicture" >>>> android:layout_alignParentBottom="true" >>>> /> >>>> <SurfaceView >>>> android:id="@+id/PicturePreview" >>>> android:layout_width="fill_parent" >>>> android:layout_height="fill_parent" >>>> android:layout_above="@id/TakePicture" >>>> /> >>>> </RelativeLayout> >>>> >>>> >>>> -- >>>> View this message in context: >>>> http://mono-for-android.1047100.n5.nabble.com/SurfaceHolder-AddCallback-random-errors-tp4669293p4678027.html >>>> Sent from the Mono for Android mailing list archive at Nabble.com. >>>> _______________________________________________ >>>> Monodroid mailing list >>>> Monodroid@lists.ximian.com >>>> >>>> UNSUBSCRIBE INFORMATION: >>>> http://lists.ximian.com/mailman/listinfo/monodroid >>>> >>>> >>>> >>> _______________________________________________ >>> Monodroid mailing list >>> Monodroid@lists.ximian.com >>> >>> UNSUBSCRIBE INFORMATION: >>> http://lists.ximian.com/mailman/listinfo/monodroid >>> >> >> -- >> View this message in context: >> http://mono-for-android.1047100.n5.nabble.com/SurfaceHolder-AddCallback-random-errors-tp4669293p4681127.html >> Sent from the Mono for Android mailing list archive at Nabble.com. >> _______________________________________________ >> Monodroid mailing list >> Monodroid@lists.ximian.com >> >> UNSUBSCRIBE INFORMATION: >> http://lists.ximian.com/mailman/listinfo/monodroid >> >> >> > > _______________________________________________ > Monodroid mailing list > Monodroid@lists.ximian.com > > UNSUBSCRIBE INFORMATION: > http://lists.ximian.com/mailman/listinfo/monodroid > -- View this message in context: http://mono-for-android.1047100.n5.nabble.com/SurfaceHolder-AddCallback-random-errors-tp4669293p4681452.html Sent from the Mono for Android mailing list archive at Nabble.com. _______________________________________________ Monodroid mailing list Monodroid@lists.ximian.com UNSUBSCRIBE INFORMATION: http://lists.ximian.com/mailman/listinfo/monodroid