Java 类com.google.android.exoplayer2.util.ParsableNalUnitBitArray 实例源码

项目:Exoplayer2Radio    文件:H265Reader.java   
/**
 * Skips scaling_list_data(). See H.265/HEVC (2014) 7.3.4.
 */
private static void skipScalingList(ParsableNalUnitBitArray bitArray) {
  for (int sizeId = 0; sizeId < 4; sizeId++) {
    for (int matrixId = 0; matrixId < 6; matrixId += sizeId == 3 ? 3 : 1) {
      if (!bitArray.readBit()) { // scaling_list_pred_mode_flag[sizeId][matrixId]
        // scaling_list_pred_matrix_id_delta[sizeId][matrixId]
        bitArray.readUnsignedExpGolombCodedInt();
      } else {
        int coefNum = Math.min(64, 1 << (4 + (sizeId << 1)));
        if (sizeId > 1) {
          // scaling_list_dc_coef_minus8[sizeId - 2][matrixId]
          bitArray.readSignedExpGolombCodedInt();
        }
        for (int i = 0; i < coefNum; i++) {
          bitArray.readSignedExpGolombCodedInt(); // scaling_list_delta_coef
        }
      }
    }
  }
}
项目:K-Sonic    文件:H265Reader.java   
/**
 * Skips scaling_list_data(). See H.265/HEVC (2014) 7.3.4.
 */
private static void skipScalingList(ParsableNalUnitBitArray bitArray) {
  for (int sizeId = 0; sizeId < 4; sizeId++) {
    for (int matrixId = 0; matrixId < 6; matrixId += sizeId == 3 ? 3 : 1) {
      if (!bitArray.readBit()) { // scaling_list_pred_mode_flag[sizeId][matrixId]
        // scaling_list_pred_matrix_id_delta[sizeId][matrixId]
        bitArray.readUnsignedExpGolombCodedInt();
      } else {
        int coefNum = Math.min(64, 1 << (4 + (sizeId << 1)));
        if (sizeId > 1) {
          // scaling_list_dc_coef_minus8[sizeId - 2][matrixId]
          bitArray.readSignedExpGolombCodedInt();
        }
        for (int i = 0; i < coefNum; i++) {
          bitArray.readSignedExpGolombCodedInt(); // scaling_list_delta_coef
        }
      }
    }
  }
}
项目:videoPickPlayer    文件:H265Reader.java   
/**
 * Skips scaling_list_data(). See H.265/HEVC (2014) 7.3.4.
 */
private static void skipScalingList(ParsableNalUnitBitArray bitArray) {
  for (int sizeId = 0; sizeId < 4; sizeId++) {
    for (int matrixId = 0; matrixId < 6; matrixId += sizeId == 3 ? 3 : 1) {
      if (!bitArray.readBit()) { // scaling_list_pred_mode_flag[sizeId][matrixId]
        // scaling_list_pred_matrix_id_delta[sizeId][matrixId]
        bitArray.readUnsignedExpGolombCodedInt();
      } else {
        int coefNum = Math.min(64, 1 << (4 + (sizeId << 1)));
        if (sizeId > 1) {
          // scaling_list_dc_coef_minus8[sizeId - 2][matrixId]
          bitArray.readSignedExpGolombCodedInt();
        }
        for (int i = 0; i < coefNum; i++) {
          bitArray.readSignedExpGolombCodedInt(); // scaling_list_delta_coef
        }
      }
    }
  }
}
项目:transistor    文件:H265Reader.java   
/**
 * Skips scaling_list_data(). See H.265/HEVC (2014) 7.3.4.
 */
