| 112 | } |
| 113 | |
| 114 | ERR ilPKImageEncode_WritePixels_DevIL(PKImageEncode* pIE, U32 cLine, U8* pbPixel, U32 cbStride) |
| 115 | { |
| 116 | ERR err = WMP_errSuccess; |
| 117 | |
| 118 | struct WMPStream* pS = pIE->pStream; |
| 119 | size_t cbLineM = 0, cbLineS = 0; |
| 120 | I32 i = 0; |
| 121 | static U8 pPadding[4] = {0}; |
| 122 | |
| 123 | // header |
| 124 | if (!pIE->fHeaderDone) |
| 125 | { |
| 126 | // WriteBMPHeader() also inits this object |
| 127 | Call(WriteDevILHeader(pIE)); |
| 128 | } |
| 129 | |
| 130 | // body |
| 131 | // calculate line size in memory and in stream |
| 132 | cbLineM = pIE->cbPixel * pIE->uWidth; |
| 133 | cbLineS = (cbLineM + 3) / 4 * 4; |
| 134 | |
| 135 | //FailIf(pRect->X < 0 || pID->uWidth <= pRect->X, WMP_errInvalidParameter); |
| 136 | //FailIf(pRect->Y < 0 || pID->uHeight <= pRect->Y, WMP_errInvalidParameter); |
| 137 | //FailIf(pRect->Width < 0 || pID->uWidth < pRect->X + pRect->Width, WMP_errInvalidParameter); |
| 138 | //FailIf(pRect->Height < 0 || pID->uHeight < pRect->Y + pRect->Height, WMP_errInvalidParameter); |
| 139 | FailIf(cbStride < cbLineM, WMP_errInvalidParameter); |
| 140 | |
| 141 | for (i = cLine - 1; 0 <= i; --i) |
| 142 | { |
| 143 | size_t offM = cbStride * i; |
| 144 | size_t offS = cbLineS * (pIE->uHeight - (pIE->idxCurrentLine + i + 1)); |
| 145 | |
| 146 | Call(pS->SetPos(pS, pIE->offPixel + offS)); |
| 147 | Call(pS->Write(pS, pbPixel + offM, cbLineM)); |
| 148 | } |
| 149 | Call(pS->Write(pS, pPadding, (cbLineS - cbLineM))); |
| 150 | pIE->idxCurrentLine += cLine; |
| 151 | |
| 152 | Cleanup: |
| 153 | return err; |
| 154 | } |
| 155 | |
| 156 | |
| 157 | ERR PKImageEncode_Create_DevIL( |
nothing calls this directly
no test coverage detected