Ejemplo n.º 1
0
        public void ShowMacroblock(Macroblock mb)
        {
            m_Mb = mb;
            int xFracL, yFracL;

            H264Mb mbH264 = (m_Mb.Mb as H264Mb);

            for (int i = 0; i < 16; ++i)
            {
                xFracL = mbH264.mvL0[i].x & 3;
                yFracL = mbH264.mvL0[i].y & 3;
                m_TextBlocks[i].Text  = "---List0---";
                m_TextBlocks[i].Text += String.Format("\nMV({0}, {1})\nMVD({2}, {3})", mbH264.mvL0[i].x, mbH264.mvL0[i].y, mbH264.mvd_l0[i].x, mbH264.mvd_l0[i].y);
                m_TextBlocks[i].Text += String.Format("\nFrac({0}, {1})", xFracL != 0 ? (xFracL == 2 ? "Half" : "Quater") : "Integer", yFracL != 0 ? (xFracL == 2 ? "Half" : "Quater") : "Integer");
                m_TextBlocks[i].Text += String.Format("\nPOC={0}, RefIdx={1}", mbH264.POC0[H264Mb.BLK4x4ToBLK8x8[i]], mbH264.ref_idx_L0[H264Mb.BLK4x4ToBLK8x8[i]]);
            }

            if (mbH264.SliceType == SliceType.B_SLICE)
            {
                for (int i = 0; i < 16; ++i)
                {
                    xFracL = mbH264.mvL1[i].x & 3;
                    yFracL = mbH264.mvL1[i].y & 3;
                    m_TextBlocks[i].Text += "\n---List1---";
                    m_TextBlocks[i].Text += String.Format("\nMV({0}, {1})\nMVD({2}, {3})", mbH264.mvL1[i].x, mbH264.mvL1[i].y, mbH264.mvd_l1[i].x, mbH264.mvd_l1[i].y);
                    m_TextBlocks[i].Text += String.Format("\nFrac({0}, {1})", xFracL != 0 ? (xFracL == 2 ? "Half" : "Quater") : "Integer", yFracL != 0 ? (xFracL == 2 ? "Half" : "Quater") : "Integer");
                    m_TextBlocks[i].Text += String.Format("\nPOC={0}, RefIdx={1}", mbH264.POC1[H264Mb.BLK4x4ToBLK8x8[i]], mbH264.ref_idx_L1[H264Mb.BLK4x4ToBLK8x8[i]]);
                }
            }
        }
        public void ShowMacroblock(Macroblock mb)
        {
            H264Mb mbH264 = (mb.Mb as H264Mb);

            m_TextBlockAddress.Text    = String.Format("{0}({1},{2})", mb.Mb.Address, mb.Mb.X, mb.Mb.Y);
            m_TextBlockLocation.Text   = String.Format("({0},{1})", mb.Mb.X << 4, mb.Mb.Y << 4);
            m_TextBlockType.Text       = mbH264.TypeDescription;
            m_TextBlockPicture.Text    = String.Format("{0} (DQId={1})", mb.PictureId, mb.LayerId);
            m_TextBlockSlice.Text      = String.Format("{0}\n{1}", mb.SliceId, mbH264.SliceType);
            m_TextBlockBitsStart.Text  = String.IsNullOrEmpty(mb.Mb.BitsStart) ? "-" : mb.Mb.BitsStart;
            m_TextBlockBitsCount.Text  = mb.Mb.BitsCount.ToString();
            m_TextBlockQP.Text         = mbH264.QP.ToString();
            m_TextBlockQPC.Text        = mbH264.QPC.ToString();
            m_TextBlockCBP.Text        = String.Format("{0}: L={1},C={2}", mbH264.CBP, mbH264.CBP & 15, mbH264.CBP >> 4);
            m_TextBlockMbPartNum.Text  = mbH264.NumMbPart.ToString();
            m_TextBlockMbPartSize.Text = String.Format("({0},{1})", mbH264.MbPartSize.Width, mbH264.MbPartSize.Height);
            if (mbH264.IsIntra)
            {
                m_TextBlockMbIntraChromaMode.Text = String.Format("[{0}] {1}", (int)mbH264.IntraChromaPredMode, mbH264.IntraChromaPredMode);
            }
            else
            {
                m_TextBlockMbIntraChromaMode.Text = "-";
            }
            m_TextBlockMD5.Text = String.Format("Y\t= {0}\nU\t= {1}\nV\t= {2}", mb.MD5Y, mb.MD5U, mb.MD5V).ToUpper();
        }
 public void ShowMacroblock(Macroblock mb)
 {
     H264Mb mbH264 = (mb.Mb as H264Mb);
     m_TextBlockAddress.Text = String.Format("{0}({1},{2})", mb.Mb.Address, mb.Mb.X, mb.Mb.Y);
     m_TextBlockLocation.Text = String.Format("({0},{1})", mb.Mb.X << 4, mb.Mb.Y << 4);
     m_TextBlockType.Text = mbH264.TypeDescription;
     m_TextBlockPicture.Text = String.Format("{0} (DQId={1})", mb.PictureId, mb.LayerId);
     m_TextBlockSlice.Text = String.Format("{0}\n{1}", mb.SliceId, mbH264.SliceType);
     m_TextBlockBitsStart.Text = String.IsNullOrEmpty(mb.Mb.BitsStart) ? "-" : mb.Mb.BitsStart;
     m_TextBlockBitsCount.Text = mb.Mb.BitsCount.ToString();
     m_TextBlockQP.Text = mbH264.QP.ToString();
     m_TextBlockQPC.Text = mbH264.QPC.ToString();
     m_TextBlockCBP.Text = String.Format("{0}: L={1},C={2}", mbH264.CBP, mbH264.CBP & 15, mbH264.CBP >> 4);
     m_TextBlockMbPartNum.Text = mbH264.NumMbPart.ToString();
     m_TextBlockMbPartSize.Text = String.Format("({0},{1})", mbH264.MbPartSize.Width, mbH264.MbPartSize.Height);
     if (mbH264.IsIntra)
     {
         m_TextBlockMbIntraChromaMode.Text = String.Format("[{0}] {1}", (int)mbH264.IntraChromaPredMode, mbH264.IntraChromaPredMode);
     }
     else
     {
         m_TextBlockMbIntraChromaMode.Text = "-";
     }
     m_TextBlockMD5.Text = String.Format("Y\t= {0}\nU\t= {1}\nV\t= {2}", mb.MD5Y, mb.MD5U, mb.MD5V).ToUpper();
 }
        public void ShowMacroblock(Macroblock mb)
        {
            m_Mb = mb;
            int xFracL, yFracL;

            H264Mb mbH264 = (m_Mb.Mb as H264Mb);
            for (int i = 0; i < 16; ++i)
            {
                xFracL = mbH264.mvL0[i].x & 3;
                yFracL = mbH264.mvL0[i].y & 3;
                m_TextBlocks[i].Text = "---List0---";
                m_TextBlocks[i].Text += String.Format("\nMV({0}, {1})\nMVD({2}, {3})", mbH264.mvL0[i].x, mbH264.mvL0[i].y, mbH264.mvd_l0[i].x, mbH264.mvd_l0[i].y);
                m_TextBlocks[i].Text += String.Format("\nFrac({0}, {1})", xFracL != 0 ? (xFracL == 2 ? "Half" : "Quater") : "Integer", yFracL != 0 ? (xFracL == 2 ? "Half" : "Quater") : "Integer");
                m_TextBlocks[i].Text += String.Format("\nPOC={0}, RefIdx={1}", mbH264.POC0[H264Mb.BLK4x4ToBLK8x8[i]], mbH264.ref_idx_L0[H264Mb.BLK4x4ToBLK8x8[i]]);
            }

            if (mbH264.SliceType == SliceType.B_SLICE)
            {
                for (int i = 0; i < 16; ++i)
                {
                    xFracL = mbH264.mvL1[i].x & 3;
                    yFracL = mbH264.mvL1[i].y & 3;
                    m_TextBlocks[i].Text += "\n---List1---";
                    m_TextBlocks[i].Text += String.Format("\nMV({0}, {1})\nMVD({2}, {3})", mbH264.mvL1[i].x, mbH264.mvL1[i].y, mbH264.mvd_l1[i].x, mbH264.mvd_l1[i].y);
                    m_TextBlocks[i].Text += String.Format("\nFrac({0}, {1})", xFracL != 0 ? (xFracL == 2 ? "Half" : "Quater") : "Integer", yFracL != 0 ? (xFracL == 2 ? "Half" : "Quater") : "Integer");
                    m_TextBlocks[i].Text += String.Format("\nPOC={0}, RefIdx={1}", mbH264.POC1[H264Mb.BLK4x4ToBLK8x8[i]], mbH264.ref_idx_L1[H264Mb.BLK4x4ToBLK8x8[i]]);
                }
            }
        }
