public virtual ActionResult Input()
        {
            try
            {
                using (var bodyStream = new StreamReader(Request.Body))
                {
                    var     bodyText = bodyStream.ReadToEndAsync().GetAwaiter().GetResult();
                    dynamic json     = JsonConvert.DeserializeObject(bodyText);
                    var     action   = CodecFactory.GetCodecAction((string)json.Action);
                    // if action not found
                    if (action == null)
                    {
                        return(Json(ReturnResult <string> .Fail("Action not found")));
                    }

                    //TODO: add parameters
                    var tile = Tile.FromStrings(new Triplet <string>(
                                                    json.Inputs.X, json.Inputs.Y, json.Inputs.Z),
                                                new IntegerTileSerializer());

                    var result = action.DoAction(tile);
                    return(Json(result.GetStrings(TileSerializerFactory.GetDefaultSerizlizer())));
                }
            }
            catch (Exception ex)
            {
                return(Json(ReturnResult <string> .Fail(ex.Message)));
            }
        }
        public async Task <IActionResult> IndexWithInputs()
        {
            try
            {
                using (var bodyStream = new StreamReader(Request.Body))
                {
                    var bodyText = await bodyStream.ReadToEndAsync();

                    dynamic obj = JsonConvert.DeserializeObject(bodyText);

                    // retrieve the quant
                    QuantizationFactorsArray quantArray = JsonHelper.RetrieveQuantsArray(obj.Params.QuantizationFactorsArray);
                    EntropyAlgorithm         algorithm  = JsonHelper.CastTo <EntropyAlgorithm>(obj.Params.EntropyAlgorithm);

                    _viewModel = new RFXDecodeViewModel();
                    // Updates parameters
                    ((RFXDecodeViewModel)_viewModel).ProvideParam(quantArray, algorithm);
                    Triplet <string> triplet = JsonHelper.RetrieveTriplet(obj.Inputs);
                    ((RFXDecodeViewModel)_viewModel).ProvidePanelInputs(triplet.ToArray());

                    var envValues = new Dictionary <string, object>()
                    {
                        { ModelKey, _viewModel },
                        { isModelValid, true }
                    };

                    SaveToSession(envValues);
                }
                return(Json(ReturnResult <string> .Success("Success")));
            }
            catch (Exception ex)
            {
                return(Json(ReturnResult <string> .Fail(ex.Message)));
            }
        }
示例#3
0
        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)));
            }
        }
        public override ActionResult LayerPanel([FromBody] LayerPanelRequest request)
        {
            var layersGroup = new List <PanelViewModel>();

            try
            {
                var CodecActionDic = this.HttpContext.Session.Get <Dictionary <int, ICodecAction> >(ConstantCodecActionDic);
                _codecAction = CodecActionDic == null ? null : (CodecActionDic.ContainsKey(request.layer) ? CodecActionDic[request.layer] : null);

                if (_codecAction == null)
                {
                    return(PartialView("_Layers", layersGroup));
                }

                if (request.name.Equals(Constants.DECODE_NAME_RECONSTRUCTEDFRAME))
                {
                    return(DecodedImage(request.layer));
                }

                // gets the action with the same name as the argument
                var action = _codecAction.SubActions.SingleOrDefault(c => c.Name.Equals(request.name));
                if (action == null || action.Result == null)
                {
                    return(PartialView("_Layers", layersGroup));
                }

                // create layers accroding to the given layer.
                // This is different with others
                string           idPrefix   = request.name.Replace(' ', '-').Replace('/', '-') + "-input-layer-" + request.layer;
                var              layerPanel = new PanelViewModel(idPrefix, "Layer " + request.layer);
                Tile             result     = action.Result.FirstOrDefault();
                Triplet <string> triplet    = result.GetStrings(TileSerializerFactory.GetDefaultSerizlizer());
                var              tabx       = new TabViewModel {
                    Id = idPrefix + "-Y", Title = "Y", Content = triplet.X, Editable = false
                };
                var taby = new TabViewModel {
                    Id = idPrefix + "-Cb", Title = "Cb", Content = triplet.Y, Editable = false
                };
                var tabz = new TabViewModel {
                    Id = idPrefix + "-Cr", Title = "Cr", Content = triplet.Z, Editable = false
                };
                layerPanel.Tabs = new List <TabViewModel> {
                    tabx, taby, tabz
                };
                layersGroup.Add(layerPanel);
            }
            catch (Exception ex)
            {
                return(Json(ReturnResult <string> .Fail(ex.Message)));
            }

            return(PartialView("_Layers", layersGroup));
        }
