I'm trying to take picture in sequence from Android, like a timelapse.
I call
camera.takePicture(null, null, jpegCallback);
and my jpegCallback is:
PictureCallback jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
time++;
photoCounter.setText(String.valueOf(time));
SaveImageTask sav = new SaveImageTask(fileNameIND++);
sav.execute(data);
resetCam();
Log.d(TAG, "onPictureTaken - jpeg");
}
};
private class SaveImageTask extends AsyncTask<byte[], Void, Void> {
int name;
SaveImageTask(int name){
this.name = name;
}
@Override
protected Void doInBackground(byte[]... data) {
FileOutputStream outStream = null;
// Write to SD Card
try {
File sdCard = Environment.getExternalStorageDirectory();
File dir = new File (sdCard.getAbsolutePath() + "/TimeLaps");
dir.mkdirs();
java.text.NumberFormat nf = new java.text.DecimalFormat("000000");
String fileName = (nf.format(name)+".jpg");
File outFile = new File(dir, fileName);
outStream = new FileOutputStream(outFile);
outStream.write(data[0]);
outStream.flush();
outStream.close();
Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length + " to " + outFile.getAbsolutePath());
refreshGallery(outFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
}
}
But after taking about 20-30 picture I get:
E/Camera-JNI ] Couldn't allocate byte array for JPEG data
and data from PictureCallBack is null.
Why it happens?? IS the memory full?? How can I free memory??
Thank you so much