cpp-ffmpeg 如何解决不推荐使用的警告?
cpp-ffmpeg how to resolve deprecated warning?
我正在使用 FFmpeg Lib,我收到警告,我的代码如下:
if ( avformat_find_stream_info( pFormatCtx, NULL ) < 0 ) {
std::cout << "Get Stream Information Error 13" << std::endl;
avformat_close_input( &pFormatCtx );
pFormatCtx = NULL;
return -13;
}
av_dump_format( pFormatCtx, 0, filenameSrc, 0 );
for ( unsigned int i = 0; i < pFormatCtx->nb_streams; i++ ) {
if (pFormatCtx->streams[i]->codec->coder_type == AVMEDIA_TYPE_VIDEO) {
video_stream_index = i;
break;
}
}
我在以下行遇到警告:pFormatCtx->streams[i]->codec->coder_type == AVMEDIA_TYPE_VIDEO
警告:AVCodecContext::coder_type’ is deprecated (declared at /usr/local/include/libavcodec/avcodec.h:2815) [-Wdeprecated-declarations]
我不明白这个警告是什么意思以及如何解决它。
任何人都可以帮助我!
感谢
正如您在警告消息中看到的以及在 ffmpeg docs 中看到的那样,直接使用 AVCodecContext::coder_type
已被弃用。
但是在文档中您可以看到您还可以做什么,改用编码器私有选项。
你在一些 AVCodec
的基础上创建你的 AVCodecContext
。然后你可以使用 AVCodec::type
。或者您可以像这样从 AVCodecContext
再次获取它:
AVCodec *codec = avcodec_find_encoder(codec_context->codec_id);
int coder_type = codec->type;
在您的情况下,您可以像这样更改代码:
for(unsigned int i = 0; i < pFormatCtx->nb_streams; i++)
{
if(avcodec_find_encoder(pFormatCtx->streams[i]->codec->codec_id)->type == AVMEDIA_TYPE_VIDEO)
{
video_stream_index = i;
break;
}
}
请禁用 Visual Studio 的 SDL 检查。
在项目/属性/C/C++/常规/SDL 检查中,
从 Yes(/sdl) 更改为 No(/sdl-).
这是在 Visual Studio 2017 年测试的。
尝试使用 codecpar
中的 codec_type
:
if (pFormatCtx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
video_stream_index = i;
我正在使用 FFmpeg Lib,我收到警告,我的代码如下:
if ( avformat_find_stream_info( pFormatCtx, NULL ) < 0 ) {
std::cout << "Get Stream Information Error 13" << std::endl;
avformat_close_input( &pFormatCtx );
pFormatCtx = NULL;
return -13;
}
av_dump_format( pFormatCtx, 0, filenameSrc, 0 );
for ( unsigned int i = 0; i < pFormatCtx->nb_streams; i++ ) {
if (pFormatCtx->streams[i]->codec->coder_type == AVMEDIA_TYPE_VIDEO) {
video_stream_index = i;
break;
}
}
我在以下行遇到警告:pFormatCtx->streams[i]->codec->coder_type == AVMEDIA_TYPE_VIDEO
警告:AVCodecContext::coder_type’ is deprecated (declared at /usr/local/include/libavcodec/avcodec.h:2815) [-Wdeprecated-declarations]
我不明白这个警告是什么意思以及如何解决它。
任何人都可以帮助我!
感谢
正如您在警告消息中看到的以及在 ffmpeg docs 中看到的那样,直接使用 AVCodecContext::coder_type
已被弃用。
但是在文档中您可以看到您还可以做什么,改用编码器私有选项。
你在一些 AVCodec
的基础上创建你的 AVCodecContext
。然后你可以使用 AVCodec::type
。或者您可以像这样从 AVCodecContext
再次获取它:
AVCodec *codec = avcodec_find_encoder(codec_context->codec_id);
int coder_type = codec->type;
在您的情况下,您可以像这样更改代码:
for(unsigned int i = 0; i < pFormatCtx->nb_streams; i++)
{
if(avcodec_find_encoder(pFormatCtx->streams[i]->codec->codec_id)->type == AVMEDIA_TYPE_VIDEO)
{
video_stream_index = i;
break;
}
}
请禁用 Visual Studio 的 SDL 检查。
在项目/属性/C/C++/常规/SDL 检查中, 从 Yes(/sdl) 更改为 No(/sdl-).
这是在 Visual Studio 2017 年测试的。
尝试使用 codecpar
中的 codec_type
:
if (pFormatCtx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
video_stream_index = i;