์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
DirectX Video Accelaction

1. ๊ฐœ์š”2. ์ง€์› ์†Œํ”„ํŠธ์›จ์–ด

1. ๊ฐœ์š”[ํŽธ์ง‘]

DXVA๋Š” DirectX๋ฅผ ์ด์šฉ, CPU๋กœ ์†Œํ”„ํŠธ์›จ์–ด ๋””์ฝ”๋”ฉ์„ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ GPU๋ฅผ ์ด์šฉํ•œ ํ•˜๋“œ์›จ์–ด ๋””์ฝ”๋”ฉ์„ ํ•˜๋Š” ๋ฐฉ์‹์„ ๋œปํ•œ๋‹ค. ์ผ์ข…์˜ GPGPU.

DXVA์˜ ์žฅ์ ์œผ๋กœ๋Š” GPU๋ฅผ ๋””์ฝ”๋”ฉ์— ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— CPU ์ ์œ ์œจ์ด ๋งค์šฐ ๋‚ฎ์•„์ง€๋ฉฐ ๋˜ํ•œ ๋ Œ๋”๋ง ์†๋„๋„ ๋ฌด์ฒ™ ๋นจ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.

๋‹จ์ ์€ CPU๋งŒ์„ ์‚ฌ์šฉํ•˜๋Š” ๋‚ด์žฅ์ฝ”๋ฑ๊ณผ๋Š” ๋‹ฌ๋ฆฌ DXVA๋Š” VGA๋ฅผ ๊ฐ€์†์— ์ฐธ์—ฌ์‹œํ‚ค๋ฉฐ DXVA๋ฅผ ์ด์šฉํ•  ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์œผ๋กœ GPU์— ๋‚ด์žฅ๋œ ํ•˜๋“œ์›จ์–ด ๋””์ฝ”๋”๋ฅผ ํ†ตํ•ด ์žฌ์ƒํ•˜์ง€๋งŒ ํ•˜๋“œ์›จ์–ด ๋””์ฝ”๋”๊ฐ€ ์•„๋‹Œ, DXVA๋ฅผ ๋‹จ์ง€ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์“ธ ๋ฟ ์‹ค์ œ๋กœ๋Š” GPU๋ฅผ ํ†ตํ•ด์„œ ์—ฐ์‚ฐํ•˜๊ฑฐ๋‚˜ ๋‘˜์˜ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ฐฉ์‹์ธ ๊ฒฝ์šฐ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด์žฅ์ฝ”๋ฑ์„ ์ด์šฉํ•œ ๊ตฌ๋™๋ฐฉ์‹๋ณด๋‹ค ์ „๊ธฐ์†Œ๋ชจ๊ฐ€ ๋” ๋งŽ์„ ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ ํ˜ธํ™˜์„ฑ์ด ๋‚˜์œ ๊ฒฝ์šฐ๋„ ๋งŽ์•„์„œ, GPU๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด H.265 ๋“ฑ ์ •๋ง๋กœ ๋‚ด์žฅ์ฝ”๋ฑ์œผ๋กœ ๋Œ๋ฆฌ๊ธฐ์—” ์„ฑ๋Šฅ์ด ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

