static int opt_list(void *obj, void *av_log_obj, char *unit)

{

    AVOption *opt=NULL;



    while((opt= av_next_option(obj, opt))){

        if(!(opt->flags & (AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM)))

            continue;



        /* Don't print CONST's on level one.

         * Don't print anything but CONST's on level two.

         * Only print items from the requested unit.

         */

        if (!unit && opt->type==FF_OPT_TYPE_CONST)

            continue;

        else if (unit && opt->type!=FF_OPT_TYPE_CONST)

            continue;

        else if (unit && opt->type==FF_OPT_TYPE_CONST && strcmp(unit, opt->unit))

            continue;

        else if (unit && opt->type == FF_OPT_TYPE_CONST)

            av_log(av_log_obj, AV_LOG_INFO, "   %-15s ", opt->name);

        else

            av_log(av_log_obj, AV_LOG_INFO, "-%-17s ", opt->name);



        switch( opt->type )

        {

            case FF_OPT_TYPE_FLAGS:

                av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<flags>" );

                break;

            case FF_OPT_TYPE_INT:

                av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<int>" );

                break;

            case FF_OPT_TYPE_INT64:

                av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<int64>" );

                break;

            case FF_OPT_TYPE_DOUBLE:

                av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<double>" );

                break;

            case FF_OPT_TYPE_FLOAT:

                av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<float>" );

                break;

            case FF_OPT_TYPE_STRING:

                av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<string>" );

                break;

            case FF_OPT_TYPE_RATIONAL:

                av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<rational>" );

                break;

            case FF_OPT_TYPE_CONST:

            default:

                av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "" );

                break;

        }

        av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_ENCODING_PARAM) ? 'E' : '.');

        av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_DECODING_PARAM) ? 'D' : '.');

        av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_VIDEO_PARAM   ) ? 'V' : '.');

        av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_AUDIO_PARAM   ) ? 'A' : '.');

        av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_SUBTITLE_PARAM) ? 'S' : '.');



        if(opt->help)

            av_log(av_log_obj, AV_LOG_INFO, " %s", opt->help);

        av_log(av_log_obj, AV_LOG_INFO, "\n");

        if (opt->unit && opt->type != FF_OPT_TYPE_CONST) {

            opt_list(obj, av_log_obj, opt->unit);

        }

    }

}

static int opt_list(void *obj, void *av_log_obj, char *unit)

{

    AVOption *opt=NULL;



    while((opt= av_next_option(obj, opt))){

        if(!(opt->flags & (AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM)))

            continue;



        







        if (!unit && opt->type==FF_OPT_TYPE_CONST)

            continue;

        else if (unit && opt->type!=FF_OPT_TYPE_CONST)

            continue;

        else if (unit && opt->type==FF_OPT_TYPE_CONST && strcmp(unit, opt->unit))

            continue;

        else if (unit && opt->type == FF_OPT_TYPE_CONST)

            av_log(av_log_obj, AV_LOG_INFO, "   %-15s ", opt->name);

        else

            av_log(av_log_obj, AV_LOG_INFO, "-%-17s ", opt->name);



        switch( opt->type )

        {

            case FF_OPT_TYPE_FLAGS:

                av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<flags>" );

                break;

            case FF_OPT_TYPE_INT:

                av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<int>" );

                break;

            case FF_OPT_TYPE_INT64:

                av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<int64>" );

                break;

            case FF_OPT_TYPE_DOUBLE:

                av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<double>" );

                break;

            case FF_OPT_TYPE_FLOAT:

                av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<float>" );

                break;

            case FF_OPT_TYPE_STRING:

                av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<string>" );

                break;

            case FF_OPT_TYPE_RATIONAL:

                av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "<rational>" );

                break;

            case FF_OPT_TYPE_CONST:

            default:

                av_log( av_log_obj, AV_LOG_INFO, "%-7s ", "" );

                break;

        }

        av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_ENCODING_PARAM) ? 'E' : '.');

        av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_DECODING_PARAM) ? 'D' : '.');

        av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_VIDEO_PARAM   ) ? 'V' : '.');

        av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_AUDIO_PARAM   ) ? 'A' : '.');

        av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_SUBTITLE_PARAM) ? 'S' : '.');



        if(opt->help)

            av_log(av_log_obj, AV_LOG_INFO, " %s", opt->help);

        av_log(av_log_obj, AV_LOG_INFO, "\n");

        if (opt->unit && opt->type != FF_OPT_TYPE_CONST) {

            opt_list(obj, av_log_obj, opt->unit);

        }

    }

}

static int FUNC_0(void *VAR_0, void *VAR_1, char *VAR_2)

