SHA256
Refactor FFmpegNativeEncoder
This commit is contained in:
1 file changed
+4
-4
@@ -310,7 +310,7 @@ namespace ADOFAIRenderer.Util.FFmpeg
|
|||||||
// FFmpeg이 내부적으로 NV12 ↔ QSV 서피스 간 매핑을 처리합니다.
|
// FFmpeg이 내부적으로 NV12 ↔ QSV 서피스 간 매핑을 처리합니다.
|
||||||
//
|
//
|
||||||
// 참고: https://ffmpeg.org/doxygen/trunk/pixfmt_8h.html
|
// 참고: 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"))
|
if (encoderName.Contains("qsv"))
|
||||||
{
|
{
|
||||||
selectedPixFmt = AVPixelFormat.AV_PIX_FMT_NV12;
|
selectedPixFmt = AVPixelFormat.AV_PIX_FMT_NV12;
|
||||||
@@ -404,7 +404,7 @@ namespace ADOFAIRenderer.Util.FFmpeg
|
|||||||
if (encoderName.Contains("qsv"))
|
if (encoderName.Contains("qsv"))
|
||||||
{
|
{
|
||||||
AVBufferRef* hwDeviceCtx = null;
|
AVBufferRef* hwDeviceCtx = null;
|
||||||
bool qsvReady = false;
|
var qsvReady = false;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
// ── 전략 1: child_device_type=d3d11va 옵션 ──
|
// ── 전략 1: child_device_type=d3d11va 옵션 ──
|
||||||
@@ -569,7 +569,7 @@ namespace ADOFAIRenderer.Util.FFmpeg
|
|||||||
// 성공하면 0 이상을 반환하고, 이후 avcodec_send_frame/avcodec_receive_packet으로
|
// 성공하면 0 이상을 반환하고, 이후 avcodec_send_frame/avcodec_receive_packet으로
|
||||||
// 프레임 인코딩이 가능해집니다.
|
// 프레임 인코딩이 가능해집니다.
|
||||||
// 참고: https://ffmpeg.org/doxygen/trunk/group__lavc__core.html
|
// 참고: 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)
|
if (openResult >= 0)
|
||||||
{
|
{
|
||||||
bool isHardware = encoderName.Contains("nvenc") || encoderName.Contains("amf") || encoderName.Contains("qsv");
|
bool isHardware = encoderName.Contains("nvenc") || encoderName.Contains("amf") || encoderName.Contains("qsv");
|
||||||
@@ -788,7 +788,7 @@ namespace ADOFAIRenderer.Util.FFmpeg
|
|||||||
{
|
{
|
||||||
if (_disposed || !_isInitialized) return;
|
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->data[0] = buffer + stride * (_settings.Height - 1); // 마지막 행의 시작 주소
|
||||||
_pSrcFrame->linesize[0] = -stride; // 음수 stride로 상하 반전
|
_pSrcFrame->linesize[0] = -stride; // 음수 stride로 상하 반전
|
||||||
_pSrcFrame->width = _settings.Width;
|
_pSrcFrame->width = _settings.Width;
|
||||||
|
|||||||
Reference in new issue
Block a user