Esempio n. 1
0
 public static void Scan(
     TSVideoStream stream,
     TSStreamBuffer buffer,
     ref string tag)
 {
     stream.IsVBR         = true;
     stream.IsInitialized = true;
 }
Esempio n. 2
0
 public static void Scan(
     TSVideoStream stream,
     TSStreamBuffer buffer,
     ref string tag)
 {
     stream.IsVBR = true;
     stream.IsInitialized = true;
 }
Esempio n. 3
0
        /// <summary>
        /// Adds the video stream.
        /// </summary>
        /// <param name="streams">The streams.</param>
        /// <param name="videoStream">The video stream.</param>
        private void AddVideoStream(List <MediaStream> streams, TSVideoStream videoStream)
        {
            var mediaStream = new MediaStream
            {
                BitRate      = Convert.ToInt32(videoStream.BitRate),
                Width        = videoStream.Width,
                Height       = videoStream.Height,
                Codec        = videoStream.CodecShortName,
                IsInterlaced = videoStream.IsInterlaced,
                Type         = MediaStreamType.Video,
                Index        = streams.Count
            };

            if (videoStream.FrameRateDenominator > 0)
            {
                float frameRateEnumerator  = videoStream.FrameRateEnumerator;
                float frameRateDenominator = videoStream.FrameRateDenominator;

                mediaStream.AverageFrameRate = mediaStream.RealFrameRate = frameRateEnumerator / frameRateDenominator;
            }

            streams.Add(mediaStream);
        }
Esempio n. 4
0
        public static void Scan(
            TSVideoStream stream,
            TSStreamBuffer buffer,
            ref string tag)
        {
            uint   parse = 0;
            byte   accessUnitDelimiterParse  = 0;
            byte   sequenceParameterSetParse = 0;
            string profile            = null;
            string level              = null;
            byte   constraintSet0Flag = 0;
            byte   constraintSet1Flag = 0;
            byte   constraintSet2Flag = 0;
            byte   constraintSet3Flag = 0;

            for (int i = 0; i < buffer.Length; i++)
            {
                parse = (parse << 8) + buffer.ReadByte();

                if (parse == 0x00000109)
                {
                    accessUnitDelimiterParse = 1;
                }
                else if (accessUnitDelimiterParse > 0)
                {
                    --accessUnitDelimiterParse;
                    if (accessUnitDelimiterParse == 0)
                    {
                        switch ((parse & 0xFF) >> 5)
                        {
                        case 0:     // I
                        case 3:     // SI
                        case 5:     // I, SI
                            tag = "I";
                            break;

                        case 1:     // I, P
                        case 4:     // SI, SP
                        case 6:     // I, SI, P, SP
                            tag = "P";
                            break;

                        case 2:     // I, P, B
                        case 7:     // I, SI, P, SP, B
                            tag = "B";
                            break;
                        }
                        if (stream.IsInitialized)
                        {
                            return;
                        }
                    }
                }
                else if (parse == 0x00000127 || parse == 0x00000167)
                {
                    sequenceParameterSetParse = 3;
                }
                else if (sequenceParameterSetParse > 0)
                {
                    --sequenceParameterSetParse;
                    switch (sequenceParameterSetParse)
                    {
                    case 2:
                        switch (parse & 0xFF)
                        {
                        case 66:
                            profile = "Baseline Profile";
                            break;

                        case 77:
                            profile = "Main Profile";
                            break;

                        case 88:
                            profile = "Extended Profile";
                            break;

                        case 100:
                            profile = "High Profile";
                            break;

                        case 110:
                            profile = "High 10 Profile";
                            break;

                        case 122:
                            profile = "High 4:2:2 Profile";
                            break;

                        case 144:
                            profile = "High 4:4:4 Profile";
                            break;

                        default:
                            profile = "Unknown Profile";
                            break;
                        }
                        break;

                    case 1:
                        constraintSet0Flag = (byte)
                                             ((parse & 0x80) >> 7);
                        constraintSet1Flag = (byte)
                                             ((parse & 0x40) >> 6);
                        constraintSet2Flag = (byte)
                                             ((parse & 0x20) >> 5);
                        constraintSet3Flag = (byte)
                                             ((parse & 0x10) >> 4);
                        break;

                    case 0:
                        byte b = (byte)(parse & 0xFF);
                        if (b == 11 && constraintSet3Flag == 1)
                        {
                            level = "1b";
                        }
                        else
                        {
                            level = string.Format(
                                "{0:D}.{1:D}",
                                b / 10, (b - ((b / 10) * 10)));
                        }
                        stream.EncodingProfile = string.Format(
                            "{0} {1}", profile, level);
                        stream.IsVBR         = true;
                        stream.IsInitialized = true;
                        break;
                    }
                }
            }
            return;
        }