VGA์˜ ์ „์šฉ ๋™์˜์ƒ ๋””์ฝ”๋”ฉ์นฉ์„ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ˆœํžˆ ๊ทธ๋ž˜ํ”ฝ์นด๋“œ์˜ ์„ฑ๋Šฅ์ด ์ข‹๋‹ค๊ณ  DXVA์˜ ํšจ์œจ์ด ๋†’์•„์ง€๋Š”๊ฒƒ์€ ์•„๋‹ˆ๊ณ , ์˜คํžˆ๋ ค ์ƒ์œ„ ๊ทธ๋ž˜ํ”ฝ์นด๋“œ ์ œํ’ˆ๊ตฐ์ด ํ•˜์œ„ ๊ทธ๋ž˜ํ”ฝ์นด๋“œ ์ œํ’ˆ๊ตฐ์˜ ๋™์˜์ƒ ๊ฐ€์† ์„ฑ๋Šฅ์—์„œ ๋ฐ€๋ฆฌ๊ฑฐ๋‚˜ ์˜์ƒ ์žฌ์ƒ์‹œ ์ „์„ฑ๋น„๊ฐ€ ์ข‹์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ๊ฑฐ๊ธฐ์—๋‹ค ์ด๋Ÿฌํ•œ ํ•˜๋“œ์›จ์–ด ๋ฐฉ์‹์˜ ๋””์ฝ”๋”ฉ์€ ๋””์ฝ”๋”ฉ์— ์•ฝ๊ฐ„์€ ์—„๊ฒฉํ•œ ์ œํ•œ์ด ๋ถ™๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๋™์˜์ƒ์—์„œ์˜ ํ˜ธํ™˜์„ ์žฅ๋‹ดํ•  ์ˆ˜ ์—†์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์—์„œ๋Š” ๊ฐ€์ฐจ์—†์ด ์—๋Ÿฌ๋ฅผ ๋ฟœ์–ด๋‚ธ๋‹ค. DXVA๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค ์˜์ƒ์—์„œ ๋ฌ˜ํ•œ ๊น๋‘๊ธฐ ๊ฐ™์€ ๊ฒƒ์„ ๋ณด์•˜๋‹ค๋ฉด 100%. ๋”ฐ๋ผ์„œ CPU์˜ ๋Šฅ๋ ฅ์ด ๋ชจ์ž๋ž€ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด CPU๋งŒ์„ ์ด์šฉํ•  ๊ฒƒ์„ ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅํ•œ๋‹ค. ๋‹จ, AMD APU์˜ ๊ฒฝ์šฐ VCN์„ ์ง€์›ํ•˜์—ฌ ์ข‹์€ ํšจ๊ณผ๋ฅผ ๊ฑฐ๋‘˜ ์ˆ˜ ์žˆ๋‹ค.

๋˜, ๋น„๋””์˜ค ๋””์ฝ”๋” โ†’ ๋ Œ๋”๋Ÿฌ๋กœ ๋ฐ”๋กœ ์˜์ƒ์ด ์ฒ˜๋ฆฌ๋˜๋Š” ๋งŒํผ ๋ฐ๊ธฐ ์กฐ์ ˆ ๊ฐ™์€ ๊ธฐํƒ€ ์˜์ƒํšจ๊ณผ๋Š” ์ „ํ˜€ ์ฃผ์ง€ ๋ชปํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋‹จ์ ์ด๋‚˜ ์š”์ฆ˜์€ ํ•˜๋“œ์›จ์–ด ์ˆ˜์ค€์—์„œ ๋ชจ๋‘ ์ง€์›ํ•˜๊ณ , ๋™์˜์ƒ ํ”Œ๋ ˆ์ด์–ด๋„ ํ•˜๋“œ์›จ์–ด ์ปจํŠธ๋กค์„ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ์ ˆํ•˜๋Š” ๊ฒƒ์„ ์ง€์›ํ•œ๋‹ค.

VGA์— ๋”ฐ๋ผ ์ง€์›ํ•˜๋Š” ์ฝ”๋ฑ๊ณผ ์˜์—ญ์ด ๋‹ค๋ฅธ๋ฐ, ์ด๊ฑธ ๊ฐ„๋‹จํžˆ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” DXVA Checker๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋ฐ›์•„์„œ ์‹คํ–‰์‹œ์ผœ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ, ์•„๋ฌด ์žฌ์ƒ๊ธฐ์—์„œ ๋˜๋Š” ๊ฑด ์•„๋‹ˆ๊ณ  ํŠน์ • ํ”Œ๋ ˆ์ด์–ด์™€ ์ฝ”๋ฑ VGA๋ฅผ ๋ชจ๋‘ ๊ฐ€๋ฆฌ๋Š” ์ œํ•œ์ ์ธ ์กฐ๊ฑด์ด ํ•„์š”ํ•˜๋‹ค. H.262/WMV๊ฐ€ ์ฃผ์š” ์ง€์› ์ฝ”๋ฑ์ด๋ฉฐ, DXVA2์— ๋“ค์–ด์„œ H.264/VC1/AVC ๋“ฑ์˜ ์ง€์›์ด ์ถ”๊ฐ€๋˜์–ด ์ง€์›์ฝ”๋ฑ์˜ ๋ฒ”์œ„๋Š” ์ปค์กŒ์ง€๋งŒ ๊ทธ ์™ธ์— ์ œํ•œ ์กฐ๊ฑด์ด ๋” ์‹ฌํ•ด์ง€๋ฉฐ EVR ๋ Œ๋”๋Ÿฌ๋ฅผ ํ•„์ˆ˜๋กœ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค. ์›๋ž˜ Windows Vista๋ถ€ํ„ฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ–ˆ์œผ๋‚˜ ๋‚˜์ค‘์— Windows XP์—์„œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์ œ๊ณตํ•ด์คฌ๋‹ค. ๋‹จ, .Net Framework 3.0 ์ด์ƒ์˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋ณ„๋„๋กœ ์„ค์น˜ํ•ด์•ผํ•œ๋‹ค.