Ejemplo n.º 5
0
        void m_Image_MouseMove(object sender, MouseEventArgs e)
        {
            lock (this)
            {
                if (m_Picture != null && m_Image.Source != null && m_numberOfMbInRow > 0 && m_numberOfMbInCol > 0)
                {
                    double mbWidth, mbHeight;
                    int    mbX, mbY, mbAddress;
                    Point  mousePosition = e.GetPosition(m_Image);
                    GetMbPosition(mousePosition, out mbX, out mbY, out mbAddress, out mbWidth, out mbHeight);
                    Macroblock mb = m_Picture.GetMacroblockByLocation((UInt32)mbX, (UInt32)mbY);

                    m_TextBlockImageToolTip.Text = String.Format("MB {0}({1},{2})", mbAddress, mbX, mbY);
                    if (mb != null)
                    {
                        m_TextBlockImageToolTip.Text += String.Format("\nSlice: {0}, {1}", mb.SliceId, (mb.Mb as H264Mb).SliceType);
                        m_TextBlockImageToolTip.Text += String.Format("\nType: {0}", (mb.Mb as H264Mb).TypeDescription);
                    }
                    m_FloatingToolTip.HorizontalOffset = mousePosition.X + 20;
                    m_FloatingToolTip.VerticalOffset   = mousePosition.Y;
                    m_FloatingToolTip.IsOpen           = true;

                    if (m_LastHoverMacroblockAddress != mbAddress)
                    {
                        RaiseMbSelectionEvent((UInt32)mbX, (UInt32)mbY, MacroblockEventArgs.MacroblockEventType_t.MacroblockEventType_Hover);
                        m_LastHoverMacroblockAddress = mbAddress;
                    }
                }
            }
        }
        protected Intra16X16LumaAbstractPredictor(int x, int y, Macroblock macroblock, IAlgorithmFactory algorithms)
        {
            this.x = x;
            this.y = y;
            access = macroblock.MacroblockAccess;
            info = new MacroblockInfo(macroblock);
            transform = algorithms.CreateTransform();
            quantizer = algorithms.CreateQuantizer();
            distortion = algorithms.CreateDistortionMetric();
            scanner = algorithms.CreateScanner();
            mOrig = new int[mbHeight][];
            for (var i = 0; i < mOrig.Length; i++)
                mOrig[i] = new int[mbWidth];

            mResd = new int[mbHeight][];
            for (var i = 0; i < mResd.Length; i++)
                mResd[i] = new int[mbWidth];

            mPred = new int[mbHeight][];
            for (var i = 0; i < mPred.Length; i++)
                mPred[i] = new int[mbWidth];

            mDc = new int[dcHeight][];
            for (var i = 0; i < mDc.Length; i++)
                mDc[i] = new int[dcWidth];
        }
 protected MacroblockAccess(Macroblock macroblock)
 {
     macroblockX = macroblock;
     mbNr = macroblockX.MbNr;
     frameWidth = macroblockX.Slice.Picture.Width;
     picWidthInMbs = frameWidth / Macroblock.MbWidth;
     picSizeInMbs = macroblockX.Slice.Picture.PicSizeInMbs;
 }