Esempio n. 5
0
        public static void Scan(
            TSVideoStream stream,
            TSStreamBuffer buffer,
            ref string tag)
        {
            int  parse               = 0;
            byte frameHeaderParse    = 0;
            byte sequenceHeaderParse = 0;
            bool isInterlaced        = false;

            for (int i = 0; i < buffer.Length; i++)
            {
                parse = (parse << 8) + buffer.ReadByte();

                if (parse == 0x0000010D)
                {
                    frameHeaderParse = 4;
                }
                else if (frameHeaderParse > 0)
                {
                    --frameHeaderParse;
                    if (frameHeaderParse == 0)
                    {
                        uint pictureType = 0;
                        if (isInterlaced)
                        {
                            if ((parse & 0x80000000) == 0)
                            {
                                pictureType =
                                    (uint)((parse & 0x78000000) >> 13);
                            }
                            else
                            {
                                pictureType =
                                    (uint)((parse & 0x3c000000) >> 12);
                            }
                        }
                        else
                        {
                            pictureType =
                                (uint)((parse & 0xf0000000) >> 14);
                        }

                        if ((pictureType & 0x20000) == 0)
                        {
                            tag = "P";
                        }
                        else if ((pictureType & 0x10000) == 0)
                        {
                            tag = "B";
                        }
                        else if ((pictureType & 0x8000) == 0)
                        {
                            tag = "I";
                        }
                        else if ((pictureType & 0x4000) == 0)
                        {
                            tag = "BI";
                        }
                        else
                        {
                            tag = null;
                        }
                        if (stream.IsInitialized)
                        {
                            return;
                        }
                    }
                }
                else if (parse == 0x0000010F)
                {
                    sequenceHeaderParse = 6;
                }
                else if (sequenceHeaderParse > 0)
                {
                    --sequenceHeaderParse;
                    switch (sequenceHeaderParse)
                    {
                    case 5:
                        int profileLevel = ((parse & 0x38) >> 3);
                        if (((parse & 0xC0) >> 6) == 3)
                        {
                            stream.EncodingProfile = string.Format(
                                "Advanced Profile {0}", profileLevel);
                        }
                        else
                        {
                            stream.EncodingProfile = string.Format(
                                "Main Profile {0}", profileLevel);
                        }
                        break;

                    case 0:
                        if (((parse & 0x40) >> 6) > 0)
                        {
                            isInterlaced = true;
                        }
                        else
                        {
                            isInterlaced = false;
                        }
                        break;
                    }
                    stream.IsVBR         = true;
                    stream.IsInitialized = true;
                }
            }
        }