๋„ค์ดํ‹ฐ๋ธŒ์™€ copy-back๋ชจ๋“œ๊ฐ€ ์žˆ๋Š”๋ฐ ๋„ค์ดํ‹ฐ๋ธŒ๋Š” ์•ž์„œ ๋งํ•œ ๋ฐ๋กœ ๋น„๋””์˜ค ๋””์ฝ”๋”โ†’๋น„๋””์˜ค ๋ Œ๋”๋Ÿฌ๋กœ ๋ฐ”๋กœ ์—ฐ๊ฒฐ๋˜์ง€๋งŒ copy-back์€ ์ค‘๊ฐ„์— cpu๋ฅผ ํ•œ๋ฒˆ ๊ฑฐ์นœ๋‹ค. ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์€ ๋–จ์–ด์ง€์ง€๋งŒ ์žฌ์ƒํ•  GPU๋ฅผ ์„ ํƒ ๊ฐ€๋Šฅํ•˜๊ณ  ๋ Œ๋”๋Ÿฌ์— ์ƒ๊ด€์—†์ด ๋™์ž‘ํ•˜๋ฏ€๋กœ ํ˜ธํ™˜์„ฑ์ด ๋” ์ข‹๋‹ค.

DXVA๋Š” ์—ฌ๋Ÿฌ ์ˆ˜์ค€์˜ ๊ฐ€์†์ด ์žˆ์œผ๋ฉฐ ๊ฐ€์† ์ˆ˜์ค€๋ณ„ ํŠน์ง• ๋˜ํ•œ ๋‹ค๋ฅด๋‹ค.
  • Post Process - ์ง์—ญํ•˜๋ฉด ํ›„์ฒ˜๋ฆฌ์ด๋ฉฐ DXVA ์ค‘ ๊ฐ€์žฅ VGA ๊ฐ€์†์„ ๋œ ๋ฐ›๋Š”๋‹ค. CPU๊ฐ€ ์™„์ „ํžˆ ๋””์ฝ”๋”ฉํ•œ ๊ฒƒ์— ๋””์ธํ„ฐ๋ ˆ์ด์‹ฑ์ด๋‚˜, ๋ธ”๋Ÿญ ์ œ๊ฑฐ ๋“ฑ์˜ ์žกํ‹ฐ ์ œ๊ฑฐ๋งŒ ๋•๋Š” ์ˆ˜์ค€. ๋ฌผ๋ก  CPU ์ ์œ ์œจ์ด ๋†’๋‹ค.
  • Mocomp - Motion Compensation ์ง์—ญํ•˜๋ฉด ์›€์ง์ž„ ๋ณด์ƒ, ๊ทธ๋‚˜๋งˆ VGA๊ฐ€ ๋””์ฝ”๋”ฉ์„ ์กฐ๊ธˆ์”ฉ ๋‹ด๋‹นํ•˜๋Š” ๋‹จ๊ณ„, ๋™์˜์ƒ ์••์ถ•์›๋ฆฌ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์›€์ง์ด๋Š” ๋ฌผ์ฒด์˜ ์›€์ง์ž„๋งŒ ๊ธฐ๋กํ•˜๊ณ , ์›€์ง์ด์ง€ ์•Š๋Š” ๊ฒƒ์€ ์ƒ๋žตํ•˜๊ณ  ์ „์— ์žˆ๋˜ ์ •๋ณด๋กœ ๋Œ€์ฒดํ•˜๋Š”๋ฐ, ์ด๋•Œ VGA๊ฐ€ ์—ฐ์‚ฐ์„ ์•ฝ๊ฐ„ ๋„์™€์ฃผ๋Š” ์ •๋„. CPU ์ ์œ ์œจ์ด ๋–จ์–ด์ง€๋Š” ๊ฑด ๋ˆˆ์— ๋ณด์ด๊ธดํ•˜๋‚˜ ์ƒ๊ฐ๋ณด๋‹ค ๋†’์ง„ ์•Š์€ ์ƒํƒœ. ์—”๋น„๋””์•„ ๊ทธ๋ž˜ํ”ฝ์นด๋“œ์—์„œ๋Š” ์ง€ํฌ์Šค 256๋ถ€ํ„ฐ ์ฒ˜์Œ ์ง€์›ํ–ˆ์—ˆ๋Š”๋ฐ ์ง€ํฌ์Šค 2 ~ 4 Ti ์‹œ๋ฆฌ์ฆˆ ๋™์•ˆ ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ์ž ์‹œ ์‚ญ์ œ๋˜์—ˆ๋‹ค.
  • IDCT - Inverse Discrete Cosine Transform ์—ญ ์ด์‚ฐ ์ฝ”์‚ฌ์ธ ๋ณ€ํ™˜, ์ด ๋‹จ๊ณ„๋ถ€ํ„ฐ VGA๊ฐ€ ์ ๊ทน์ ์œผ๋กœ ๋””์ฝ”๋”ฉ์— ์ฐธ์—ฌํ•˜๊ณ , ํ˜„์žฌ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ์กด ํ”„๋กœ๊ทธ๋žจ๋“ค์ด IDCT ๊ฐ€์†์„ ์ด์šฉํ•˜๋ฉฐ CPU ์ ์œ ์œจ๋„ ์ƒ๋‹นํžˆ ๋‚ด๋ ค๊ฐ„๋‹ค. DXVA1์—์„œ ์ด์šฉ๊ฐ€๋Šฅํ•œ ์ตœ๊ณ  ์ˆ˜์ค€์˜ ๊ฐ€์†.
  • VLD - Variable Length Decoder๋ฉฐ ํ•ด์„ํ•˜๋ฉด ๊ฐ€๋ณ€์žฅ ๋ณตํ˜ธํ™”๊ฐ€ ๋œ๋‹ค. ์˜์ƒ์••์ถ•์ค‘ ์ƒ๋‹น๋ถ€๋ถ„์„ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋Š” ์—”ํŠธ๋กœํ”ผ ์ฝ”๋“œ๋ฅผ ๋””์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, ์‚ฌ์‹ค์ƒ ๋™์˜์ƒ ๋ณตํ˜ธ๊ณผ์ •์ค‘ ๊ฐ€์žฅ ๋งŽ์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ ์œ ํ•œ๋‹ค. ( ๋น„ํŠธ๋ ˆ์ดํŠธ๊ฐ€ ๋†’์œผ๋ฉด ๋†’์„์ˆ˜๋ก, ์—”ํŠธ๋กœํ”ผ ์ฝ”๋“œ์˜ ๋ณตํ˜ธํ™” ๋ถ€ํ•˜๋„ ํฌ๋‹ค. ๋”ฐ๋ผ์„œ ๋น„ํŠธ๋ ˆ์ดํŠธ๋Š” ์—”ํŠธ๋กœํ”ผ ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ์˜์ƒ์••์ถ•ํฌ๋งท์„ ๋””์ฝ”๋”ฉํ• ๋•Œ CPU์ ์œ ์œจ์„ ๊ฐ€๋Š ํ•˜๋Š” ์ฒ™๋„๊ฐ€ ๋œ๋‹ค ) ๋”ฐ๋ผ์„œ CPU๋ถ€ํ•˜๊ฐ€ ๋Œ€๋ถ€๋ถ„ ์ค„์–ด๋“ค๊ฒŒ ๋˜๋ฉฐ, MPEG-4 part2 ์™€ ๊ฐ™์ด ๊ฐ€๋ณ€์žฅ ๋ณตํ˜ธ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ํ”„๋กœ์„ธ์Šค๋“ค์˜ ์ ์œ ์œจ์ด ํฌ์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์‹ค์ƒ ์ด๋ฅผ ํ†ตํ•ด CPU์ ์œ ์œจ์„ 0%์— ๊ฐ€๊น๊ฒŒ ๋Œ์–ด๋‚ด๋ฆด์ˆ˜๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ H.264/AVC์ฒ˜๋Ÿผ In-loop ๋””๋ธ”๋Ÿญํ‚น ํ•„ํ„ฐ[1] ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํฌ๋งท์˜ ๊ฒฝ์šฐ๋Š” ์ œ์™ธ

