@@ -12,18 +12,28 @@ extern "C" {
1212
1313namespace ffmpeg {
1414
15- std::unordered_map <std::string, int > Recorder::getAvailableCodecs () {
16- std::unordered_map <std::string, int > map ;
15+ std::vector <std::string> Recorder::getAvailableCodecs () {
16+ std::vector <std::string> vec ;
1717
1818 void * iter = nullptr ;
1919 const AVCodec * codec;
2020
2121 while ((codec = av_codec_iterate (&iter))) {
22- if (codec->type == AVMEDIA_TYPE_VIDEO)
23- map. insert ({ codec->name , ( int )codec-> id } );
22+ if (codec->type == AVMEDIA_TYPE_VIDEO && avcodec_find_encoder_by_name (codec-> name ) != nullptr )
23+ vec. push_back ( codec->name );
2424 }
2525
26- return map;
26+ return vec;
27+ }
28+
29+ const AVCodec* getCodecByName (const std::string& name) {
30+ void * iter = nullptr ;
31+ const AVCodec * codec;
32+ while ((codec = av_codec_iterate (&iter))) {
33+ if (codec->type == AVMEDIA_TYPE_VIDEO && std::string (codec->name ) == name)
34+ return codec;
35+ }
36+ return nullptr ;
2737}
2838
2939bool Recorder::init (const RenderSettings& settings) {
@@ -33,7 +43,7 @@ bool Recorder::init(const RenderSettings& settings) {
3343 return false ;
3444 }
3545
36- m_codec = avcodec_find_encoder ((AVCodecID) settings.m_codecId );
46+ m_codec = getCodecByName ( settings.m_codec );
3747 if (!m_codec) {
3848 geode::log::error (" Could not find encoder." );
3949 return false ;
@@ -77,11 +87,11 @@ bool Recorder::init(const RenderSettings& settings) {
7787 }
7888
7989 if (m_codecContext->pix_fmt == AV_PIX_FMT_NONE) {
80- geode::log::info (" Codec {} does not support pixel format, defaulting to codec's format" , settings.m_codecId );
90+ geode::log::info (" Codec {} does not support pixel format, defaulting to codec's format" , settings.m_codec );
8191 m_codecContext->pix_fmt = m_codec->pix_fmts [0 ];
8292 }
8393 else
84- geode::log::info (" Codec {} supports pixel format." , settings.m_codecId );
94+ geode::log::info (" Codec {} supports pixel format." , settings.m_codec );
8595
8696 if (avcodec_open2 (m_codecContext, m_codec, NULL ) < 0 ) {
8797 geode::log::error (" Could not open codec." );
0 commit comments