Esempio n. 6
0
        public static void Scan(
            TSVideoStream stream,
            TSStreamBuffer buffer,
            ref string tag)
        {
            int parse = 0;
            int pictureParse = 0;
            int sequenceHeaderParse = 0;
            int extensionParse = 0;
            int sequenceExtensionParse = 0;            

            for (int i = 0; i < buffer.Length; i++)
            {
                parse = (parse << 8) + buffer.ReadByte();

                if (parse == 0x00000100)
                {
                    pictureParse = 2;
                }
                else if (parse == 0x000001B3)
                {
                    sequenceHeaderParse = 7;
                }
                else if (sequenceHeaderParse > 0)
                {
                    --sequenceHeaderParse;
                    switch (sequenceHeaderParse)
                    {
#if DEBUG
                        case 6:
                            break;

                        case 5:
                            break;

                        case 4:
                            stream.Width =
                                (int)((parse & 0xFFF000) >> 12);
                            stream.Height =
                                (int)(parse & 0xFFF);
                            break;

                        case 3:
                            stream.AspectRatio =
                                (TSAspectRatio)((parse & 0xF0) >> 4);

                            switch ((parse & 0xF0) >> 4)
                            {
                                case 0: // Forbidden
                                    break;
                                case 1: // Square
                                    break;
                                case 2: // 4:3
                                    break;
                                case 3: // 16:9
                                    break;
                                case 4: // 2.21:1
                                    break;
                                default: // Reserved
                                    break;
                            }

                            switch (parse & 0xF)
                            {
                                case 0: // Forbidden
                                    break;
                                case 1: // 23.976
                                    stream.FrameRateEnumerator = 24000;
                                    stream.FrameRateDenominator = 1001;
                                    break;
                                case 2: // 24
                                    stream.FrameRateEnumerator = 24000;
                                    stream.FrameRateDenominator = 1000;
                                    break;
                                case 3: // 25
                                    stream.FrameRateEnumerator = 25000;
                                    stream.FrameRateDenominator = 1000;
                                    break;
                                case 4: // 29.97
                                    stream.FrameRateEnumerator = 30000;
                                    stream.FrameRateDenominator = 1001;
                                    break;
                                case 5: // 30
                                    stream.FrameRateEnumerator = 30000;
                                    stream.FrameRateDenominator = 1000;
                                    break;
                                case 6: // 50
                                    stream.FrameRateEnumerator = 50000;
                                    stream.FrameRateDenominator = 1000;
                                    break;
                                case 7: // 59.94
                                    stream.FrameRateEnumerator = 60000;
                                    stream.FrameRateDenominator = 1001;
                                    break;
                                case 8: // 60
                                    stream.FrameRateEnumerator = 60000;
                                    stream.FrameRateDenominator = 1000;
                                    break;
                                default: // Reserved
                                    stream.FrameRateEnumerator = 0;
                                    stream.FrameRateDenominator = 0;
                                    break;
                            }
                            break;

                        case 2:
                            break;

                        case 1:
                            break;
#endif

                        case 0:
#if DEBUG
                            stream.BitRate =
                                (((parse & 0xFFFFC0) >> 6) * 200);
#endif
                            stream.IsVBR = true;
                            stream.IsInitialized = true;
                            break;
                    }
                }
                else if (pictureParse > 0)
                {
                    --pictureParse;
                    if (pictureParse == 0)
                    {
                        switch ((parse & 0x38) >> 3)
                        {
                            case 1:
                                tag = "I";
                                break;
                            case 2:
                                tag = "P";
                                break;
                            case 3:
                                tag = "B";
                                break;
                            default:
                                break;
                        }
                        if (stream.IsInitialized) return;
                    }
                }
                else if (parse == 0x000001B5)
                {
                    extensionParse = 1;
                }
                else if (extensionParse > 0)
                {
                    --extensionParse;
                    if (extensionParse == 0)
                    {
                        if ((parse & 0xF0) == 0x10)
                        {
                            sequenceExtensionParse = 1;
                        }
                    }
                }
                else if (sequenceExtensionParse > 0)
                {
                    --sequenceExtensionParse;
#if DEBUG
                    if (sequenceExtensionParse == 0)
                    {
                        uint sequenceExtension = 
                            ((parse & 0x8) >> 3);
                        if (sequenceExtension == 0)
                        {
                            stream.IsInterlaced = true;
                        }
                        else
                        {
                            stream.IsInterlaced = false;
                        }
                    }
#endif
                }
            }
        }