{

    AVOption *opt=NULL;



    while((opt= av_next_option(VAR_0, opt))){

        if(!(opt->flags & (AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM)))

            continue;



        







        if (!VAR_2 && opt->type==FF_OPT_TYPE_CONST)

            continue;

        else if (VAR_2 && opt->type!=FF_OPT_TYPE_CONST)

            continue;

        else if (VAR_2 && opt->type==FF_OPT_TYPE_CONST && strcmp(VAR_2, opt->VAR_2))

            continue;

        else if (VAR_2 && opt->type == FF_OPT_TYPE_CONST)

            av_log(VAR_1, AV_LOG_INFO, "   %-15s ", opt->name);

        else

            av_log(VAR_1, AV_LOG_INFO, "-%-17s ", opt->name);



        switch( opt->type )

        {

            case FF_OPT_TYPE_FLAGS:

                av_log( VAR_1, AV_LOG_INFO, "%-7s ", "<flags>" );

                break;

            case FF_OPT_TYPE_INT:

                av_log( VAR_1, AV_LOG_INFO, "%-7s ", "<int>" );

                break;

            case FF_OPT_TYPE_INT64:

                av_log( VAR_1, AV_LOG_INFO, "%-7s ", "<int64>" );

                break;

            case FF_OPT_TYPE_DOUBLE:

                av_log( VAR_1, AV_LOG_INFO, "%-7s ", "<double>" );

                break;

            case FF_OPT_TYPE_FLOAT:

                av_log( VAR_1, AV_LOG_INFO, "%-7s ", "<float>" );

                break;

            case FF_OPT_TYPE_STRING:

                av_log( VAR_1, AV_LOG_INFO, "%-7s ", "<string>" );

                break;

            case FF_OPT_TYPE_RATIONAL:

                av_log( VAR_1, AV_LOG_INFO, "%-7s ", "<rational>" );

                break;

            case FF_OPT_TYPE_CONST:

            default:

                av_log( VAR_1, AV_LOG_INFO, "%-7s ", "" );

                break;

        }

        av_log(VAR_1, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_ENCODING_PARAM) ? 'E' : '.');

        av_log(VAR_1, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_DECODING_PARAM) ? 'D' : '.');

        av_log(VAR_1, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_VIDEO_PARAM   ) ? 'V' : '.');

        av_log(VAR_1, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_AUDIO_PARAM   ) ? 'A' : '.');

        av_log(VAR_1, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_SUBTITLE_PARAM) ? 'S' : '.');



        if(opt->help)

            av_log(VAR_1, AV_LOG_INFO, " %s", opt->help);

        av_log(VAR_1, AV_LOG_INFO, "\n");

        if (opt->VAR_2 && opt->type != FF_OPT_TYPE_CONST) {

            FUNC_0(VAR_0, VAR_1, opt->VAR_2);

        }

    }

}

static int FUNC_0(void *VAR_0, void *VAR_1, char *VAR_2)
{ AVOption *opt=NULL; while((opt= av_next_option(VAR_0, opt))){ if(!(opt->flags & (AV_OPT_FLAG_ENCODING_PARAM|AV_OPT_FLAG_DECODING_PARAM)))
continue; if (!VAR_2 && opt->type==FF_OPT_TYPE_CONST)
continue; else if (VAR_2 && opt->type!=FF_OPT_TYPE_CONST)
continue; else if (VAR_2 && opt->type==FF_OPT_TYPE_CONST && strcmp(VAR_2, opt->VAR_2))
continue; else if (VAR_2 && opt->type == FF_OPT_TYPE_CONST)
av_log(VAR_1, AV_LOG_INFO, "   %-15s ", opt->name); else
av_log(VAR_1, AV_LOG_INFO, "-%-17s ", opt->name); switch( opt->type )
{ case FF_OPT_TYPE_FLAGS:
av_log( VAR_1, AV_LOG_INFO, "%-7s ", "<flags>" ); break; case FF_OPT_TYPE_INT:
av_log( VAR_1, AV_LOG_INFO, "%-7s ", "<int>" ); break; case FF_OPT_TYPE_INT64:
av_log( VAR_1, AV_LOG_INFO, "%-7s ", "<int64>" ); break; case FF_OPT_TYPE_DOUBLE:
av_log( VAR_1, AV_LOG_INFO, "%-7s ", "<double>" ); break; case FF_OPT_TYPE_FLOAT:
av_log( VAR_1, AV_LOG_INFO, "%-7s ", "<float>" ); break; case FF_OPT_TYPE_STRING:
av_log( VAR_1, AV_LOG_INFO, "%-7s ", "<string>" ); break; case FF_OPT_TYPE_RATIONAL:
av_log( VAR_1, AV_LOG_INFO, "%-7s ", "<rational>" ); break; case FF_OPT_TYPE_CONST:
default:
av_log( VAR_1, AV_LOG_INFO, "%-7s ", "" ); break; } av_log(VAR_1, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_ENCODING_PARAM) ? 'E' : '.'); av_log(VAR_1, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_DECODING_PARAM) ? 'D' : '.'); av_log(VAR_1, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_VIDEO_PARAM   ) ? 'V' : '.'); av_log(VAR_1, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_AUDIO_PARAM   ) ? 'A' : '.'); av_log(VAR_1, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_SUBTITLE_PARAM) ? 'S' : '.'); if(opt->help)
av_log(VAR_1, AV_LOG_INFO, " %s", opt->help); av_log(VAR_1, AV_LOG_INFO, "\n"); if (opt->VAR_2 && opt->type != FF_OPT_TYPE_CONST) { FUNC_0(VAR_0, VAR_1, opt->VAR_2); } } }