private static void skipScalingList(ParsableNalUnitBitArray bitArray) {
  for (int sizeId = 0; sizeId < 4; sizeId++) {
    for (int matrixId = 0; matrixId < 6; matrixId += sizeId == 3 ? 3 : 1) {
      if (!bitArray.readBit()) { // scaling_list_pred_mode_flag[sizeId][matrixId]
        // scaling_list_pred_matrix_id_delta[sizeId][matrixId]
        bitArray.readUnsignedExpGolombCodedInt();
      } else {
        int coefNum = Math.min(64, 1 << (4 + (sizeId << 1)));
        if (sizeId > 1) {
          // scaling_list_dc_coef_minus8[sizeId - 2][matrixId]
          bitArray.readSignedExpGolombCodedInt();
        }
        for (int i = 0; i < coefNum; i++) {
          bitArray.readSignedExpGolombCodedInt(); // scaling_list_delta_coef
        }
      }
    }
  }
}
项目:Exoplayer2Radio    文件:H264Reader.java   
public SampleReader(TrackOutput output, boolean allowNonIdrKeyframes,
    boolean detectAccessUnits) {
  this.output = output;
  this.allowNonIdrKeyframes = allowNonIdrKeyframes;
  this.detectAccessUnits = detectAccessUnits;
  sps = new SparseArray<>();
  pps = new SparseArray<>();
  previousSliceHeader = new SliceHeaderData();
  sliceHeader = new SliceHeaderData();
  buffer = new byte[DEFAULT_BUFFER_SIZE];
  bitArray = new ParsableNalUnitBitArray(buffer, 0, 0);
  reset();
}
项目:Exoplayer2Radio    文件:H265Reader.java   
/**
 * Reads the number of short term reference picture sets in a SPS as ue(v), then skips all of
 * them. See H.265/HEVC (2014) 7.3.7.
 */
private static void skipShortTermRefPicSets(ParsableNalUnitBitArray bitArray) {
  int numShortTermRefPicSets = bitArray.readUnsignedExpGolombCodedInt();
  boolean interRefPicSetPredictionFlag = false;
  int numNegativePics;
  int numPositivePics;
  // As this method applies in a SPS, the only element of NumDeltaPocs accessed is the previous
  // one, so we just keep track of that rather than storing the whole array.
  // RefRpsIdx = stRpsIdx - (delta_idx_minus1 + 1) and delta_idx_minus1 is always zero in SPS.
  int previousNumDeltaPocs = 0;
  for (int stRpsIdx = 0; stRpsIdx < numShortTermRefPicSets; stRpsIdx++) {
    if (stRpsIdx != 0) {
      interRefPicSetPredictionFlag = bitArray.readBit();
    }
    if (interRefPicSetPredictionFlag) {
      bitArray.skipBits(1); // delta_rps_sign
      bitArray.readUnsignedExpGolombCodedInt(); // abs_delta_rps_minus1
      for (int j = 0; j <= previousNumDeltaPocs; j++) {
        if (bitArray.readBit()) { // used_by_curr_pic_flag[j]
          bitArray.skipBits(1); // use_delta_flag[j]
        }
      }
    } else {
      numNegativePics = bitArray.readUnsignedExpGolombCodedInt();
      numPositivePics = bitArray.readUnsignedExpGolombCodedInt();
      previousNumDeltaPocs = numNegativePics + numPositivePics;
      for (int i = 0; i < numNegativePics; i++) {
        bitArray.readUnsignedExpGolombCodedInt(); // delta_poc_s0_minus1[i]
        bitArray.skipBits(1); // used_by_curr_pic_s0_flag[i]
      }
      for (int i = 0; i < numPositivePics; i++) {
        bitArray.readUnsignedExpGolombCodedInt(); // delta_poc_s1_minus1[i]
        bitArray.skipBits(1); // used_by_curr_pic_s1_flag[i]
      }
    }
  }
}
项目:K-Sonic    文件:H264Reader.java   
public SampleReader(TrackOutput output, boolean allowNonIdrKeyframes,
    boolean detectAccessUnits) {
  this.output = output;
  this.allowNonIdrKeyframes = allowNonIdrKeyframes;
  this.detectAccessUnits = detectAccessUnits;
  sps = new SparseArray<>();
  pps = new SparseArray<>();
  previousSliceHeader = new SliceHeaderData();
  sliceHeader = new SliceHeaderData();
  buffer = new byte[DEFAULT_BUFFER_SIZE];
  bitArray = new ParsableNalUnitBitArray(buffer, 0, 0);
  reset();
}
项目:K-Sonic    文件:H265Reader.java   
/**
 * Reads the number of short term reference picture sets in a SPS as ue(v), then skips all of
 * them. See H.265/HEVC (2014) 7.3.7.
 */
