If you think the Android project remoteyourcam-usb listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
Java Source Code
/**
* Copyright 2013 Nils Assbeck, Guersel Ayaz and Michael Zoech
*/*www.java2s.com*/
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/package com.remoteyourcam.usb.ptp.commands.eos;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.util.Log;
import com.remoteyourcam.usb.AppConfig;
import com.remoteyourcam.usb.ptp.EosCamera;
import com.remoteyourcam.usb.ptp.PtpCamera.IO;
import com.remoteyourcam.usb.ptp.PtpConstants.Operation;
import com.remoteyourcam.usb.ptp.PtpConstants.Response;
import com.remoteyourcam.usb.ptp.model.LiveViewData;
publicclass EosGetLiveViewPictureCommand extends EosCommand {
privatestaticfinal String TAG = EosGetLiveViewPictureCommand.class.getSimpleName();
privatestaticbyte[] tmpStorage = newbyte[0x4000];
privatefinal Options options;
private LiveViewData data;
public EosGetLiveViewPictureCommand(EosCamera camera, LiveViewData data) {
super(camera);
if (data == null) {
this.data = new LiveViewData();
this.data.histogram = ByteBuffer.allocate(1024 * 4);
this.data.histogram.order(ByteOrder.LITTLE_ENDIAN);
} else {
this.data = data;
}
options = new BitmapFactory.Options();
options.inBitmap = this.data.bitmap;
options.inSampleSize = 1;
options.inTempStorage = tmpStorage;
this.data.bitmap = null;
}
@Override
publicvoid exec(IO io) {
io.handleCommand(this);
if (responseCode == Response.DeviceBusy) {
camera.onDeviceBusy(this, true);
return;
}
if (this.data.bitmap != null && responseCode == Response.Ok) {
camera.onLiveViewReceived(data);
} else {
camera.onLiveViewReceived(null);
}
}
@Override
publicvoid encodeCommand(ByteBuffer b) {
encodeCommand(b, Operation.EosGetLiveViewPicture, 0x100000);
}
@Override
protectedvoid decodeData(ByteBuffer b, int length) {
data.hasHistogram = false;
data.hasAfFrame = false;
if (length < 1000) {
if (AppConfig.LOG) {
Log.w(TAG, String.format("liveview data size too small %d", length));
}
return;
}
try {
while (b.hasRemaining()) {
int subLength = b.getInt();
int type = b.getInt();
if (subLength < 8) {
thrownew RuntimeException("Invalid sub size " + subLength);
}
int unknownInt = 0;
switch (type) {
case 0x01:
data.bitmap = BitmapFactory.decodeByteArray(b.array(), b.position(), subLength - 8, options);
b.position(b.position() + subLength - 8);
break;
case 0x04:
data.zoomFactor = b.getInt();
break;
case 0x05:
// zoomfocusx, zoomfocusy
data.zoomRectRight = b.getInt();
data.zoomRectBottom = b.getInt();
if (AppConfig.LOG) {
Log.i(TAG, "header 5 " + data.zoomRectRight + " " + data.zoomRectBottom);
}
break;
case 0x06:
// imagex, imagey (if zoomed should be non zero)
data.zoomRectLeft = b.getInt();
data.zoomRectTop = b.getInt();
if (AppConfig.LOG) {
Log.i(TAG, "header 6 " + data.zoomRectLeft + " " + data.zoomRectTop);
}
break;
case 0x07:
unknownInt = b.getInt();
if (AppConfig.LOG) {
Log.i(TAG, "header 7 " + unknownInt + " " + subLength);
}
break;
case 0x03:
data.hasHistogram = true;
b.get(data.histogram.array(), 0, 1024 * 4);
break;
case 0x08: // faces if faces focus
case 0x0e: // TODO original width, original height
default:
b.position(b.position() + subLength - 8);
if (AppConfig.LOG) {
Log.i(TAG, "unknown header " + type + " size " + subLength);
}
break;
}
if (length - b.position() < 8) {
break;
}
}
} catch (RuntimeException e) {
Log.e(TAG, "" + e.toString());
Log.e(TAG, "" + e.getLocalizedMessage());
}
}
}