static void
com_media_ffmpeg_FFMpegPlayer_release(JNIEnv *env, jobject thiz)
{
    __android_log_print(ANDROID_LOG_INFO, TAG, "com_media_ffmpeg_FFMpegPlayer_release() ");
    MediaPlayer* mp = getMediaPlayer(env, thiz);
    if (mp != NULL) {
        // this prevents native callbacks after the object is released
        mp->setListener(0);
        delete (mp);
        env->SetIntField(thiz, fields.context, (int)NULL);
    }

}
static void
com_media_ffmpeg_FFMpegPlayer_native_setup(JNIEnv *env, jobject thiz, jobject weak_this)
{
	__android_log_print(ANDROID_LOG_INFO, TAG, "native_setup");
    MediaPlayer* mp = new MediaPlayer();
    if (mp == NULL) {
        jniThrowException(env, "java/lang/RuntimeException", "Out of memory");
        return;
    }
    // create new listener and give it to MediaPlayer
    JNIFFmpegMediaPlayerListener* listener = new JNIFFmpegMediaPlayerListener(env, thiz, weak_this);
    mp->setListener(listener);
    // Stow our new C++ MediaPlayer in an opaque field in the Java object.
    setMediaPlayer(env, thiz, mp);
}
static void
wseemann_media_FFmpegMediaPlayer_release(JNIEnv *env, jobject thiz)
{
    __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, "release");
    //decVideoSurfaceRef(env, thiz);
    MediaPlayer* mp = setMediaPlayer(env, thiz, 0);
    if (mp != NULL) {
        // this prevents native callbacks after the object is released
    	JNIMediaPlayerListener *listener = (JNIMediaPlayerListener *) mp->getListener();
    	delete listener;
        mp->setListener(0);
        mp->disconnect();
        
        delete mp;
        setMediaPlayer(env, thiz, 0);
    }
}
static void
wseemann_media_FFmpegMediaPlayer_native_setup(JNIEnv *env, jobject thiz, jobject weak_this, jbyteArray buffer)
{
    __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, "native_setup");
    MediaPlayer* mp = new MediaPlayer();
    if (mp == NULL) {
        jniThrowException(env, "java/lang/RuntimeException", "Out of memory");
        return;
    }

    // create new listener and give it to MediaPlayer
    JNIMediaPlayerListener* listener = new JNIMediaPlayerListener(env, thiz, weak_this, buffer);
    mp->setListener(listener);

    // Stow our new C++ MediaPlayer in an opaque field in the Java object.
    setMediaPlayer(env, thiz, (int)mp);
}
Пример #5
0
int main(int argc, char **argv) {

  if (argc != 2) {
    ALOGE("filename unspecified");
    return 1;
  }
  signal(SIGTERM, signalHandler);
  signal(SIGHUP, signalHandler);
  signal(SIGPIPE, signalHandler);
  prctl(PR_SET_PDEATHSIG, SIGKILL);

  int fd = open(argv[1], O_RDONLY);
  if (fd < 0) {
    ALOGE("Error %d: Unable to open %s", argv[1]);
    return 1;
  }
  int64_t length = lseek64(fd, 0, SEEK_END);
  lseek64(fd, 0, SEEK_SET);

  OK(pipe(pipefd));

  sp<ProcessState> ps = ProcessState::self();
  ps->startThreadPool();

  MediaPlayer m;
  OK(m.setListener(new MPListener));
  OK(m.setDataSource(fd, 0, length));
  OK(m.prepare());
  OK(m.start());

  int c;
  TEMP_FAILURE_RETRY(read(pipefd[0], &c, 1));

  // Don't bother trying to shut down cleanly, just let mediaplayer deal with the
  // unexpected disconnect.
  exit(0);
}