Esempio n. 7
0
        public static void Scan(
            TSVideoStream stream,
            TSStreamBuffer buffer,
            ref string tag)
        {
            int parse                  = 0;
            int pictureParse           = 0;
            int sequenceHeaderParse    = 0;
            int extensionParse         = 0;
            int sequenceExtensionParse = 0;

            for (int i = 0; i < buffer.Length; i++)
            {
                parse = (parse << 8) + buffer.ReadByte();

                if (parse == 0x00000100)
                {
                    pictureParse = 2;
                }
                else if (parse == 0x000001B3)
                {
                    sequenceHeaderParse = 7;
                }
                else if (sequenceHeaderParse > 0)
                {
                    --sequenceHeaderParse;
                    switch (sequenceHeaderParse)
                    {
#if DEBUG
                    case 6:
                        break;

                    case 5:
                        break;

                    case 4:
                        stream.Width =
                            (int)((parse & 0xFFF000) >> 12);
                        stream.Height =
                            (int)(parse & 0xFFF);
                        break;

                    case 3:
                        stream.AspectRatio =
                            (TSAspectRatio)((parse & 0xF0) >> 4);

                        switch ((parse & 0xF0) >> 4)
                        {
                        case 0:         // Forbidden
                            break;

                        case 1:         // Square
                            break;

                        case 2:         // 4:3
                            break;

                        case 3:         // 16:9
                            break;

                        case 4:         // 2.21:1
                            break;

                        default:         // Reserved
                            break;
                        }

                        switch (parse & 0xF)
                        {
                        case 0:         // Forbidden
                            break;

                        case 1:         // 23.976
                            stream.FrameRateEnumerator  = 24000;
                            stream.FrameRateDenominator = 1001;
                            break;

                        case 2:         // 24
                            stream.FrameRateEnumerator  = 24000;
                            stream.FrameRateDenominator = 1000;
                            break;

                        case 3:         // 25
                            stream.FrameRateEnumerator  = 25000;
                            stream.FrameRateDenominator = 1000;
                            break;

                        case 4:         // 29.97
                            stream.FrameRateEnumerator  = 30000;
                            stream.FrameRateDenominator = 1001;
                            break;

                        case 5:         // 30
                            stream.FrameRateEnumerator  = 30000;
                            stream.FrameRateDenominator = 1000;
                            break;

                        case 6:         // 50
                            stream.FrameRateEnumerator  = 50000;
                            stream.FrameRateDenominator = 1000;
                            break;

                        case 7:         // 59.94
                            stream.FrameRateEnumerator  = 60000;
                            stream.FrameRateDenominator = 1001;
                            break;

                        case 8:         // 60
                            stream.FrameRateEnumerator  = 60000;
                            stream.FrameRateDenominator = 1000;
                            break;

                        default:         // Reserved
                            stream.FrameRateEnumerator  = 0;
                            stream.FrameRateDenominator = 0;
                            break;
                        }
                        break;

                    case 2:
                        break;

                    case 1:
                        break;
#endif

                    case 0:
#if DEBUG
                        stream.BitRate =
                            (((parse & 0xFFFFC0) >> 6) * 200);
#endif
                        stream.IsVBR         = true;
                        stream.IsInitialized = true;
                        break;
                    }
                }
                else if (pictureParse > 0)
                {
                    --pictureParse;
                    if (pictureParse == 0)
                    {
                        switch ((parse & 0x38) >> 3)
                        {
                        case 1:
                            tag = "I";
                            break;

                        case 2:
                            tag = "P";
                            break;

                        case 3:
                            tag = "B";
                            break;

                        default:
                            break;
                        }
                        if (stream.IsInitialized)
                        {
                            return;
                        }
                    }
                }
                else if (parse == 0x000001B5)
                {
                    extensionParse = 1;
                }
                else if (extensionParse > 0)
                {
                    --extensionParse;
                    if (extensionParse == 0)
                    {
                        if ((parse & 0xF0) == 0x10)
                        {
                            sequenceExtensionParse = 1;
                        }
                    }
                }
                else if (sequenceExtensionParse > 0)
                {
                    --sequenceExtensionParse;
#if DEBUG
                    if (sequenceExtensionParse == 0)
                    {
                        uint sequenceExtension =
                            ((parse & 0x8) >> 3);
                        if (sequenceExtension == 0)
                        {
                            stream.IsInterlaced = true;
                        }
                        else
                        {
                            stream.IsInterlaced = false;
                        }
                    }
#endif
                }
            }
        }
