输入是:
surface=MediaCodec.createInputSurface;
canvas=surface.lockCanvas(...);
canvas.drawBitmap(bitmap,0,0,null);
由于想图片编码视频,如果把bitmap转yuv非常耗时,就用到了上面输入。
但是后面获取编码就有问题,dequeueOutputBuffer老是返回-1,问题就是在输入时候没有时间截导致的。
如果在输入转yuv输入:encode.queueInputBuffer(bufferIndex,0,size,presentationTimeUs,0);这样dequeueOutputBuffer才可以获取到数据。
小米机以前可以,现在升级后不行。
我问的问题就是用canvas.drawBitmap(bitmap,0,0,null);输入如何同时输入时间截;如果不行,那么如何从surface获取yuv数据,如果用bitmap转yuv非常耗时。
求帮忙。

解决方案 »

  1.   

    上面已经解决了,现在有个问题就是在输入时候
    int bufferIndex=encode.dequeueInputBuffer(-1);bufferIndex在输出 0  1 2 3后就卡死了,这个是怎么回事啊?
    求解,多谢了。
      

  2.   

    我的问题是100MS采集一次音频数据 int bufferIndex=encode.dequeueInputBuffer(0);输入编码,开始参数-1,卡死获取不到buffer,后来改0,每100MS送一次数据,在1,2,3,4,5,6,7,8都能正常获取到buffer,但是随着时间增大,本来100MS获取到一次buffer,后来变200MS,300MS,1000MS。这样一来导致了后面要输入数据找不到buffer了,如果whlie(int bufferIndex==-1)这样会造成死循环,如果encode.dequeueInputBuffer(0)把参数改-1也是死循环,不知道问题出在哪里啊?  是不是编码buffer不够啊?但是MediaFormat.KEY_MAX_INPUT_SIZE我已经设置了非常大了,当然了设小一点也试不行啊?求救,加分啊。