Hi.

The different devices ffmpeg supports have different options, I am
interested in the 'list_formats' of the decklink devices. Using the
ffmpeg.exe tool the following command:

    ffmpeg -f decklink -list_formats 1 -i 'Intensity Pro'

prints the formats that can be used with the device.

I want to recover this information from my program which uses the libav
libraries. My current solution looks like this.


std::string formatListing;

int main(int argc, char* argv[]) {
    av_log_set_level(AV_LOG_VERBOSE);
    av_log_set_callback(my_log_callback);

    AVInputFormat* inpF = av_find_input_format("decklink");
    AVFormatContext* ifmt_ctx = avformat_alloc_context();
    AVDictionary* options = NULL;
    av_dict_set(&options, "list_formats", "1", NULL);

    avformat_open_input(&ifmt_ctx, deviceName.c_str(), inpF, &options);

    ........... // Parse the string in formatListing.
}

void my_log_callback(void *ptr, int level, const char *fmt, va_list vl) {
    AVClass* avc = ptr ? *(AVClass **) ptr : NULL;
    std::string className = avc ? avc->item_name(ptr) : "";

    if (className == "decklink") {
        char buf[500];
        vsnprintf(buf, 500, fmt, vl);
        formatListing += buf;
    }

    if (avc != NULL)
        const char* aux = avc->item_name(ptr);

    av_log_default_callback(ptr, level, fmt, vl);
}


This code works fine, but I don't like it. Is there a more elegant solution
to this which doesn't involve a log callback?

Thanks.
_______________________________________________
Libav-user mailing list
Libav-user@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/libav-user

Reply via email to