Java 类com.google.zxing.client.android.PlanarYUVLuminanceSource 实例源码

项目:BibSearch    文件:CameraManager.java   
/**
 * A factory method to build the appropriate LuminanceSource object based on the format
 * of the preview buffers, as described by Camera.Parameters.
 *
 * @param data A preview frame.
 * @param width The width of the image.
 * @param height The height of the image.
 * @return A PlanarYUVLuminanceSource instance.
 */
public PlanarYUVLuminanceSource buildLuminanceSource(byte[] data, int width, int height) {
  Rect rect = getFramingRectInPreview();
  int previewFormat = configManager.getPreviewFormat();
  String previewFormatString = configManager.getPreviewFormatString();

  switch (previewFormat) {
    // This is the standard Android format which all devices are REQUIRED to support.
    // In theory, it's the only one we should ever care about.
    case PixelFormat.YCbCr_420_SP:
    // This format has never been seen in the wild, but is compatible as we only care
    // about the Y channel, so allow it.
    case PixelFormat.YCbCr_422_SP:
      return new PlanarYUVLuminanceSource(data, width, height, rect.left, rect.top,
          rect.width(), rect.height(), reverseImage);
    default:
      // The Samsung Moment incorrectly uses this variant instead of the 'sp' version.
      // Fortunately, it too has all the Y data up front, so we can read it.
      if ("yuv420p".equals(previewFormatString)) {
        return new PlanarYUVLuminanceSource(data, width, height, rect.left, rect.top,
            rect.width(), rect.height(), reverseImage);
      }
  }
  throw new IllegalArgumentException("Unsupported picture format: " +
      previewFormat + '/' + previewFormatString);
}