code: void addTranscoderAt(Transcoder transcoder, int i) {
          if (numTranscoders == elements.length) {
              EConvElement[] tmp = new EConvElement[elements.length * 2];
              System.arraycopy(elements, 0, tmp, 0, i);
              System.arraycopy(elements, i, tmp, i + 1, elements.length - i);
              elements = tmp;
          } else {
              System.arraycopy(elements, i, elements, i + 1, elements.length - i - 1);
          }
  
          elements[i] = new EConvElement(transcoder.transcoding(0));
          elements[i].allocate(4096);
          numTranscoders++;
  
          if (!decorator(transcoder.source, transcoder.destination)) {
              for (int j = numTranscoders - 1; i <= j; j--) {
                  Transcoding tc = elements[j].transcoding;
                  Transcoder tr = tc.transcoder;
                  if (!decorator(tr.source, tr.destination)) {
                      lastTranscoding = tc;
                      break;
                  }
              }
          }
      }
docs: /* rb_econv_add_transcoder_at