Skip to content
Snippets Groups Projects
Commit bedaeebc authored by Silas Della Contrada's avatar Silas Della Contrada
Browse files

Some VAAPI encoder cleanup

parent 0b75d27a
No related branches found
No related tags found
No related merge requests found
......@@ -235,6 +235,7 @@ namespace AVQt {
while (d->m_running.load()) {
if (!d->m_paused.load() && d->m_inputQueue.size() > 5) {
bool shouldBe = true;
// Encoder init is only possible with frame parameters
if (d->m_firstFrame.compare_exchange_strong(shouldBe, false)) {
auto frame = d->m_inputQueue.first().first;
......@@ -244,27 +245,6 @@ namespace AVQt {
}
d->m_pCodecCtx->width = frame->width;
d->m_pCodecCtx->height = frame->height;
// if (frame->hw_frames_ctx) {
// qDebug("Creating derived HW context...");
// d->m_pDeviceCtx = av_hwdevice_ctx_alloc(AV_HWDEVICE_TYPE_VAAPI);
// ret = av_hwdevice_ctx_create(&d->m_pDeviceCtx, AV_HWDEVICE_TYPE_VAAPI, "/dev/dri/renderD128", nullptr, 0);
// if (ret < 0) {
// qFatal("%i: Unable to create derived AVHWDeviceContext: %s", ret, av_make_error_string(strBuf, strBufSize, ret));
// } else if (!d->m_pDeviceCtx) {
// qFatal("Unable to create derived AVHWDeviceContext");
// }
//
// d->m_pCodecCtx->sw_pix_fmt = reinterpret_cast<AVHWFramesContext*>(frame->hw_frames_ctx->data)->sw_format;
// ret = av_hwframe_ctx_create_derived(&d->m_pFramesCtx, d->m_pCodecCtx->sw_pix_fmt, d->m_pDeviceCtx, frame->hw_frames_ctx, 0);
// if (ret < 0) {
// qFatal("%i: Unable to create derived AVHWFramesContext: %s", ret, av_make_error_string(strBuf, strBufSize, ret));
// } else if (!d->m_pDeviceCtx) {
// qFatal("Unable to create derived AVHWFramesContext");
// }
// d->m_pCodecCtx->pix_fmt = reinterpret_cast<AVHWFramesContext*>(d->m_pFramesCtx->data)->format;
// d->m_pCodecCtx->hw_device_ctx = av_buffer_ref(d->m_pDeviceCtx);
// d->m_pCodecCtx->hw_frames_ctx = av_buffer_ref(d->m_pFramesCtx);
// } else {
qDebug("Creating new HW context...");
ret = av_hwdevice_ctx_create(&d->m_pDeviceCtx, AV_HWDEVICE_TYPE_VAAPI, "/dev/dri/renderD128", nullptr, 0);
if (ret < 0) {
......@@ -296,24 +276,24 @@ namespace AVQt {
d->m_pCodecCtx->hw_device_ctx = av_buffer_ref(d->m_pDeviceCtx);
d->m_pCodecCtx->hw_frames_ctx = av_buffer_ref(d->m_pFramesCtx);
d->m_pCodecCtx->bit_rate = 50000000;
d->m_pCodecCtx->rc_min_rate = 30000000;
d->m_pCodecCtx->rc_max_rate = 50000000;
d->m_pCodecCtx->rc_buffer_size = 100000000;
d->m_pCodecCtx->bit_rate = 5000000;
d->m_pCodecCtx->rc_min_rate = 4500000;
d->m_pCodecCtx->rc_max_rate = 6000000;
d->m_pCodecCtx->rc_buffer_size = 10000000;
d->m_pCodecCtx->gop_size = 20;
d->m_pCodecCtx->color_primaries = AVCOL_PRI_BT2020;
d->m_pCodecCtx->color_trc = AVCOL_TRC_SMPTE2084;
d->m_pCodecCtx->colorspace = AVCOL_SPC_BT2020_NCL;
// }
// d->m_pCodecCtx->pix_fmt = AV_PIX_FMT_VAAPI;
d->m_pCodecCtx->time_base = av_make_q(1, 1000000); // Timestamps from frame sources are always microseconds
// Timestamps from frame sources are always microseconds, trying to use this timebase for the encoder too
d->m_pCodecCtx->time_base = av_make_q(1, 1000000);
ret = avcodec_open2(d->m_pCodecCtx, d->m_pCodec, nullptr);
if (ret < 0) {
qFatal("%i: Unable to open VAAPI encoder: %s", ret, av_make_error_string(strBuf, strBufSize, ret));
}
qDebug("[AVQt::EncoderVAAPI] Encoder timebase: %d/%d", d->m_pCodecCtx->time_base.num, d->m_pCodecCtx->time_base.den);
// Preallocating frame on gpu
d->m_pHWFrame = av_frame_alloc();
ret = av_hwframe_get_buffer(d->m_pFramesCtx, d->m_pHWFrame, 0);
if (ret != 0) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment