Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

932 lines
63 KiB

  1. ;*************************************************************************
  2. ;** INTEL Corporation Proprietary Information
  3. ;**
  4. ;** This listing is supplied under the terms of a license
  5. ;** agreement with INTEL Corporation and may not be copied
  6. ;** nor disclosed except in accordance with the terms of
  7. ;** that agreement.
  8. ;**
  9. ;** Copyright (c) 1995 Intel Corporation.
  10. ;** All Rights Reserved.
  11. ;**
  12. ;*************************************************************************
  13. ;//
  14. ;// $Header: S:\h26x\src\dec\cx512242.asv
  15. ;//
  16. ;// $Log: S:\h26x\src\dec\cx512242.asv $
  17. ;//
  18. ;// Rev 1.8 20 Mar 1996 10:57:22 bnickers
  19. ;// Fix numerous bugs.
  20. ;//
  21. ;// Rev 1.7 19 Mar 1996 11:50:22 bnickers
  22. ;// Fix error regarding commitment of pages to stack.
  23. ;//
  24. ;// Rev 1.6 18 Mar 1996 09:58:36 bnickers
  25. ;// Make color convertors non-destructive.
  26. ;//
  27. ;// Rev 1.5 05 Feb 1996 13:35:36 BNICKERS
  28. ;// Fix RGB16 color flash problem, by allowing different RGB16 formats at oce.
  29. ;//
  30. ;// Rev 1.4 22 Dec 1995 15:42:18 KMILLS
  31. ;// added new copyright notice
  32. ;//
  33. ;// Rev 1.3 30 Oct 1995 17:15:32 BNICKERS
  34. ;// Fix color shift in RGB24 color convertors.
  35. ;//
  36. ;// Rev 1.2 26 Oct 1995 17:49:36 CZHU
  37. ;// Fix a whole bunch of bugs.
  38. ;//
  39. ;// Rev 1.1 26 Oct 1995 09:46:22 BNICKERS
  40. ;// Reduce the number of blanks in the "proc" statement because the assembler
  41. ;// sometimes has problems with statements longer than 512 characters long.
  42. ;//
  43. ;// Rev 1.0 25 Oct 1995 17:59:28 BNICKERS
  44. ;// Initial revision.
  45. ;//
  46. ;////////////////////////////////////////////////////////////////////////////
  47. ;
  48. ; +---------- Color convertor.
  49. ; |+--------- For both H261 and H263.
  50. ; ||+-------- Version for the Pentium(r) Microprocessor.
  51. ; |||++------ Convert from YUV12.
  52. ; |||||++---- Convert to RGB24.
  53. ; |||||||+--- Zoom by two.
  54. ; ||||||||
  55. ; cx512242 -- This function performs YUV12-to-RGB24 zoom-by-two color conversion
  56. ; for H26x. It is tuned for best performance on the Pentium(r)
  57. ; Microprocessor. It handles the format in which the low order
  58. ; byte is B, the second byte is G, and the high order byte is R.
  59. ;
  60. ; The YUV12 input is planar, 8 bits per pel. The Y plane may have
  61. ; a pitch of up to 768. It may have a width less than or equal
  62. ; to the pitch. It must be DWORD aligned, and preferably QWORD
  63. ; aligned. Pitch and Width must be a multiple of four. For best
  64. ; performance, Pitch should not be 4 more than a multiple of 32.
  65. ; Height may be any amount, but must be a multiple of two. The U
  66. ; and V planes may have a different pitch than the Y plane, subject
  67. ; to the same limitations.
  68. ;
  69. ; The color convertor is non-destructive; the input Y, U, and V
  70. ; planes will not be clobbered.
  71. OPTION PROLOGUE:None
  72. OPTION EPILOGUE:ReturnAndRelieveEpilogueMacro
  73. include locals.inc
  74. include ccinst.inc
  75. include decconst.inc
  76. .xlist
  77. include memmodel.inc
  78. .list
  79. .DATA
  80. ; any data would go here
  81. .CODE
  82. ASSUME cs : FLAT
  83. ASSUME ds : FLAT
  84. ASSUME es : FLAT
  85. ASSUME fs : FLAT
  86. ASSUME gs : FLAT
  87. ASSUME ss : FLAT
  88. ; void FAR ASM_CALLTYPE YUV12ToRGB24ZoomBy2 (U8 * YPlane,
  89. ; U8 * VPlane,
  90. ; U8 * UPlane,
  91. ; UN FrameWidth,
  92. ; UN FrameHeight,
  93. ; UN YPitch,
  94. ; UN VPitch,
  95. ; UN AspectAdjustmentCount,
  96. ; U8 FAR * ColorConvertedFrame,
  97. ; U32 DCIOffset,
  98. ; U32 CCOffsetToLine0,
  99. ; IN CCOPitch,
  100. ; IN CCType)
  101. ;
  102. ; CCOffsetToLine0 is relative to ColorConvertedFrame.
  103. ;
  104. PUBLIC YUV12ToRGB24ZoomBy2
  105. ; due to the need for the ebp reg, these parameter declarations aren't used,
  106. ; they are here so the assembler knows how many bytes to relieve from the stack
  107. IFDEF USE_BILINEAR_MSH26X
  108. YUV12ToRGB24ZoomBy2 proc DIST LANG AYPlane: DWORD,
  109. AVPlane: DWORD,
  110. AUPlane: DWORD,
  111. AFrameWidth: DWORD,
  112. AFrameHeight: DWORD,
  113. AYPitch: DWORD,
  114. AVPitch: DWORD,
  115. AAspectAdjustmentCnt: DWORD,
  116. AColorConvertedFrame: DWORD,
  117. ADCIOffset: DWORD,
  118. ACCOffsetToLine0: DWORD,
  119. ACCOPitch: DWORD,
  120. ACCType: DWORD
  121. LocalFrameSize = 64+768*8+32
  122. RegisterStorageSize = 16
  123. ; Arguments:
  124. YPlane_arg = RegisterStorageSize + 4
  125. VPlane_arg = RegisterStorageSize + 8
  126. UPlane_arg = RegisterStorageSize + 12
  127. FrameWidth_arg = RegisterStorageSize + 16
  128. FrameHeight = RegisterStorageSize + 20
  129. YPitch_arg = RegisterStorageSize + 24
  130. ChromaPitch_arg = RegisterStorageSize + 28
  131. AspectAdjustmentCount_arg = RegisterStorageSize + 32
  132. ColorConvertedFrame = RegisterStorageSize + 36
  133. DCIOffset = RegisterStorageSize + 40
  134. CCOffsetToLine0 = RegisterStorageSize + 44
  135. CCOPitch = RegisterStorageSize + 48
  136. CCType_arg = RegisterStorageSize + 52
  137. EndOfArgList = RegisterStorageSize + 56
  138. ; Locals (on local stack frame)
  139. CCOCursor EQU [esp+ 0]
  140. CCOSkipDistance EQU [esp+ 4]
  141. ChromaLineLen EQU [esp+ 8]
  142. YSkipDistance EQU [esp+12]
  143. YLimit EQU [esp+16]
  144. YCursor EQU [esp+20]
  145. VCursor EQU [esp+24]
  146. DistanceFromVToU EQU [esp+28]
  147. EndOfChromaLine EQU [esp+32]
  148. AspectCount EQU [esp+36]
  149. ChromaPitch EQU [esp+40]
  150. AspectAdjustmentCount EQU [esp+44]
  151. LineParity EQU [esp+48]
  152. LumaPitch EQU [esp+52]
  153. FrameWidth EQU [esp+56]
  154. StashESP EQU [esp+60]
  155. ChromaContribution EQU [esp+64]
  156. BaR0G0B0 EQU [esp+72]
  157. G1B1RaGa EQU [esp+76]
  158. RbGbBbR1 EQU [esp+80]
  159. BcR2G2B2 EQU [esp+84]
  160. G3B3RcGc EQU [esp+88]
  161. RdGdBdR3 EQU [esp+92]
  162. push esi
  163. push edi
  164. push ebp
  165. push ebx
  166. mov edi,esp
  167. sub esp,4096
  168. mov eax,[esp]
  169. sub esp,LocalFrameSize-4096
  170. and esp,0FFFFF000H
  171. mov eax,[esp]
  172. and esp,0FFFFE000H
  173. mov eax,[esp]
  174. sub esp,1000H
  175. mov eax,[esp]
  176. sub esp,1000H
  177. mov eax,[esp]
  178. add esp,2000H
  179. mov eax,[edi+YPitch_arg]
  180. mov ebx,[edi+ChromaPitch_arg]
  181. mov ecx,[edi+AspectAdjustmentCount_arg]
  182. mov edx,[edi+FrameWidth_arg]
  183. mov LumaPitch,eax
  184. mov ChromaPitch,ebx
  185. mov AspectAdjustmentCount,ecx
  186. mov AspectCount,ecx
  187. mov FrameWidth,edx
  188. mov ebx,[edi+VPlane_arg]
  189. mov ecx,[edi+UPlane_arg]
  190. mov eax,[edi+YPlane_arg]
  191. sub ecx,ebx
  192. mov DistanceFromVToU,ecx
  193. mov VCursor,ebx
  194. mov YCursor,eax
  195. mov eax,[edi+ColorConvertedFrame]
  196. add eax,[edi+DCIOffset]
  197. add eax,[edi+CCOffsetToLine0]
  198. mov CCOCursor,eax
  199. mov StashESP,edi
  200. mov edx,[edi+FrameHeight]
  201. mov ecx,LumaPitch
  202. imul edx,ecx
  203. mov ebx,FrameWidth
  204. mov eax,[edi+CCOPitch]
  205. sub ecx,ebx
  206. mov esi,YCursor ; Fetch cursor over luma plane.
  207. lea ebp,[ebx+ebx*4]
  208. add edx,esi
  209. add ebp,ebx
  210. mov YSkipDistance,ecx
  211. sub eax,ebp
  212. mov YLimit,edx
  213. shr ebx,1
  214. mov CCOSkipDistance,eax
  215. mov ChromaLineLen,ebx
  216. mov ecx,AspectAdjustmentCount
  217. mov esi,VCursor
  218. mov AspectCount,ecx
  219. ; Register Usage:
  220. ;
  221. ; edi -- Y Line cursor. Chroma contribs go in lines above current Y line.
  222. ; esi -- Chroma Line cursor.
  223. ; ebp -- Y Pitch
  224. ; edx -- Distance from V pel to U pel.
  225. ; ecx -- V contribution to RGB; sum of U and V contributions.
  226. ; ebx -- U contribution to RGB.
  227. ; eax -- Alternately a U and a V pel.
  228. PrepareChromaLine:
  229. mov edi,ChromaLineLen
  230. xor eax,eax
  231. mov edx,DistanceFromVToU
  232. mov al,[esi] ; Fetch V.
  233. add edi,esi ; Compute EOL address.
  234. xor ecx,ecx
  235. mov ebp,PD V24Contrib[eax*8] ; ebp[ 0: 7] -- Zero
  236. ; ; ebp[ 8:15] -- V contrib to G.
  237. ; ; ebp[16:23] -- V contrib to R.
  238. ; ; ebp[24:31] -- Zero.
  239. mov cl,[esi+edx] ; Fetch U.
  240. mov EndOfChromaLine,edi
  241. xor ebx,ebx ; Keep pairing happy.
  242. mov ebx,PD U24Contrib[ecx*8] ; ebx[ 0: 7] -- U contrib to B.
  243. ; ; ebx[ 8:15] -- U contrib to G.
  244. ; ; ebx[16:23] -- Zero.
  245. mov cl,[esi+edx+1] ; Fetch next U.
  246. lea edi,ChromaContribution
  247. add ebp,ebx ; Chroma contributions to RGB.
  248. NextChromaPel:
  249. mov ebx,PD U24Contrib[ecx*8] ; See above.
  250. mov al,[esi+1] ; Fetch V.
  251. mov [edi],ebp ; Store contribs to use for even chroma pel.
  252. mov cl,[esi+edx+2] ; Fetch next U.
  253. mov ebp,PD V24Contrib[eax*8] ; See above.
  254. add edi,32
  255. add ebp,ebx ; Chroma contributions to RGB.
  256. mov al,[esi+2] ; Fetch V.
  257. mov [edi-28],ebp ; Store contribs to use for odd chroma pel.
  258. mov ebx,PD U24Contrib[ecx*8] ; See above.
  259. mov ebp,PD V24Contrib[eax*8] ; See above.
  260. mov cl,[esi+edx+3] ; Fetch next U.
  261. add ebp,ebx ; Chroma contributions to RGB.
  262. add esi,2 ; Inc Chroma cursor.
  263. cmp esi,EndOfChromaLine
  264. jne NextChromaPel
  265. xor eax,eax
  266. mov esi,YCursor
  267. mov [edi+4],eax ; Store EOL indicator.
  268. mov LineParity,eax
  269. ; EAX EBX ECX EDX EBP
  270. mov edx,FrameWidth ; ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? >-- -- -- -- ?? ?? ?? ??
  271. add edx,YSkipDistance ; ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? >-- -- delta ?? ?? ?? ??
  272. DoLine1:
  273. xor ebx,ebx ; ?? ?? ?? ?? >-- -- -- -- ?? ?? ?? ?? -- -- delta ?? ?? ?? ??
  274. xor ecx,ecx ; ?? ?? ?? ?? -- -- -- -- >-- -- -- -- -- -- delta ?? ?? ?? ??
  275. mov ebp,ChromaContribution ; Fetch preprocessed chroma contribs. ?? ?? ?? ?? -- -- -- -- -- -- -- -- -- -- delta >AA AA AA AA
  276. mov cl,[esi] ; Fetch Y0. ?? ?? ?? ?? -- -- -- -- m>-- -- -- y0 -- -- delta AA AA AA AA
  277. mov bl,ChromaContribution+2 ; Fetch UV contrib to G value. ?? ?? ?? ?? m>-- -- -- uvG01 -- -- -- y0 -- -- delta AA AA AA AA
  278. and ebp,0000001FFH ; Extract V contrib to R. ?? ?? ?? ?? -- -- -- uvG01 -- -- -- y0 -- -- delta >-- -- -1 AA
  279. mov edi,CCOCursor ; ?? ?? ?? ?? -- -- -- uvG01 -- -- -- y0 -- -- delta -- -- -1 AA
  280. sub esp,6144 ; ?? ?? ?? ?? -- -- -- uvG01 -- -- -- y0 -- -- delta -- -- -1 AA
  281. ; Register Usage:
  282. ;
  283. ; esi -- Cursor over a line of the Y Plane.
  284. ; edi -- Cursor over the color conv output.
  285. ; ebp -- V contribution to R field of RGB value.
  286. ; edx -- UV contrib to G field; U contrib to B field of RGB value.
  287. ; ecx -- Y value (i.e. Y contribution to R, G, and B);
  288. ; ebx -- Construction of one and a third pels of RGB24.
  289. ; eax -- Construction of one and a third pels of RGB24.
  290. Next4YPelsLine0:
  291. ; EAX EBX ECX EDX EBP
  292. xor eax,eax ; >-- -- -- -- -- -- -- uvG01 -- -- -- y0 -- -- delta -- -- -1 AA
  293. mov al,[esi+1] ; Fetch Y1. m>-- -- -- y1 -- -- -- uvG01 -- -- -- y0 -- -- delta -- -- -1 vR01
  294. add eax,ecx ; Add Y0 to Y1. >-- -- -- y1+y0 -- -- -- uvG01 <-- -- -- y0 -- -- delta -- -- -1 vR01
  295. shl eax,23 ; Low bit will be nuked by R0. >ya -- -- -- -- -- -- uvG01 -- -- -- y0 -- -- delta -- -- -1 vR01
  296. mov ah,PB G24Value[ecx+ebx] ; Fetch Pel0 G. m>ya -- G0 -- <-- -- -- uvG01 <-- -- -- y0 -- -- delta -- -- -1 vR01
  297. mov bl,ChromaContribution+6144+3 ; Fetch U contrib to B value. ya -- G0 -- m>-- -- -- uB01 -- -- -- y0 -- -- delta -- -- -1 vR01
  298. mov al,PB B24Value[ecx+ebx*2] ; Fetch Pel0 B. m>ya -- G0 B0 <-- -- -- uB01 <-- -- -- y0 -- -- delta -- -- -1 vR01
  299. rol eax,16 ; >G0 B0 ya -- -- -- -- uB01 -- -- -- y0 -- -- delta -- -- -1 vR01
  300. mov al,PB R24Value[ecx+ebp*1] ; Fetch Pel0 R. m>G0 B0 ya R0 -- -- -- uB01 <-- -- -- y0 -- -- delta -- -- -1 vR01
  301. mov cl,ah ; <G0 B0 ya R0 -- -- -- uB01 >-- -- -- ya -- -- delta -- -- -1 vR01
  302. mov ah,PB B24Value[ecx+ebx*2] ; Fetch Pela B. m>G0 B0 Ba R0 <-- -- -- uB01 <-- -- -- ya -- -- delta -- -- -1 vR01
  303. ror eax,16 ; >Ba R0 G0 B0 -- -- -- uB01 -- -- -- ya -- -- delta -- -- -1 vR01
  304. mov Ze [edi],eax ; First output. m<Ba R0 G0 B0 -- -- -- uB01 -- -- -- ya -- -- delta -- -- -1 vR01
  305. mov bl,ChromaContribution+6144+2 ; Fetch UV contrib to G value. Ba R0 G0 B0 m>-- -- -- uvG01 -- -- -- ya -- -- delta -- -- -1 vR01
  306. mov al,PB G24Value[ecx+ebx] ; Fetch Pela G. m>Ba R0 G0 Ga <-- -- -- uvG01 <-- -- -- ya -- -- delta -- -- -1 vR01
  307. mov ah,PB R24Value[ecx+ebp*1] ; Fetch Pela R. m>Ba R0 Ra Ga -- -- -- uvG01 <-- -- -- ya -- -- delta -- -- -1 vR01
  308. mov cl,[esi+1] ; Fetch Y1. Ba R0 Ra Ga -- -- -- uvG01 m>-- -- -- y1 -- -- delta -- -- -1 vR01
  309. shl eax,16 ; >Ra Ga -- -- -- -- -- uvG01 -- -- -- y1 -- -- delta -- -- -1 vR01
  310. mov ah,PB G24Value[ecx+ebx] ; Fetch Pel1 G. m>Ra Ga G1 -- <-- -- -- uvG01 <-- -- -- y1 -- -- delta -- -- -1 vR01
  311. mov bl,ChromaContribution+6144+3 ; Fetch U contrib to B value. Ra Ga G1 -- m>-- -- -- uB01 -- -- -- y1 -- -- delta -- -- -1 vR01
  312. mov al,PB B24Value[ecx+ebx*2] ; Fetch Pel1 B. m>Ra Ga G1 B1 <-- -- -- uB01 <-- -- -- y1 -- -- delta -- -- -1 vR01
  313. ror eax,16 ; >G1 B1 Ra Ga -- -- -- uB01 -- -- -- y1 -- -- delta -- -- -1 vR01
  314. mov Ze [edi+4],eax ; Second output. m<G1 B1 Ra Ga -- -- -- uB01 -- -- -- y1 -- -- delta -- -- -1 vR01
  315. xor eax,eax ; >-- -- -- -- -- -- -- uB01 -- -- -- y1 -- -- delta -- -- -1 vR01
  316. mov al,[esi+2] ; Fetch Y2. m>-- -- -- y2 -- -- -- uB01 -- -- -- y1 -- -- delta -- -- -1 vR01
  317. add eax, ecx ; Add Y1 to Y2 >-- -- -- y2+y1 -- -- -- uB01 <-- -- -- y1 -- -- delta -- -- -1 vR01
  318. shl eax, 7 ; Low bit will be nuked by R1. >-- -- yb -- -- -- -- uB01 -- -- -- y1 -- -- delta -- -- -1 vR01
  319. mov al,PB R24Value[ecx+ebp*1] ; Fetch Pel1 R. m>-- -- yb R1 -- -- -- uB01 <-- -- -- y1 -- -- delta -- -- -1 vR01
  320. mov cl,ah ; <-- -- yb R1 -- -- -- uB01 >-- -- -- yb -- -- delta -- -- -1 vR01
  321. mov ah,PB B24Value[ecx+ebx*2] ; Fetch Pelb B. m>-- -- Bb R1 <-- -- -- uB01 <-- -- -- yb -- -- delta -- -- -1 vR01
  322. shl eax,16 ; >Bb R1 -- -- -- -- -- uB01 -- -- -- yb -- -- delta -- -- -1 vR01
  323. mov bl,ChromaContribution+6144+2 ; Fetch UV contrib to G value. Bb R1 -- -- m>-- -- -- uvG01 -- -- -- yb -- -- delta -- -- -1 vR01
  324. mov al,PB G24Value[ecx+ebx] ; Fetch Pelb G. m>Bb R1 -- Gb <-- -- -- uvG01 <-- -- -- yb -- -- delta -- -- -1 vR01
  325. mov ah,PB R24Value[ecx+ebp*1] ; Fetch Pelb R. m>Bb R1 Rb Gb -- -- -- uvG01 <-- -- -- yb -- -- delta -- -- -1 vR01
  326. ror eax,16 ; >Rb Gb Bb R1 -- -- -- uvG01 -- -- -- yb -- -- delta -- -- -1 vR01
  327. mov Ze [edi+8],eax ; Third output. m<Rb Gb Bb R1 -- -- -- uvG01 -- -- -- yb -- -- delta -- -- -1 vR01
  328. xor eax,eax ; >-- -- -- -- -- -- -- uvG01 -- -- -- yb -- -- delta -- -- -1 vR01
  329. mov cl,[esi] ; ReFetch Y0. -- -- -- -- -- -- -- uvG01 m>-- -- -- y0 -- -- delta -- -- -1 vR01
  330. mov al,[esi+edx+1] ; Fetch Y128. m>-- -- -- y128 -- -- -- uvG01 -- -- -- y0 -- -- delta -- -- -1 vR01
  331. add eax,ecx ; Add Y0 to Y128. m>-- -- -- y128+y0 -- -- -- uvG01 -- -- -- y0 -- -- delta -- -- -1 vR01
  332. shl eax, 16 ; >-- ++ -- -- -- -- -- uvG01 -- -- -- y0 -- -- delta -- -- -1 vR01
  333. mov al,[esi+edx] ; Fetch Y127. m>-- ++ -- y127 -- -- -- uvG01 -- -- -- y0 -- -- delta -- -- -1 vR01
  334. add eax,ecx ; Add Y0 to Y127 >-- ++ -- y127+y0 -- -- -- uvG01 <-- -- -- y0 -- -- delta -- -- -1 vR01
  335. shl eax,7 ; Normalize Y0 + Y127, and Y0 + Y128 >yt -- ys -- -- -- -- uvG01 -- -- -- y0 -- -- delta -- -- -1 vR01
  336. mov cl,ah ; <yt -- ys -- -- -- -- uvG01 >-- -- -- ys -- -- delta -- -- -1 vR01
  337. mov ah,PB G24Value[ecx+ebx] ; Fetch Pels G. m>yt -- Gs Bs <-- -- -- uvG01 <-- -- -- ys -- -- delta -- -- -1 vR01
  338. mov bl,ChromaContribution+6144+3 ; Fetch U contrib to B value. yt -- Gs Bs m>-- -- -- uB01 -- -- -- ys -- -- delta -- -- -1 vR01
  339. mov al,PB B24Value[ecx+ebx*2] ; Fetch Pels B. m>yt -- -- Bs <-- -- -- uB01 <-- -- -- ys -- -- delta -- -- -1 vR01
  340. rol eax,16 ; >Gs Bs yt -- -- -- -- uB01 -- -- -- ys -- -- delta -- -- -1 vR01
  341. mov al,PB R24Value[ecx+ebp*1] ; Fetch Pels R. m>Gs Bs yt Rs -- -- -- uB01 <-- -- -- ys -- -- delta -- -- -1 vR01
  342. mov cl,ah ; <Gs Bs yt Rs -- -- -- uB01 >-- -- -- yt -- -- delta -- -- -1 vR01
  343. mov ah,PB B24Value[ecx+ebx*2] ; Fetch Pelt B. m>Gs Bs Bt Rs <-- -- -- uB01 <-- -- -- yt -- -- delta -- -- -1 vR01
  344. ror eax,16 ; >Bt Rs Gs Bs -- -- -- uB01 -- -- -- yt -- -- delta -- -- -1 vR01
  345. mov BaR0G0B0+6144,eax ; Stash for saving to second line. s<Bt Rs Gs Bs -- -- -- uB01 -- -- -- yt -- -- delta -- -- -1 vR01
  346. mov bl,ChromaContribution+6144+2 ; Fetch UV contrib to G value. Bt Rs Gs Bs m>-- -- -- uvG01 -- -- -- yt -- -- delta -- -- -1 vR01
  347. mov al,PB G24Value[ecx+ebx] ; Fetch Pelt G. m>Bt Rs Gs Gt <-- -- -- uvG01 <-- -- -- yt -- -- delta -- -- -1 vR01
  348. mov ah,PB R24Value[ecx+ebp*1] ; Fetch Pelt R. m>Bt Rs Rt Gt -- -- -- uvG01 <-- -- -- yt -- -- delta -- -- -1 vR01
  349. mov cl,[esi+1] ; Fetch Y1. Bt Rs Rt Gt -- -- -- uvG01 m>-- -- -- y1 -- -- delta -- -- -1 vR01
  350. mov bl,[esi+edx+2] ; Fetch Y129. Bt Rs Rt Gt m>-- -- -- y129 -- -- -- y1 -- -- delta -- -- -1 vR01
  351. add ebx,ecx ; Add Y1 to Y129. Bt Rs Rt Gt >-- -- -- y129+y1 <-- -- -- y1 -- -- delta -- -- -1 vR01
  352. shl ebx, 16 ; Bt Rs Rt Gt >-- ++ -- -- -- -- -- y1 -- -- delta -- -- -1 vR01
  353. mov bl,[esi+edx+1] ; Fetch Y128. Bt Rs Rt Gt m>-- ++ -- y128 -- -- -- y1 -- -- delta -- -- -1 vR01
  354. add ebx,ecx ; Add Y1 to Y128 Bt Rs Rt Gt >-- ++ -- y128+y1 <-- -- -- y1 -- -- delta -- -- -1 vR01
  355. shl ebx,7 ; Normalize Y1 + Y128, and Y1 + Y129 Bt Rs Rt Gt >yv -- yu -- -- -- -- y1 -- -- delta -- -- -1 vR01
  356. mov cl,bh ; Bt Rs Rt Gt <yv -- yu -- >-- -- -- yu -- -- delta -- -- -1 vR01
  357. shr ebx,24 ; Bt Rs Rt Gt >-- -- -- yv -- -- -- yu -- -- delta -- -- -1 vR01
  358. shl eax,16 ; >Rt Gt -- -- -- -- -- yv -- -- -- yu -- -- delta -- -- -1 vR01
  359. mov ah,bl ; >Rt Gt yv -- <-- -- -- yv -- -- -- yu -- -- delta -- -- -1 vR01
  360. mov bl,ChromaContribution+6144+3 ; Fetch U contrib to B value. Rt Gt yv -- m>-- -- -- uB01 -- -- -- yu -- -- delta -- -- -1 vR01
  361. mov al,PB B24Value[ecx+ebx*2] ; Fetch Pelu B. m>Rt Gt yv Bu <-- -- -- uB01 <-- -- -- yu -- -- delta -- -- -1 vR01
  362. shl edx, 16 ; Make room to save yv Rt Gt yv Bu -- -- -- uB01 -- -- -- yu <delta -- -- -- -- -1 vR01
  363. mov dl,ah ; Rt Gt yv Bu -- -- -- uB01 -- -- -- yu >delta -- yv -- -- -1 vR01
  364. mov bl,ChromaContribution+6144+2 ; Fetch UV contrib to G value. Rt Gt yv Bu m>-- -- -- uvG01 -- -- -- yu delta -- yv -- -- -1 vR01
  365. mov ah,PB G24Value[ecx+ebx] ; Fetch Pelu G. m>Rt Gt Gu Bu <-- -- -- uvG01 <-- -- -- yu delta -- yv -- -- -1 vR01
  366. ror eax,16 ; >Gu Bu Rt Gt -- -- -- uvG01 -- -- -- yu delta -- yv -- -- -1 vR01
  367. mov G1B1RaGa+6144,eax ; Stash for saving to second line. s<Gu Bu Rt Gt -- -- -- uvG01 -- -- -- yu delta -- yv -- -- -1 vR01
  368. xor eax,eax ; >-- -- -- -- -- -- -- uvG01 -- -- -- yu delta -- yv -- -- -1 vR01
  369. mov al,PB R24Value[ecx+ebp*1] ; Fetch Pelu R. m>-- -- -- Ru -- -- -- uvG01 <-- -- -- yu delta -- yv <-- -- -1 vR01
  370. mov cl,dl ; -- -- -- Ru -- -- -- uvG01 >-- -- -- yv delta -- yv -- -- -1 vR01
  371. shr edx,16 ; Restore delta -- -- -- Ru -- -- -- uvG01 -- -- -- yv -- -- delta -- -- -1 vR01
  372. mov bl,ChromaContribution+6144+3 ; Fetch U contrib to B value. -- -- -- Ru m>-- -- -- uB01 -- -- -- yv -- -- delta -- -- -1 vR01
  373. mov ah,PB B24Value[ecx+ebx*2] ; Fetch Pelv B. m>-- -- Bv Ru <-- -- -- uB01 <-- -- -- yv -- -- delta -- -- -1 vR01
  374. shl eax,16 ; >Bv Ru -- -- -- -- -- uB01 -- -- -- yv -- -- delta -- -- -1 vR01
  375. mov bl,ChromaContribution+6144+2 ; Fetch UV contrib to G value. Bv Ru -- -- m>-- -- -- uvG01 -- -- -- yv -- -- delta -- -- -1 vR01
  376. mov al,PB G24Value[ecx+ebx] ; Fetch Pelv G. m>Bv Ru -- Gv <-- -- -- uvG01 <-- -- -- yv -- -- delta -- -- -1 vR01
  377. mov ah,PB R24Value[ecx+ebp*1] ; Fetch Pelv R. m>Bv Ru Rv Gv -- -- -- uvG01 <-- -- -- yv -- -- delta -- -- -1 vR01
  378. ror eax,16 ; >Rv Gv Bv Ru -- -- -- uvG01 -- -- -- yv -- -- delta -- -- -1 vR01
  379. mov RbGbBbR1+6144,eax ; Stash for saving to second line. s<Rv Gv Bv Ru -- -- -- uvG01 -- -- -- yv -- -- delta -- -- -1 vR01
  380. xor eax,eax ; >-- -- -- -- -- -- -- uB01 -- -- -- yv -- -- delta -- -- -1 vR01
  381. mov ebp,ChromaContribution+6144+4 ; Fetch preprocessed chroma contribs. -- -- -- -- -- -- -- uB01 -- -- -- yv -- -- delta m>BB BB BB BB
  382. mov cl,[esi+2] ; Fetch Y2. -- -- -- -- -- -- -- uB01 m>-- -- -- y2 -- -- delta BB BB BB BB
  383. and ebp,0000001FFH ; Extract V contrib to R. -- -- -- -- -- -- -- uB01 -- -- -- y2 -- -- delta >-- -- -1 vR23
  384. mov al,[esi+3] ; Fetch Y3. m>-- -- -- y3 -- -- -- uB01 -- -- -- y2 -- -- delta BB BB BB BB
  385. add eax, ecx ; Add Y2 to Y3 >-- -- -- y3+y2 -- -- -- uB01 <-- -- -- y2 -- -- delta -- -- -1 vR23
  386. mov bl,ChromaContribution+6144+7 ; Fetch U contrib to B value. -- -- -- -- m>-- -- -- uB23 -- -- -- y2 -- -- delta -- -- -1 vR23
  387. shl eax,23 ; Low bit will be nuked by R2. >yc -- -- -- -- -- -- uB23 -- -- -- y2 -- -- delta -- -- -1 vR23
  388. mov al,PB B24Value[ecx+ebx*2] ; Fetch Pel2 B. m>yc -- -- B2 <-- -- -- uB23 <-- -- -- y2 -- -- delta -- -- -1 vR23
  389. mov bl,ChromaContribution+6144+6 ; Fetch UV contrib to G value. yc -- -- B2 m>-- -- -- uvG23 <-- -- -- y2 -- -- delta -- -- -1 vR23
  390. mov ah,PB G24Value[ecx+ebx] ; Fetch Pel2 G. m>yc -- G2 B2 <-- -- -- uvG23 <-- -- -- y2 -- -- delta -- -- -1 vR23
  391. ror eax,16 ; >G2 B2 yc -- -- -- -- uvG23 -- -- -- y2 -- -- delta -- -- -1 vR23
  392. mov al,PB R24Value[ecx+ebp*1] ; Fetch Pel2 R. m>G2 B2 yc R2 -- -- -- uvG23 <-- -- -- y2 -- -- delta <-- -- -1 vR23
  393. mov cl, ah ; <G2 B2 yc R2 -- -- -- uvG23 >-- -- -- yc -- -- delta <-- -- -1 vR23
  394. mov bl,ChromaContribution+6144+7 ; Fetch U contrib to B value. G2 B2 yc R2 m>-- -- -- uB23 >-- -- -- yc -- -- delta <-- -- -1 vR23
  395. mov ah,PB B24Value[ecx+ebx*2] ; Fetch Pelc B. m>G2 B2 Bc R2 <-- -- -- uB23 <-- -- -- yc -- -- delta -- -- -1 vR23
  396. ror eax,16 ; >Bc R2 G2 B2 -- -- -- uB23 -- -- -- yc -- -- delta -- -- -1 vR23
  397. mov Ze [edi+12],eax ; Fourth output. m<Bc R2 G2 B2 -- -- -- uB23 -- -- -- yc -- -- delta -- -- -1 vR23
  398. mov ah,PB R24Value[ecx+ebp*1] ; Fetch Pelc R. m>Bc R2 Rc B2 -- -- -- uB23 <-- -- -- yc -- -- delta <-- -- -1 vR23
  399. mov bl,ChromaContribution+6144+6 ; Fetch UV contrib to G value. Bc R2 Rc B2 m>-- -- -- uvG23 -- -- -- yc -- -- delta -- -- -1 vR23
  400. mov al,PB G24Value[ecx+ebx] ; Fetch Pelc G. m>Bc R2 Rc Gc <-- -- -- uvG23 <-- -- -- yc -- -- delta -- -- -1 vR23
  401. mov cl,[esi+3] ; Fetch Y3. Bc R2 Rc Gc -- -- -- uvG23 m>-- -- -- y3 -- -- delta -- -- -1 vR23
  402. shl eax,16 ; >Rc Gc -- -- -- -- -- uvG23 -- -- -- y3 -- -- delta -- -- -1 vR23
  403. mov ah,PB G24Value[ecx+ebx] ; Fetch Pel3 G. m>Rc Gc G3 -- -- -- -- uvG23 <-- -- -- y3 -- -- delta -- -- -1 vR23
  404. mov bl,ChromaContribution+6144+7 ; Fetch U contrib to B value. Rc Gc G3 -- m>-- -- -- uB23 -- -- -- y3 -- -- delta -- -- -1 vR23
  405. mov al,PB B24Value[ecx+ebx*2] ; Fetch Pel3 B. m>Rc Gc G3 B3 <-- -- -- uB23 <-- -- -- y3 -- -- delta -- -- -1 vR23
  406. ror eax,16 ; >G3 B3 Rc Gc -- -- -- uB23 -- -- -- y3 -- -- delta -- -- -1 vR23
  407. mov Ze [edi+16],eax ; Fifth output. m<G3 B3 Rc Gc -- -- -- uB23 -- -- -- y3 -- -- delta -- -- -1 vR23
  408. xor eax,eax ; >-- -- -- -- -- -- -- uB23 -- -- -- y3 -- -- delta -- -- -1 vR23
  409. mov al,[esi+4] ; Fetch Y4. m>-- -- -- y4 -- -- -- uB23 -- -- -- y3 -- -- delta -- -- -1 vR23
  410. add eax,ecx ; Add Y3 to Y4. >-- -- -- y4+y3 -- -- -- uB23 -- -- -- y3 -- -- delta -- -- -1 vR23
  411. shl eax,7 ; Low bit will be nuked by R3. >-- -- yd -- -- -- -- uB23 -- -- -- y3 -- -- delta -- -- -1 vR23
  412. mov al,PB R24Value[ecx+ebp*1] ; Fetch Pel3 R. m>-- -- yd R3 -- -- -- uB23 <-- -- -- y3 -- -- delta <-- -- -1 vR23
  413. mov cl,ah ; <-- -- yd R3 -- -- -- uB23 >-- -- -- yd -- -- delta <-- -- -1 vR23
  414. mov ah,PB B24Value[ecx+ebx*2] ; Fetch Peld B. m>-- -- Bd R3 <-- -- -- uB23 <-- -- -- yd -- -- delta -- -- -1 vR23
  415. shl eax,16 ; >Bd R3 -- -- -- -- -- uB23 -- -- -- yd -- -- delta -- -- -1 vR23
  416. mov ah,PB R24Value[ecx+ebp*1] ; Fetch Peld R. m>Bd R3 Rd -- -- -- -- uB23 <-- -- -- yd -- -- delta <-- -- -1 vR23
  417. mov bl,ChromaContribution+6144+6 ; Fetch UV contrib to G value. Bd R3 Rd -- m>-- -- -- uvG23 <-- -- -- yd -- -- delta <-- -- -1 vR23
  418. mov al,PB G24Value[ecx+ebx] ; Fetch Peld G. m>Bd R3 Rd Gd <-- -- -- uvG23 <-- -- -- yd -- -- delta -- -- -1 vR23
  419. rol eax,16 ; >Rd Gd Bd R3 -- -- -- uvG23 -- -- -- yd -- -- delta -- -- -1 vR23
  420. mov Ze [edi+20],eax ; Sixth output. m<Rd Gd Bd R3 -- -- -- uvG23 -- -- -- yd -- -- delta -- -- -1 vR23
  421. xor eax,eax ; >-- -- -- -- -- -- -- uvG23 -- -- -- yd -- -- delta -- -- -1 vR23
  422. mov cl,[esi+2] ; ReFetch Y2. -- -- -- -- -- -- -- uvG23 m>-- -- -- y2 -- -- delta -- -- -1 vR23
  423. mov al,[esi+edx+3] ; Fetch Y130. m>-- -- -- y130 -- -- -- uvG23 -- -- -- y2 -- -- delta -- -- -1 vR23
  424. add eax,ecx ; Add Y2 to Y130. m>-- -- -- y130+y2 -- -- -- uvG23 -- -- -- y2 -- -- delta -- -- -1 vR23
  425. shl eax, 16 ; >-- ++ -- -- -- -- -- uvG23 -- -- -- y2 -- -- delta -- -- -1 vR23
  426. mov al,[esi+edx+2] ; Fetch Y129. m>-- ++ -- y129 -- -- -- uvG23 -- -- -- y2 -- -- delta -- -- -1 vR23
  427. add eax,ecx ; Add Y2 to Y129 >-- ++ -- y129+y2 -- -- -- uvG23 <-- -- -- y2 -- -- delta -- -- -1 vR23
  428. shl eax,7 ; Normalize Y2 + Y129, and Y2 + Y130 >yx -- yw -- -- -- -- uvG23 -- -- -- y2 -- -- delta -- -- -1 vR23
  429. mov cl,ah ; <yx -- yw -- -- -- -- uvG23 >-- -- -- yw -- -- delta -- -- -1 vR23
  430. mov ah,PB G24Value[ecx+ebx] ; Fetch Pelw G. m>yx -- Gw Bw <-- -- -- uvG23 <-- -- -- yw -- -- delta -- -- -1 vR23
  431. mov bl,ChromaContribution+6144+7 ; Fetch U contrib to B value. yx -- Gw Bw m>-- -- -- uB23 -- -- -- yw -- -- delta -- -- -1 vR23
  432. mov al,PB B24Value[ecx+ebx*2] ; Fetch Pelw B. m>yx -- -- Bw <-- -- -- uB23 <-- -- -- yw -- -- delta -- -- -1 vR23
  433. rol eax,16 ; >Gw Bw yx -- -- -- -- uB23 -- -- -- yw -- -- delta -- -- -1 vR23
  434. mov al,PB R24Value[ecx+ebp*1] ; Fetch Pelw R. m>Gw Bw yx Rw -- -- -- uB23 <-- -- -- yw -- -- delta -- -- -1 vR23
  435. mov cl,ah ; <Gw Bw yx Rw -- -- -- uB23 >-- -- -- yx -- -- delta -- -- -1 vR23
  436. mov ah,PB B24Value[ecx+ebx*2] ; Fetch Pelx B. m>Gw Bw Bx Rw <-- -- -- uB23 <-- -- -- yx -- -- delta -- -- -1 vR23
  437. ror eax,16 ; >Bx Rw Gw Bw -- -- -- uB23 -- -- -- yx -- -- delta -- -- -1 vR23
  438. mov BcR2G2B2+6144,eax ; Stash for saving to second line. s<Bx Rw Gw Bw -- -- -- uB23 -- -- -- yx -- -- delta -- -- -1 vR23
  439. mov bl,ChromaContribution+6144+6 ; Fetch UV contrib to G value. Bx Rw Gw Bw m>-- -- -- uvG23 -- -- -- yx -- -- delta -- -- -1 vR23
  440. mov al,PB G24Value[ecx+ebx] ; Fetch Pelx G. m>Bx Rw Gw Gx <-- -- -- uvG23 <-- -- -- yx -- -- delta -- -- -1 vR23
  441. mov ah,PB R24Value[ecx+ebp*1] ; Fetch Pelx R. m>Bx Rw Rx Gx -- -- -- uvG23 <-- -- -- yx -- -- delta -- -- -1 vR23
  442. mov cl,[esi+3] ; Fetch Y3. Bx Rw Rx Gx -- -- -- uvG23 m>-- -- -- y3 -- -- delta -- -- -1 vR23
  443. mov bl,[esi+edx+4] ; Fetch Y131. Bx Rw Rx Gx m>-- -- -- y131 -- -- -- y3 -- -- delta -- -- -1 vR23
  444. add ebx,ecx ; Add Y3 to Y131. Bx Rw Rx Gx >-- -- -- y131+y3 <-- -- -- y3 -- -- delta -- -- -1 vR23
  445. shl ebx, 16 ; Bx Rw Rx Gx >-- ++ -- -- -- -- -- y3 -- -- delta -- -- -1 vR23
  446. mov bl,[esi+edx+3] ; Fetch Y130. Bx Rw Rx Gx m>-- ++ -- y130 -- -- -- y3 -- -- delta -- -- -1 vR23
  447. add ebx,ecx ; Add Y3 to Y130 Bx Rw Rx Gx >-- ++ -- y130+y3 <-- -- -- y3 -- -- delta -- -- -1 vR23
  448. shl ebx,7 ; Normalize Y3 + Y130, and Y3 + Y131 Bx Rw Rx Gx >yz -- yy -- -- -- -- y3 -- -- delta -- -- -1 vR23
  449. mov cl,bh ; Bx Rw Rx Gx <yz -- yy -- >-- -- -- yy -- -- delta -- -- -1 vR23
  450. shr ebx,24 ; Bx Rw Rx Gx >-- -- -- yz -- -- -- yy -- -- delta -- -- -1 vR23
  451. shl eax,16 ; >Rx Gx -- -- -- -- -- yz -- -- -- yy -- -- delta -- -- -1 vR23
  452. mov ah,bl ; >Rx Gx yz -- <-- -- -- yz -- -- -- yy -- -- delta -- -- -1 vR23
  453. mov bl,ChromaContribution+6144+7 ; Fetch U contrib to B value. Rx Gx yz -- m>-- -- -- uB23 -- -- -- yy -- -- delta -- -- -1 vR23
  454. mov al,PB B24Value[ecx+ebx*2] ; Fetch Pely B. m>Rx Gx yz By <-- -- -- uB23 <-- -- -- yy -- -- delta -- -- -1 vR23
  455. shl edx, 16 ; Make room to save yz Rx Gx yz By -- -- -- uB23 -- -- -- yy <delta -- -- -- -- -1 vR23
  456. mov dl,ah ; Rx Gx yz By -- -- -- uB23 -- -- -- yy >delta -- yz -- -- -1 vR23
  457. mov bl,ChromaContribution+6144+6 ; Fetch UV contrib to G value. Rx Gx yz By m>-- -- -- uvG23 -- -- -- yy delta -- yz -- -- -1 vR23
  458. mov ah,PB G24Value[ecx+ebx] ; Fetch Pely G. m>Rx Gx Gy By <-- -- -- uvG23 <-- -- -- yy delta -- yz -- -- -1 vR23
  459. ror eax,16 ; >Gy By Rx Gx -- -- -- uvG23 -- -- -- yy delta -- yz -- -- -1 vR23
  460. mov G3B3RcGc+6144,eax ; Stash for saving xo second line. s<Gy By Rx Gx -- -- -- uvG23 -- -- -- yy delta -- yz -- -- -1 vR23
  461. xor eax,eax ; >-- -- -- -- -- -- -- uvG23 -- -- -- yy delta -- yz -- -- -1 vR23
  462. mov al,PB R24Value[ecx+ebp*1] ; Fetch Pely R. m>-- -- -- Ry -- -- -- uvG23 <-- -- -- yy delta -- yz <-- -- -1 vR23
  463. mov cl,dl ; -- -- -- Ry -- -- -- uvG23 >-- -- -- yz delta -- yz -- -- -1 vR23
  464. shr edx,16 ; Restore delta -- -- -- Ry -- -- -- uvG23 -- -- -- yz -- -- delta -- -- -1 vR23
  465. mov bl,ChromaContribution+6144+7 ; Fetch U contrib to B value. -- -- -- Ry m>-- -- -- uB23 -- -- -- yz -- -- delta -- -- -1 vR23
  466. mov ah,PB B24Value[ecx+ebx*2] ; Fetch Pelz B. m>-- -- Bz Ry <-- -- -- uB23 <-- -- -- yz -- -- delta -- -- -1 vR23
  467. shl eax,16 ; >Bz Ry -- -- -- -- -- uB23 -- -- -- yz -- -- delta -- -- -1 vR23
  468. mov bl,ChromaContribution+6144+6 ; Fetch UV contrib to G value. Bz Ry -- -- m>-- -- -- uvG23 -- -- -- yz -- -- delta -- -- -1 vR23
  469. mov al,PB G24Value[ecx+ebx] ; Fetch Pelz G. m>Bz Ry -- Gz <-- -- -- uvG23 <-- -- -- yz -- -- delta -- -- -1 vR23
  470. mov ah,PB R24Value[ecx+ebp*1] ; Fetch Pelz R. m>Bz Ry Rz Gz -- -- -- uvG23 <-- -- -- yz -- -- delta -- -- -1 vR23
  471. ror eax,16 ; >Rz Gz Bz Ry -- -- -- uvG23 -- -- -- yz -- -- delta -- -- -1 vR23
  472. mov RdGdBdR3+6144,eax ; Stash for saving to second line. s<Rz Gz Bz Ry -- -- -- uvG23 -- -- -- yz -- -- delta -- -- -1 vR23
  473. mov ebp,ChromaContribution+6144+32; Fetch preprocessed chroma contribs. Rz Gz Bz Ry -- -- -- uvG23 -- -- -- yz -- -- delta m>CC CC CC CC
  474. mov bl,ChromaContribution+6144+34 ; Fetch UV contrib to G value. Rz Gz Bz Ry m>-- -- -- uvG45 -- -- -- yz -- -- delta CC CC CC CC
  475. and ebp,0000001FFH ; Extract U contrib to B. Rz Gz Bz Ry -- -- -- uvG45 -- -- -- yz -- -- delta >-- -- -1 vR45
  476. mov cl,[esi+4] ; Fetch Y4. Rz Gz Bz Ry -- -- -- uvG45 m>-- -- -- y4 -- -- delta -- -- -1 vR45
  477. lea esi,[esi+4] ; Advance input cursor.
  478. lea esp,[esp+32]
  479. lea edi,[edi+24] ; Advance output cursor.
  480. jne Next4YPelsLine0
  481. and esp,0FFFFE000H
  482. add esp,02000H
  483. mov ebx,CCOSkipDistance
  484. mov ebp,AspectCount
  485. add edi,ebx
  486. sub ebp,2 ; If count is non-zero, we keep the line.
  487. mov AspectCount,ebp
  488. lea ecx,BaR0G0B0
  489. mov eax,FrameWidth
  490. jg Keep2ndLineOfLine0
  491. add ebp,AspectAdjustmentCount
  492. mov AspectCount,ebp
  493. jmp Skip2ndLineOfLine0
  494. Keep2ndLineOfLine0:
  495. Keep2ndLineOfLine0_Loop:
  496. mov ebp,[ecx]
  497. sub eax,4
  498. mov Ze PD [edi],ebp
  499. mov ebp,[ecx+4]
  500. mov Ze PD [edi+4],ebp
  501. mov ebp,[ecx+8]
  502. mov Ze PD [edi+8],ebp
  503. mov ebp,[ecx+12]
  504. mov Ze PD [edi+12],ebp
  505. mov ebp,[ecx+16]
  506. mov Ze PD [edi+16],ebp
  507. mov ebp,[ecx+20]
  508. mov Ze PD [edi+20],ebp
  509. lea ecx,[ecx+32]
  510. lea edi,[edi+24]
  511. jne Keep2ndLineOfLine0_Loop
  512. add edi,ebx
  513. Skip2ndLineOfLine0:
  514. mov bl,LineParity
  515. add esi,YSkipDistance
  516. xor bl,1
  517. mov CCOCursor,edi
  518. mov YCursor,esi
  519. mov LineParity,bl
  520. jne DoLine1
  521. mov eax,esi
  522. mov esi,VCursor ; Inc VPlane cursor to next line.
  523. mov ebp,ChromaPitch
  524. mov ebx,YLimit ; Done with last line?
  525. add esi,ebp
  526. cmp eax,ebx
  527. mov VCursor,esi
  528. jb PrepareChromaLine
  529. Done:
  530. mov esp,StashESP
  531. pop ebx
  532. pop ebp
  533. pop edi
  534. pop esi
  535. rturn
  536. YUV12ToRGB24ZoomBy2 endp
  537. ELSE
  538. YUV12ToRGB24ZoomBy2 proc DIST LANG AYPlane: DWORD,
  539. AVPlane: DWORD,
  540. AUPlane: DWORD,
  541. AFrameWidth: DWORD,
  542. AFrameHeight: DWORD,
  543. AYPitch: DWORD,
  544. AVPitch: DWORD,
  545. AAspectAdjustmentCnt: DWORD,
  546. AColorConvertedFrame: DWORD,
  547. ADCIOffset: DWORD,
  548. ACCOffsetToLine0: DWORD,
  549. ACCOPitch: DWORD,
  550. ACCType: DWORD
  551. LocalFrameSize = 64+768*8+32
  552. RegisterStorageSize = 16
  553. ; Arguments:
  554. YPlane_arg = RegisterStorageSize + 4
  555. VPlane_arg = RegisterStorageSize + 8
  556. UPlane_arg = RegisterStorageSize + 12
  557. FrameWidth_arg = RegisterStorageSize + 16
  558. FrameHeight = RegisterStorageSize + 20
  559. YPitch_arg = RegisterStorageSize + 24
  560. ChromaPitch_arg = RegisterStorageSize + 28
  561. AspectAdjustmentCount_arg = RegisterStorageSize + 32
  562. ColorConvertedFrame = RegisterStorageSize + 36
  563. DCIOffset = RegisterStorageSize + 40
  564. CCOffsetToLine0 = RegisterStorageSize + 44
  565. CCOPitch = RegisterStorageSize + 48
  566. CCType_arg = RegisterStorageSize + 52
  567. EndOfArgList = RegisterStorageSize + 56
  568. ; Locals (on local stack frame)
  569. CCOCursor EQU [esp+ 0]
  570. CCOSkipDistance EQU [esp+ 4]
  571. ChromaLineLen EQU [esp+ 8]
  572. YSkipDistance EQU [esp+12]
  573. YLimit EQU [esp+16]
  574. YCursor EQU [esp+20]
  575. VCursor EQU [esp+24]
  576. DistanceFromVToU EQU [esp+28]
  577. EndOfChromaLine EQU [esp+32]
  578. AspectCount EQU [esp+36]
  579. ChromaPitch EQU [esp+40]
  580. AspectAdjustmentCount EQU [esp+44]
  581. LineParity EQU [esp+48]
  582. LumaPitch EQU [esp+52]
  583. FrameWidth EQU [esp+56]
  584. StashESP EQU [esp+60]
  585. ChromaContribution EQU [esp+64]
  586. B0R0G0B0 EQU [esp+72]
  587. G1B1R0G0 EQU [esp+76]
  588. R1G1B1R1 EQU [esp+80]
  589. B2R2G2B2 EQU [esp+84]
  590. G3B3R2G2 EQU [esp+88]
  591. R3G3B3R3 EQU [esp+92]
  592. push esi
  593. push edi
  594. push ebp
  595. push ebx
  596. mov edi,esp
  597. sub esp,4096
  598. mov eax,[esp]
  599. sub esp,LocalFrameSize-4096
  600. and esp,0FFFFF000H
  601. mov eax,[esp]
  602. and esp,0FFFFE000H
  603. mov eax,[esp]
  604. sub esp,1000H
  605. mov eax,[esp]
  606. sub esp,1000H
  607. mov eax,[esp]
  608. add esp,2000H
  609. mov eax,[edi+YPitch_arg]
  610. mov ebx,[edi+ChromaPitch_arg]
  611. mov ecx,[edi+AspectAdjustmentCount_arg]
  612. mov edx,[edi+FrameWidth_arg]
  613. mov LumaPitch,eax
  614. mov ChromaPitch,ebx
  615. mov AspectAdjustmentCount,ecx
  616. mov AspectCount,ecx
  617. mov FrameWidth,edx
  618. mov ebx,[edi+VPlane_arg]
  619. mov ecx,[edi+UPlane_arg]
  620. mov eax,[edi+YPlane_arg]
  621. sub ecx,ebx
  622. mov DistanceFromVToU,ecx
  623. mov VCursor,ebx
  624. mov YCursor,eax
  625. mov eax,[edi+ColorConvertedFrame]
  626. add eax,[edi+DCIOffset]
  627. add eax,[edi+CCOffsetToLine0]
  628. mov CCOCursor,eax
  629. mov StashESP,edi
  630. mov edx,[edi+FrameHeight]
  631. mov ecx,LumaPitch
  632. imul edx,ecx
  633. mov ebx,FrameWidth
  634. mov eax,[edi+CCOPitch]
  635. sub ecx,ebx
  636. mov esi,YCursor ; Fetch cursor over luma plane.
  637. lea ebp,[ebx+ebx*4]
  638. add edx,esi
  639. add ebp,ebx
  640. mov YSkipDistance,ecx
  641. sub eax,ebp
  642. mov YLimit,edx
  643. shr ebx,1
  644. mov CCOSkipDistance,eax
  645. mov ChromaLineLen,ebx
  646. mov ecx,AspectAdjustmentCount
  647. mov esi,VCursor
  648. mov AspectCount,ecx
  649. ; Register Usage:
  650. ;
  651. ; edi -- Y Line cursor. Chroma contribs go in lines above current Y line.
  652. ; esi -- Chroma Line cursor.
  653. ; ebp -- Y Pitch
  654. ; edx -- Distance from V pel to U pel.
  655. ; ecx -- V contribution to RGB; sum of U and V contributions.
  656. ; ebx -- U contribution to RGB.
  657. ; eax -- Alternately a U and a V pel.
  658. PrepareChromaLine:
  659. mov edi,ChromaLineLen
  660. xor eax,eax
  661. mov edx,DistanceFromVToU
  662. mov al,[esi] ; Fetch V.
  663. add edi,esi ; Compute EOL address.
  664. xor ecx,ecx
  665. mov ebp,PD V24Contrib[eax*8] ; ebp[ 0: 7] -- Zero
  666. ; ; ebp[ 8:15] -- V contrib to G.
  667. ; ; ebp[16:23] -- V contrib to R.
  668. ; ; ebp[24:31] -- Zero.
  669. mov cl,[esi+edx] ; Fetch U.
  670. mov EndOfChromaLine,edi
  671. xor ebx,ebx ; Keep pairing happy.
  672. mov ebx,PD U24Contrib[ecx*8] ; ebx[ 0: 7] -- U contrib to B.
  673. ; ; ebx[ 8:15] -- U contrib to G.
  674. ; ; ebx[16:23] -- Zero.
  675. mov cl,[esi+edx+1] ; Fetch next U.
  676. lea edi,ChromaContribution
  677. add ebp,ebx ; Chroma contributions to RGB.
  678. NextChromaPel:
  679. mov ebx,PD U24Contrib[ecx*8] ; See above.
  680. mov al,[esi+1] ; Fetch V.
  681. mov [edi],ebp ; Store contribs to use for even chroma pel.
  682. mov cl,[esi+edx+2] ; Fetch next U.
  683. mov ebp,PD V24Contrib[eax*8] ; See above.
  684. add edi,32
  685. add ebp,ebx ; Chroma contributions to RGB.
  686. mov al,[esi+2] ; Fetch V.
  687. mov [edi-28],ebp ; Store contribs to use for odd chroma pel.
  688. mov ebx,PD U24Contrib[ecx*8] ; See above.
  689. mov ebp,PD V24Contrib[eax*8] ; See above.
  690. mov cl,[esi+edx+3] ; Fetch next U.
  691. add ebp,ebx ; Chroma contributions to RGB.
  692. add esi,2 ; Inc Chroma cursor.
  693. cmp esi,EndOfChromaLine
  694. jne NextChromaPel
  695. xor eax,eax
  696. mov esi,YCursor
  697. mov [edi+4],eax ; Store EOL indicator.
  698. mov LineParity,eax
  699. DoLine1:
  700. ; EAX EBX ECX EDX EBP
  701. xor ebx,ebx ; ?? ?? ?? ?? >-- -- -- -- ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
  702. xor ecx,ecx ; ?? ?? ?? ?? -- -- -- -- >-- -- -- -- ?? ?? ?? ?? ?? ?? ?? ??
  703. mov ebp,ChromaContribution ; Fetch preprocessed chroma contribs. ?? ?? ?? ?? -- -- -- -- -- -- -- -- ?? ?? ?? ?? >AA AA AA AA
  704. xor edx,edx ; ?? ?? ?? ?? -- -- -- -- -- -- -- -- >-- -- -- -- AA AA AA AA
  705. mov cl,[esi] ; Fetch Y0. ?? ?? ?? ?? -- -- -- -- m>-- -- -- y0 -- -- -- -- AA AA AA AA
  706. mov bl,ChromaContribution+3 ; Fetch U contrib to B value. ?? ?? ?? ?? m>-- -- -- uB01 -- -- -- y0 -- -- -- -- AA AA AA AA
  707. mov dl,ChromaContribution+2 ; Fetch UV contrib to G value. ?? ?? ?? ?? -- -- -- uB01 -- -- -- y0 m>-- -- -- uvG01 AA AA AA AA
  708. and ebp,0000001FFH ; Extract V contrib to R. ?? ?? ?? ?? -- -- -- uB01 -- -- -- y0 -- -- -- uvG01 >-- -- -1 AA
  709. mov edi,CCOCursor ; ?? ?? ?? ?? -- -- -- uB01 -- -- -- y0 -- -- -- uvG01 -- -- -1 AA
  710. sub esp,6144 ; ?? ?? ?? ?? -- -- -- uB01 -- -- -- y0 -- -- -- uvG01 -- -- -1 AA
  711. xor eax,eax ; >-- -- -- -- -- -- -- uB01 -- -- -- y0 -- -- -- uvG01 -- -- -1 AA
  712. ; Register Usage:
  713. ;
  714. ; esi -- Cursor over a line of the Y Plane.
  715. ; edi -- Cursor over the color conv output.
  716. ; ebp -- V contribution to R field of RGB value.
  717. ; edx -- UV contrib to G field; U contrib to B field of RGB value.
  718. ; ecx -- Y value (i.e. Y contribution to R, G, and B);
  719. ; ebx -- Construction of one and a third pels of RGB24.
  720. ; eax -- Construction of one and a third pels of RGB24.
  721. Next4YPelsLine0:
  722. ; EAX EBX ECX EDX EBP
  723. mov ah,PB B24Value[ecx+ebx*2] ; Fetch Pel0 B. m>-- -- B0 -- <-- -- -- uB01 <-- -- -- y0 -- -- -- uvG01 -- -- -1 AA
  724. mov bh,PB R24Value[ecx+ebp*1] ; Fetch Pel0 R. -- -- B0 -- m>-- -- R0 uB01 <-- -- -- y0 -- -- -- uvG01 <-- -- -1 AA
  725. mov bl,PB G24Value[ecx+edx] ; Fetch Pel0 G. -- -- R0 G0 -- -- B0 -- m>-- -- R0 G0 <-- -- -- y0 <-- -- -- uvG01 -- -- -1 AA
  726. mov cl,[esi+1] ; Fetch Y1. -- -- B0 -- -- -- R0 G0 m>-- -- -- y1 -- -- -- uvG01 -- -- -1 AA
  727. shl ebx,16 ; R0 G0 -- -- -- -- B0 -- >R0 G0 -- -- -- -- -- y1 -- -- -- uvG01 -- -- -1 AA
  728. mov al,ah ; Copy Pel0 B. -- -- B0 B0 >-- -- B0 B0 R0 G0 -- -- -- -- -- y1 -- -- -- uvG01 -- -- -1 AA
  729. or eax,ebx ; R0 G0 B0 B0 >R0 G0 B0 B0 <R0 G0 -- -- -- -- -- y1 -- -- -- uvG01 -- -- -1 AA
  730. mov bh,PB G24Value[ecx+edx] ; Fetch Pel1 G. R0 G0 G1 -- R0 G0 B0 B0 m>R0 G0 G1 -- <-- -- -- y1 -- -- -- uvG01 -- -- -1 AA
  731. ror eax,8 ; First output: B0 R0 G0 B0 >B0 R0 G0 B0 R0 G0 G1 -- -- -- -- y1 -- -- -- uvG01 -- -- -1 AA
  732. mov dl,ChromaContribution+6144+3 ; Refetch U contrib to B value. B0 R0 G0 B0 R0 G0 G1 -- -- -- -- y1 m>-- -- -- uB01 -- -- -1 AA
  733. mov Ze [edi],eax ; Save B0R0G0B0. m<B0 R0 G0 B0 R0 G0 G1 -- -- -- -- y1 -- -- -- uB01 -- -- -1 AA
  734. mov bl,PB B24Value[ecx+edx*2] ; Fetch Pel1 B. R0 G0 G1 B1 B0 R0 G0 B0 m>R0 G0 G1 B1 <-- -- -- y1 <-- -- -- uB01 -- -- -1 AA
  735. rol ebx,16 ; Second output: G1 B1 R0 G0 B0 R0 G0 B0 >G1 B1 R0 G0 -- -- -- y1 -- -- -- uB01 -- -- -1 AA
  736. mov B0R0G0B0+6144,eax ; Stash for saving to second line. s<B0 R0 G0 B0 >G1 B1 R0 G0 -- -- -- y1 -- -- -- uB01 -- -- -1 AA
  737. mov Ze [edi+4],ebx ; Save G1B1R0G0. B0 R0 G0 B0 m<G1 B1 R0 G0 -- -- -- y1 -- -- -- uB01 -- -- -1 AA
  738. mov G1B1R0G0+6144,ebx ; Stash for saving to second line. B0 R0 G0 B0 s<G1 B1 R0 G0 -- -- -- y1 -- -- -- uB01 -- -- -1 AA
  739. mov bl,PB R24Value[ecx+ebp*1] ; Fetch Pel1 R. G1 B1 -- R1 B0 R0 G0 B0 m>G1 B1 R0 R1 <-- -- -- y1 -- -- -- uB01 <-- -- -1 AA
  740. mov ebp,ChromaContribution+6144+4 ; Fetch preprocessed chroma contribs. B0 R0 G0 B0 G1 B1 R0 R1 -- -- -- y1 -- -- -- uB01 m>BB BB BB BB
  741. mov bh,bl ; Copy Pel1 R. G1 B1 R1 R1 B0 R0 G0 B0 >G1 B1 R1 R1 -- -- -- y1 -- -- -- uB01 BB BB BB BB
  742. mov cl,[esi+2] ; Fetch Y2. B0 R0 G0 B0 G1 B1 R1 R1 m>-- -- -- y2 -- -- -- uB01 BB BB BB BB
  743. ror ebx,8 ; Third output: R1 G1 B1 R1 B0 R0 G0 B0 R1 G1 B1 R1 -- -- -- y2 -- -- -- uB01 BB BB BB BB
  744. and ebp,0000001FFH ; Extract V contrib to R. B0 R0 G0 B0 R1 G1 B1 R1 -- -- -- y2 -- -- -- uB01 >-- -- -1 BB
  745. mov dl,ChromaContribution+6144+6 ; Fetch UV contrib to G value. B0 R0 G0 B0 R1 G1 B1 R1 -- -- -- y2 m>-- -- -- uvG23 -- -- -1 BB
  746. xor eax,eax ; -- -- -- -- R1 G1 B1 R1 -- -- -- y2 -- -- -- uvG23 -- -- -1 BB
  747. mov al,ChromaContribution+6144+7 ; Fetch U contrib to B value. m>-- -- -- uB23 R1 G1 B1 R1 -- -- -- y2 -- -- -- uvG23 -- -- -1 BB
  748. mov R1G1B1R1+6144,ebx ; Stash for saving to second line. -- -- -- uB23 s<R1 G1 B1 R1 -- -- -- y2 -- -- -- uvG23 -- -- -1 BB
  749. mov Ze [edi+8],ebx ; Save R1G1B1R1. -- -- -- uB23 m<R1 G1 B1 R1 -- -- -- y2 -- -- -- uvG23 -- -- -1 BB
  750. xor ebx,ebx ; -- -- -- uB23 >-- -- -- -- -- -- -- y2 -- -- -- uvG23 -- -- -1 BB
  751. mov bh,PB B24Value[ecx+eax*2] ; Fetch Pel2 B. <-- -- -- uB23 m>-- -- B2 -- <-- -- -- y2 -- -- -- uvG23 -- -- -1 BB
  752. mov ah,PB R24Value[ecx+ebp*1] ; Fetch Pel2 R. m>-- -- R2 uB23 -- -- B2 -- <-- -- -- y2 -- -- -- uvG23 <-- -- -1 BB
  753. mov al,PB G24Value[ecx+edx] ; Fetch Pel2 G. -- -- R2 G2 m>-- -- R2 G2 -- -- B2 -- <-- -- -- y2 <-- -- -- uvG23 -- -- -1 BB
  754. mov cl,[esi+3] ; Fetch Y3. -- -- R2 G2 -- -- B2 -- m>-- -- -- y3 -- -- -- uvG23 -- -- -1 BB
  755. shl eax,16 ; R2 G2 -- -- >R2 G2 -- -- -- -- B2 -- -- -- -- y3 -- -- -- uvG23 -- -- -1 BB
  756. mov bl,bh ; Copy Pel2 B. -- -- B2 B2 R2 G2 -- -- >-- -- B2 B2 -- -- -- y3 -- -- -- uvG23 -- -- -1 BB
  757. or ebx,eax ; R2 G2 B2 B2 <R2 G2 -- -- >R2 G2 B2 B2 -- -- -- y3 -- -- -- uvG23 -- -- -1 BB
  758. mov ah,PB G24Value[ecx+edx] ; Fetch Pel1 G. R2 G2 G3 -- m>R2 G2 G3 -- R2 G2 B2 B2 <-- -- -- y3 <-- -- -- uvG23 -- -- -1 BB
  759. ror ebx,8 ; Fourth output: B2 R2 G2 B2 R2 G2 G3 -- >B2 R2 G2 B2 -- -- -- y3 -- -- -- uvG23 -- -- -1 BB
  760. mov dl,ChromaContribution+6144+7 ; Refetch U contrib to B value. R2 G2 G3 -- B2 R2 G2 B2 -- -- -- y3 m>-- -- -- uB23 -- -- -1 BB
  761. mov Ze [edi+12],ebx ; Save B2R2G2B2. R2 G2 G3 -- m<B2 R2 G2 B2 -- -- -- y3 -- -- -- uB23 -- -- -1 BB
  762. mov al,PB B24Value[ecx+edx*2] ; Fetch Pel3 B. R2 G2 G3 B3 m>R2 G2 G3 B3 B2 R2 G2 B2 <-- -- -- y3 <-- -- -- uB23 -- -- -1 BB
  763. rol eax,16 ; Fifth output: G3 B3 R2 G2 >G3 B3 R2 G2 B2 R2 G2 B2 -- -- -- y3 -- -- -- uB23 -- -- -1 BB
  764. mov B2R2G2B2+6144,ebx ; Stash for saving to second line. G3 B3 R2 G2 s<B2 R2 G2 B2 -- -- -- y3 -- -- -- uB23 -- -- -1 BB
  765. mov Ze [edi+16],eax ; Save G3B3R2G2. m<G3 B3 R2 G2 B2 R2 G2 B2 -- -- -- y3 -- -- -- uB23 -- -- -1 BB
  766. mov G3B3R2G2+6144,eax ; Stash for saving to second line. s<G3 B3 R2 G2 B2 R2 G2 B2 -- -- -- y3 -- -- -- uB23 -- -- -1 BB
  767. mov al,PB R24Value[ecx+ebp*1] ; Fetch Pel3 R. G3 B3 -- R3 m>G3 B3 R2 R3 B2 R2 G2 B2 <-- -- -- y3 -- -- -- uB23 <-- -- -1 BB
  768. mov ebp,ChromaContribution+6144+32; Fetch preprocessed chroma contribs. G3 B3 R2 R3 B2 R2 G2 B2 -- -- -- y3 -- -- -- uB23 m<CC CC CC CC
  769. mov ah,al ; Copy Pel3 R. G3 B3 R3 R3 >G3 B3 R3 R3 B2 R2 G2 B2 -- -- -- y3 -- -- -- uB23 CC CC CC CC
  770. mov cl,[esi+4] ; Fetch Y4. G3 B3 R3 R3 B2 R2 G2 B2 m>-- -- -- y4 -- -- -- uB23 CC CC CC CC
  771. ror eax,8 ; Sixth output: R3 G3 B3 R3 >R3 G3 B3 R3 B2 R2 G2 B2 -- -- -- y4 -- -- -- uB23 CC CC CC CC
  772. xor ebx,ebx ; R3 G3 B3 R3 >-- -- -- -- -- -- -- y4 -- -- -- uB23 CC CC CC CC
  773. mov dl,ChromaContribution+6144+34 ; Fetch UV contrib to G value. R3 G3 B3 R3 -- -- -- -- -- -- -- y4 m>-- -- -- uvG45 CC CC CC CC
  774. and ebp,0000001FFH ; Extract U contrib to B. R3 G3 B3 R3 -- -- -- -- -- -- -- y4 -- -- -- uvG45 >-- -- -1 CC
  775. mov bl,ChromaContribution+6144+35 ; Fetch U contrib to B value. R3 G3 B3 R3 m>-- -- -- uB45 -- -- -- y4 -- -- -- uvG45 -- -- -1 CC
  776. lea esi,[esi+4] ; Advance input cursor.
  777. mov Ze [edi+20],eax ; Save R3G3B3R3. m<R3 G3 B3 R3 -- -- -- uB45 -- -- -- y4 -- -- -- uvG45 -- -- -1 CC
  778. mov R3G3B3R3+6144,eax ; Stash for saving to second line. s<R3 G3 B3 R3 -- -- -- uB45 -- -- -- y4 -- -- -- uvG45 -- -- -1 CC
  779. mov eax,ebx ; >-- -- -- uB45 <-- -- -- uB45 -- -- -- y4 -- -- -- uvG45 -- -- -1 CC
  780. lea esp,[esp+32]
  781. lea edi,[edi+24] ; Advance output cursor.
  782. jne Next4YPelsLine0
  783. and esp,0FFFFE000H
  784. add esp,02000H
  785. mov ebx,CCOSkipDistance
  786. mov ebp,AspectCount
  787. add edi,ebx
  788. sub ebp,2 ; If count is non-zero, we keep the line.
  789. mov AspectCount,ebp
  790. lea ecx,B0R0G0B0
  791. mov eax,FrameWidth
  792. jg Keep2ndLineOfLine0
  793. add ebp,AspectAdjustmentCount
  794. mov AspectCount,ebp
  795. jmp Skip2ndLineOfLine0
  796. Keep2ndLineOfLine0:
  797. Keep2ndLineOfLine0_Loop:
  798. mov ebp,[ecx]
  799. sub eax,4
  800. mov Ze PD [edi],ebp
  801. mov ebp,[ecx+4]
  802. mov Ze PD [edi+4],ebp
  803. mov ebp,[ecx+8]
  804. mov Ze PD [edi+8],ebp
  805. mov ebp,[ecx+12]
  806. mov Ze PD [edi+12],ebp
  807. mov ebp,[ecx+16]
  808. mov Ze PD [edi+16],ebp
  809. mov ebp,[ecx+20]
  810. mov Ze PD [edi+20],ebp
  811. lea ecx,[ecx+32]
  812. lea edi,[edi+24]
  813. jne Keep2ndLineOfLine0_Loop
  814. add edi,ebx
  815. Skip2ndLineOfLine0:
  816. mov bl,LineParity
  817. add esi,YSkipDistance
  818. xor bl,1
  819. mov CCOCursor,edi
  820. mov YCursor,esi
  821. mov LineParity,bl
  822. jne DoLine1
  823. mov eax,esi
  824. mov esi,VCursor ; Inc VPlane cursor to next line.
  825. mov ebp,ChromaPitch
  826. mov ebx,YLimit ; Done with last line?
  827. add esi,ebp
  828. cmp eax,ebx
  829. mov VCursor,esi
  830. jb PrepareChromaLine
  831. Done:
  832. mov esp,StashESP
  833. pop ebx
  834. pop ebp
  835. pop edi
  836. pop esi
  837. rturn
  838. YUV12ToRGB24ZoomBy2 endp
  839. ENDIF
  840. END