示例#5
0
        public async Task <IActionResult> Encode()
        {
            try
            {
                using (var bodyStream = new StreamReader(Request.Body))
                {
                    var bodyText = await bodyStream.ReadToEndAsync();

                    dynamic obj = JsonConvert.DeserializeObject(bodyText);

                    // 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 = this.HttpContext.Session.Get <string>(PreviousFrameImage);
                    Frame preFrame     = Utility.GetPreviousFrame(preFramePath, _codecAction.Parameters);

                    var encodeImagePath = this.HttpContext.Session.Get <string>(EncodedImage);
                    var tile            = Tile.FromFile(encodeImagePath);

                    ICodecAction diffing = _codecAction.SubActions.SingleOrDefault(c => c.Name.Equals(Constants.PENCODE_NAME_SUBBANDDIFFING));
                    diffing.Parameters[Constants.PARAM_NAME_PREVIOUS_FRAME] = preFrame;

                    _codecAction.DoAction(new[] { tile });
                }
                return(Json(ReturnResult <string> .Success("Success")));
            }
            catch (Exception ex)
            {
                return(Json(ReturnResult <string> .Fail(ex.Message)));
            }
        }
        public virtual ActionResult LayerPanel([FromBody] LayerPanelRequest request)
        {
            if (request.name.Equals(Constants.DECODE_NAME_RECONSTRUCTEDFRAME))
            {
                return(DecodedImage());
            }

            var layers = new List <PanelViewModel>();

            try
            {
                var action = _codecAction.SubActions.FirstOrDefault(c => c.Name.Equals(request.name));
                if (action == null || action.Result == null)
                {
                    return(PartialView("_Layers", layers));
                }

                for (int index = 0; index < action.Result.Length; index++)
                {
                    string           idPrefix = request.name.Replace(' ', '-') + "-layer-" + index;
                    var              layer    = new PanelViewModel(idPrefix, "Layer " + index);
                    Tile             result   = action.Result[index];
                    Triplet <string> triplet  = result.GetStrings(TileSerializerFactory.GetDefaultSerizlizer());
                    var              tabx     = new TabViewModel {
                        Id = idPrefix + "-Y", Title = "Y", Content = triplet.X, Editable = false
                    };
                    var taby = new TabViewModel {
                        Id = idPrefix + "-Cb", Title = "Cb", Content = triplet.Y, Editable = false
                    };
                    var tabz = new TabViewModel {
                        Id = idPrefix + "-Cr", Title = "Cr", Content = triplet.Z, Editable = false
                    };
                    layer.Tabs = new List <TabViewModel> {
                        tabx, taby, tabz
                    };
                    layers.Add(layer);
                }
            }
            catch (Exception ex)
            {
                return(Json(ReturnResult <string> .Fail(ex.Message)));
            }

            return(PartialView("_Layers", layers));
        }
        public async Task <IActionResult> Decode()
        {
            try
            {
                using (var bodyStream = new StreamReader(Request.Body))
                {
                    var bodyText = await bodyStream.ReadToEndAsync();

                    var obj = JsonConvert.DeserializeObject(bodyText);
                    Decode(obj);
                }
                return(Json(ReturnResult <string> .Success("Success")));
            }
            catch (Exception ex)
            {
                return(Json(ReturnResult <string> .Fail(ex.Message)));
            }
        }
        public async Task <IActionResult> Decode()
        {
            try
            {
                using (var bodyStream = new StreamReader(Request.Body))
                {
                    var bodyText = await bodyStream.ReadToEndAsync();

                    dynamic obj = (JObject)JsonConvert.DeserializeObject(bodyText);

                    // retrieve the quant
                    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);

                    string decOrHex = (string)obj.Params.DecOrHex;

                    Tile    tile       = null;
                    JObject jsonInputs = JObject.Parse(obj["Inputs"].ToString());
                    dynamic objInputs  = JsonConvert.DeserializeObject(jsonInputs.ToString());
                    string  y          = jsonInputs["Y"].ToString();
                    string  cb         = jsonInputs["Cb"].ToString();
                    string  cr         = jsonInputs["Cr"].ToString();

                    if (decOrHex.Equals("hex"))
                    {
                        tile = Tile.FromStrings(new Triplet <string>(y, cb, cr),
                                                new HexTileSerializer());
                    }
                    else
                    {
                        tile = Tile.FromStrings(new Triplet <string>(y, cb, cr),
                                                new IntegerTileSerializer());
                    }
                    _codecAction.DoAction(tile);

                    return(Json(ReturnResult <string> .Success("Success")));
                }
            }
            catch (Exception ex)
            {
                return(Json(ReturnResult <string> .Fail(ex.Message)));
            }
        }
        public virtual ActionResult InputPanel([FromBody] LayerPanelRequest request)
        {
            var layers = new List <PanelViewModel>();

            try
            {
                // gets the action with the same name as the argument
                var action = _codecAction.SubActions.FirstOrDefault(c => c.Name.Equals(request.name));
                if (action == null || action.Input == null)
                {
                    return(PartialView("_Layers", layers));
                }

                for (int index = 0; index < action.Input.Length; index++)
                {
                    string           idPrefix = request.name.Replace(' ', '-').Replace('/', '-') + "-input-layer-" + index;
                    var              layer    = new PanelViewModel(idPrefix, "Layer " + index);
                    Tile             result   = action.Input[index];
                    Triplet <string> triplet  = result.GetStrings(TileSerializerFactory.GetDefaultSerizlizer());
                    var              tabx     = new TabViewModel {
                        Id = idPrefix + "-Y", Title = "Y", Content = triplet.X, Editable = true
                    };
                    var taby = new TabViewModel {
                        Id = idPrefix + "-Cb", Title = "Cb", Content = triplet.Y, Editable = true
                    };
                    var tabz = new TabViewModel {
                        Id = idPrefix + "-Cr", Title = "Cr", Content = triplet.Z, Editable = true
                    };
                    layer.Tabs = new List <TabViewModel> {
                        tabx, taby, tabz
                    };
                    layers.Add(layer);
                }
            }
            catch (Exception ex)
            {
                return(Json(ReturnResult <string> .Fail(ex.Message)));
            }

            return(PartialView("_Layers", layers));
        }
        public ActionResult Upload(IFormFile file, string imageType)
        {
            if (this.Request.Form.Files.Count > 1)
            {
                return(Json(ReturnResult <string> .Fail("Please upload 1 image each time.")));
            }
            // file type
            if (file != null && file.Length > 0)
            {
                string[] filenames = file.FileName.Split(new[] { '.' });
                string   filename  = String.Format("{0}_{1}.{2}", filenames[0], DateTime.Now.Ticks, filenames.Length >= 2 ? filenames[1] : "");

                string uploadPath = Path.Combine(this._hostingEnvironment.WebRootPath, ActionHelper.ImageUploadFolder);
                if (!Directory.Exists(uploadPath))
                {
                    Directory.CreateDirectory(uploadPath);
                }

                var path = Path.Combine(uploadPath, filename);

                using (var fileStream = file.OpenReadStream())
                {
                    using (var newfileStream = new FileStream(path, FileMode.Create, FileAccess.Write))
                    {
                        fileStream.CopyTo(newfileStream);
                    }
                }

                if (imageType.Equals(EncodedImage))
                {
                    this.HttpContext.Session.SetObject(EncodedImage, path);
                }
                else if (imageType.Equals(PreviousFrameImage))
                {
                    this.HttpContext.Session.SetObject(PreviousFrameImage, path);
                }
            }
            return(Json(ReturnResult <string> .Success("Success")));
        }
        public async Task <IActionResult> UpdateDecodeStatus(int layer)
        {
            try
            {
                Dictionary <int, Tile> dasDic = this.HttpContext.Session.Get <Dictionary <int, Tile> >(ConstantDASDic);

                if (dasDic.ContainsKey(layer))
                {
                    this.HttpContext.Session.Get <Tile>(ConstantDAS).Add(dasDic[layer]);
                }

                Dictionary <int, Frame> preFrameDic = this.HttpContext.Session.Get <Dictionary <int, Frame> >(PreviousFrameDic);
                if (preFrameDic.ContainsKey(layer))
                {
                    this.HttpContext.Session.SetObject(DecodePreviousFrame, preFrameDic[layer]);
                }

                return(Json(ReturnResult <string> .Success("Success")));
            }
            catch (Exception ex)
            {
                return(Json(ReturnResult <string> .Fail(ex.Message)));
            }
        }
