bool FFmpegEncoderVerifyContainer(struct FFmpegEncoder* encoder) { AVOutputFormat* oformat = av_guess_format(encoder->containerFormat, 0, 0); AVCodec* acodec = avcodec_find_encoder_by_name(encoder->audioCodec); AVCodec* vcodec = avcodec_find_encoder_by_name(encoder->videoCodec); if ((encoder->audioCodec && !acodec) || !vcodec || !oformat) { return false; } if (encoder->audioCodec && !avformat_query_codec(oformat, acodec->id, FF_COMPLIANCE_EXPERIMENTAL)) { return false; } if (!avformat_query_codec(oformat, vcodec->id, FF_COMPLIANCE_EXPERIMENTAL)) { return false; } return true; }
QStringList MediaSink::supportedCodecs(const QString &format, const QString &type) { AVOutputFormat *outputFormat = av_guess_format(format.toStdString().c_str(), NULL, NULL); if (!outputFormat) return QStringList(); QStringList codecs; AVCodec *codec = NULL; while ((codec = av_codec_next(codec))) { if ((type.isEmpty() || mediaTypeToStr->value(codec->type) == type) && av_codec_is_encoder(codec) && avformat_query_codec(outputFormat, codec->id, FF_COMPLIANCE_NORMAL) > 0) codecs << QString(codec->name); } return codecs; }