How to read (raw16 format) HardwareBuffer in shader?

I create RAW16 HwImageBuffer and bind texture:

    smart_pointer <HwImageBuffer> inputBuffer = HwImageBuffer::create(width, height, BUFFER_FORMAT_RAW16,
        BUFFER_USAGE_READ | BUFFER_USAGE_WRITE | BUFFER_USAGE_TEXTURE, GL_NEAREST);
    inputBuffer->bindTexture();
    GLTexture2D* srcTexture = inputBuffer->getImageTexture();  
    // I use glReadPixels to dump this srcTexture has value

However in Fragment shader:

    uniform highp sampler2D srcTexture;
    in vec2 v_texcoord;
    layout (location = 0) out vec4 outColor;
    vec4 outColor = texture(srcTexture, v_texcoord);

but the values of outColor are all zero, how can I read this srcTexture?

What is a “HwImageBuffer” in OpenGL terms? Also, what format is “RAW16”?