1
การแปลงสีจาก DXGI_FORMAT_B8G8R8A8_UNORM เป็น NV12 ใน GPU โดยใช้ตัวแปลงพิกเซล DirectX11
ฉันกำลังทำงานกับโค้ดเพื่อจับภาพเดสก์ท็อปโดยใช้การทำสำเนาเดสก์ท็อปและเข้ารหัสเช่นเดียวกับ h264 โดยใช้ Intel hardwareMFT ตัวเข้ารหัสยอมรับเฉพาะรูปแบบ NV12 เป็นอินพุต ฉันมีตัวแปลง DXGI_FORMAT_B8G8R8A8_UNORM เป็น NV12 ( https://github.com/NVIDIA/video-sdk-samples/blob/master/nvEncDXGIOutputDuplicationSample/Preproc.cpp ) ที่ทำงานได้ดีและเป็นไปตาม DirectXcess ปัญหาคือ VideoProcessor บนฮาร์ดแวร์กราฟิก Intel บางรุ่นรองรับการแปลงจาก DXGI_FORMAT_B8G8R8A8_UNORM ถึง YUY2 เท่านั้น แต่ไม่ใช่ NV12 ฉันได้ยืนยันแบบเดียวกันโดยการระบุรูปแบบที่สนับสนุนผ่าน GetVideoProcessorOutputFormats แม้ว่า VideoProcessor Blt จะประสบความสำเร็จโดยไม่มีข้อผิดพลาดใด ๆ และฉันเห็นว่าเฟรมในวิดีโอที่ส่งออกเป็นพิกเซลเล็กน้อยฉันสามารถสังเกตได้ถ้าฉันมองมันอย่างใกล้ชิด ฉันเดาว่า VideoProcessor นั้นล้มเหลวไปที่ฟอร์แมตเอาท์พุตถัดไปที่รองรับ (YUY2) และฉันป้อนเข้าไปยังเครื่องเข้ารหัสโดยไม่รู้ตัวว่าคิดว่าอินพุตอยู่ใน NV12 ตามที่กำหนดค่าไว้ ไม่มีความล้มเหลวหรือความเสียหายที่สำคัญของเฟรมเนื่องจากข้อเท็จจริงที่ว่ามีความแตกต่างเพียงเล็กน้อยเช่นลำดับไบต์และการย่อยระหว่าง NV12 และ YUY2 นอกจากนี้ฉันไม่มีปัญหาเกี่ยวกับพิกเซลบนฮาร์ดแวร์ที่รองรับการแปลง NV12 ดังนั้นผมจึงตัดสินใจที่จะทำแปลงสีโดยใช้เฉดสีพิกเซลซึ่งจะขึ้นอยู่กับรหัสนี้ …