status_t BnConsumerListener::onTransact(
    uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
{
    switch(code) {
        case ON_FRAME_AVAILABLE:
            CHECK_INTERFACE(IConsumerListener, data, reply);
            onFrameAvailable();
            return NO_ERROR;
        case ON_BUFFER_RELEASED:
            CHECK_INTERFACE(IConsumerListener, data, reply);
            onBuffersReleased();
            return NO_ERROR;
    }
    return BBinder::onTransact(code, data, reply, flags);
}
status_t BnConsumerListener::onTransact(
    uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
{
    switch(code) {
        case ON_FRAME_AVAILABLE: {
            CHECK_INTERFACE(IConsumerListener, data, reply);
            BufferItem item;
            data.read(item);
            onFrameAvailable(item);
            return NO_ERROR; }
        case ON_BUFFER_RELEASED: {
            CHECK_INTERFACE(IConsumerListener, data, reply);
            onBuffersReleased();
            return NO_ERROR; }
        case ON_SIDEBAND_STREAM_CHANGED: {
            CHECK_INTERFACE(IConsumerListener, data, reply);
            onSidebandStreamChanged();
            return NO_ERROR; }
    }
    return BBinder::onTransact(code, data, reply, flags);
}