Ejemplo n.º 8
0
        public void ShowMacroblock(Macroblock mb)
        {
            H264Mb mbH264 = (mb.Mb as H264Mb);

            m_TextBlockInCropWindow.Text           = mbH264.IsInCropWindow ? "True" : "False";
            m_TextBlockResidualPredictionFlag.Text = mbH264.IsResidualPredictionFlag ? "1" : "0";
            m_TextBlockBLSkippedFlag.Text          = mbH264.IsBLSkippedFlag ? "1" : "0";
        }
Ejemplo n.º 9
0
        public void ShowMacroblock(Macroblock mb)
        {
            lock (this)
            {
                if ((m_Mb != mb) && mb != null)
                {
                    m_Mb = mb;
                    Int32[] bits4x4;
                    UInt32  YCount = 0, UCount = 0, VCount = 0;

                    m_DataSourceY.Clear();
                    m_DataSourceU.Clear();
                    m_DataSourceV.Clear();

                    m_TextBlockMacroblockInfo.Text = String.Format("{0} / MB {1}({2}, {3}) / Slice:{4} / Picture:{5} / Layer:{6}", m_Title, mb.Mb.Address, mb.Mb.X << 4, mb.Mb.Y << 4, mb.SliceId, mb.PictureId, mb.LayerId);

                    for (uint y = 0; y < 4; y++)
                    {
                        MbBits4x4Row rowY = new MbBits4x4Row();
                        MbBits4x4Row rowU = new MbBits4x4Row();
                        MbBits4x4Row rowV = new MbBits4x4Row();
                        for (uint x = 0; x < 4; x++)
                        {
                            // Y
                            bits4x4 = m_Mb.Mb.GetMbBits4x4(CommonYuvLine_t.CommonYuvLine_Y, m_DataType, x, y);
                            if (bits4x4 != null)
                            {
                                rowY.Add(new MbBits4x4(YCount++, x, y, bits4x4));
                            }
                            // U
                            bits4x4 = m_Mb.Mb.GetMbBits4x4(CommonYuvLine_t.CommonYuvLine_U, m_DataType, x, y);
                            if (bits4x4 != null)
                            {
                                rowU.Add(new MbBits4x4(UCount++, x, y, bits4x4));
                            }
                            // V
                            bits4x4 = m_Mb.Mb.GetMbBits4x4(CommonYuvLine_t.CommonYuvLine_V, m_DataType, x, y);
                            if (bits4x4 != null)
                            {
                                rowV.Add(new MbBits4x4(VCount++, x, y, bits4x4));
                            }
                        }
                        if (rowY.Row.Count > 0)
                        {
                            m_DataSourceY.Add(rowY);
                        }
                        if (rowU.Row.Count > 0)
                        {
                            m_DataSourceU.Add(rowU);
                        }
                        if (rowV.Row.Count > 0)
                        {
                            m_DataSourceV.Add(rowV);
                        }
                    }
                }
            }
        }
        public void ShowMacroblock(Macroblock mb)
        {
            m_Mb = mb;

            H264Mb mbH264 = (m_Mb.Mb as H264Mb);
            for (int i = 0; i < 16; ++i)
            {
                m_TextBlocks[i].Text = String.Format("[{0}] {1}", (int)mbH264.Intra4x4PredMode[i], Utils.GetIntra4x4PredModeName(mbH264.Intra4x4PredMode[i]));
            }
        }
        public void ShowMacroblock(Macroblock mb)
        {
            m_Mb = mb;

            H264Mb mbH264 = (m_Mb.Mb as H264Mb);
            m_TextBlock0.Text = mbH264.BlkModes[0].ToString();
            m_TextBlock1.Text = mbH264.BlkModes[1].ToString();
            m_TextBlock2.Text = mbH264.BlkModes[2].ToString();
            m_TextBlock3.Text = mbH264.BlkModes[3].ToString();
        }
