Merge "Revert "TIF: add signal detection feature for HW inputs"" into nyc-dev
This commit is contained in:
@@ -24900,7 +24900,6 @@ package android.media.tv {
|
|||||||
|
|
||||||
public class TvStreamConfig implements android.os.Parcelable {
|
public class TvStreamConfig implements android.os.Parcelable {
|
||||||
method public int describeContents();
|
method public int describeContents();
|
||||||
method public int getFlags();
|
|
||||||
method public int getGeneration();
|
method public int getGeneration();
|
||||||
method public int getMaxHeight();
|
method public int getMaxHeight();
|
||||||
method public int getMaxWidth();
|
method public int getMaxWidth();
|
||||||
@@ -24908,7 +24907,6 @@ package android.media.tv {
|
|||||||
method public int getType();
|
method public int getType();
|
||||||
method public void writeToParcel(android.os.Parcel, int);
|
method public void writeToParcel(android.os.Parcel, int);
|
||||||
field public static final android.os.Parcelable.Creator<android.media.tv.TvStreamConfig> CREATOR;
|
field public static final android.os.Parcelable.Creator<android.media.tv.TvStreamConfig> CREATOR;
|
||||||
field public static final int FLAG_MASK_SIGNAL_DETECTION = 1; // 0x1
|
|
||||||
field public static final int STREAM_TYPE_BUFFER_PRODUCER = 2; // 0x2
|
field public static final int STREAM_TYPE_BUFFER_PRODUCER = 2; // 0x2
|
||||||
field public static final int STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE = 1; // 0x1
|
field public static final int STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE = 1; // 0x1
|
||||||
}
|
}
|
||||||
@@ -24916,7 +24914,6 @@ package android.media.tv {
|
|||||||
public static final class TvStreamConfig.Builder {
|
public static final class TvStreamConfig.Builder {
|
||||||
ctor public TvStreamConfig.Builder();
|
ctor public TvStreamConfig.Builder();
|
||||||
method public android.media.tv.TvStreamConfig build();
|
method public android.media.tv.TvStreamConfig build();
|
||||||
method public android.media.tv.TvStreamConfig.Builder flags(int);
|
|
||||||
method public android.media.tv.TvStreamConfig.Builder generation(int);
|
method public android.media.tv.TvStreamConfig.Builder generation(int);
|
||||||
method public android.media.tv.TvStreamConfig.Builder maxHeight(int);
|
method public android.media.tv.TvStreamConfig.Builder maxHeight(int);
|
||||||
method public android.media.tv.TvStreamConfig.Builder maxWidth(int);
|
method public android.media.tv.TvStreamConfig.Builder maxWidth(int);
|
||||||
|
|||||||
@@ -223,9 +223,10 @@ public final class TvInputManager {
|
|||||||
* State for {@link #getInputState(String)} and
|
* State for {@link #getInputState(String)} and
|
||||||
* {@link TvInputCallback#onInputStateChanged(String, int)}: The input source is connected.
|
* {@link TvInputCallback#onInputStateChanged(String, int)}: The input source is connected.
|
||||||
*
|
*
|
||||||
* <p>This state indicates that a source device is connected to the input port and in the normal
|
* <p>This state indicates that a source device is connected to the input port and is in the
|
||||||
* operation mode. It is mostly relevant to hardware inputs such as HDMI input.
|
* normal operation mode. It is mostly relevant to hardware inputs such as HDMI input. This is
|
||||||
* Non-hardware inputs are considered connected all the time.
|
* the default state for any hardware inputs where their states are unknown. Non-hardware inputs
|
||||||
|
* are considered connected all the time.
|
||||||
*/
|
*/
|
||||||
public static final int INPUT_STATE_CONNECTED = 0;
|
public static final int INPUT_STATE_CONNECTED = 0;
|
||||||
|
|
||||||
@@ -234,9 +235,8 @@ public final class TvInputManager {
|
|||||||
* {@link TvInputCallback#onInputStateChanged(String, int)}: The input source is connected but
|
* {@link TvInputCallback#onInputStateChanged(String, int)}: The input source is connected but
|
||||||
* in standby mode.
|
* in standby mode.
|
||||||
*
|
*
|
||||||
* <p>This state indicates that a source device is connected to the input port and in standby or
|
* <p>This state indicates that a source device is connected to the input port but is in standby
|
||||||
* low power mode. It is mostly relevant to hardware inputs such as HDMI inputs and Component
|
* mode. It is mostly relevant to hardware inputs such as HDMI input.
|
||||||
* inputs.
|
|
||||||
*/
|
*/
|
||||||
public static final int INPUT_STATE_CONNECTED_STANDBY = 1;
|
public static final int INPUT_STATE_CONNECTED_STANDBY = 1;
|
||||||
|
|
||||||
|
|||||||
@@ -28,15 +28,8 @@ import android.util.Log;
|
|||||||
public class TvStreamConfig implements Parcelable {
|
public class TvStreamConfig implements Parcelable {
|
||||||
static final String TAG = TvStreamConfig.class.getSimpleName();
|
static final String TAG = TvStreamConfig.class.getSimpleName();
|
||||||
|
|
||||||
// Must be in sync with tv_input.h
|
|
||||||
public final static int STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE = 1;
|
public final static int STREAM_TYPE_INDEPENDENT_VIDEO_SOURCE = 1;
|
||||||
public final static int STREAM_TYPE_BUFFER_PRODUCER = 2;
|
public final static int STREAM_TYPE_BUFFER_PRODUCER = 2;
|
||||||
/**
|
|
||||||
* A flag indicating whether the HAL is sure about signal at this stream. Note that
|
|
||||||
* value of 0 here does not necessarily mean no signal. It just means that it may not have
|
|
||||||
* signal and the underlying layer is not sure.
|
|
||||||
*/
|
|
||||||
public static final int FLAG_MASK_SIGNAL_DETECTION = 0x1;
|
|
||||||
|
|
||||||
private int mStreamId;
|
private int mStreamId;
|
||||||
private int mType;
|
private int mType;
|
||||||
@@ -48,10 +41,6 @@ public class TvStreamConfig implements Parcelable {
|
|||||||
* via tv_input_device::get_stream_configurations().
|
* via tv_input_device::get_stream_configurations().
|
||||||
*/
|
*/
|
||||||
private int mGeneration;
|
private int mGeneration;
|
||||||
/**
|
|
||||||
* Flags for stream status. See FLAG_MASK_* for details.
|
|
||||||
*/
|
|
||||||
private int mFlags;
|
|
||||||
|
|
||||||
public static final Parcelable.Creator<TvStreamConfig> CREATOR =
|
public static final Parcelable.Creator<TvStreamConfig> CREATOR =
|
||||||
new Parcelable.Creator<TvStreamConfig>() {
|
new Parcelable.Creator<TvStreamConfig>() {
|
||||||
@@ -63,8 +52,7 @@ public class TvStreamConfig implements Parcelable {
|
|||||||
type(source.readInt()).
|
type(source.readInt()).
|
||||||
maxWidth(source.readInt()).
|
maxWidth(source.readInt()).
|
||||||
maxHeight(source.readInt()).
|
maxHeight(source.readInt()).
|
||||||
generation(source.readInt()).
|
generation(source.readInt()).build();
|
||||||
flags(source.readInt()).build();
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e(TAG, "Exception creating TvStreamConfig from parcel", e);
|
Log.e(TAG, "Exception creating TvStreamConfig from parcel", e);
|
||||||
return null;
|
return null;
|
||||||
@@ -99,10 +87,6 @@ public class TvStreamConfig implements Parcelable {
|
|||||||
return mGeneration;
|
return mGeneration;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getFlags() {
|
|
||||||
return mFlags;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "TvStreamConfig {mStreamId=" + mStreamId + ";" + "mType=" + mType + ";mGeneration="
|
return "TvStreamConfig {mStreamId=" + mStreamId + ";" + "mType=" + mType + ";mGeneration="
|
||||||
@@ -122,7 +106,6 @@ public class TvStreamConfig implements Parcelable {
|
|||||||
dest.writeInt(mMaxWidth);
|
dest.writeInt(mMaxWidth);
|
||||||
dest.writeInt(mMaxHeight);
|
dest.writeInt(mMaxHeight);
|
||||||
dest.writeInt(mGeneration);
|
dest.writeInt(mGeneration);
|
||||||
dest.writeInt(mFlags);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -134,7 +117,6 @@ public class TvStreamConfig implements Parcelable {
|
|||||||
private Integer mMaxWidth;
|
private Integer mMaxWidth;
|
||||||
private Integer mMaxHeight;
|
private Integer mMaxHeight;
|
||||||
private Integer mGeneration;
|
private Integer mGeneration;
|
||||||
private int mFlags = 0;
|
|
||||||
|
|
||||||
public Builder() {
|
public Builder() {
|
||||||
}
|
}
|
||||||
@@ -164,11 +146,6 @@ public class TvStreamConfig implements Parcelable {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Builder flags(int flag) {
|
|
||||||
mFlags = flag;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public TvStreamConfig build() {
|
public TvStreamConfig build() {
|
||||||
if (mStreamId == null || mType == null || mMaxWidth == null || mMaxHeight == null
|
if (mStreamId == null || mType == null || mMaxWidth == null || mMaxHeight == null
|
||||||
|| mGeneration == null) {
|
|| mGeneration == null) {
|
||||||
@@ -181,7 +158,6 @@ public class TvStreamConfig implements Parcelable {
|
|||||||
config.mMaxWidth = mMaxWidth;
|
config.mMaxWidth = mMaxWidth;
|
||||||
config.mMaxHeight = mMaxHeight;
|
config.mMaxHeight = mMaxHeight;
|
||||||
config.mGeneration = mGeneration;
|
config.mGeneration = mGeneration;
|
||||||
config.mFlags = mFlags;
|
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -196,7 +172,6 @@ public class TvStreamConfig implements Parcelable {
|
|||||||
&& config.mStreamId == mStreamId
|
&& config.mStreamId == mStreamId
|
||||||
&& config.mType == mType
|
&& config.mType == mType
|
||||||
&& config.mMaxWidth == mMaxWidth
|
&& config.mMaxWidth == mMaxWidth
|
||||||
&& config.mMaxHeight == mMaxHeight
|
&& config.mMaxHeight == mMaxHeight;
|
||||||
&& config.mFlags == mFlags;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
package com.android.server.tv;
|
package com.android.server.tv;
|
||||||
|
|
||||||
import static android.media.tv.TvInputManager.INPUT_STATE_CONNECTED;
|
import static android.media.tv.TvInputManager.INPUT_STATE_CONNECTED;
|
||||||
import static android.media.tv.TvInputManager.INPUT_STATE_CONNECTED_STANDBY;
|
|
||||||
import static android.media.tv.TvInputManager.INPUT_STATE_DISCONNECTED;
|
import static android.media.tv.TvInputManager.INPUT_STATE_DISCONNECTED;
|
||||||
|
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
@@ -110,6 +109,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
|
|||||||
private int mCurrentIndex = 0;
|
private int mCurrentIndex = 0;
|
||||||
private int mCurrentMaxIndex = 0;
|
private int mCurrentMaxIndex = 0;
|
||||||
|
|
||||||
|
// TODO: Should handle STANDBY case.
|
||||||
private final SparseBooleanArray mHdmiStateMap = new SparseBooleanArray();
|
private final SparseBooleanArray mHdmiStateMap = new SparseBooleanArray();
|
||||||
private final List<Message> mPendingHdmiDeviceEvents = new LinkedList<>();
|
private final List<Message> mPendingHdmiDeviceEvents = new LinkedList<>();
|
||||||
|
|
||||||
@@ -213,7 +213,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
|
|||||||
String inputId = mHardwareInputIdMap.get(deviceId);
|
String inputId = mHardwareInputIdMap.get(deviceId);
|
||||||
if (inputId != null) {
|
if (inputId != null) {
|
||||||
mHandler.obtainMessage(ListenerHandler.STATE_CHANGED,
|
mHandler.obtainMessage(ListenerHandler.STATE_CHANGED,
|
||||||
obtainStateFromConfigs(configs), 0, inputId).sendToTarget();
|
convertConnectedToState(configs.length > 0), 0, inputId).sendToTarget();
|
||||||
}
|
}
|
||||||
ITvInputHardwareCallback callback = connection.getCallbackLocked();
|
ITvInputHardwareCallback callback = connection.getCallbackLocked();
|
||||||
if (callback != null) {
|
if (callback != null) {
|
||||||
@@ -263,13 +263,12 @@ class TvInputHardwareManager implements TvInputHal.Callback {
|
|||||||
|| connectionCallingUid != callingUid || connectionResolvedUserId != resolvedUserId;
|
|| connectionCallingUid != callingUid || connectionResolvedUserId != resolvedUserId;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int obtainStateFromConfigs(TvStreamConfig[] configs) {
|
private int convertConnectedToState(boolean connected) {
|
||||||
for (TvStreamConfig config : configs) {
|
if (connected) {
|
||||||
if ((config.getFlags() & TvStreamConfig.FLAG_MASK_SIGNAL_DETECTION) != 0) {
|
return INPUT_STATE_CONNECTED;
|
||||||
return INPUT_STATE_CONNECTED;
|
} else {
|
||||||
}
|
return INPUT_STATE_DISCONNECTED;
|
||||||
}
|
}
|
||||||
return (configs.length > 0) ? INPUT_STATE_CONNECTED_STANDBY : INPUT_STATE_DISCONNECTED;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addHardwareInput(int deviceId, TvInputInfo info) {
|
public void addHardwareInput(int deviceId, TvInputInfo info) {
|
||||||
@@ -294,14 +293,9 @@ class TvInputHardwareManager implements TvInputHal.Callback {
|
|||||||
}
|
}
|
||||||
String inputId = mHardwareInputIdMap.get(hardwareInfo.getDeviceId());
|
String inputId = mHardwareInputIdMap.get(hardwareInfo.getDeviceId());
|
||||||
if (inputId != null && inputId.equals(info.getId())) {
|
if (inputId != null && inputId.equals(info.getId())) {
|
||||||
// No HDMI hotplug does not necessarily mean disconnected, as old devices may
|
mHandler.obtainMessage(ListenerHandler.STATE_CHANGED,
|
||||||
// not report hotplug state correctly. Using INPUT_STATE_CONNECTED_STANDBY to
|
convertConnectedToState(mHdmiStateMap.valueAt(i)), 0,
|
||||||
// denote unknown state.
|
inputId).sendToTarget();
|
||||||
int state = mHdmiStateMap.valueAt(i)
|
|
||||||
? INPUT_STATE_CONNECTED
|
|
||||||
: INPUT_STATE_CONNECTED_STANDBY;
|
|
||||||
mHandler.obtainMessage(
|
|
||||||
ListenerHandler.STATE_CHANGED, state, 0, inputId).sendToTarget();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -309,7 +303,7 @@ class TvInputHardwareManager implements TvInputHal.Callback {
|
|||||||
Connection connection = mConnections.get(deviceId);
|
Connection connection = mConnections.get(deviceId);
|
||||||
if (connection != null) {
|
if (connection != null) {
|
||||||
mHandler.obtainMessage(ListenerHandler.STATE_CHANGED,
|
mHandler.obtainMessage(ListenerHandler.STATE_CHANGED,
|
||||||
obtainStateFromConfigs(connection.getConfigsLocked()), 0,
|
convertConnectedToState(connection.getConfigsLocked().length > 0), 0,
|
||||||
info.getId()).sendToTarget();
|
info.getId()).sendToTarget();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1199,14 +1193,8 @@ class TvInputHardwareManager implements TvInputHal.Callback {
|
|||||||
if (inputId == null) {
|
if (inputId == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// No HDMI hotplug does not necessarily mean disconnected, as old devices may
|
mHandler.obtainMessage(ListenerHandler.STATE_CHANGED,
|
||||||
// not report hotplug state correctly. Using INPUT_STATE_CONNECTED_STANDBY to
|
convertConnectedToState(event.isConnected()), 0, inputId).sendToTarget();
|
||||||
// denote unknown state.
|
|
||||||
int state = event.isConnected()
|
|
||||||
? INPUT_STATE_CONNECTED
|
|
||||||
: INPUT_STATE_CONNECTED_STANDBY;
|
|
||||||
mHandler.obtainMessage(
|
|
||||||
ListenerHandler.STATE_CHANGED, state, 0, inputId).sendToTarget();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,7 +54,6 @@ static struct {
|
|||||||
jmethodID maxWidth;
|
jmethodID maxWidth;
|
||||||
jmethodID maxHeight;
|
jmethodID maxHeight;
|
||||||
jmethodID generation;
|
jmethodID generation;
|
||||||
jmethodID flags;
|
|
||||||
jmethodID build;
|
jmethodID build;
|
||||||
} gTvStreamConfigBuilderClassInfo;
|
} gTvStreamConfigBuilderClassInfo;
|
||||||
|
|
||||||
@@ -240,7 +239,7 @@ public:
|
|||||||
|
|
||||||
int addOrUpdateStream(int deviceId, int streamId, const sp<Surface>& surface);
|
int addOrUpdateStream(int deviceId, int streamId, const sp<Surface>& surface);
|
||||||
int removeStream(int deviceId, int streamId);
|
int removeStream(int deviceId, int streamId);
|
||||||
const tv_stream_config_ext_t* getStreamConfigs(int deviceId, int* numConfigs);
|
const tv_stream_config_t* getStreamConfigs(int deviceId, int* numConfigs);
|
||||||
|
|
||||||
void onDeviceAvailable(const tv_input_device_info_t& info);
|
void onDeviceAvailable(const tv_input_device_info_t& info);
|
||||||
void onDeviceUnavailable(int deviceId);
|
void onDeviceUnavailable(int deviceId);
|
||||||
@@ -289,15 +288,10 @@ private:
|
|||||||
sp<Looper> mLooper;
|
sp<Looper> mLooper;
|
||||||
|
|
||||||
KeyedVector<int, KeyedVector<int, Connection> > mConnections;
|
KeyedVector<int, KeyedVector<int, Connection> > mConnections;
|
||||||
|
|
||||||
tv_stream_config_ext_t* mConfigBuffer;
|
|
||||||
int mConfigBufferSize;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
JTvInputHal::JTvInputHal(JNIEnv* env, jobject thiz, tv_input_device_t* device,
|
JTvInputHal::JTvInputHal(JNIEnv* env, jobject thiz, tv_input_device_t* device,
|
||||||
const sp<Looper>& looper)
|
const sp<Looper>& looper) {
|
||||||
: mConfigBuffer(NULL),
|
|
||||||
mConfigBufferSize(0) {
|
|
||||||
mThiz = env->NewWeakGlobalRef(thiz);
|
mThiz = env->NewWeakGlobalRef(thiz);
|
||||||
mDevice = device;
|
mDevice = device;
|
||||||
mCallback.notify = &JTvInputHal::notify;
|
mCallback.notify = &JTvInputHal::notify;
|
||||||
@@ -312,10 +306,6 @@ JTvInputHal::~JTvInputHal() {
|
|||||||
JNIEnv* env = AndroidRuntime::getJNIEnv();
|
JNIEnv* env = AndroidRuntime::getJNIEnv();
|
||||||
env->DeleteWeakGlobalRef(mThiz);
|
env->DeleteWeakGlobalRef(mThiz);
|
||||||
mThiz = NULL;
|
mThiz = NULL;
|
||||||
|
|
||||||
if (mConfigBuffer != NULL) {
|
|
||||||
delete[] mConfigBuffer;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
JTvInputHal* JTvInputHal::createInstance(JNIEnv* env, jobject thiz, const sp<Looper>& looper) {
|
JTvInputHal* JTvInputHal::createInstance(JNIEnv* env, jobject thiz, const sp<Looper>& looper) {
|
||||||
@@ -364,14 +354,15 @@ int JTvInputHal::addOrUpdateStream(int deviceId, int streamId, const sp<Surface>
|
|||||||
if (connection.mSourceHandle == NULL && connection.mThread == NULL) {
|
if (connection.mSourceHandle == NULL && connection.mThread == NULL) {
|
||||||
// Need to configure stream
|
// Need to configure stream
|
||||||
int numConfigs = 0;
|
int numConfigs = 0;
|
||||||
const tv_stream_config_ext_t* configs = getStreamConfigs(deviceId, &numConfigs);
|
const tv_stream_config_t* configs = NULL;
|
||||||
if (configs == NULL) {
|
if (mDevice->get_stream_configurations(
|
||||||
|
mDevice, deviceId, &numConfigs, &configs) != 0) {
|
||||||
ALOGE("Couldn't get stream configs");
|
ALOGE("Couldn't get stream configs");
|
||||||
return UNKNOWN_ERROR;
|
return UNKNOWN_ERROR;
|
||||||
}
|
}
|
||||||
int configIndex = -1;
|
int configIndex = -1;
|
||||||
for (int i = 0; i < numConfigs; ++i) {
|
for (int i = 0; i < numConfigs; ++i) {
|
||||||
if (configs[i].config.stream_id == streamId) {
|
if (configs[i].stream_id == streamId) {
|
||||||
configIndex = i;
|
configIndex = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -380,13 +371,13 @@ int JTvInputHal::addOrUpdateStream(int deviceId, int streamId, const sp<Surface>
|
|||||||
ALOGE("Cannot find a config with given stream ID: %d", streamId);
|
ALOGE("Cannot find a config with given stream ID: %d", streamId);
|
||||||
return BAD_VALUE;
|
return BAD_VALUE;
|
||||||
}
|
}
|
||||||
connection.mStreamType = configs[configIndex].config.type;
|
connection.mStreamType = configs[configIndex].type;
|
||||||
|
|
||||||
tv_stream_t stream;
|
tv_stream_t stream;
|
||||||
stream.stream_id = configs[configIndex].config.stream_id;
|
stream.stream_id = configs[configIndex].stream_id;
|
||||||
if (connection.mStreamType == TV_STREAM_TYPE_BUFFER_PRODUCER) {
|
if (connection.mStreamType == TV_STREAM_TYPE_BUFFER_PRODUCER) {
|
||||||
stream.buffer_producer.width = configs[configIndex].config.max_video_width;
|
stream.buffer_producer.width = configs[configIndex].max_video_width;
|
||||||
stream.buffer_producer.height = configs[configIndex].config.max_video_height;
|
stream.buffer_producer.height = configs[configIndex].max_video_height;
|
||||||
}
|
}
|
||||||
if (mDevice->open_stream(mDevice, deviceId, &stream) != 0) {
|
if (mDevice->open_stream(mDevice, deviceId, &stream) != 0) {
|
||||||
ALOGE("Couldn't add stream");
|
ALOGE("Couldn't add stream");
|
||||||
@@ -440,33 +431,12 @@ int JTvInputHal::removeStream(int deviceId, int streamId) {
|
|||||||
return NO_ERROR;
|
return NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
const tv_stream_config_ext_t* JTvInputHal::getStreamConfigs(int deviceId, int* numConfigs) {
|
const tv_stream_config_t* JTvInputHal::getStreamConfigs(int deviceId, int* numConfigs) {
|
||||||
const tv_stream_config_ext_t* configs = NULL;
|
const tv_stream_config_t* configs = NULL;
|
||||||
if (mDevice->common.version >= TV_INPUT_DEVICE_API_VERSION_0_2) {
|
if (mDevice->get_stream_configurations(
|
||||||
if (mDevice->get_stream_configurations_ext(
|
mDevice, deviceId, numConfigs, &configs) != 0) {
|
||||||
mDevice, deviceId, numConfigs, &configs) != 0) {
|
ALOGE("Couldn't get stream configs");
|
||||||
ALOGE("Couldn't get stream configs");
|
return NULL;
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
const tv_stream_config_t* oldConfigs;
|
|
||||||
if (mDevice->get_stream_configurations(
|
|
||||||
mDevice, deviceId, numConfigs, &oldConfigs) != 0) {
|
|
||||||
ALOGE("Couldn't get stream configs");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (mConfigBufferSize < *numConfigs) {
|
|
||||||
mConfigBufferSize = (*numConfigs / 16 + 1) * 16;
|
|
||||||
if (mConfigBuffer != NULL) {
|
|
||||||
delete[] mConfigBuffer;
|
|
||||||
}
|
|
||||||
mConfigBuffer = new tv_stream_config_ext_t[mConfigBufferSize];
|
|
||||||
}
|
|
||||||
for (int i = 0; i < *numConfigs; ++i) {
|
|
||||||
mConfigBuffer[i].config = oldConfigs[i];
|
|
||||||
mConfigBuffer[i].flags = 0;
|
|
||||||
}
|
|
||||||
configs = mConfigBuffer;
|
|
||||||
}
|
}
|
||||||
return configs;
|
return configs;
|
||||||
}
|
}
|
||||||
@@ -659,7 +629,7 @@ static jobjectArray nativeGetStreamConfigs(JNIEnv* env, jclass clazz,
|
|||||||
jlong ptr, jint deviceId, jint generation) {
|
jlong ptr, jint deviceId, jint generation) {
|
||||||
JTvInputHal* tvInputHal = (JTvInputHal*)ptr;
|
JTvInputHal* tvInputHal = (JTvInputHal*)ptr;
|
||||||
int numConfigs = 0;
|
int numConfigs = 0;
|
||||||
const tv_stream_config_ext_t* configs = tvInputHal->getStreamConfigs(deviceId, &numConfigs);
|
const tv_stream_config_t* configs = tvInputHal->getStreamConfigs(deviceId, &numConfigs);
|
||||||
|
|
||||||
jobjectArray result = env->NewObjectArray(numConfigs, gTvStreamConfigClassInfo.clazz, NULL);
|
jobjectArray result = env->NewObjectArray(numConfigs, gTvStreamConfigClassInfo.clazz, NULL);
|
||||||
for (int i = 0; i < numConfigs; ++i) {
|
for (int i = 0; i < numConfigs; ++i) {
|
||||||
@@ -667,20 +637,15 @@ static jobjectArray nativeGetStreamConfigs(JNIEnv* env, jclass clazz,
|
|||||||
gTvStreamConfigBuilderClassInfo.clazz,
|
gTvStreamConfigBuilderClassInfo.clazz,
|
||||||
gTvStreamConfigBuilderClassInfo.constructor);
|
gTvStreamConfigBuilderClassInfo.constructor);
|
||||||
env->CallObjectMethod(
|
env->CallObjectMethod(
|
||||||
builder, gTvStreamConfigBuilderClassInfo.streamId, configs[i].config.stream_id);
|
builder, gTvStreamConfigBuilderClassInfo.streamId, configs[i].stream_id);
|
||||||
env->CallObjectMethod(
|
env->CallObjectMethod(
|
||||||
builder, gTvStreamConfigBuilderClassInfo.type, configs[i].config.type);
|
builder, gTvStreamConfigBuilderClassInfo.type, configs[i].type);
|
||||||
env->CallObjectMethod(
|
env->CallObjectMethod(
|
||||||
builder, gTvStreamConfigBuilderClassInfo.maxWidth,
|
builder, gTvStreamConfigBuilderClassInfo.maxWidth, configs[i].max_video_width);
|
||||||
configs[i].config.max_video_width);
|
|
||||||
env->CallObjectMethod(
|
env->CallObjectMethod(
|
||||||
builder, gTvStreamConfigBuilderClassInfo.maxHeight,
|
builder, gTvStreamConfigBuilderClassInfo.maxHeight, configs[i].max_video_height);
|
||||||
configs[i].config.max_video_height);
|
|
||||||
env->CallObjectMethod(
|
env->CallObjectMethod(
|
||||||
builder, gTvStreamConfigBuilderClassInfo.generation, generation);
|
builder, gTvStreamConfigBuilderClassInfo.generation, generation);
|
||||||
env->CallObjectMethod(
|
|
||||||
builder, gTvStreamConfigBuilderClassInfo.flags,
|
|
||||||
configs[i].flags);
|
|
||||||
|
|
||||||
jobject config = env->CallObjectMethod(builder, gTvStreamConfigBuilderClassInfo.build);
|
jobject config = env->CallObjectMethod(builder, gTvStreamConfigBuilderClassInfo.build);
|
||||||
|
|
||||||
@@ -771,10 +736,6 @@ int register_android_server_tv_TvInputHal(JNIEnv* env) {
|
|||||||
gTvStreamConfigBuilderClassInfo.generation,
|
gTvStreamConfigBuilderClassInfo.generation,
|
||||||
gTvStreamConfigBuilderClassInfo.clazz,
|
gTvStreamConfigBuilderClassInfo.clazz,
|
||||||
"generation", "(I)Landroid/media/tv/TvStreamConfig$Builder;");
|
"generation", "(I)Landroid/media/tv/TvStreamConfig$Builder;");
|
||||||
GET_METHOD_ID(
|
|
||||||
gTvStreamConfigBuilderClassInfo.flags,
|
|
||||||
gTvStreamConfigBuilderClassInfo.clazz,
|
|
||||||
"flags", "(I)Landroid/media/tv/TvStreamConfig$Builder;");
|
|
||||||
GET_METHOD_ID(
|
GET_METHOD_ID(
|
||||||
gTvStreamConfigBuilderClassInfo.build,
|
gTvStreamConfigBuilderClassInfo.build,
|
||||||
gTvStreamConfigBuilderClassInfo.clazz,
|
gTvStreamConfigBuilderClassInfo.clazz,
|
||||||
|
|||||||
Reference in New Issue
Block a user