2. ์ง€์› ์†Œํ”„ํŠธ์›จ์–ด[ํŽธ์ง‘]

[1] ์ด๋ฆ„์—์„œ ์•Œ์ˆ˜ ์žˆ๋“ฏ์ด ๋™์˜์ƒ์˜ ๋ณตํ˜ธ,๋ถ€ํ˜ธํ™” ๊ณผ์ •๋‚ด์—(In-loop) ์ˆ˜ํ–‰๋˜๋Š” ๋””๋ธ”๋Ÿญํ‚น ํ•„ํ„ฐ์ด๋‹ค. ๋™์˜์ƒ์„ ์ธ์ฝ”๋”ฉํ•˜๊ธฐ ์ „์— ์ „์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” Pre-process ๋””๋ธ”๋Ÿญํ‚น ํ•„ํ„ฐ๋‚˜, ๋™์˜์ƒ์„ ๋””์ฝ”๋”ฉํ•œ ํ›„์— ์ ์šฉ๋˜๋Š” post-process ๋””๋ธ”๋Ÿญํ‚น ํ•„ํ„ฐ์™€๋Š” ์—„์—ฐํžˆ ๊ตฌ๋ถ„๋œ๋‹ค. ๊ฑฐ๊ธฐ๋‹ค๊ฐ€ In-loop ๋””๋ธ”๋Ÿญํ‚น ํ•„ํ„ฐ์ž์ฒด๊ฐ€ ๋””์ฝ”๋”ฉ ๊ณผ์ •์ค‘ ํ•˜๋‚˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๋””์ฝ”๋”ฉํ• ๋•Œ๋„ ๋””๋ธ”๋Ÿญํ‚น ์—ฐ์‚ฐ์„ ํ•ด์•ผํ•˜๋ฉฐ ์ด์˜ ๋ถ€ํ•˜๊ฐ€ ์ƒ๊ฐ์™ธ๋กœ ํฌ๋‹ค. (์–ด๋А ์„œ์ ์— ๋”ฐ๋ฅด๋ฉด ์ „์ฒด CPU์ ์œ ์œจ์˜ ๋Œ€๋žต 30%์—์„œ ๋งŽ์œผ๋ฉด 50%๋ผ๊ณ  ํ•œ๋‹ค) ๋”ฐ๋ผ์„œ ์ €์‚ฌ์–‘ ์ปดํ“จํ„ฐ์— ๋ฌด๋ฆฌ๋ฅผ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ๋””์ฝ”๋”๋Š”(๋Œ€ํ‘œ์ ์œผ๋กœ CoreAVC) ์ด ๋””๋ธ”๋Ÿญํ‚น ์—ฐ์‚ฐ์„ ํ•ด์ œํ• ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ์‚ฌ์–‘์€ ๋งŽ์ด ๋‚ฎ์•„์ง€์ง€๋งŒ ์ตœํ›„์˜ ๋ณด๋ฃจ๋‹ค. ํ•ด์ œํ•˜๋ฉด ๋„ค๋ชจ๋‚œ ๋ธ”๋Ÿญ์ด ๋‚œ๋ฌดํ•˜๋Š” ๋”์ฐํ•œ ํ™”์งˆ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.