Ejemplo n.º 12
0
        public void ShowMacroblock(Macroblock mb)
        {
            m_Mb = mb;

            H264Mb mbH264 = (m_Mb.Mb as H264Mb);

            m_TextBlock0.Text = mbH264.BlkModes[0].ToString();
            m_TextBlock1.Text = mbH264.BlkModes[1].ToString();
            m_TextBlock2.Text = mbH264.BlkModes[2].ToString();
            m_TextBlock3.Text = mbH264.BlkModes[3].ToString();
        }
Ejemplo n.º 13
0
        public void ShowMacroblock(Macroblock mb)
        {
            m_Mb = mb;

            H264Mb mbH264 = (m_Mb.Mb as H264Mb);

            for (int i = 0; i < 16; ++i)
            {
                m_TextBlocks[i].Text = String.Format("[{0}] {1}", (int)mbH264.Intra4x4PredMode[i], Utils.GetIntra4x4PredModeName(mbH264.Intra4x4PredMode[i]));
            }
        }
 public MacroblockPosition(Macroblock macroblock)
 {
     var mbNr = macroblock.MbNr;
     var frameWidth = macroblock.Slice.Picture.Width;
     var picWidthInMbs = frameWidth / Macroblock.MbWidth;
     MbX = mbNr % picWidthInMbs;
     MbY = mbNr / picWidthInMbs;
     PixelX = MbX * Macroblock.MbWidth;
     PixelY = MbY * Macroblock.MbHeight;
     PixelChromaX = (MbX * Macroblock.MbChromaWidth);
     PixelChromaY = (MbY * Macroblock.MbChromaHeight);
 }
Ejemplo n.º 15
0
        void ShowHeadersFromSelectedMb(Macroblock selectMb)
        {
            if (m_Engine.Decoder.FileInput.EncodingType == EncodingType.H264)
            {
                H264Picture h264Picture = (m_SelectedPicture as H264Picture);
                Debug.Assert(h264Picture != null);

                H264Slice h264Slice = h264Picture.Slices[selectMb.SliceId];
                Debug.Assert(h264Slice != null);

                ShowH264Headers(new[] { h264Slice.PicParamSet.Nalu }, new[] { h264Slice.SeqParamSet.Nalu }, new[] { h264Slice.Nalu });
            }
        }
Ejemplo n.º 16
0
 void RaiseMbSelectionEvent(UInt32 mbX, UInt32 mbY, MacroblockEventArgs.MacroblockEventType_t selectionType)
 {
     lock (this)
     {
         if (OnMacroblockEvent != null)
         {
             Macroblock mbObject = m_Picture.GetMacroblockByLocation((UInt32)mbX, (UInt32)mbY);
             if (mbObject != null)
             {
                 EventHandlerTrigger.TriggerEvent <MacroblockEventArgs>(OnMacroblockEvent, this, new MacroblockEventArgs(selectionType, mbObject));
             }
         }
     }
 }
Ejemplo n.º 17
0
        public IpcmEncodingMode(Macroblock macroblock)
            : base(macroblock, MacroblockType.Ipcm)
        {
            bufferY = new int[Macroblock.MbWidth][];
            for (var i = 0; i < bufferY.Length; i++)
                bufferY[i] = new int[Macroblock.MbHeight];

            bufferU = new int[Macroblock.MbChromaWidth][];
            for (var i = 0; i < bufferU.Length; i++)
                bufferU[i] = new int[Macroblock.MbChromaHeight];

            bufferV = new int[Macroblock.MbChromaWidth][];
            for (var i = 0; i < bufferV.Length; i++)
                bufferV[i] = new int[Macroblock.MbChromaHeight];
        }
 public Intra8X8ChromaHorizontalPredictor(int x, int y, Macroblock macroblock, IAlgorithmFactory algorithms)
     : base(x, y, macroblock, algorithms)
 {
 }
