Refactor FFmpegNativeEncoder

This commit is contained in:
copecone committed 2026-06-09 01:19:30 +09:00
1 parent ade0a85a6d
commit 1f3d612b5f
1 file changed
+4 -4
+4 -4
View File
@@ -310,7 +310,7 @@ namespace ADOFAIRenderer.Util.FFmpeg
// FFmpeg이 내부적으로 NV12 ↔ QSV 서피스 간 매핑을 처리합니다.
//
// 참고: https://ffmpeg.org/doxygen/trunk/pixfmt_8h.html
AVPixelFormat selectedPixFmt = AVPixelFormat.AV_PIX_FMT_YUV420P;
var selectedPixFmt = AVPixelFormat.AV_PIX_FMT_YUV420P;
if (encoderName.Contains("qsv"))
{
selectedPixFmt = AVPixelFormat.AV_PIX_FMT_NV12;
@@ -404,7 +404,7 @@ namespace ADOFAIRenderer.Util.FFmpeg
if (encoderName.Contains("qsv"))
{
AVBufferRef* hwDeviceCtx = null;
bool qsvReady = false;
var qsvReady = false;
int err;
// ── 전략 1: child_device_type=d3d11va 옵션 ──
@@ -569,7 +569,7 @@ namespace ADOFAIRenderer.Util.FFmpeg
// 성공하면 0 이상을 반환하고, 이후 avcodec_send_frame/avcodec_receive_packet으로
// 프레임 인코딩이 가능해집니다.
// 참고: https://ffmpeg.org/doxygen/trunk/group__lavc__core.html
int openResult = ffmpeg.avcodec_open2(_pCodecContext, pCodec, null);
var openResult = ffmpeg.avcodec_open2(_pCodecContext, pCodec, null);
if (openResult >= 0)
{
bool isHardware = encoderName.Contains("nvenc") || encoderName.Contains("amf") || encoderName.Contains("qsv");
@@ -788,7 +788,7 @@ namespace ADOFAIRenderer.Util.FFmpeg
{
if (_disposed || !_isInitialized) return;
int stride = _settings.Width * 4; // RGBA = 4 bytes per pixel
var stride = _settings.Width * 4; // RGBA = 4 bytes per pixel
_pSrcFrame->data[0] = buffer + stride * (_settings.Height - 1); // 마지막 행의 시작 주소
_pSrcFrame->linesize[0] = -stride; // 음수 stride로 상하 반전
_pSrcFrame->width = _settings.Width;