Feature: Implement H.264 and AV1 hardware encoding for remote control
Remark: Need to update FFmpeg static libraries to take effort
This commit is contained in:
@@ -3,10 +3,11 @@
|
||||
#include <stdio.h>
|
||||
|
||||
#if DISABLE_X264_FOR_TEST
|
||||
CX264Encoder::CX264Encoder() { memset(&m_Param, 0, sizeof(m_Param)); m_pCodec = NULL; m_pPicIn = NULL; m_pPicOut = NULL; }
|
||||
CX264Encoder::CX264Encoder() { memset(&m_Param, 0, sizeof(m_Param)); m_pCodec = NULL; m_pPicIn = NULL; m_pPicOut = NULL; m_forceIDR = false; }
|
||||
CX264Encoder::~CX264Encoder() {}
|
||||
bool CX264Encoder::open(int, int, int, int) { return false; }
|
||||
bool CX264Encoder::open(x264_param_t*) { return false; }
|
||||
bool CX264Encoder::open(const EncoderParams&) { return false; }
|
||||
void CX264Encoder::close() {}
|
||||
int CX264Encoder::encode(uint8_t*, uint8_t, uint32_t, uint32_t, uint32_t, uint8_t**, uint32_t*, int) { return -1; }
|
||||
|
||||
@@ -25,6 +26,7 @@ CX264Encoder::CX264Encoder()
|
||||
m_pCodec = NULL;
|
||||
m_pPicIn = NULL;
|
||||
m_pPicOut = NULL;
|
||||
m_forceIDR = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -88,6 +90,14 @@ bool CX264Encoder::open(x264_param_t * param)
|
||||
}
|
||||
|
||||
|
||||
bool CX264Encoder::open(const EncoderParams& params)
|
||||
{
|
||||
// x264 软编只支持 CRF;调用方走 BITRATE 时降级为 CRF=23(与 BitRateToCRF 默认一致)
|
||||
int crf = (params.rc == RateControl::CRF) ? params.crf : 23;
|
||||
return open(params.width, params.height, params.fps, crf);
|
||||
}
|
||||
|
||||
|
||||
void CX264Encoder::close()
|
||||
{
|
||||
if (m_pCodec) {
|
||||
@@ -146,6 +156,12 @@ int CX264Encoder::encode(
|
||||
return -2;
|
||||
}
|
||||
|
||||
if (m_forceIDR) {
|
||||
m_pPicIn->i_type = X264_TYPE_IDR;
|
||||
m_forceIDR = false;
|
||||
} else {
|
||||
m_pPicIn->i_type = X264_TYPE_AUTO;
|
||||
}
|
||||
|
||||
encode_size = x264_encoder_encode(
|
||||
m_pCodec,
|
||||
|
||||
Reference in New Issue
Block a user