Ejemplo n.º 19
0
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            //m_Engine = Engine.CreateRawH264("C:\\Projects\\toulde\\videos\\AUD_MW_E\\AUD_MW_E.264", "AUD_MW_E.yuv");
            //m_Engine = Engine.CreateRawH264("C:\\Projects\\toulde\\videos\\FM1_BT_B\\FM1_BT_B.264", "FM1_BT_B.yuv"); // multiple slices + deblocking
            m_Engine = Engine.CreateRawH264("C:\\Projects\\toulde\\videos\\SVCBS-1\\SVCBS-1\\SVCBS-1.264", "SVCBS-1.yuv"); // Vidyo
            //m_Engine = Engine.CreateRawH264("C:\\Projects\\toulde\\videos\\freh1_b\\Freh1_B.264", "Freh1_B.yuv");
            //m_Engine = Engine.CreateRawH264("C:\\Projects\\hl78965\\clean\\hartallo\\encoderSVC.264", "encoderSVC.yuv");
            //m_Engine = Engine.CreateRawH264("C:\\Projects\\hl78965\\clean\\hartallo\\encoderAVC.264", "encoder.yuv");
            //m_Engine = Engine.CreateRawH264("C:\\Projects\\hl78965\\clean\\hartallo\\encoder.264", "encoder.yuv"); // New Hartallo
            //m_Engine = Engine.CreateRawH264("C:\\Projects\\hl78965\\clean\\hartallo\\encoder_avc_10frms_noearlyterm.264", "encoder.yuv"); // Old Hartallo
            //m_Engine = Engine.CreateRawH264("C:\\tmp\\x264_104\\output.264", "encoder.yuv"); // x264
            //m_Engine = Engine.CreateRawH264("C:\\Projects\\JM\\output.264", "encoder.yuv"); // JM
            //m_Engine = Engine.CreateRawH264("C:\\Projects\\hartallo\\tests\\TestH264\\bourne.264", "bourne.yuv");// bourne

            // Screen Previews
            m_ScreenPictureViews = new ScreenPictureView[Utils.GetMaxEnumValue<CommonEltMbDataType_t>()];
            for (int k = 0; k < m_ScreenPictureViews.Length; ++k )
            {
                m_ScreenPictureViews[k] = new ScreenPictureView((CommonEltMbDataType_t)k);
                ScreenBase.AddToTabControl(m_ScreenPictureViews[k], tabControlPictureView);
                m_ScreenPictureViews[k].OnMacroblockEvent += (_sender, _e) =>
                {
                    switch (_e.Type)
                    {
                        // Screen Macroblocks
                        case MacroblockEventArgs.MacroblockEventType_t.MacroblockEventType_Selected:
                            {
                                m_SelectedMacroblock = _e.Macroblock;
                                // Macroblock Bits
                                if (m_ScreenMbBits == null)
                                {
                                    m_ScreenMbBits = new ScreenMbBits[Utils.GetMaxEnumValue<CommonEltMbDataType_t>()];
                                    for (int i = 0; i < m_ScreenMbBits.Length; ++i)
                                    {
                                        m_ScreenMbBits[i] = new ScreenMbBits((CommonEltMbDataType_t)i);
                                        ScreenBase.AddToTabControl(m_ScreenMbBits[i], tabControlMacroblockBits);
                                    }
                                    tabControlMacroblockBits.SelectedIndex = (int)CommonEltMbDataType_t.CommonEltMbDataType_Final;
                                }

                                if (tabControlMacroblockBits.SelectedIndex != -1)
                                {
                                    m_ScreenMbBits[tabControlMacroblockBits.SelectedIndex].ShowMacroblock(_e.Macroblock);
                                }
                                // Macroblock Info
                                if (m_ScreenScreenMbInfo == null)
                                {
                                    m_ScreenScreenMbInfo = new ScreenMbInfo();
                                    ScreenBase.AddToTabControl(m_ScreenScreenMbInfo, tabControlInfo);
                                }
                                m_ScreenScreenMbInfo.ShowMacroblock(_e.Macroblock);
                                // Headers(PPS, SPS, SLICE) associated to this Macroblock
                                ShowHeadersFromSelectedMb(_e.Macroblock);
                                break;
                            }
                    }
                };
            }

            (m_Engine.Decoder as DecoderVideo).OnPictureEvent += (_sender, _e) =>
                {
                    switch (_e.Type)
                    {
                        case PictureEventArgs.PictureEventType_t.PictureEventType_Added:
                            {
                                if (!m_ScreenThumbnails.ContainsKey(_e.Picture.LayerId))
                                {
                                    m_ScreenThumbnails[_e.Picture.LayerId] = new ScreenThumbnails(_e.Picture.LayerId);
                                    ScreenBase.AddToTabControl(m_ScreenThumbnails[_e.Picture.LayerId], tabControlThumbs);
                                    m_ScreenThumbnails[_e.Picture.LayerId].OnPictureEvent += new EventHandler<PictureEventArgs>(Thumbnails_OnPictureEvent);
                                }
                                m_ScreenThumbnails[_e.Picture.LayerId].AddPicture(_e.Picture);
                                break;
                            }
                    }
                };

            // TabControls selection changed events

            tabControlPictureView.SelectionChanged += (_sender, _e) =>
                {
                    m_ScreenPictureViews[tabControlPictureView.SelectedIndex].ShowPicture(m_SelectedPicture);
                };
            tabControlMacroblockBits.SelectionChanged += (_sender, _e) =>
            {
                m_ScreenMbBits[tabControlMacroblockBits.SelectedIndex].ShowMacroblock(m_SelectedMacroblock);
            };

            //FIXME:
            /*http://stackoverflow.com/questions/5480372/whats-the-best-way-to-update-an-observablecollection-from-another-thread*/

            //this.Dispatcher.BeginInvoke((Action)(() => { mEngine.Decoder.Decode(uint.MaxValue); }));
            // FIXME
            new Thread(delegate()
            {
                m_Engine.Decoder.Decode(/*uint.MaxValue*/200);
            })
            .Start();
        }
