Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2eb31889 authored by Dongwon Kang's avatar Dongwon Kang Committed by android-build-merger
Browse files

Revert "TIF: add signal detection feature for HW inputs"

am: 2375a2e4

* commit '2375a2e4':
  Revert "TIF: add signal detection feature for HW inputs"

Change-Id: Ib5129f0828a15333e9b7d5c995dea6a360a2c1b0
parents 14380378 2375a2e4
Loading
Loading
Loading
Loading
+0 −3
Original line number Original line Diff line number Diff line
@@ -24903,7 +24903,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();
@@ -24911,7 +24910,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
  }
  }
@@ -24919,7 +24917,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);
+6 −6
Original line number Original line Diff line number Diff line
@@ -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;


+2 −27
Original line number Original line Diff line number Diff line
@@ -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;
    }
    }
}
}
+13 −25
Original line number Original line Diff line number Diff line
@@ -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,14 +263,13 @@ 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) {
        synchronized (mLock) {
        synchronized (mLock) {
@@ -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();
            }
            }
        }
        }
    }
    }
+21 −60
Original line number Original line Diff line number Diff line
@@ -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,34 +431,13 @@ 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_ext(
                mDevice, deviceId, numConfigs, &configs) != 0) {
            ALOGE("Couldn't get stream configs");
            return NULL;
        }
    } else {
        const tv_stream_config_t* oldConfigs;
    if (mDevice->get_stream_configurations(
    if (mDevice->get_stream_configurations(
                mDevice, deviceId, numConfigs, &oldConfigs) != 0) {
            mDevice, deviceId, numConfigs, &configs) != 0) {
        ALOGE("Couldn't get stream configs");
        ALOGE("Couldn't get stream configs");
        return NULL;
        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,