Program: 110250
Project: 110250
Buggy source:
@Override protected void parsePayload(ParsableByteArray data,long timeUs) throws ParserException {
  int packetType=data.readUnsignedByte();
  int compositionTimeMs=data.readUnsignedInt24();
  compositionTimeMs=(compositionTimeMs & 0x800000) >> 23 == 1 ? (compositionTimeMs & 0xff000000) : compositionTimeMs;
  timeUs+=compositionTimeMs * 1000L;
  if (packetType == AVC_PACKET_TYPE_SEQUENCE_HEADER && !hasOutputFormat) {
    ParsableByteArray videoSequence=new ParsableByteArray(new byte[data.bytesLeft()]);
    data.readBytes(videoSequence.data,0,data.bytesLeft());
    AvcConfig avcConfig=AvcConfig.parse(videoSequence);
    nalUnitLengthFieldLength=avcConfig.nalUnitLengthFieldLength;
    Format format=Format.createVideoSampleFormat(null,MimeTypes.VIDEO_H264,null,Format.NO_VALUE,Format.NO_VALUE,avcConfig.width,avcConfig.height,Format.NO_VALUE,avcConfig.initializationData,Format.NO_VALUE,avcConfig.pixelWidthAspectRatio,null);
    output.format(format);
    hasOutputFormat=true;
  }
 else   if (packetType == AVC_PACKET_TYPE_AVC_NALU && hasOutputFormat) {
    byte[] nalLengthData=nalLength.data;
    nalLengthData[0]=0;
    nalLengthData[1]=0;
    nalLengthData[2]=0;
    int nalUnitLengthFieldLengthDiff=4 - nalUnitLengthFieldLength;
    int bytesWritten=0;
    int bytesToWrite;
    while (data.bytesLeft() > 0) {
      data.readBytes(nalLength.data,nalUnitLengthFieldLengthDiff,nalUnitLengthFieldLength);
      nalLength.setPosition(0);
      bytesToWrite=nalLength.readUnsignedIntToInt();
      nalStartCode.setPosition(0);
      output.sampleData(nalStartCode,4);
      bytesWritten+=4;
      output.sampleData(data,bytesToWrite);
      bytesWritten+=bytesToWrite;
    }
    output.sampleMetadata(timeUs,frameType == VIDEO_FRAME_KEYFRAME ? C.BUFFER_FLAG_KEY_FRAME : 0,bytesWritten,0,null);
  }
}

Fixed version (ground truth):
@Override protected void parsePayload(ParsableByteArray data,long timeUs) throws ParserException {
  int packetType=data.readUnsignedByte();
  int compositionTimeMs=data.readUnsignedInt24();
  compositionTimeMs=(compositionTimeMs & 0x800000L) >>> 23 == 1 ? (compositionTimeMs | 0xff000000) : compositionTimeMs;
  timeUs+=compositionTimeMs * 1000L;
  if (packetType == AVC_PACKET_TYPE_SEQUENCE_HEADER && !hasOutputFormat) {
    ParsableByteArray videoSequence=new ParsableByteArray(new byte[data.bytesLeft()]);
    data.readBytes(videoSequence.data,0,data.bytesLeft());
    AvcConfig avcConfig=AvcConfig.parse(videoSequence);
    nalUnitLengthFieldLength=avcConfig.nalUnitLengthFieldLength;
    Format format=Format.createVideoSampleFormat(null,MimeTypes.VIDEO_H264,null,Format.NO_VALUE,Format.NO_VALUE,avcConfig.width,avcConfig.height,Format.NO_VALUE,avcConfig.initializationData,Format.NO_VALUE,avcConfig.pixelWidthAspectRatio,null);
    output.format(format);
    hasOutputFormat=true;
  }
 else   if (packetType == AVC_PACKET_TYPE_AVC_NALU && hasOutputFormat) {
    byte[] nalLengthData=nalLength.data;
    nalLengthData[0]=0;
    nalLengthData[1]=0;
    nalLengthData[2]=0;
    int nalUnitLengthFieldLengthDiff=4 - nalUnitLengthFieldLength;
    int bytesWritten=0;
    int bytesToWrite;
    while (data.bytesLeft() > 0) {
      data.readBytes(nalLength.data,nalUnitLengthFieldLengthDiff,nalUnitLengthFieldLength);
      nalLength.setPosition(0);
      bytesToWrite=nalLength.readUnsignedIntToInt();
      nalStartCode.setPosition(0);
      output.sampleData(nalStartCode,4);
      bytesWritten+=4;
      output.sampleData(data,bytesToWrite);
      bytesWritten+=bytesToWrite;
    }
    output.sampleMetadata(timeUs,frameType == VIDEO_FRAME_KEYFRAME ? C.BUFFER_FLAG_KEY_FRAME : 0,bytesWritten,0,null);
  }
}