Ejemplo n.º 20
0
        public void ShowMacroblock(Macroblock mb)
        {
            lock (this)
            {
                if ((m_Mb != mb) && mb != null)
                {
                    m_Mb = mb;
                    Int32[] bits4x4;
                    UInt32 YCount = 0, UCount = 0, VCount = 0;

                    m_DataSourceY.Clear();
                    m_DataSourceU.Clear();
                    m_DataSourceV.Clear();

                    m_TextBlockMacroblockInfo.Text = String.Format("{0} / MB {1}({2}, {3}) / Slice:{4} / Picture:{5} / Layer:{6}", m_Title, mb.Mb.Address, mb.Mb.X << 4, mb.Mb.Y << 4, mb.SliceId, mb.PictureId, mb.LayerId);

                    for (uint y = 0; y < 4; y++)
                    {
                        MbBits4x4Row rowY = new MbBits4x4Row();
                        MbBits4x4Row rowU = new MbBits4x4Row();
                        MbBits4x4Row rowV = new MbBits4x4Row();
                        for (uint x = 0; x < 4; x++)
                        {
                            // Y
                            bits4x4 = m_Mb.Mb.GetMbBits4x4(CommonYuvLine_t.CommonYuvLine_Y, m_DataType, x, y);
                            if (bits4x4 != null)
                            {
                                rowY.Add(new MbBits4x4(YCount++, x, y, bits4x4));
                            }
                            // U
                            bits4x4 = m_Mb.Mb.GetMbBits4x4(CommonYuvLine_t.CommonYuvLine_U, m_DataType, x, y);
                            if (bits4x4 != null)
                            {
                                rowU.Add(new MbBits4x4(UCount++, x, y, bits4x4));
                            }
                            // V
                            bits4x4 = m_Mb.Mb.GetMbBits4x4(CommonYuvLine_t.CommonYuvLine_V, m_DataType, x, y);
                            if (bits4x4 != null)
                            {
                                rowV.Add(new MbBits4x4(VCount++, x, y, bits4x4));
                            }
                        }
                       if (rowY.Row.Count > 0)
                        {
                            m_DataSourceY.Add(rowY);
                        }
                        if (rowU.Row.Count > 0)
                        {
                            m_DataSourceU.Add(rowU);
                        }
                        if (rowV.Row.Count > 0)
                        {
                            m_DataSourceV.Add(rowV);
                        }
                    }
                }
            }
        }
 public Intra16X16LumaPlanePredictor(int x, int y, Macroblock macroblock, IAlgorithmFactory algorithms)
     : base(x, y, macroblock, algorithms)
 {
 }
Ejemplo n.º 22
0
        void ShowHeadersFromSelectedMb(Macroblock selectMb)
        {
            if (m_Engine.Decoder.FileInput.EncodingType == EncodingType.H264)
            {
                H264Picture h264Picture = (m_SelectedPicture as H264Picture);
                Debug.Assert(h264Picture != null);

                H264Slice h264Slice = h264Picture.Slices[selectMb.SliceId];
                Debug.Assert(h264Slice != null);

                ShowH264Headers(new[] { h264Slice.PicParamSet.Nalu }, new[] { h264Slice.SeqParamSet.Nalu }, new[] { h264Slice.Nalu });
            }
        }
 public MacroblockAccessNonMbaff(Macroblock macroblock)
     : base(macroblock)
 {
 }
