title: how to use software codec in android using mediacodec
body: <p>In my i want encode yuv data into h264 using mediacodec software codec.</p>
  
  <p>I use Google software encoder <strong>OMX.google.h264.encoder</strong> </p>
  
  <p>when i use hardware encoder[OMX.qcom.video.encoder.avc] that time it work but when i use software encoder[OMX.google.h264.encoder] it not encode file.it will give error [see in log].</p>
  
  <p>what is problem i couldn’t identify.</p>
  
  <p>Source :</p>
  
  <pre><code>mediaCodec = MediaCodec.createByCodecName("OMX.google.h264.encoder");
      //mediaCodec = MediaCodec.createByCodecName(codecInfo.getName());
      Log.i(TAG,"codec name : "+ mediaCodec.getName());
      int mBitrate  = (int) ((MainActivity.mHeight * MainActivity.mWidth * MainActivity.frameRate)*2*0.07);
      MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc",MainActivity.mWidth,MainActivity.mHeight);
      mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE,mBitrate);
      mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, MainActivity.frameRate);
      //   mediaFormat.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, 320*240);
      mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT,colorFormat);
      //mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT,MediaCodecInfo.CodecProfileLevel.AVCLevel12);
      mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL,1);
      try{
          mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
          mediaCodec.start();
          Log.i(TAG,"H264 Encoder init success");
  
  
      }catch(IllegalArgumentException e)
      {
          e.printStackTrace();
      }catch (IllegalStateException e) {
          e.printStackTrace();
      }catch (Exception e) { 
          e.printStackTrace();// TODO: handle exception
      }
  </code></pre>
  
  <p>But i getting this error.</p>
  
  <p>Log :</p>
  
  <pre><code>I/H264Encoder(7772): outputStream initialized
  I/OMXClient(7772): Using client-side OMX mux.
  I/H264Encoder(7772): found colorFormat: 21
  I/OMXClient(7772): Using client-side OMX mux.
  E/OMXMaster(7772): A component of name 'OMX.qcom.audio.decoder.aac' already exists, ignoring this one.
  I/SoftAVCEncoder(7772): Construct SoftAVCEncoder
  I/H264Encoder(7772): codec name : OMX.google.h264.encoder
  E/SoftAVCEncoder(7772): internalSetParameter: StoreMetadataInBuffersParams.nPortIndex not zero!
  E/OMXNodeInstance(7772): OMX_SetParameter() failed for StoreMetaDataInBuffers: 0x80001001
  E/ACodec(7772): [OMX.google.h264.encoder] storeMetaDataInBuffers (output) failed w/ err -2147483648
  I/ACodec(7772): setupVideoEncoder succeeded
  I/H264Encoder(7772): H264 Encoder init success
  E/SoftAVCEncoder(7772): Video frame size 1920x1080 must be a multiple of 16
  E/SoftAVCEncoder(7772): Failed to initialized encoder params
  E/ACodec(7772): [OMX.google.h264.encoder] ERROR(0x80001001)
  E/MediaCodec(7772): Codec reported an error. (omx error 0x80001001, internalError -2147483648)
     W/System.err(7772): java.lang.IllegalStateException
     W/System.err(7772):  at android.media.MediaCodec.getBuffers(Native Method)
      W/System.err(7772):     at android.media.MediaCodec.getInputBuffers(MediaCodec.java:542)
    W/System.err(7772):   at com.ei.encodertest.H264Encoder.offerEncoder(H264Encoder.java:170)
    W/System.err(7772):   at com.ei.encodertest.MainActivity$ReadRawFileTask.doInBackground(MainActivity.java:113)
   W/System.err(7772):    at com.ei.encodertest.MainActivity$ReadRawFileTask.doInBackground(MainActivity.java:1)
   W/System.err(7772):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
   W/System.err(7772):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
   W/System.err(7772):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
   W/System.err(7772):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
     W/System.err(7772):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    W/System.err(7772):   at java.lang.Thread.run(Thread.java:841)
  </code></pre>