266 | | |
267 | | bool bTerminateSlice = bForceTerminate; |
268 | | UInt uiCUAddr = pcCU->getAddr(); |
269 | | /* If at the end of an LCU line but not at the end of a substream, perform CABAC flush */ |
270 | | if (!bTerminateSlice && pcCU->getSlice()->getPPS()->getNumSubstreams() > 1) |
271 | | { |
272 | | Int iNumSubstreams = pcCU->getSlice()->getPPS()->getNumSubstreams(); |
273 | | UInt uiWidthInLCUs = pcCU->getPic()->getPicSym()->getFrameWidthInCU(); |
274 | | UInt uiCol = uiCUAddr % uiWidthInLCUs; |
275 | | UInt uiLin = uiCUAddr / uiWidthInLCUs; |
276 | | UInt uiTileStartLCU = pcCU->getPic()->getPicSym()->getTComTile(pcCU->getPic()->getPicSym()->getTileIdxMap(uiCUAddr))->getFirstCUAddr(); |
277 | | UInt uiTileLCUX = uiTileStartLCU % uiWidthInLCUs; |
278 | | UInt uiTileLCUY = uiTileStartLCU / uiWidthInLCUs; |
279 | | UInt uiTileWidth = pcCU->getPic()->getPicSym()->getTComTile(pcCU->getPic()->getPicSym()->getTileIdxMap(uiCUAddr))->getTileWidth(); |
280 | | UInt uiTileHeight = pcCU->getPic()->getPicSym()->getTComTile(pcCU->getPic()->getPicSym()->getTileIdxMap(uiCUAddr))->getTileHeight(); |
281 | | Int iNumSubstreamsPerTile = iNumSubstreams; |
282 | | if (pcCU->getSlice()->getPPS()->getNumSubstreams() > 1) |
283 | | { |
284 | | iNumSubstreamsPerTile /= pcCU->getPic()->getPicSym()->getNumTiles(); |
285 | | } |
286 | | if ((uiCol == uiTileLCUX+uiTileWidth-1) && (uiLin+iNumSubstreamsPerTile < uiTileLCUY+uiTileHeight)) |
287 | | { |
288 | | m_pcEntropyCoder->encodeFlush(); |
289 | | } |
290 | | } |