home *** CD-ROM | disk | FTP | other *** search
-
- ; ---------------------------------------------------------------------
- ;
- ; RAW16.ASM - QuickTime for Windows Sample Decompressor
- ;
- ; Version 1.1
- ;
- ; (c) 1988-1993 Apple Computer, Inc. All Rights Reserved.
- ;
- ; ---------------------------------------------------------------------
-
-
- INCLUDE QTMACROS.INC
-
- CODESEG SEGMENT PARA USE16 PUBLIC 'CODE'
- OPTION LANGUAGE:PASCAL
- .386
-
- OnePixel MACRO source:REQ, target:REQ
- MOV AX, [ESI+source] ;; Get a word
- ROL AX, 8 ;; Flip the bytes
- MOV ES:[EDI+target], AX ;; Store the word
- ENDM
-
- OnePixelInPlace MACRO offst:REQ
- ROL WORD PTR [ESI+offst], 8 ;; Flip the bytes
- ENDM
-
- DecompressRaw16 PROC USES SI DI DS ES, Inbuf:FAR PTR, Outbuf:FAR PTR,
- BCOUNT:DWORD
-
- XOR ESI, ESI ; Zero out high order word
- XOR ESI, ESI ; Initialize high order word
- LDS SI, Inbuf ; DS:ESI = compressed buffer
- XOR EDI, EDI ; Initialize high order word
- LES DI, Outbuf ; ES:EDI = uncompressed buffer
- MOV ECX, BCOUNT ; Get buffer size in bytes
- SHR ECX, 1 ; Convert to size in words, drop odd byte
- MOV DX, CX ; Isolate remainder mod 8
- AND DX, 7 ;
- SHR ECX, 3 ; Compute number of 8-pixel groups
- MOV EAX, Inbuf ; Are source and target buffers identical?
- CMP EAX, Outbuf ;
- JE FlipInPlace ; Skip if identical
- ALIGN 16
- Loop8A:
- i = 0
- REPEAT 8
- OnePixel i, i
- i = i + 2
- ENDM
- ADD ESI, i ; Advance source pointer
- ADD EDI, i ; Advance target pointer
- DEC ECX ; One fewer group to process
- JG Loop8A ; Loop once for each group of 8 pixels
- TEST DX, DX ; Any pixels remaining?
- JE Done ; Skip if none remaining
- Loop1A:
- OnePixel 0, 0 ; Process one pixel
- ADD ESI, 2 ; Advance source pointer
- ADD EDI, 2 ; Advance target pointer
- DEC DX ; One fewer pixel to process
- JG Loop1A ; Loop once for each pixel
- Done:
- RET ; Return to caller
-
- ALIGN 16
- FlipInPlace:
- Loop8B:
- i = 0
- REPEAT 8
- OnePixelInPlace i
- i = i + 2
- ENDM
- ADD ESI, i ; Advance source pointer
- DEC ECX ; One fewer group to process
- JG Loop8B ; Loop once for each group of 8 pixels
- TEST DX, DX ; Any pixels remaining?
- JE Done ; Skip if none remaining
- Loop1B:
- OnePixelInPlace 0 ; Process one pixel
- ADD ESI, 2 ; Advance source pointer
- DEC DX ; One fewer pixel to process
- JG Loop1B ; Loop once for each pixel
- JMP Done ; Go to common exit
-
- DecompressRaw16 ENDP
-
- CODESEG ENDS
- END
-