/// <summary> /// Add DWT data into this tile /// </summary> /// <param name="diffDwt">the DWT tile</param> public void AddDwt(DwtTile diffDwt) { DwtTile orgDwt = GetDwt(); diffDwt.Add(orgDwt); UpdateDwt(diffDwt); }
/// <summary> /// Decode an encoded tile /// </summary> /// <param name="enTile">Represents an encoded tile.</param> /// <param name="tState">The context state of the tile that going to be decoded.</param> public static void DecodeTile(EncodedTile enTile, TileState tState) { RfxProgressiveCodecContext codecContext = new RfxProgressiveCodecContext( enTile.CodecQuantVals, enTile.QuantIdxY, enTile.QuantIdxCb, enTile.QuantIdxCr, enTile.DataType == EncodedTileType.Simple ? false : true, enTile.IsDifferenceTile, enTile.UseReduceExtrapolate); //RLGR/SRL Decode if (enTile.DataType == EncodedTileType.FirstPass || enTile.DataType == EncodedTileType.Simple) { //first pass or simple codecContext.YData = enTile.YEncodedData; codecContext.CbData = enTile.CbEncodedData; codecContext.CrData = enTile.CrEncodedData; RemoteFXDecoder.RLGRDecode(codecContext); ComputeOriginalLL3FromDeltas(codecContext); } else { SRLDecode(codecContext, enTile, tState); } //Progressive Dequantization if (enTile.DataType != EncodedTileType.Simple) { ProgressiveDeQuantization(codecContext, enTile.ProgCodecQuant); } // Create a DwtTile instance for tri-state DwtTile triStateDwt = new DwtTile(codecContext.YComponent, codecContext.CbComponent, codecContext.CrComponent, enTile.CodecQuantVals, enTile.QuantIdxY, enTile.QuantIdxCb, enTile.QuantIdxCr, enTile.UseReduceExtrapolate, enTile.ProgCodecQuant); //Set Tri-State for progressive codec if (enTile.DataType == EncodedTileType.FirstPass) { //DwtTile tileTriStat = SetTriState(diffDwt, enTile.UseReduceExtrapolate); tState.UpdateTriState(triStateDwt); } else if (enTile.DataType == EncodedTileType.UpgradePass) { DwtTile prvStat = tState.GetTriState(); prvStat.Add(triStateDwt); // update ProCodecQuant prvStat.ProgCodecQuant = triStateDwt.ProgCodecQuant; tState.UpdateTriState(prvStat); } // Create another DwtTile instance for DWT Data. // The data in diffDwt is the same as triStateDwt, this will makesure the DWT data and tri-state not share the same DWT tile instance DwtTile diffDwt = new DwtTile(codecContext.YComponent, codecContext.CbComponent, codecContext.CrComponent, enTile.CodecQuantVals, enTile.QuantIdxY, enTile.QuantIdxCb, enTile.QuantIdxCr, enTile.UseReduceExtrapolate, enTile.ProgCodecQuant); //Sum difference if (enTile.IsDifferenceTile || enTile.DataType == EncodedTileType.UpgradePass) { tState.AddDwt(diffDwt); } else { tState.UpdateDwt(diffDwt); } }