android MediaCodec h264解码问题!

最近在做视频解码的项目,用到了android MediaCodec有解码功能,出现了下面的问题,求大牛指点一二。
以下内容为解码时出现的错误。
11-08 18:28:01.886: E/开始解码(20450): 开始解码
11-08 18:28:17.498: E/all length(20450): 2418
11-08 18:28:17.498: E/screencmd3(20450): 2398
11-08 18:28:17.498: E/tag(20450): 2398videobyte.length
11-08 18:28:17.499: E/Decode(20450): inputBufferIndex===0
11-08 18:28:17.500: E/Decode(20450): inputBufferIndex===9
11-08 18:28:17.501: E/Decode(20450): inputBufferIndex===8
11-08 18:28:17.502: E/Decode(20450): inputBufferIndex===7
11-08 18:28:17.502: E/Decode(20450): inputBufferIndex===6
11-08 18:28:17.506: E/ACodec(20450): [OMX.MTK.VIDEO.DECODER.AVC] ERROR(0x80001005)
11-08 18:28:17.506: E/MediaCodec(20450): Codec reported an error. (omx error 0x80001005, internalError -1103)
11-08 18:28:17.509: E/AndroidRuntime(20450): FATAL EXCEPTION: Thread-1056
11-08 18:28:17.509: E/AndroidRuntime(20450): java.lang.IllegalStateException
11-08 18:28:17.509: E/AndroidRuntime(20450): at android.media.MediaCodec.getBuffers(Native Method)
11-08 18:28:17.509: E/AndroidRuntime(20450): at android.media.MediaCodec.getInputBuffers(MediaCodec.java:472)
11-08 18:28:17.509: E/AndroidRuntime(20450): at com.aaa.bbb.VideoActivity.onFrame(VideoActivity.java:286)
11-08 18:28:17.509: E/AndroidRuntime(20450): at com.aaa.bbb.VideoActivity$PlayerThread.run(VideoActivity.java:240)

没有人知道吗?请大牛帮忙看看。

解码
public void offerDecoder(byte[] buf, int offset, int length, int flag) {
ByteBuffer[] inputBuffers = mediaCodec.getInputBuffers();
int inputBufferIndex = mediaCodec.dequeueInputBuffer(-1);
if (inputBufferIndex >= 0) {
ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
inputBuffer.clear();
inputBuffer.put(buf, offset, length);
mediaCodec.queueInputBuffer(inputBufferIndex, 0, length, mCount * 1000000 / FRAME_RATE, 0);
mCount++;
}

    MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
    int outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo,0);
    while (outputBufferIndex >= 0) {
        mediaCodec.releaseOutputBuffer(outputBufferIndex, true);
        outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo, 0);
    }
}

下面是我的解码代码:
/**
* 解码 处理数据
*
* @param buf
* h264字节视频数据
*/
public void onFrame(byte[] buf) {
ByteBuffer[] inputBuffers = decoder.getInputBuffers();
int inputBufferIndex = decoder.dequeueInputBuffer(-1);
Log.e(TAG, "inputBufferIndex===" + inputBufferIndex);
if (inputBufferIndex >= 0) {
ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
inputBuffer.clear();
inputBuffer.put(buf, 0, buf.length);
decoder.queueInputBuffer(inputBufferIndex, 0, buf.length,
presentationTimeStamp, 0);
presentationTimeStamp++;
}

    MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
    int outputBufferIndex = decoder.dequeueOutputBuffer(bufferInfo, 0);// 延迟输出缓冲区                                         // 微秒时间
    while (outputBufferIndex >= 0) {
        decoder.releaseOutputBuffer(outputBufferIndex, true);
        outputBufferIndex = decoder.dequeueOutputBuffer(bufferInfo, 0);
    }

}

下面是初始化方法,放在线程里执行了
private class PlayerThread extends Thread {

    private Surface surface;

    public PlayerThread(Surface surface) {
        // TODO Auto-generated constructor stub
        this.surface = surface;
    }

    @Override
    public void run() {
        // 循环
        while (!Thread.interrupted()) {
            // 判断是否为空
            if(decoder == null){
                decoder = MediaCodec.createDecoderByType(type);
                MediaFormat mediaformat = MediaFormat.createVideoFormat(type, width,
                        height);
                decoder.configure(mediaformat, surface, null, 0);
                if (decoder == null) {
                    Log.e("DecodeActivity", "Can't find video info!");
                    return;
                }
                Log.e("开始解码 ", "开始解码");
                decoder.start();// 开始解码
            }
            if (videobyte != null) {
                onFrame(videobyte);
            }
        }

// decoder.stop();
// decoder.release();
}
}