private static void skipShortTermRefPicSets(ParsableNalUnitBitArray bitArray) {
  int numShortTermRefPicSets = bitArray.readUnsignedExpGolombCodedInt();
  boolean interRefPicSetPredictionFlag = false;
  int numNegativePics;
  int numPositivePics;
  // As this method applies in a SPS, the only element of NumDeltaPocs accessed is the previous
  // one, so we just keep track of that rather than storing the whole array.
  // RefRpsIdx = stRpsIdx - (delta_idx_minus1 + 1) and delta_idx_minus1 is always zero in SPS.
  int previousNumDeltaPocs = 0;
  for (int stRpsIdx = 0; stRpsIdx < numShortTermRefPicSets; stRpsIdx++) {
    if (stRpsIdx != 0) {
      interRefPicSetPredictionFlag = bitArray.readBit();
    }
    if (interRefPicSetPredictionFlag) {
      bitArray.skipBits(1); // delta_rps_sign
      bitArray.readUnsignedExpGolombCodedInt(); // abs_delta_rps_minus1
      for (int j = 0; j <= previousNumDeltaPocs; j++) {
        if (bitArray.readBit()) { // used_by_curr_pic_flag[j]
          bitArray.skipBits(1); // use_delta_flag[j]
        }
      }
    } else {
      numNegativePics = bitArray.readUnsignedExpGolombCodedInt();
      numPositivePics = bitArray.readUnsignedExpGolombCodedInt();
      previousNumDeltaPocs = numNegativePics + numPositivePics;
      for (int i = 0; i < numNegativePics; i++) {
        bitArray.readUnsignedExpGolombCodedInt(); // delta_poc_s0_minus1[i]
        bitArray.skipBits(1); // used_by_curr_pic_s0_flag[i]
      }
      for (int i = 0; i < numPositivePics; i++) {
        bitArray.readUnsignedExpGolombCodedInt(); // delta_poc_s1_minus1[i]
        bitArray.skipBits(1); // used_by_curr_pic_s1_flag[i]
      }
    }
  }
}
项目:videoPickPlayer    文件:H264Reader.java   
public SampleReader(TrackOutput output, boolean allowNonIdrKeyframes,
    boolean detectAccessUnits) {
  this.output = output;
  this.allowNonIdrKeyframes = allowNonIdrKeyframes;
  this.detectAccessUnits = detectAccessUnits;
  sps = new SparseArray<>();
  pps = new SparseArray<>();
  previousSliceHeader = new SliceHeaderData();
  sliceHeader = new SliceHeaderData();
  buffer = new byte[DEFAULT_BUFFER_SIZE];
  bitArray = new ParsableNalUnitBitArray(buffer, 0, 0);
  reset();
}
项目:videoPickPlayer    文件:H265Reader.java   
/**
 * Reads the number of short term reference picture sets in a SPS as ue(v), then skips all of
 * them. See H.265/HEVC (2014) 7.3.7.
 */
