Fix compile on xenial which doesn't have hwaccel

This commit is contained in:
Isaac Connor 2021-05-06 11:04:38 -04:00
parent b8f0d90000
commit 442f126193
2 changed files with 17 additions and 2 deletions

View File

@ -28,6 +28,7 @@ extern "C" {
} }
VideoStore::CodecData VideoStore::codec_data[] = { VideoStore::CodecData VideoStore::codec_data[] = {
#if HAVE_LIBAVUTIL_HWCONTEXT_H
{ AV_CODEC_ID_H265, "h265", "hevc_vaapi", AV_PIX_FMT_NV12, AV_PIX_FMT_VAAPI, AV_HWDEVICE_TYPE_VAAPI }, { AV_CODEC_ID_H265, "h265", "hevc_vaapi", AV_PIX_FMT_NV12, AV_PIX_FMT_VAAPI, AV_HWDEVICE_TYPE_VAAPI },
{ AV_CODEC_ID_H265, "h265", "hevc_nvenc", AV_PIX_FMT_NV12, AV_PIX_FMT_NV12, AV_HWDEVICE_TYPE_NONE }, { AV_CODEC_ID_H265, "h265", "hevc_nvenc", AV_PIX_FMT_NV12, AV_PIX_FMT_NV12, AV_HWDEVICE_TYPE_NONE },
{ AV_CODEC_ID_H265, "h265", "libx265", AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P, AV_HWDEVICE_TYPE_NONE }, { AV_CODEC_ID_H265, "h265", "libx265", AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P, AV_HWDEVICE_TYPE_NONE },
@ -38,6 +39,13 @@ VideoStore::CodecData VideoStore::codec_data[] = {
{ AV_CODEC_ID_H264, "h264", "h264", AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P, AV_HWDEVICE_TYPE_NONE }, { AV_CODEC_ID_H264, "h264", "h264", AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P, AV_HWDEVICE_TYPE_NONE },
{ AV_CODEC_ID_H264, "h264", "libx264", AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P, AV_HWDEVICE_TYPE_NONE }, { AV_CODEC_ID_H264, "h264", "libx264", AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P, AV_HWDEVICE_TYPE_NONE },
{ AV_CODEC_ID_MJPEG, "mjpeg", "mjpeg", AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ422P, AV_HWDEVICE_TYPE_NONE }, { AV_CODEC_ID_MJPEG, "mjpeg", "mjpeg", AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ422P, AV_HWDEVICE_TYPE_NONE },
#else
{ AV_CODEC_ID_H265, "h265", "libx265", AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P },
{ AV_CODEC_ID_H264, "h264", "h264", AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P },
{ AV_CODEC_ID_H264, "h264", "libx264", AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV420P },
{ AV_CODEC_ID_MJPEG, "mjpeg", "mjpeg", AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ422P },
#endif
}; };
VideoStore::VideoStore( VideoStore::VideoStore(
@ -228,11 +236,10 @@ bool VideoStore::open() {
* the motion of the chroma plane does not match the luma plane. */ * the motion of the chroma plane does not match the luma plane. */
video_out_ctx->mb_decision = 2; video_out_ctx->mb_decision = 2;
} }
#if HAVE_LIBAVUTIL_HWCONTEXT_H
if (codec_data[i].hwdevice_type != AV_HWDEVICE_TYPE_NONE) { if (codec_data[i].hwdevice_type != AV_HWDEVICE_TYPE_NONE) {
ret = av_hwdevice_ctx_create(&hw_device_ctx, ret = av_hwdevice_ctx_create(&hw_device_ctx,
codec_data[i].hwdevice_type, codec_data[i].hwdevice_type,
//AV_HWDEVICE_TYPE_VAAPI,
NULL, NULL, 0); NULL, NULL, 0);
AVBufferRef *hw_frames_ref; AVBufferRef *hw_frames_ref;
@ -260,6 +267,7 @@ bool VideoStore::open() {
} }
av_buffer_unref(&hw_frames_ref); av_buffer_unref(&hw_frames_ref);
} }
#endif
AVDictionary *opts = 0; AVDictionary *opts = 0;
std::string Options = monitor->GetEncoderOptions(); std::string Options = monitor->GetEncoderOptions();
@ -1045,6 +1053,7 @@ int VideoStore::writeVideoFramePacket(ZMPacket *zm_packet) {
AVFrame *frame = zm_packet->out_frame; AVFrame *frame = zm_packet->out_frame;
#if HAVE_LIBAVUTIL_HWCONTEXT_H
if (video_out_ctx->hw_frames_ctx) { if (video_out_ctx->hw_frames_ctx) {
if (!(hw_frame = av_frame_alloc())) { if (!(hw_frame = av_frame_alloc())) {
ret = AVERROR(ENOMEM); ret = AVERROR(ENOMEM);
@ -1068,6 +1077,7 @@ int VideoStore::writeVideoFramePacket(ZMPacket *zm_packet) {
frame = hw_frame; frame = hw_frame;
} // end if hwaccel } // end if hwaccel
#endif
//zm_packet->out_frame->coded_picture_number = frame_count; //zm_packet->out_frame->coded_picture_number = frame_count;
//zm_packet->out_frame->display_picture_number = frame_count; //zm_packet->out_frame->display_picture_number = frame_count;

View File

@ -15,6 +15,9 @@ extern "C" {
#endif #endif
#endif #endif
#include "libavutil/audio_fifo.h" #include "libavutil/audio_fifo.h"
#if HAVE_LIBAVUTIL_HWCONTEXT_H
#include "libavutil/hwcontext.h"
#endif
} }
#if HAVE_LIBAVCODEC #if HAVE_LIBAVCODEC
@ -32,7 +35,9 @@ class VideoStore {
const char *codec_name; const char *codec_name;
const enum AVPixelFormat sw_pix_fmt; const enum AVPixelFormat sw_pix_fmt;
const enum AVPixelFormat hw_pix_fmt; const enum AVPixelFormat hw_pix_fmt;
#if HAVE_LIBAVUTIL_HWCONTEXT_H
const AVHWDeviceType hwdevice_type; const AVHWDeviceType hwdevice_type;
#endif
}; };
static struct CodecData codec_data[]; static struct CodecData codec_data[];