示例#12
0
        public IActionResult Save([FromBody] GuestBookRequestModel request)
        {
            try
            {
                if (string.IsNullOrEmpty(request.email) || string.IsNullOrEmpty(request.message))
                {
                    return(Json(ReturnResult <string> .Fail("Reqeust data is invalide")));
                }

                string guestbookPath = Path.Combine(this._hostingEnvironment.WebRootPath, "GuestBook");
                if (!Directory.Exists(guestbookPath))
                {
                    Directory.CreateDirectory(guestbookPath);
                }
                string guestbook = Path.Combine(guestbookPath, "gb-7E96D408-835C-474B-AED5-0214B3709DFB.txt");
                if (!System.IO.File.Exists(guestbook))
                {
                    System.IO.File.CreateText(guestbook).Close();
                }
                using (var writer = new StreamWriter(guestbook, true))
                {
                    writer.WriteLine("{");
                    writer.WriteLine("Email: " + request.email);
                    writer.WriteLine("Message:");
                    writer.WriteLine(request.message);
                    writer.WriteLine("}");
                    writer.WriteLine();
                    writer.WriteLine();
                }
                return(Json(ReturnResult <string> .Success("Success")));
            }
            catch (Exception ex)
            {
                return(Json(ReturnResult <string> .Fail(ex.Message)));
            }
        }
        public override ActionResult InputPanel([FromBody] LayerPanelRequest request)
        {
            // TODO: Extract Common with function Panel
            var layersGroup = new List <PanelViewModel>();

            try
            {
                var CodecActionDic = this.HttpContext.Session.Get <Dictionary <int, ICodecAction> >(ConstantCodecActionDic);
                _codecAction = CodecActionDic == null ? null : (CodecActionDic.ContainsKey(request.layer) ? CodecActionDic[request.layer] : null);

                if (_codecAction == null)
                {
                    return(PartialView("_Layers", layersGroup));
                }

                // gets the action with the same name as the argument
                var action = _codecAction.SubActions.SingleOrDefault(c => c.Name.Equals(request.name));
                if (action == null || action.Input == null)
                {
                    return(PartialView("_Layers", layersGroup));
                }

                // create layers accroding to the given layer.
                // This is different with others
                string idPrefix   = request.name.Replace(' ', '-').Replace('/', '-') + "-output-layer-" + request.layer;
                var    layerPanel = new PanelViewModel(idPrefix, "Layer " + request.layer);
                if (action.Input.Length > 1 && request.layer > 0)
                {
                    Tile             input      = action.Input[0];
                    Tile             rawInput   = action.Input[1];
                    Triplet <string> triplet    = input.GetStrings(TileSerializerFactory.GetDefaultSerizlizer());
                    Triplet <string> rawTriplet = rawInput.GetStrings(TileSerializerFactory.GetDefaultSerizlizer());
                    var tabx = new TabViewModel {
                        Id = idPrefix + "-Y", Title = "Y", Content = triplet.X, Editable = true
                    };
                    var tabrawx = new TabViewModel {
                        Id = idPrefix + "-YRaw", Title = "Y Raw Data", Content = rawTriplet.X, Editable = true
                    };
                    var taby = new TabViewModel {
                        Id = idPrefix + "-Cb", Title = "Cb", Content = triplet.Y, Editable = true
                    };
                    var tabrawy = new TabViewModel {
                        Id = idPrefix + "-CbRaw", Title = "Cb Raw Data", Content = rawTriplet.Y, Editable = true
                    };
                    var tabz = new TabViewModel {
                        Id = idPrefix + "-Cr", Title = "Cr", Content = triplet.Z, Editable = true
                    };
                    var tabrawz = new TabViewModel {
                        Id = idPrefix + "-CrRaw", Title = "Cr Raw Data", Content = rawTriplet.Z, Editable = true
                    };

                    layerPanel.Tabs = new List <TabViewModel> {
                        tabx, tabrawx, taby, tabrawy, tabz, tabrawz
                    };
                    layersGroup.Add(layerPanel);
                }
                else
                {
                    Tile             input   = action.Input.FirstOrDefault();
                    Triplet <string> triplet = input.GetStrings(TileSerializerFactory.GetDefaultSerizlizer());
                    var tabx = new TabViewModel {
                        Id = idPrefix + "-Y", Title = "Y", Content = triplet.X, Editable = true
                    };
                    var taby = new TabViewModel {
                        Id = idPrefix + "-Cb", Title = "Cb", Content = triplet.Y, Editable = true
                    };
                    var tabz = new TabViewModel {
                        Id = idPrefix + "-Cr", Title = "Cr", Content = triplet.Z, Editable = true
                    };
                    layerPanel.Tabs = new List <TabViewModel> {
                        tabx, taby, tabz
                    };
                    layersGroup.Add(layerPanel);
                }
            }
            catch (Exception ex)
            {
                return(Json(ReturnResult <string> .Fail(ex.Message)));
            }

            return(PartialView("_Layers", layersGroup));
        }
        public async Task <IActionResult> IndexWithInputs()
        {
            try
            {
                using (var bodyStream = new StreamReader(Request.Body))
                {
                    var bodyText = await bodyStream.ReadToEndAsync();

                    dynamic obj = JsonConvert.DeserializeObject(bodyText);

                    foreach (var input in obj)
                    {
                        // TODO: refine this
                        if (input != null && input.Inputs != null)
                        {
                            int layer = JsonHelper.CastTo <int>(input.Layer);
                            if (layer == 0)
                            {
                                // TODO: refine this
                                // retrieve the quant
                                var quantArray = JsonHelper.RetrieveQuantsArray(input.Params.QuantizationFactorsArray);
                                // retrive the progressive quants
                                var progQuantList = new List <QuantizationFactorsArray>();
                                foreach (var layerQuant in input.Params.ProgQuantizationArray)
                                {
                                    var layerQuants = JsonHelper.RetrieveQuantsArray(layerQuant);
                                    progQuantList.Add(layerQuants);
                                }
                                var progQuantarray = new ProgressiveQuantizationFactors
                                {
                                    ProgQuants = progQuantList
                                };

                                EntropyAlgorithm     algorithm            = JsonHelper.CastTo <EntropyAlgorithm>(input.Params.EntropyAlgorithm);
                                UseDifferenceTile    useDifferenceTile    = JsonHelper.CastTo <UseDifferenceTile>(input.Params.UseDifferenceTile);
                                UseReduceExtrapolate useReduceExtrapolate = JsonHelper.CastTo <UseReduceExtrapolate>(input.Params.UseReduceExtrapolate);

                                _viewModel = new RFXPDecodeViewModel(0);
                                ((RFXPDecodeViewModel)_viewModel).ProvideParam(quantArray, progQuantarray, algorithm, useDifferenceTile, useReduceExtrapolate);

                                JArray jsonInputs = JArray.Parse(input["Inputs"].ToString());
                                ((RFXPDecodeViewModel)_viewModel).ProvidePanelInputs(layer, jsonInputs[0].TrimEnter(), jsonInputs[1].TrimEnter(), jsonInputs[2].TrimEnter());

                                this.HttpContext.Session.SetObject(ModelKey, _viewModel);
                                this.HttpContext.Session.SetObject(isPreFrameValid, true);
                            }

                            Decode(input);
                            // Updates Decode Status
                            await UpdateDecodeStatus(layer);
                        }
                    }
                }

                this.HttpContext.Session.SetObject(IsValid, true);
                return(Json(ReturnResult <string> .Success("Success")));
            }
            catch (Exception ex)
            {
                return(Json(ReturnResult <string> .Fail(ex.Message)));
            }
        }
        public virtual ActionResult Recompute([FromBody] RecomputeRequest request)
        {
            // gets the action with the same name as the argument
            var action = _codecAction.SubActions.FirstOrDefault(c => c.Name.Equals(request.Action));

            // if action not found
            if (action == null)
            {
                return(Json(ReturnResult <string> .Fail("Action not found")));
            }

            // retrieve the quant
            var quantArray = JsonHelper.RetrieveQuantsArray(request.Params.QuantizationFactorsArray);

            foreach (var _action in _codecAction.SubActions)
            {
                _action.Parameters[Constants.PARAM_NAME_QUANT_FACTORS_ARRAY] = quantArray;
                _action.Parameters[Constants.PARAM_NAME_ENTROPY_ALGORITHM]   = JsonHelper.CastTo <EntropyAlgorithm>(request.Params.EntropyAlgorithm);
            }

            // retrive tiles from Inputs
            var tileList = new List <Tile>();

            foreach (var tileJson in request.Inputs)
            {
                Triplet <string> triplet    = JsonHelper.RetrieveTriplet(tileJson);
                string           dataFormat = request.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.FirstOrDefault());

            // 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(request.Action))
                    {
                        following = true;
                    }
                }
            }

            return(Json(ReturnResult <string> .Success("Success")));
        }
