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

Reply via email to