| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #include <iostream> |
| | #include <iomanip> |
| | #include <dlib/media/ffmpeg_utils.h> |
| |
|
| | using namespace std; |
| | using namespace dlib; |
| |
|
| | int main() |
| | { |
| | |
| | const auto codecs = ffmpeg::list_codecs(); |
| | |
| | cout << "Supported codecs:\n"; |
| | for (const auto& codec : codecs) |
| | cout << " name : " << left << setw(20) << codec.codec_name << " id : " << codec.codec_id << " : encoding supported " << codec.supports_encoding << " decoding supported " << codec.supports_decoding << '\n'; |
| | cout << '\n'; |
| |
|
| | |
| | const auto demuxers = ffmpeg::list_demuxers(); |
| |
|
| | cout << "Supported demuxers:\n"; |
| | for (const auto& demuxer : demuxers) |
| | cout << " name : " << demuxer << '\n'; |
| | cout << '\n'; |
| | |
| | |
| | cout << "Supported muxers:\n"; |
| | for (const auto& muxer : ffmpeg::list_muxers()) |
| | { |
| | cout << " name : " << muxer.name << '\n'; |
| | if (!muxer.supported_codecs.empty()) |
| | { |
| | cout << " supported codecs:\n"; |
| | for (const auto& codec : muxer.supported_codecs) |
| | cout << " " << codec.codec_name << '\n'; |
| | } |
| | } |
| | cout << '\n'; |
| |
|
| | |
| | cout << "Supported input devices:\n"; |
| | for (const auto& device : ffmpeg::list_input_device_types()) |
| | { |
| | cout << " device type : `" << device.device_type << "` is audio " << device.is_audio_type << " is video " << device.is_video_type << '\n'; |
| |
|
| | const auto instances = ffmpeg::list_input_device_instances(device.device_type); |
| | if (!instances.empty()) |
| | { |
| | cout << " instances :\n"; |
| | for (const auto& instance : instances) |
| | cout << " name : " << left << setw(32) << instance.name << ", description : " << instance.description << '\n'; |
| | } |
| | } |
| |
|
| | cout << '\n'; |
| |
|
| | |
| | cout << "Supported output devices:\n"; |
| | for (const auto& device : ffmpeg::list_output_device_types()) |
| | { |
| | cout << " device type : `" << device.device_type << "` is audio " << device.is_audio_type << " is video " << device.is_video_type << '\n'; |
| |
|
| | const auto instances = ffmpeg::list_output_device_instances(device.device_type); |
| | if (!instances.empty()) |
| | { |
| | cout << " instances :\n"; |
| | for (const auto& instance : instances) |
| | cout << " name : " << left << setw(32) << instance.name << ", description : " << instance.description << '\n'; |
| | } |
| | } |
| |
|
| | cout << '\n'; |
| | |
| | const bool mp4_available = |
| | std::find_if(begin(demuxers), |
| | end(demuxers), |
| | [](const auto& demux) {return demux.find("mp4") != std::string::npos;}) != demuxers.end(); |
| |
|
| | const bool h264_available = |
| | std::find_if(begin(codecs), |
| | end(codecs), |
| | [](const auto& codec) {return codec.codec_name == "h264" && codec.supports_decoding;}) != codecs.end(); |
| |
|
| | cout << "Can read MP4 file with H264 encoded video stream? " << (mp4_available && h264_available) << '\n'; |
| |
|
| | return EXIT_SUCCESS; |
| | } |
| |
|