コード例 #1
0
            } // constructor

            public void AddSectionData(DvbStpHeader header, byte[] data, bool isRawData)
            {
                // section received?
                if (IsSectionReceived[header.SectionNumber])
                {
                    return;
                }

                // store data
                if (SegmentData != null)
                {
                    if (isRawData)
                    {
                        SegmentData.AddSectionData(header.SectionNumber, data, header.PayloadOffset, header.PayloadSize);
                    }
                    else
                    {
                        SegmentData.AddSectionData(header.SectionNumber, data, 0, data.Length);
                    } // if-else
                }     // if

                IsSectionReceived[header.SectionNumber] = true;
                RemainingSections--;

                CheckSegmentComplete();
            } // AddSectionData
コード例 #2
0
            } // IsSegmentComplete

            public void Reset(DvbStpHeader header)
            {
                TotalSectionsCount = header.LastSectionNumber + 1;
                RemainingSections  = TotalSectionsCount;
                IsSectionReceived  = new BitArray(TotalSectionsCount);

                SegmentIdentity = new DvbStpSegmentIdentity(header);
                SegmentData     = new SegmentAssembler(new DvbStpSegmentIdentity(header), header.LastSectionNumber);

                Round = 0;
            } // Reset
コード例 #3
0
        } // AddSectionData

        private SegmentInfo NewSegmentInfo(DvbStpHeader header)
        {
            var info = new SegmentInfo(header);

            // hook-up events
            info.SegmentDataDownloaded += Info_SegmentDataComplete;
            info.SegmentReceived       += Info_SegmentReceived;

            if (SegmentNew != null)
            {
                SegmentNew(info.SegmentIdentity);
            }

            return(info);
        }  // NewSegmentInfo
コード例 #4
0
        } // SegmentsCount

        public void AddSectionData(DvbStpHeader header, byte[] data, bool isRawData)
        {
            SegmentInfo info;

            var p   = (int)header.PayloadId;
            var s   = (int)header.SegmentId;
            var key = ((p << 16) | s);

            if (!Segments.TryGetValue(key, out info))
            {
                info          = NewSegmentInfo(header);
                Segments[key] = info;
            } // if

            DetectVersionChange(header, info);
            info.AddSectionData(header, data, isRawData);
        } // AddSectionData
コード例 #5
0
        }  // NewSegmentInfo

        private void DetectVersionChange(DvbStpHeader header, SegmentInfo info)
        {
            if (header.SegmentVersion == info.SegmentIdentity.Version)
            {
                return;
            }

            foreach (var segment in Segments.Values)
            {
                segment.AdjustRound(-1);
            } // foreach

            var oldVersion  = info.SegmentIdentity.Version;
            var wasComplete = (info.Round > 0);

            info.Reset(header);
            if (SegmentVersionChanged != null)
            {
                SegmentVersionChanged(oldVersion, info.SegmentIdentity, wasComplete);
            } // if
        }     // DetectVersionChange
コード例 #6
0
            } // Round

            public SegmentInfo(DvbStpHeader header)
            {
                Reset(header);
            } // constructor
コード例 #7
0
        } // constructor

        public DvbStpSegmentIdentity(DvbStpHeader header)
            : this(header.PayloadId, header.SegmentId, header.SegmentVersion)
        {
        } // constructor