public override ActionResult Recompute() { // TODO: Add parameters obtain into a function dynamic obj = GetJsonObject(Request.InputStream); string name = JsonHelper.CastTo <string>(obj.Action); // gets the action with the same name as the argument var action = _codecAction.SubActions.SingleOrDefault(c => c.Name.Equals(name)); // if action not found if (action == null) { return(new HttpStatusCodeResult(HttpStatusCode.NotFound)); } // retrieve the quant var quantArray = JsonHelper.RetrieveQuantsArray(obj.Params.QuantizationFactorsArray); _codecAction.Parameters[Constants.PARAM_NAME_QUANT_FACTORS_ARRAY] = quantArray; // retrive the progressive quants var progQuantList = new List <QuantizationFactorsArray>(); foreach (var layer in obj.Params.ProgQuantizationArray) { var layerQuants = JsonHelper.RetrieveQuantsArray(layer); progQuantList.Add(layerQuants); } var progQuantarray = new ProgressiveQuantizationFactors { ProgQuants = progQuantList }; _codecAction.Parameters[Constants.PARAM_NAME_PROGRESSIVE_QUANT_LIST] = progQuantarray; _codecAction.Parameters[Constants.PARAM_NAME_ENTROPY_ALGORITHM] = JsonHelper.CastTo <EntropyAlgorithm>(obj.Params.EntropyAlgorithm); _codecAction.Parameters[Constants.PARAM_NAME_USE_REDUCE_EXTRAPOLATE] = JsonHelper.CastTo <UseReduceExtrapolate>(obj.Params.UseReduceExtrapolate); // TODO: error handle var preFramePath = (string)Session[PreviousFrameImage]; Frame preFrame = Utility.GetPreviousFrame(preFramePath, _codecAction.Parameters); ICodecAction diffing = _codecAction.SubActions.SingleOrDefault(c => c.Name.Equals(Constants.PENCODE_NAME_SUBBANDDIFFING)); diffing.Parameters[Constants.PARAM_NAME_PREVIOUS_FRAME] = preFrame; // retrive tiles from Inputs var tileList = new List <Tile>(); foreach (var tileJson in obj.Inputs) { Triplet <string> triplet = JsonHelper.RetrieveTriplet(tileJson); string dataFormat = obj.Params.UseDataFormat; Tile tile = null; if (dataFormat.Equals(Constants.DataFormat.HEX)) { tile = Tile.FromStrings(triplet, new HexTileSerializer()); } else { tile = Tile.FromStrings(triplet, new IntegerTileSerializer()); } if (dataFormat.Equals(Constants.DataFormat.FixedPoint_11_5)) { tile.RightShift(5); } if (dataFormat.Equals(Constants.DataFormat.FixedPoint_12_4)) { tile.RightShift(4); } tileList.Add(tile); } var result = action.DoAction(tileList.ToArray()); // recompute the following steps and update bool following = false; Tile[] input = result; foreach (var act in _codecAction.SubActions) { if (following) { result = act.DoAction(input); input = result; } else { if (act.Name.Equals(name)) { following = true; } } } // TODO: recompute the following steps and update return(new HttpStatusCodeResult(HttpStatusCode.OK)); }
public async Task <IActionResult> Encode() { try { using (var bodyStream = new StreamReader(Request.Body)) { var bodyText = await bodyStream.ReadToEndAsync(); dynamic obj = JsonConvert.DeserializeObject(bodyText); var quantArray = JsonHelper.RetrieveQuantsArray(obj.Params.QuantizationFactorsArray); _codecAction.Parameters[Constants.PARAM_NAME_QUANT_FACTORS_ARRAY] = quantArray; _codecAction.Parameters[Constants.PARAM_NAME_ENTROPY_ALGORITHM] = JsonHelper.CastTo <EntropyAlgorithm>(obj.Params.EntropyAlgorithm); // TODO: error handle var encodeImagePath = this.HttpContext.Session.Get <string>(EncodedImage); if (string.IsNullOrEmpty(encodeImagePath)) { throw new FileNotFoundException("No image found, image size should less than 1MB, please check and try again."); } var tile = Tile.FromFile(encodeImagePath); _codecAction.DoAction(tile); return(Json(ReturnResult <string> .Success("Success"))); } } catch (Exception ex) { return(Json(ReturnResult <string> .Fail(ex.Message))); } }