Ejemplo n.º 1
0
  @Override
  protected final void initStreamImpl(final int vid, final int aid) throws IOException {
    if (0 == moviePtr) {
      throw new GLException("FFMPEG native instance null");
    }
    if (DEBUG) {
      System.err.println("initStream: p1 " + this);
    }

    final String streamLocS = IOUtil.decodeURIIfFilePath(getURI());
    destroyAudioSink();
    if (GLMediaPlayer.STREAM_ID_NONE == aid) {
      audioSink = AudioSinkFactory.createNull();
    } else {
      audioSink = AudioSinkFactory.createDefault();
    }
    final AudioFormat preferredAudioFormat = audioSink.getPreferredFormat();
    if (DEBUG) {
      System.err.println("initStream: p2 preferred " + preferredAudioFormat + ", " + this);
    }

    final boolean isCameraInput = null != cameraPath;
    final String resStreamLocS;
    // int rw=640, rh=480, rr=15;
    int rw = -1, rh = -1, rr = -1;
    String sizes = null;
    if (isCameraInput) {
      switch (PlatformPropsImpl.OS_TYPE) {
        case ANDROID:
          // ??
        case FREEBSD:
        case HPUX:
        case LINUX:
        case SUNOS:
          resStreamLocS = dev_video_linux + cameraPath;
          break;
        case WINDOWS:
          resStreamLocS = cameraPath;
          break;
        case MACOS:
        case OPENKODE:
        default:
          resStreamLocS = streamLocS; // FIXME: ??
          break;
      }
      if (null != cameraProps) {
        sizes = cameraProps.get(CameraPropSizeS);
        int v = getPropIntVal(cameraProps, CameraPropWidth);
        if (v > 0) {
          rw = v;
        }
        v = getPropIntVal(cameraProps, CameraPropHeight);
        if (v > 0) {
          rh = v;
        }
        v = getPropIntVal(cameraProps, CameraPropRate);
        if (v > 0) {
          rr = v;
        }
      }
    } else {
      resStreamLocS = streamLocS;
    }
    final int aMaxChannelCount = audioSink.getMaxSupportedChannels();
    final int aPrefSampleRate = preferredAudioFormat.sampleRate;
    // setStream(..) issues updateAttributes*(..), and defines avChosenAudioFormat, vid, aid, .. etc
    if (DEBUG) {
      System.err.println(
          "initStream: p3 cameraPath " + cameraPath + ", isCameraInput " + isCameraInput);
      System.err.println(
          "initStream: p3 stream " + getURI() + " -> " + streamLocS + " -> " + resStreamLocS);
      System.err.println(
          "initStream: p3 vid "
              + vid
              + ", sizes "
              + sizes
              + ", reqVideo "
              + rw
              + "x"
              + rh
              + "@"
              + rr
              + ", aid "
              + aid
              + ", aMaxChannelCount "
              + aMaxChannelCount
              + ", aPrefSampleRate "
              + aPrefSampleRate);
    }
    natives.setStream0(
        moviePtr,
        resStreamLocS,
        isCameraInput,
        vid,
        sizes,
        rw,
        rh,
        rr,
        aid,
        aMaxChannelCount,
        aPrefSampleRate);
  }