import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.PixelFormat;
import android.hardware.Camera.PreviewCallback;
import android.hardware.Camera;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorListener;
import android.hardware.SensorManager;
import android.location.Address;
import android.location.Criteria;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
public class Record extends Activity implements SurfaceHolder.Callback,
Handler.Callback {
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
private LayoutInflater controlInflater = null;
private ImageButton showlocation, mode, exit;
private SharedPreferences prefs;
----중간생략----
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.surfaceview);
getWindow().setFormat(PixelFormat.UNKNOWN);
surfaceView = (SurfaceView) findViewById(R.id.camerapreview);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
controlInflater = LayoutInflater.from(getBaseContext());
View viewControl = controlInflater.inflate(R.layout.surfacecontrol,
null);
LayoutParams layoutParamsControl = new LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
this.addContentView(viewControl, layoutParamsControl);
---중간생략----
protected void startMediaRecorder() {
if (recorder != null) {
recorder.start();
}
}
protected void stopMediaRecorder() {
if (recorder != null) {
recorder.stop();
}
c = Calendar.getInstance();
endHour = c.get(Calendar.HOUR_OF_DAY);
endMinute = c.get(Calendar.MINUTE);
endSecond = c.get(Calendar.SECOND);
filename = filename + " ~ " + endHour + "h " + endMinute + "m "
+ endSecond + "s.mp4";
try {
FileWriter ops = new FileWriter(logfile, true);
BufferedWriter bw = new BufferedWriter(ops);
String temp = startYear + "-" + startMonth + "-" + startDay + " "
+ endHour + "h " + endMinute + "m " + endSecond
+ "s 녹화 종료 !!";
bw.newLine();
bw.write(temp);
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
}
if(is_save) {
//이벤트 미발생영상 저장시
save.renameTo(new File(subdirectory, filename));
} else {
//이벤트 미발생영상 미저장시
if(is_save_event_on) {
//이벤트가 발생한것만 저장
save.renameTo(new File(subdirectory, filename));
} else {
//미발생 영상 삭제
save.delete();
}
}
}
protected void releaseMediaRecorder() {
if (recorder == null)
return;
recorder.reset();
recorder.release();
recorder = null;
}
protected void startIntervalRecording() {
mTimer = new CountDownTimer(sequence, 1000) {
boolean recordStart = false;
@Override
public void onFinish() {
if (recordStart) {
mHandler.sendEmptyMessage(STOP_RECORDING);
mHandler.sendEmptyMessage(RELEASE_RECORDER);
mHandler.sendEmptyMessage(INIT_RECORDER);
mHandler.sendEmptyMessage(START_INTERVAL_RECORD);
}
}
protected void initMediaRecorder() {
// 레코더 초기화
recorder = new MediaRecorder();
// 비디오 포맷 지정 - 오디오 녹음 셋팅
if (is_audio)
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
// camera.autoFocus(new AutoFocusCallback());
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setVideoFrameRate(16);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
if (is_audio)
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
// 저장경로 지정
try {
temp = File.createTempFile("temp", ".mp4", subdirectory);
} catch (IOException e1) {
// TODO Auto-generated catch block
}
temp.deleteOnExit();
setFilename();
save = new File(subdirectory, "tempfile");
temp.renameTo(save);
is_save_event_on = false;
recorder.setOutputFile(save.getAbsolutePath());
recorder.setPreviewDisplay(surfaceHolder.getSurface());
try {
recorder.prepare();
} catch (Exception e) {
releaseMediaRecorder();
return;
}
}
public void surfaceCreated(SurfaceHolder holder) {
//surfaceCreated(holder);
surfaceHolder = holder;
initMediaRecorder();
startIntervalRecording();
ACC_Sensor = new Sensor_ACCELEROMETER();
new Sensor_MAGNETIC_FIELD();
loadGps();
}
public void surfaceDestroyed(SurfaceHolder holder) {
surfaceHolder = null;
try {
// 녹화 정지
mHandler.sendEmptyMessage(STOP_RECORDING);
mHandler.sendEmptyMessage(RELEASE_RECORDER);
if (mysensormanager_acc != null) {
mysensormanager_acc.unregisterListener(ACC_Sensor);
}
if (mTimer != null) {
mTimer.cancel();
mTimer = null;
}
} catch (Exception e) {
}
}
앱을 하나 제작중인데 동영상을 촬영합니다. 하지만 문제는 화면의 화소가 떨어지는 현상이 발생됩니다.
surface view 문제이거나 preview인것 같은데.... 해결방법을 잘 모르겠습니다.
펍분들의 의견을 받고싶습니다
. 
위와 보시는것과 같이 촬영을 시작했을때 구분을 못할정도로 해상도가 떨어집니다.
코드의 일부를 첨부합니다. 도움을 주시면 감사하겠습니다. 영상공부를 하시는 분들의 의견도 감사히 받겠습니다.
현재 보시는 이미지는 저장한 영상을 재생하는 부분입니다.
영상을 촬영할때도 이와같은 저급한 화질을 보여주고는 합니다.
도움을 주시면 감사하겠습니다. ㅠㅠ