@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); }