jint Java_org_devtcg_rojocam_ffmpeg_FFStreamConfig_nativeCreate(JNIEnv *env, jclass clazz) { FFStreamConfig *defaultConfig = NULL; AVCodecContext *videoEnc = NULL; AVStream *st = NULL; defaultConfig = av_mallocz(sizeof(FFStreamConfig)); if (defaultConfig == NULL) { jniThrowOOM(env); goto fail; } defaultConfig->title = "rojocam feed"; //CODEC_ID_MPEG4 AVCodec *codec = avcodec_find_encoder(CODEC_ID_MPEG4); videoEnc = avcodec_alloc_context2(AVMEDIA_TYPE_VIDEO); if (videoEnc == NULL) { jniThrowOOM(env); goto fail; } /* XXX: We should attempt to encode with parameters that match our camera * preview input to reduce overhead, but being in a proof-of-concept phase * I'd rather stick to the simpler, less variable approach. */ videoEnc->time_base.num =1; videoEnc->time_base.den = 25; videoEnc->bit_rate = 180000; videoEnc->width = 320; videoEnc->height =240; videoEnc->pix_fmt = PIX_FMT_YUV420P; /* This apparently modifies the SDP created by avf_sdp_create. In my * experiments it looks like it does indeed add the "config=" parameter to * the fmtp directive in SDP. No idea what that does, though... */ if (opt_default("flags", "+global_header", videoEnc, AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM)) { LOGE("opt_default: flags, +global_header failed!"); jniThrowException(env, "java/IO/IOException", "Failed to set encoder options"); goto fail; } if (avcodec_open(videoEnc, codec) < 0) { LOGE("avcodec_open failed!"); jniThrowException(env, "java/lang/IllegalStateException", NULL); goto fail; } st = av_mallocz(sizeof(AVStream)); if (st == NULL) { jniThrowOOM(env); goto fail; } st->index = defaultConfig->num_streams; st->codec = videoEnc; defaultConfig->streams[defaultConfig->num_streams++] = st; return (jint)defaultConfig; fail: if (defaultConfig != NULL) { av_free(defaultConfig); } if (videoEnc != NULL) { av_free(videoEnc); } if (st != NULL) { av_free(st); } assert((*env)->ExceptionOccurred(env)); return 0; }
int main(int argc, char *argv[]) { opt_t opt; int retval = 0; const char *m; /* * Initialize. */ err_init(xbasename(argv[0])); /* init err package */ /* * If running setuid, fork a child to handle * all privileged operations and drop privs in this process. */ privsep_init(); /* * Seed options with default values: */ opt_default(&opt, argv[0]); /* * Override defaults with environment */ opt_env(&opt); /* * Process any options that need to be handled early: */ opt_args_early(&opt, argc, argv); /* * Load static or dynamic pdsh modules */ mod_init(); /* * Allow module directory to be overridden, but not when * running as root or setuid. (This is mainly for testing...) */ if (!(m = getenv ("PDSH_MODULE_DIR")) || getuid() == 0 || getuid() != geteuid()) m = pdsh_module_dir; if (mod_load_modules(m, &opt) < 0) errx("%p: Couldn't load any pdsh modules\n"); /* * Handle options. */ opt_args(&opt, argc, argv); /* override with command line */ if (opt_verify(&opt)) { /* verify options, print errors */ /* * Do the work. */ if (opt.info_only) /* display info only */ opt_list(&opt); else if (pdsh_personality() == PCP && opt.pcp_server) retval = (_pcp_remote_server (&opt) < 0); else if (pdsh_personality() == PCP && opt.pcp_client) retval = (_pcp_remote_client (&opt) < 0); else if (pdsh_personality() == PCP || opt.cmd != NULL) retval = dsh(&opt); /* single dsh/pcp command */ else /* prompt loop */ _interactive_dsh(&opt); } else { retval = 1; } mod_exit(); /* * Clean up. */ privsep_fini(); opt_free(&opt); /* free heap storage in opt struct */ err_cleanup(); return retval; }
static void load_options(void) { XFILE *file; Options tmp; int error = 0; long n, opt_n; get_set_video(0); /* DjV 007 030103 get current video mode */ if ((file = x_fopen(optname, O_DENYW | O_RDONLY, &error)) != NULL) { opt_n = sizeof(Options); tmp.version = 0; x_fread(file, &tmp, sizeof(int)); /* HR 240103: load older cfg versions */ if ( tmp.version >= MIN_VERSION && tmp.version < CFG_VERSION ) { memset(&tmp.V2_2, 0, sizeof(tmp.V2_2)); opt_n -= sizeof(tmp.V2_2); } x_fclose(file); } if ((file = x_fopen(optname, O_DENYW | O_RDONLY, &error)) != NULL) { if ((n = x_fread(file, &tmp, opt_n)) == opt_n) { if ( tmp.version >= MIN_VERSION /* DjV 005 120103 (was 0x119) */ && tmp.version <= CFG_VERSION && tmp.magic == MAGIC ) { options = tmp; if (opt_n != sizeof(Options)) /* HR 240103 */ { options.V2_2.fields = WD_SHSIZ | WD_SHDAT | WD_SHTIM | WD_SHATT; /* DjV 010 251202 HR 240103 */ options.attribs = FA_SUBDIR | FA_SYSTEM; /* DjV 004 251202 HR 240103 */ } ins_shorts(); /* DjV 019 080103 put kbd shortcuts into menu texts */ wd_deselect_all(); wd_default(); if (tmp.cprefs & SAVE_COLORS) error = load_colors(file); if (error == 0) if ((error = dsk_load(file)) == 0) if ((error = ft_load(file)) == 0) if ((error = icnt_load(file)) == 0) if ((error = app_load(file)) == 0) if ((error = prg_load(file)) == 0) error = wd_load(file); } else { alert_printf(1, MVALIDCF); x_fclose(file); return; } /* DjV 007 030103 ---vvv--- */ /* If read ok, set video state but do not change resolution */ get_set_video(1); /* DjV 007 030103 ---^^^--- */ } else { error = (n < 0) ? (int) n : EEOF; hndl_error(MLOADCFG, error); x_fclose(file); return; } x_fclose(file); } if (error != 0) { hndl_error(MLOADCFG, error); opt_default(); dsk_default(); ft_default(); icnt_default(); app_default(); prg_default(); wd_default(); } if (options.version < 0x0130) options.dial_mode = (options.cprefs & 0x80) ? XD_BUFFERED : XD_NORMAL; xd_setposmode((options.cprefs & DIALPOS_MODE) ? XD_MOUSE : XD_CENTERED); set_dialmode(); options.version = CFG_VERSION; }