Esempio n. 8
0
        public static void Scan(
            TSVideoStream stream,
            TSStreamBuffer buffer,
            ref string tag)
        {
            uint parse = 0;
            byte accessUnitDelimiterParse = 0;
            byte sequenceParameterSetParse = 0;
            string profile = null;
            string level = null;
            byte constraintSet0Flag = 0;
            byte constraintSet1Flag = 0;
            byte constraintSet2Flag = 0;
            byte constraintSet3Flag = 0;

            for (int i = 0; i < buffer.Length; i++)
            {
                parse = (parse << 8) + buffer.ReadByte();

                if (parse == 0x00000109)
                {
                    accessUnitDelimiterParse = 1;
                }
                else if (accessUnitDelimiterParse > 0)
                {
                    --accessUnitDelimiterParse;
                    if (accessUnitDelimiterParse == 0)
                    {
                        switch ((parse & 0xFF) >> 5)
                        {
                            case 0: // I
                            case 3: // SI
                            case 5: // I, SI
                                tag = "I";
                                break;

                            case 1: // I, P
                            case 4: // SI, SP
                            case 6: // I, SI, P, SP
                                tag = "P";
                                break;

                            case 2: // I, P, B
                            case 7: // I, SI, P, SP, B
                                tag = "B";
                                break;
                        }
                        if (stream.IsInitialized) return;
                    }
                }
                else if (parse == 0x00000127 || parse == 0x00000167)
                {
                    sequenceParameterSetParse = 3;
                }
                else if (sequenceParameterSetParse > 0)
                {
                    --sequenceParameterSetParse;
                    switch (sequenceParameterSetParse)
                    {
                        case 2:
                            switch (parse & 0xFF)
                            {
                                case 66:
                                    profile = "Baseline Profile";
                                    break;
                                case 77:
                                    profile = "Main Profile";
                                    break;
                                case 88:
                                    profile = "Extended Profile";
                                    break;
                                case 100:
                                    profile = "High Profile";
                                    break;
                                case 110:
                                    profile = "High 10 Profile";
                                    break;
                                case 122:
                                    profile = "High 4:2:2 Profile";
                                    break;
                                case 144:
                                    profile = "High 4:4:4 Profile";
                                    break;
                                default:
                                    profile = "Unknown Profile";
                                    break;
                            }
                            break;

                        case 1:
                            constraintSet0Flag = (byte)
                                ((parse & 0x80) >> 7);
                            constraintSet1Flag = (byte)
                                ((parse & 0x40) >> 6);
                            constraintSet2Flag = (byte)
                                ((parse & 0x20) >> 5);
                            constraintSet3Flag = (byte)
                                ((parse & 0x10) >> 4);
                            break;

                        case 0:
                            byte b = (byte)(parse & 0xFF);
                            if (b == 11 && constraintSet3Flag == 1)
                            {
                                level = "1b";
                            }
                            else
                            {
                                level = string.Format(
                                    "{0:D}.{1:D}",
                                    b / 10, (b - ((b / 10) * 10)));
                            }
                            stream.EncodingProfile = string.Format(
                                "{0} {1}", profile, level);
                            stream.IsVBR = true;
                            stream.IsInitialized = true;
                            break;
                    }
                }
            }
            return;
        }
