Merge pull request #3946 from comex/avi-warning-fix
Use newer ffmpeg APIs to avoid deprecation warnings.
This commit is contained in:
commit
64a4e6b729
|
@ -37,11 +37,10 @@ static AVStream* s_stream = nullptr;
|
||||||
static AVFrame* s_src_frame = nullptr;
|
static AVFrame* s_src_frame = nullptr;
|
||||||
static AVFrame* s_scaled_frame = nullptr;
|
static AVFrame* s_scaled_frame = nullptr;
|
||||||
static AVPixelFormat s_pix_fmt = AV_PIX_FMT_BGR24;
|
static AVPixelFormat s_pix_fmt = AV_PIX_FMT_BGR24;
|
||||||
static uint8_t* s_yuv_buffer = nullptr;
|
static int s_bytes_per_pixel;
|
||||||
static SwsContext* s_sws_context = nullptr;
|
static SwsContext* s_sws_context = nullptr;
|
||||||
static int s_width;
|
static int s_width;
|
||||||
static int s_height;
|
static int s_height;
|
||||||
static int s_size;
|
|
||||||
static u64 s_last_frame;
|
static u64 s_last_frame;
|
||||||
static bool s_start_dumping = false;
|
static bool s_start_dumping = false;
|
||||||
static u64 s_last_pts;
|
static u64 s_last_pts;
|
||||||
|
@ -63,9 +62,15 @@ static void InitAVCodec()
|
||||||
bool AVIDump::Start(int w, int h, DumpFormat format)
|
bool AVIDump::Start(int w, int h, DumpFormat format)
|
||||||
{
|
{
|
||||||
if (format == DumpFormat::FORMAT_BGR)
|
if (format == DumpFormat::FORMAT_BGR)
|
||||||
|
{
|
||||||
s_pix_fmt = AV_PIX_FMT_BGR24;
|
s_pix_fmt = AV_PIX_FMT_BGR24;
|
||||||
|
s_bytes_per_pixel = 3;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
s_pix_fmt = AV_PIX_FMT_RGBA;
|
s_pix_fmt = AV_PIX_FMT_RGBA;
|
||||||
|
s_bytes_per_pixel = 4;
|
||||||
|
}
|
||||||
|
|
||||||
s_current_format = format;
|
s_current_format = format;
|
||||||
|
|
||||||
|
@ -140,21 +145,26 @@ bool AVIDump::CreateFile()
|
||||||
s_src_frame = av_frame_alloc();
|
s_src_frame = av_frame_alloc();
|
||||||
s_scaled_frame = av_frame_alloc();
|
s_scaled_frame = av_frame_alloc();
|
||||||
|
|
||||||
s_size = avpicture_get_size(s_stream->codec->pix_fmt, s_width, s_height);
|
s_scaled_frame->format = s_stream->codec->pix_fmt;
|
||||||
|
s_scaled_frame->width = s_width;
|
||||||
|
s_scaled_frame->height = s_height;
|
||||||
|
|
||||||
s_yuv_buffer = new uint8_t[s_size];
|
#if LIBAVCODEC_VERSION_MAJOR >= 55
|
||||||
avpicture_fill((AVPicture*)s_scaled_frame, s_yuv_buffer, s_stream->codec->pix_fmt, s_width,
|
if (av_frame_get_buffer(s_scaled_frame, 1))
|
||||||
s_height);
|
return false;
|
||||||
|
#else
|
||||||
|
if (avcodec_default_get_buffer(s_stream->codec, s_scaled_frame))
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
|
||||||
NOTICE_LOG(VIDEO, "Opening file %s for dumping", s_format_context->filename);
|
NOTICE_LOG(VIDEO, "Opening file %s for dumping", s_format_context->filename);
|
||||||
if (avio_open(&s_format_context->pb, s_format_context->filename, AVIO_FLAG_WRITE) < 0)
|
if (avio_open(&s_format_context->pb, s_format_context->filename, AVIO_FLAG_WRITE) < 0 ||
|
||||||
|
avformat_write_header(s_format_context, nullptr))
|
||||||
{
|
{
|
||||||
WARN_LOG(VIDEO, "Could not open %s", s_format_context->filename);
|
WARN_LOG(VIDEO, "Could not open %s", s_format_context->filename);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
avformat_write_header(s_format_context, nullptr);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,7 +178,11 @@ static void PreparePacket(AVPacket* pkt)
|
||||||
void AVIDump::AddFrame(const u8* data, int width, int height)
|
void AVIDump::AddFrame(const u8* data, int width, int height)
|
||||||
{
|
{
|
||||||
CheckResolution(width, height);
|
CheckResolution(width, height);
|
||||||
avpicture_fill((AVPicture*)s_src_frame, const_cast<u8*>(data), s_pix_fmt, width, height);
|
s_src_frame->data[0] = const_cast<u8*>(data);
|
||||||
|
s_src_frame->linesize[0] = width * s_bytes_per_pixel;
|
||||||
|
s_src_frame->format = s_pix_fmt;
|
||||||
|
s_src_frame->width = s_width;
|
||||||
|
s_src_frame->height = s_height;
|
||||||
|
|
||||||
// Convert image from {BGR24, RGBA} to desired pixel format, and scale to initial
|
// Convert image from {BGR24, RGBA} to desired pixel format, and scale to initial
|
||||||
// width and height
|
// width and height
|
||||||
|
@ -180,10 +194,6 @@ void AVIDump::AddFrame(const u8* data, int width, int height)
|
||||||
s_scaled_frame->data, s_scaled_frame->linesize);
|
s_scaled_frame->data, s_scaled_frame->linesize);
|
||||||
}
|
}
|
||||||
|
|
||||||
s_scaled_frame->format = s_stream->codec->pix_fmt;
|
|
||||||
s_scaled_frame->width = s_width;
|
|
||||||
s_scaled_frame->height = s_height;
|
|
||||||
|
|
||||||
// Encode and write the image.
|
// Encode and write the image.
|
||||||
AVPacket pkt;
|
AVPacket pkt;
|
||||||
PreparePacket(&pkt);
|
PreparePacket(&pkt);
|
||||||
|
@ -253,15 +263,13 @@ void AVIDump::CloseFile()
|
||||||
if (s_stream)
|
if (s_stream)
|
||||||
{
|
{
|
||||||
if (s_stream->codec)
|
if (s_stream->codec)
|
||||||
|
{
|
||||||
|
#if LIBAVCODEC_VERSION_MAJOR < 55
|
||||||
|
avcodec_default_release_buffer(s_stream->codec, s_src_frame);
|
||||||
|
#endif
|
||||||
avcodec_close(s_stream->codec);
|
avcodec_close(s_stream->codec);
|
||||||
av_free(s_stream);
|
}
|
||||||
s_stream = nullptr;
|
av_freep(&s_stream);
|
||||||
}
|
|
||||||
|
|
||||||
if (s_yuv_buffer)
|
|
||||||
{
|
|
||||||
delete[] s_yuv_buffer;
|
|
||||||
s_yuv_buffer = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
av_frame_free(&s_src_frame);
|
av_frame_free(&s_src_frame);
|
||||||
|
@ -271,8 +279,7 @@ void AVIDump::CloseFile()
|
||||||
{
|
{
|
||||||
if (s_format_context->pb)
|
if (s_format_context->pb)
|
||||||
avio_close(s_format_context->pb);
|
avio_close(s_format_context->pb);
|
||||||
av_free(s_format_context);
|
av_freep(&s_format_context);
|
||||||
s_format_context = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s_sws_context)
|
if (s_sws_context)
|
||||||
|
|
Loading…
Reference in New Issue