On Thursday, March 24, 2016 at 3:49:52 PM UTC-7, gjs wrote:
>
> Hi,
>
> Re - I imagine I'm doing something horribly wrong,
>
> Well yes, particularly for this code, calling methods on a null object ???
> -
>
> if (mCamera == null) {
> mCamera.setPreviewDisplay(holder); ...
>
>
*smacking oneself in head*
In reality, it didn't even matter, because it never got to that block with
mCamera == null. I copied this from a sample on the internet. "It must be
true, right?"
>
> I'd suggest waiting a little after starting the Camera Preview before
> initiating a call to autofocus, say 500ms to 1 second, this is to give the
> camera some time to settle after it has just been opened.
>
>
> I'd also suggest that you do this asynchronously, eg -
>
>
> // Need handler for callbacks to the UI thread
> final Handler mHandler = new Handler();
>
>
> mHandler.postDelayed(new Runnable()
> {
> @Override
> public void run()
> {
> doAutoFocus(..
> }
>
> }, 500 );
>
>
> Regards
>
>
Ok. I'll give that a try.
>
>
> On Thursday, March 24, 2016 at 12:11:11 PM UTC+11, David Karr wrote:
>>
>> On Wednesday, March 23, 2016 at 12:06:47 AM UTC-7, gjs wrote:
>>
>> Hi,
>>
>> For the focus / fuzzy issue try initiating auto focusing of the camera
>> before you start recording your video -
>>
>>
>> http://developer.android.com/reference/android/hardware/Camera.html#autoFocus(android.hardware.Camera.AutoFocusCallback)
>>
>>
>> Thanks for replying. I imagine I'm doing something horribly wrong, but
>> I'm not getting much from this. I made a change in my "CameraPreview"
>> class to add this call, in the "surfaceCreated()" method. It now looks
>> like this, which will immediately look odd:
>>
>> public void surfaceCreated(SurfaceHolder holder) {
>> try {
>> // create the surface and start camera preview
>> if (mCamera == null) {
>> mCamera.setPreviewDisplay(holder);
>> mCamera.startPreview();
>> mCamera.autoFocus(new Camera.AutoFocusCallback() {
>> @Override
>> public void onAutoFocus(boolean success, Camera camera) {
>> Log.d(VIEW_LOG_TAG, "Completed autofocus setup:
>> success[" + success + "]");
>> }
>> });
>> }
>> else {
>> mCamera.setPreviewDisplay(holder);
>> mCamera.startPreview();
>> mCamera.autoFocus(new Camera.AutoFocusCallback() {
>> @Override
>> public void onAutoFocus(boolean success, Camera camera) {
>> Log.d(VIEW_LOG_TAG, "Completed autofocus setup:
>> success[" + success + "]");
>> }
>> });
>> }
>> } catch (IOException e) {
>> Log.d(VIEW_LOG_TAG, "Error setting camera preview: " +
>> e.getMessage());
>> }
>> }
>>
>>
>>
>>
>> Yes, I'm calling that block for both the null and !null case. I did that
>> because when I ran in the debugger, I saw that it never got into the "==
>> null" block, so I'm experimenting with calling it when it's not null. In
>> any case, it calls the "autofocus()" method, but the "onAutoFocus()" method
>> is never called. At one point when it retrieves the "Camera.Parameters"
>> object, I added a log statement for "focusMode", and it prints "auto". And
>> it doesn't appear to be focusing.
>>
>>
>>
>> - you can also do this whilst the video is recording as well, although
>> you will have periods of a few seconds where focus is lost before being
>> regained.
>>
>> Note sure about upside down video, I suspect this not the video recording
>> but perhaps some Camera Preview rotation mismatch / issue in your
>> CameraPreview class ? Compare the Camera Preview orientation in your app
>> vs when you use the default Camera App. (NOTE also that Nexus 5X has some
>> wrong camera preview orientation issues...)
>>
>> Regards
>>
>>
>>
>> On Wednesday, March 23, 2016 at 3:41:02 PM UTC+11, David Karr wrote:
>>
>> I've assembled a relatively small camcorder app. It only does what I need
>> it to do. I assembled it from sample code, and some people on this forum
>> have helped me fix some of the problems with it, although some of the
>> details of interfacing with the camera are beyond me.
>>
>> After some usage of it, I've realized there are two problems with it:
>>
>> * Although the preview display is right-side up, the resulting stored
>> video is upside down. This isn't a huge deal, as I later process this with
>> another app that lets me rotate it till its right-side up, but it's still
>> an annoyance, especially when previewing many videos to see which ones I
>> want to use.
>>
>> * The video it produces is just fuzzy, or out of focus. I don't know
>> whether this is the nature of video vs. still images or whether I'm not
>> doing something I should be doing. Is there some autofocus feature of the
>> camcorder that I'm not taking advantage of?
>>
>> I'd appreciate any useful advice on this.
>>
>> I'll provide here the entire Activity class.
>>
>> package com.integralsoftware.videograbber;
>>
>> import android.content.Intent;
>> import android.media.AudioFormat;
>> import android.media.AudioManager;
>> import android.media.AudioTrack;
>> import android.media.MediaScannerConnection;
>> import android.net.Uri;
>> import android.os.Bundle;
>> import android.os.Environment;
>> import android.util.Log;
>> import android.view.View;
>>
>> import java.io.File;
>> import java.io.IOException;
>> import java.text.SimpleDateFormat;
>> import java.util.Date;
>>
>> import android.app.Activity;
>> import android.content.Context;
>> import android.content.pm.PackageManager;
>> import android.hardware.Camera;
>> import android.hardware.Camera.CameraInfo;
>> import android.media.MediaRecorder;
>> import android.view.View.OnClickListener;
>> import android.view.WindowManager;
>> import android.view.animation.AlphaAnimation;
>> import android.view.animation.Animation;
>> import android.widget.Button;
>> import android.widget.LinearLayout;
>> import android.widget.TextView;
>> import android.widget.Toast;
>>
>> public class VideoGrabberActivity extends Activity {
>> private Camera mCamera;
>> private CameraPreview mPreview;
>> private MediaRecorder mediaRecorder;
>> private Button capture;
>> private Context myContext;
>> private LinearLayout cameraPreview;
>> private TextView countdownText;
>> private String outputFilePath;
>> private SimpleDateFormat simpleDateFormat = new
>> SimpleDateFormat("yyyyMMdd_HHmmss");
>>
>> private static final String VG = "VideoGrabber";
>>
>> private static final int RS_WAITING = 0;
>> private static final int RS_COUNTING = 1;
>> private static final int RS_RECORDING = 2;
>>
>> private int recordingState = RS_WAITING;
>>
>> @Override
>> public void onCreate(Bundle savedInstanceState) {
>> super.onCreate(savedInstanceState);
>> setContentView(R.layout.activity_video_grabber);
>> getWindow().addFlags(WindowManager.LayoutParams.
>> FLAG_KEEP_SCREEN_ON);
>> countdownText = (TextView) findViewById(R.id.countdown_text);
>> myContext = this;
>> initialize();
>> }
>>
>>
>> private int findBackFacingCamera() {
>> int cameraId = -1;
>> int numberOfCameras = Camera.getNumberOfCameras();
>> for (int i = 0; i < numberOfCameras; i++) {
>> CameraInfo info = new CameraInfo();
>> Camera.getCameraInfo(i, info);
>> if (info.facing == CameraInfo.CAMERA_FACING_BACK) {
>> cameraId = i;
>> break;
>> }
>>
>> ...
>
>
--
You received this message because you are subscribed to the Google Groups
"Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/android-developers.
To view this discussion on the web visit
https://groups.google.com/d/msgid/android-developers/eef8619f-ec1e-4079-91b0-343e1f4ced62%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.