private static void skipShortTermRefPicSets(ParsableNalUnitBitArray bitArray) {
  int numShortTermRefPicSets = bitArray.readUnsignedExpGolombCodedInt();
  boolean interRefPicSetPredictionFlag = false;
  int numNegativePics;
  int numPositivePics;
  // As this method applies in a SPS, the only element of NumDeltaPocs accessed is the previous
  // one, so we just keep track of that rather than storing the whole array.
  // RefRpsIdx = stRpsIdx - (delta_idx_minus1 + 1) and delta_idx_minus1 is always zero in SPS.
  int previousNumDeltaPocs = 0;
  for (int stRpsIdx = 0; stRpsIdx < numShortTermRefPicSets; stRpsIdx++) {
    if (stRpsIdx != 0) {
      interRefPicSetPredictionFlag = bitArray.readBit();
    }
    if (interRefPicSetPredictionFlag) {
      bitArray.skipBits(1); // delta_rps_sign
      bitArray.readUnsignedExpGolombCodedInt(); // abs_delta_rps_minus1
      for (int j = 0; j <= previousNumDeltaPocs; j++) {
        if (bitArray.readBit()) { // used_by_curr_pic_flag[j]
          bitArray.skipBits(1); // use_delta_flag[j]
        }
      }
    } else {
      numNegativePics = bitArray.readUnsignedExpGolombCodedInt();
      numPositivePics = bitArray.readUnsignedExpGolombCodedInt();
      previousNumDeltaPocs = numNegativePics + numPositivePics;
      for (int i = 0; i < numNegativePics; i++) {
        bitArray.readUnsignedExpGolombCodedInt(); // delta_poc_s0_minus1[i]
        bitArray.skipBits(1); // used_by_curr_pic_s0_flag[i]
      }
      for (int i = 0; i < numPositivePics; i++) {
        bitArray.readUnsignedExpGolombCodedInt(); // delta_poc_s1_minus1[i]
        bitArray.skipBits(1); // used_by_curr_pic_s1_flag[i]
      }
    }
  }
}
项目:transistor    文件:H264Reader.java   
public SampleReader(TrackOutput output, boolean allowNonIdrKeyframes,
    boolean detectAccessUnits) {
  this.output = output;
  this.allowNonIdrKeyframes = allowNonIdrKeyframes;
  this.detectAccessUnits = detectAccessUnits;
  sps = new SparseArray<>();
  pps = new SparseArray<>();
  previousSliceHeader = new SliceHeaderData();
  sliceHeader = new SliceHeaderData();
  buffer = new byte[DEFAULT_BUFFER_SIZE];
  bitArray = new ParsableNalUnitBitArray(buffer, 0, 0);
  reset();
}
项目:transistor    文件:H265Reader.java   
/**
 * Reads the number of short term reference picture sets in a SPS as ue(v), then skips all of
 * them. See H.265/HEVC (2014) 7.3.7.
 */
private static void skipShortTermRefPicSets(ParsableNalUnitBitArray bitArray) {
  int numShortTermRefPicSets = bitArray.readUnsignedExpGolombCodedInt();
  boolean interRefPicSetPredictionFlag = false;
  int numNegativePics;
  int numPositivePics;
  // As this method applies in a SPS, the only element of NumDeltaPocs accessed is the previous
  // one, so we just keep track of that rather than storing the whole array.
  // RefRpsIdx = stRpsIdx - (delta_idx_minus1 + 1) and delta_idx_minus1 is always zero in SPS.
  int previousNumDeltaPocs = 0;
  for (int stRpsIdx = 0; stRpsIdx < numShortTermRefPicSets; stRpsIdx++) {
    if (stRpsIdx != 0) {
      interRefPicSetPredictionFlag = bitArray.readBit();
    }
    if (interRefPicSetPredictionFlag) {
      bitArray.skipBit(); // delta_rps_sign
      bitArray.readUnsignedExpGolombCodedInt(); // abs_delta_rps_minus1
      for (int j = 0; j <= previousNumDeltaPocs; j++) {
        if (bitArray.readBit()) { // used_by_curr_pic_flag[j]
          bitArray.skipBit(); // use_delta_flag[j]
        }
      }
    } else {
      numNegativePics = bitArray.readUnsignedExpGolombCodedInt();
      numPositivePics = bitArray.readUnsignedExpGolombCodedInt();
      previousNumDeltaPocs = numNegativePics + numPositivePics;
      for (int i = 0; i < numNegativePics; i++) {
        bitArray.readUnsignedExpGolombCodedInt(); // delta_poc_s0_minus1[i]
        bitArray.skipBit(); // used_by_curr_pic_s0_flag[i]
      }
      for (int i = 0; i < numPositivePics; i++) {
        bitArray.readUnsignedExpGolombCodedInt(); // delta_poc_s1_minus1[i]
        bitArray.skipBit(); // used_by_curr_pic_s1_flag[i]
      }
    }
  }
}