Ejemplo n.º 24
0
        public void ShowMacroblock(Macroblock mb)
        {
            m_Mb = mb;
            H264Mb mbH264 = m_Mb.Mb as H264Mb;

            if (mbH264 != null) // For now only H.264 is supported
            {
                // General
                if (m_ScreenGeneral == null)
                {
                    m_ScreenGeneral = new ScreenMbInfoGeneral();
                    AddToTabControl(m_ScreenGeneral, tabControl);
                }
                m_ScreenGeneral.ShowMacroblock(m_Mb);

                // Intra4x4PredMode
                if (mbH264.Mode == MbMode.INTRA_4X4)
                {
                    if (m_ScreenMbInfoI4x4PredMode == null)
                    {
                        m_ScreenMbInfoI4x4PredMode     = new ScreenMbInfoI4x4PredMode();
                        m_ScreenMbInfoI4x4PredMode.Tag = false;
                    }
                    if (!(m_ScreenMbInfoI4x4PredMode.Tag as Boolean?).Value)
                    {
                        AddToTabControl(m_ScreenMbInfoI4x4PredMode, tabControl);
                        m_ScreenMbInfoI4x4PredMode.Tag = true;
                    }
                    m_ScreenMbInfoI4x4PredMode.ShowMacroblock(m_Mb);
                }
                else
                {
                    if (m_ScreenMbInfoI4x4PredMode != null && (m_ScreenMbInfoI4x4PredMode.Tag as Boolean?).Value)
                    {
                        RemoveFromTabControl(m_ScreenMbInfoI4x4PredMode, tabControl);
                        m_ScreenMbInfoI4x4PredMode.Tag = false;
                    }
                }

                // SubBlocks
                if (mbH264.IsInter8x8)
                {
                    if (m_ScreenMbInfoSubBlocks == null)
                    {
                        m_ScreenMbInfoSubBlocks     = new ScreenMbInfoSubBlocks();
                        m_ScreenMbInfoSubBlocks.Tag = false;
                    }
                    if (!(m_ScreenMbInfoSubBlocks.Tag as Boolean?).Value)
                    {
                        AddToTabControl(m_ScreenMbInfoSubBlocks, tabControl);
                        m_ScreenMbInfoSubBlocks.Tag = true;
                    }
                    m_ScreenMbInfoSubBlocks.ShowMacroblock(m_Mb);
                }
                else
                {
                    if (m_ScreenMbInfoSubBlocks != null && (m_ScreenMbInfoSubBlocks.Tag as Boolean?).Value)
                    {
                        RemoveFromTabControl(m_ScreenMbInfoSubBlocks, tabControl);
                        m_ScreenMbInfoSubBlocks.Tag = false;
                    }
                }

                // InterPred
                if (!mbH264.IsIntra)
                {
                    if (m_ScreenMbInfoInterPred == null)
                    {
                        m_ScreenMbInfoInterPred     = new ScreenMbInfoInterPred();
                        m_ScreenMbInfoInterPred.Tag = false;
                    }
                    if (!(m_ScreenMbInfoInterPred.Tag as Boolean?).Value)
                    {
                        AddToTabControl(m_ScreenMbInfoInterPred, tabControl);
                        m_ScreenMbInfoInterPred.Tag = true;
                    }
                    m_ScreenMbInfoInterPred.ShowMacroblock(m_Mb);
                }
                else
                {
                    if (m_ScreenMbInfoInterPred != null && (m_ScreenMbInfoInterPred.Tag as Boolean?).Value)
                    {
                        RemoveFromTabControl(m_ScreenMbInfoInterPred, tabControl);
                        m_ScreenMbInfoInterPred.Tag = false;
                    }
                }

                // SVC
                if (m_ScreenMbInfoSVC == null)
                {
                    m_ScreenMbInfoSVC = new ScreenMbInfoSVC();
                    AddToTabControl(m_ScreenMbInfoSVC, tabControl);
                }
                m_ScreenMbInfoSVC.ShowMacroblock(m_Mb);
            }
        }
        protected YuvFrameBuffer outputFrameBuffer; // encoded frame

        #endregion Fields

        #region Constructors

        protected AbstractEncodingMode(Macroblock macroblock, MacroblockType mbType)
        {
            this.macroblock = macroblock;
            this.mbType = mbType;
        }
Ejemplo n.º 26
0
 public MacroblockEventArgs(MacroblockEventType_t type, Macroblock macroblock)
     : base()
 {
     m_Type       = type;
     m_Macroblock = macroblock;
 }
