static int ffserver_opt_preset(const char *arg, int type, FFServerConfig *config) { FILE *f=NULL; char filename[1000], tmp[1000], tmp2[1000], line[1000]; int ret = 0; AVCodecContext *avctx; const AVCodec *codec; switch(type) { case AV_OPT_FLAG_AUDIO_PARAM: avctx = config->dummy_actx; break; case AV_OPT_FLAG_VIDEO_PARAM: avctx = config->dummy_vctx; break; default: av_assert0(0); } codec = avcodec_find_encoder(avctx->codec_id); if (!(f = get_preset_file(filename, sizeof(filename), arg, 0, codec ? codec->name : NULL))) { av_log(NULL, AV_LOG_ERROR, "File for preset '%s' not found\n", arg); return AVERROR(EINVAL); } while(!feof(f)) { int e= fscanf(f, "%999[^\n]\n", line) - 1; if(line[0] == '#' && !e) continue; e|= sscanf(line, "%999[^=]=%999[^\n]\n", tmp, tmp2) - 2; if(e) { av_log(NULL, AV_LOG_ERROR, "%s: Invalid syntax: '%s'\n", filename, line); ret = AVERROR(EINVAL); break; } if (!strcmp(tmp, "acodec") && avctx->codec_type == AVMEDIA_TYPE_AUDIO || !strcmp(tmp, "vcodec") && avctx->codec_type == AVMEDIA_TYPE_VIDEO) { if (ffserver_set_codec(avctx, tmp2, config) < 0) break; } else if (!strcmp(tmp, "scodec")) { av_log(NULL, AV_LOG_ERROR, "Subtitles preset found.\n"); ret = AVERROR(EINVAL); break; } else if (ffserver_save_avoption(tmp, tmp2, type, config) < 0) break; } fclose(f); return ret; }
static int ffserver_opt_preset(const char *arg, AVCodecContext *avctx, int type, enum AVCodecID *audio_id, enum AVCodecID *video_id) { FILE *f=NULL; char filename[1000], tmp[1000], tmp2[1000], line[1000]; int ret = 0; AVCodec *codec = NULL; if (avctx) codec = avcodec_find_encoder(avctx->codec_id); if (!(f = get_preset_file(filename, sizeof(filename), arg, 0, codec ? codec->name : NULL))) { fprintf(stderr, "File for preset '%s' not found\n", arg); return AVERROR(EINVAL); } while(!feof(f)){ int e= fscanf(f, "%999[^\n]\n", line) - 1; if(line[0] == '#' && !e) continue; e|= sscanf(line, "%999[^=]=%999[^\n]\n", tmp, tmp2) - 2; if(e){ fprintf(stderr, "%s: Invalid syntax: '%s'\n", filename, line); ret = AVERROR(EINVAL); break; } if (audio_id && !strcmp(tmp, "acodec")) { *audio_id = opt_codec(tmp2, AVMEDIA_TYPE_AUDIO); } else if (video_id && !strcmp(tmp, "vcodec")){ *video_id = opt_codec(tmp2, AVMEDIA_TYPE_VIDEO); } else if(!strcmp(tmp, "scodec")) { /* opt_subtitle_codec(tmp2); */ } else if (avctx && (ret = ffserver_opt_default(tmp, tmp2, avctx, type)) < 0) { fprintf(stderr, "%s: Invalid option or argument: '%s', parsed as " "'%s' = '%s'\n", filename, line, tmp, tmp2); break; } } fclose(f); return ret; }