2016-06-16 35 views
21

Renk biçimini COLOR_FormatYUV420Flexible olarak ayarlayarak MediaCodec kullanarak kodlamak istiyorum. Benim Girdi tamponu en böyle yuv420p.When ben girdi tampon:MediaCodec getInputImage bazı aygıtlarda boş döndürülüyor

int inputBufferIndex = mEncoder.dequeueInputBuffer(-1); 
    mCurrentBufferIndex = inputBufferIndex; 
    if (inputBufferIndex >= 0) { 
     ByteBuffer inputBuffer = inputBuffers[inputBufferIndex]; 
     //if(VERBOSE) 
      Log.i(TAG,"pos:"+inputBuffer.position()+"\tlimit:"+inputBuffer.limit()); 
     inputBuffer.clear(); 
     return inputBuffer; 
    } 

Ama bazı cihazlar yanlış renk olsun.

int inputBufferIndex = mEncoder.dequeueInputBuffer(-1); 
    mCurrentBufferIndex = inputBufferIndex; 
    if (inputBufferIndex >= 0) { 
     Image img = mEncoder.getInputImage(inputBufferIndex); 
     if(img==null) 
      return null; 
     //mCurrentInputPlanes = img.getPlanes(); 
     ByteBuffer buffers[]={img.getPlanes()[0].getBuffer(), 
       img.getPlanes()[1].getBuffer(), 
       img.getPlanes()[2].getBuffer()}; 

Bazı cihazlarda YUV kanallara .Bu işi tampon doldurun: Yani bu deneyin. Ama getInputImage çağırırken moto X pro ve huawei P7 null olsun. Belgeler, resmin ham veri içermediğini söylüyor. Ancak, API 21'den beri de COLOR_FormatYUV420Flexible desteklendiğinden bahsediyor. Bunu nasıl düzeltmeliyim.

+0

işleyebilir farklı bir codec bileşeni Galaxy Note3 ve Galaxy Tab 4 10.1 cihazları, herhangi bir kimseden daha fazla bilgi? – FTLRalph

+0

@FTLRalph Tam kod örneği gönderir misiniz? Sorudan, YUV verilerinin girişçiye nasıl kopyalandığı net değil. Ayrıca, sorunu gösteren kodlanmış video örneğini gönderebilir misiniz? Yanlış renk, adım adım veya yastıklama sorunu gibi görünüyor, ancak hata ayıklamak için daha fazla bilgiye ihtiyacınız var. –

+0

COLOR_FormatYUV420Flexible'ı desteklediniz mi? bu bağlantıya göre: https://stackoverflow.com/questions/30857610/will-all-phones-support-yuv-420-semi-planar-color-format-in-h-264-encoder – user1796260

cevap

0

getInputImage belgelerine diyor ki:

 * @return the input image, or null if the index is not a 
    * dequeued input buffer, or not a ByteBuffer that contains a 
    * raw image. 

veya olmasın bir ham görüntü içeren bir ByteBuffer., görüntünün renk formatını desteklemediği anlamına gelebilir. 21'den beri COLOR_FormatYUV420Flexible kullanılabilir olduğundan, tüm kodeklerin bu biçimi desteklediği anlamına gelmez. Kesinlikle getInputImage kullanmak varsa

, sonra belki denemek:

  • COLOR_FormatYUV420Planar
  • COLOR_FormatYUV420SemiPlanar
  • Ben bir sürü bu alıyorum COLOR_FormatYUV420Flexible