Ejemplo n.º 27
0
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            //m_Engine = Engine.CreateRawH264("C:\\Projects\\toulde\\videos\\AUD_MW_E\\AUD_MW_E.264", "AUD_MW_E.yuv");
            //m_Engine = Engine.CreateRawH264("C:\\Projects\\toulde\\videos\\FM1_BT_B\\FM1_BT_B.264", "FM1_BT_B.yuv"); // multiple slices + deblocking
            m_Engine = Engine.CreateRawH264("C:\\Projects\\toulde\\videos\\SVCBS-1\\SVCBS-1\\SVCBS-1.264", "SVCBS-1.yuv"); // Vidyo
            //m_Engine = Engine.CreateRawH264("C:\\Projects\\toulde\\videos\\freh1_b\\Freh1_B.264", "Freh1_B.yuv");
            //m_Engine = Engine.CreateRawH264("C:\\Projects\\hl78965\\clean\\hartallo\\encoderSVC.264", "encoderSVC.yuv");
            //m_Engine = Engine.CreateRawH264("C:\\Projects\\hl78965\\clean\\hartallo\\encoderAVC.264", "encoder.yuv");
            //m_Engine = Engine.CreateRawH264("C:\\Projects\\hl78965\\clean\\hartallo\\encoder.264", "encoder.yuv"); // New Hartallo
            //m_Engine = Engine.CreateRawH264("C:\\Projects\\hl78965\\clean\\hartallo\\encoder_avc_10frms_noearlyterm.264", "encoder.yuv"); // Old Hartallo
            //m_Engine = Engine.CreateRawH264("C:\\tmp\\x264_104\\output.264", "encoder.yuv"); // x264
            //m_Engine = Engine.CreateRawH264("C:\\Projects\\JM\\output.264", "encoder.yuv"); // JM
            //m_Engine = Engine.CreateRawH264("C:\\Projects\\hartallo\\tests\\TestH264\\bourne.264", "bourne.yuv");// bourne


            // Screen Previews
            m_ScreenPictureViews = new ScreenPictureView[Utils.GetMaxEnumValue <CommonEltMbDataType_t>()];
            for (int k = 0; k < m_ScreenPictureViews.Length; ++k)
            {
                m_ScreenPictureViews[k] = new ScreenPictureView((CommonEltMbDataType_t)k);
                ScreenBase.AddToTabControl(m_ScreenPictureViews[k], tabControlPictureView);
                m_ScreenPictureViews[k].OnMacroblockEvent += (_sender, _e) =>
                {
                    switch (_e.Type)
                    {
                    // Screen Macroblocks
                    case MacroblockEventArgs.MacroblockEventType_t.MacroblockEventType_Selected:
                    {
                        m_SelectedMacroblock = _e.Macroblock;
                        // Macroblock Bits
                        if (m_ScreenMbBits == null)
                        {
                            m_ScreenMbBits = new ScreenMbBits[Utils.GetMaxEnumValue <CommonEltMbDataType_t>()];
                            for (int i = 0; i < m_ScreenMbBits.Length; ++i)
                            {
                                m_ScreenMbBits[i] = new ScreenMbBits((CommonEltMbDataType_t)i);
                                ScreenBase.AddToTabControl(m_ScreenMbBits[i], tabControlMacroblockBits);
                            }
                            tabControlMacroblockBits.SelectedIndex = (int)CommonEltMbDataType_t.CommonEltMbDataType_Final;
                        }

                        if (tabControlMacroblockBits.SelectedIndex != -1)
                        {
                            m_ScreenMbBits[tabControlMacroblockBits.SelectedIndex].ShowMacroblock(_e.Macroblock);
                        }
                        // Macroblock Info
                        if (m_ScreenScreenMbInfo == null)
                        {
                            m_ScreenScreenMbInfo = new ScreenMbInfo();
                            ScreenBase.AddToTabControl(m_ScreenScreenMbInfo, tabControlInfo);
                        }
                        m_ScreenScreenMbInfo.ShowMacroblock(_e.Macroblock);
                        // Headers(PPS, SPS, SLICE) associated to this Macroblock
                        ShowHeadersFromSelectedMb(_e.Macroblock);
                        break;
                    }
                    }
                };
            }


            (m_Engine.Decoder as DecoderVideo).OnPictureEvent += (_sender, _e) =>
            {
                switch (_e.Type)
                {
                case PictureEventArgs.PictureEventType_t.PictureEventType_Added:
                {
                    if (!m_ScreenThumbnails.ContainsKey(_e.Picture.LayerId))
                    {
                        m_ScreenThumbnails[_e.Picture.LayerId] = new ScreenThumbnails(_e.Picture.LayerId);
                        ScreenBase.AddToTabControl(m_ScreenThumbnails[_e.Picture.LayerId], tabControlThumbs);
                        m_ScreenThumbnails[_e.Picture.LayerId].OnPictureEvent += new EventHandler <PictureEventArgs>(Thumbnails_OnPictureEvent);
                    }
                    m_ScreenThumbnails[_e.Picture.LayerId].AddPicture(_e.Picture);
                    break;
                }
                }
            };

            // TabControls selection changed events

            tabControlPictureView.SelectionChanged += (_sender, _e) =>
            {
                m_ScreenPictureViews[tabControlPictureView.SelectedIndex].ShowPicture(m_SelectedPicture);
            };
            tabControlMacroblockBits.SelectionChanged += (_sender, _e) =>
            {
                m_ScreenMbBits[tabControlMacroblockBits.SelectedIndex].ShowMacroblock(m_SelectedMacroblock);
            };



            //FIXME:
            /*http://stackoverflow.com/questions/5480372/whats-the-best-way-to-update-an-observablecollection-from-another-thread*/

            //this.Dispatcher.BeginInvoke((Action)(() => { mEngine.Decoder.Decode(uint.MaxValue); }));
            // FIXME
            new Thread(delegate()
            {
                m_Engine.Decoder.Decode(/*uint.MaxValue*/ 200);
            })
            .Start();
        }