示例#16
0
        public override ActionResult Recompute([FromBody] RecomputeRequest request)
        {
            // TODO: Add parameters obtain into a function
            string name = JsonHelper.CastTo <string>(request.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(Json(ReturnResult <string> .Fail("Action not found")));
            }

            // retrieve the quant
            var quantArray = JsonHelper.RetrieveQuantsArray(request.Params.QuantizationFactorsArray);

            _codecAction.Parameters[Constants.PARAM_NAME_QUANT_FACTORS_ARRAY] = quantArray;

            // retrive the progressive quants
            var progQuantList = new List <QuantizationFactorsArray>();

            foreach (var layer in request.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>(request.Params.EntropyAlgorithm);
            _codecAction.Parameters[Constants.PARAM_NAME_USE_REDUCE_EXTRAPOLATE] = JsonHelper.CastTo <UseReduceExtrapolate>(request.Params.UseReduceExtrapolate);

            // TODO: error handle
            var   preFramePath = this.HttpContext.Session.Get <string>(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 request.Inputs)
            {
                Triplet <string> triplet = JsonHelper.RetrieveTriplet(tileJson);

                string dataFormat = request.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(Json(ReturnResult <string> .Success("Success")));
        }
        public override ActionResult Recompute([FromBody] RecomputeRequest request)
        {
            //dynamic obj = CodecBaseController.GetJsonObject(Request.InputStream);

            //int layer = JsonHelper.CastTo<int>(request.Layer);

            ICodecAction _rfxDecode = GetDecoderWithParameters(request);

            string name = JsonHelper.CastTo <string>(request.Action);

            // gets the action with the same name as the argument
            var action = _rfxDecode.SubActions.SingleOrDefault(c => c.Name.Equals(name));

            // if action not found
            if (action == null)
            {
                return(Json(ReturnResult <string> .Fail("Action not found")));
            }

            // retrive tiles from Inputs
            var tileList = new List <Tile>();

            foreach (var tileJson in request.Inputs)
            {
                Triplet <string> triplet = JsonHelper.RetrieveTriplet(tileJson);

                string dataFormat = request.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);
            }

            // hand over parameters
            foreach (var key in _rfxDecode.Parameters.Keys)
            {
                action.Parameters[key] = _rfxDecode.Parameters[key];
            }

            var result = action.DoAction(tileList.ToArray());

            // recompute the following steps and update
            bool following = false;

            Tile[] input = result;
            foreach (var act in _rfxDecode.SubActions)
            {
                if (following)
                {
                    // hand over parameters
                    foreach (var key in _rfxDecode.Parameters.Keys)
                    {
                        act.Parameters[key] = _rfxDecode.Parameters[key];
                    }
                    result = act.DoAction(input);
                    input  = result;
                }
                else
                {
                    if (act.Name.Equals(name))
                    {
                        following = true;
                    }
                }
            }

            return(Json(ReturnResult <string> .Success("Success")));
        }