QString options2StringHelper(void* obj, const char* unit) { qDebug("obj: %p", obj); QString s; const AVOption* opt = NULL; while ((opt = av_opt_next(obj, opt))) { if (opt->type == AV_OPT_TYPE_CONST) { if (!unit) continue; if (!qstrcmp(unit, opt->unit)) s.append(QStringLiteral(" %1=%2").arg(QLatin1String(opt->name)).arg(opt->default_val.i64)); continue; } else { if (unit) continue; } s.append(QStringLiteral("\n%1: ").arg(QLatin1String(opt->name))); switch (opt->type) { case AV_OPT_TYPE_FLAGS: case AV_OPT_TYPE_INT: case AV_OPT_TYPE_INT64: s.append(QStringLiteral("(%1)").arg(opt->default_val.i64)); break; case AV_OPT_TYPE_DOUBLE: case AV_OPT_TYPE_FLOAT: s.append(QStringLiteral("(%1)").arg(opt->default_val.dbl, 0, 'f')); break; case AV_OPT_TYPE_STRING: if (opt->default_val.str) s.append(QStringLiteral("(%1)").arg(QString::fromUtf8(opt->default_val.str))); break; case AV_OPT_TYPE_RATIONAL: s.append(QStringLiteral("(%1/%2)").arg(opt->default_val.q.num).arg(opt->default_val.q.den)); break; default: break; } if (opt->help) s.append(QLatin1String(" ")).append(QString::fromUtf8(opt->help)); if (opt->unit && opt->type != AV_OPT_TYPE_CONST) s.append(QLatin1String("\n ")).append(options2StringHelper(obj, opt->unit)); } return s; }
QString optionsToString(void* obj) { return options2StringHelper(obj, NULL); }