Esempio n. 9
0
        public void Scan(TSVideoStream stream, TSStreamBuffer buffer, ref string tag)
        {
            var  parse               = 0;
            byte frameHeaderParse    = 0;
            byte sequenceHeaderParse = 0;
            var  isInterlaced        = false;

            for (var i = 0; i < buffer.Length; i++)
            {
                parse = (parse << 8) + buffer.ReadByte();

                if (parse == 0x0000010D)
                {
                    frameHeaderParse = 4;
                }
                else if (frameHeaderParse > 0)
                {
                    --frameHeaderParse;
                    if (frameHeaderParse != 0)
                    {
                        continue;
                    }

                    uint pictureType = 0;
                    if (isInterlaced)
                    {
                        if ((parse & 0x80000000) == 0)
                        {
                            pictureType = (uint)((parse & 0x78000000) >> 13);
                        }
                        else
                        {
                            pictureType = (uint)((parse & 0x3c000000) >> 12);
                        }
                    }
                    else
                    {
                        pictureType = (uint)((parse & 0xf0000000) >> 14);
                    }

                    if ((pictureType & 0x20000) == 0)
                    {
                        tag = "P";
                    }
                    else if ((pictureType & 0x10000) == 0)
                    {
                        tag = "B";
                    }
                    else if ((pictureType & 0x8000) == 0)
                    {
                        tag = "I";
                    }
                    else if ((pictureType & 0x4000) == 0)
                    {
                        tag = "BI";
                    }
                    else
                    {
                        tag = null;
                    }
                    if (stream.IsInitialized)
                    {
                        return;
                    }
                }
                else if (parse == 0x0000010F)
                {
                    sequenceHeaderParse = 6;
                }
                else if (sequenceHeaderParse > 0)
                {
                    --sequenceHeaderParse;
                    switch (sequenceHeaderParse)
                    {
                    case 5:
                        var profileLevel = (parse & 0x38) >> 3;
                        stream.EncodingProfile = (parse & 0xC0) >> 6 == 3 ? $"Advanced Profile {profileLevel}" : $"Main Profile {profileLevel}";
                        break;

                    case 0:
                        isInterlaced = (parse & 0x40) >> 6 > 0;
                        break;
                    }

                    stream.IsVBR         = true;
                    stream.IsInitialized = true;
                }
            }
        }
Esempio n. 10
0
        public static void Scan(
            TSVideoStream stream,
            TSStreamBuffer buffer,
            ref string tag)
        {
            int parse = 0;
            byte frameHeaderParse = 0;
            byte sequenceHeaderParse = 0;
            bool isInterlaced = false;

            for (int i = 0; i < buffer.Length; i++)
            {
                parse = (parse << 8) + buffer.ReadByte();

                if (parse == 0x0000010D)
                {
                    frameHeaderParse = 4;
                }
                else if (frameHeaderParse > 0)
                {
                    --frameHeaderParse;
                    if (frameHeaderParse == 0)
                    {
                        uint pictureType = 0;
                        if (isInterlaced)
                        {
                            if ((parse & 0x80000000) == 0)
                            {
                                pictureType =
                                    (uint)((parse & 0x78000000) >> 13);
                            }
                            else
                            {
                                pictureType =
                                    (uint)((parse & 0x3c000000) >> 12);
                            }
                        }
                        else
                        {
                            pictureType =
                                (uint)((parse & 0xf0000000) >> 14);
                        }

                        if ((pictureType & 0x20000) == 0)
                        {
                            tag = "P";
                        }
                        else if ((pictureType & 0x10000) == 0)
                        {
                            tag = "B";
                        }
                        else if ((pictureType & 0x8000) == 0)
                        {
                            tag = "I";
                        }
                        else if ((pictureType & 0x4000) == 0)
                        {
                            tag = "BI";
                        }
                        else
                        {
                            tag = null;
                        }
                        if (stream.IsInitialized) return;
                    }
                }
                else if (parse == 0x0000010F)
                {
                    sequenceHeaderParse = 6;
                }
                else if (sequenceHeaderParse > 0)
                {
                    --sequenceHeaderParse;
                    switch (sequenceHeaderParse)
                    {
                        case 5:
                            int profileLevel = ((parse & 0x38) >> 3);
                            if (((parse & 0xC0) >> 6) == 3)
                            {
                                stream.EncodingProfile = string.Format(
                                    "Advanced Profile {0}", profileLevel);
                            }
                            else
                            {
                                stream.EncodingProfile = string.Format(
                                    "Main Profile {0}", profileLevel);
                            }
                            break;

                        case 0:
                            if (((parse & 0x40) >> 6) > 0)
                            {
                                isInterlaced = true;
                            }
                            else
                            {
                                isInterlaced = false;
                            }
                            break;
                    }
                    stream.IsVBR = true;
                    stream.IsInitialized = true;
                }
            }
        }