示例#1
0
        public static EncodingSettings CreateAudioSettings(CodecEnum codec, RateControlEnum rateControl, int value)
        {
            switch (codec)
            {
            case CodecEnum.Aac:
                switch (rateControl)
                {
                case RateControlEnum.ConstantBitRate:
                    if (value < 0)
                    {
                        throw new ArgumentException("ConstantBitRate for ACC must be beetwenn greater than 0 kbps");
                    }
                    break;

                case RateControlEnum.None:
                    if (rateControl != RateControlEnum.None)
                    {
                        throw new ArgumentException($"{nameof(RateControlEnum)}:{RateControlEnum.None} is only allowed with {nameof(RateControlEnum)}:{rateControl}");
                    }
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(rateControl), rateControl, null);
                }
                break;

            case CodecEnum.None:
                if (rateControl != RateControlEnum.Remove)
                {
                    throw new ArgumentException($"{nameof(CodecEnum)}:{codec} is only allowed with {nameof(RateControlEnum)}:{RateControlEnum.Remove}");
                }
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(codec), codec, null);
            }

            return(new EncodingSettings
            {
                Codec = codec,
                RateControl = rateControl,
                Present = PresetsEnum.Medium,
                Value = value,
                Media = MediaEnum.Audio
            });
        }
示例#2
0
        public static EncodingSettings CreateVideoSettings(CodecEnum codec, RateControlEnum rateControl, PresetsEnum present, int value)
        {
            switch (codec)
            {
            case CodecEnum.h265:
                switch (rateControl)
                {
                case RateControlEnum.ConstantRateFactor:
                    if (value < 0 || value > 51)
                    {
                        throw new ArgumentException("CRF must be beetwenn 0 (best) and 51 (worst)");
                    }
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(rateControl), rateControl, null);
                }
                break;

            case CodecEnum.Copy:
                if (rateControl != RateControlEnum.None)
                {
                    throw new ArgumentException($"{nameof(CodecEnum)}:{CodecEnum.Copy} is only allowed with {nameof(RateControlEnum)}:{rateControl}");
                }
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(codec), codec, null);
            }

            return(new EncodingSettings
            {
                Codec = codec,
                RateControl = rateControl,
                Present = present,
                Value = value,
                Media = MediaEnum.Video
            });
        }
示例#3
0
        /// <summary>
        /// Check if we should clear the codec based off the
        /// number of ensembles found for each codec.
        /// </summary>
        /// <param name="codec">Codec that received an ensemble.</param>
        private void CheckCodecBuffers(CodecEnum codec)
        {
            //switch(codec)
            //{
            //    case CodecEnum.Binary:
            //        break;
            //    case CodecEnum.DVL:
            //        break;
            //    case CodecEnum.PD0:
            //        break;
            //    case CodecEnum.PD4_5:
            //        break;
            //    case CodecEnum.PD6_13:
            //        break;
            //    default:
            //        break;
            //}

            // Clear the counters to not have a buffer overflow
            //if(_binaryCounter <= 0)
            //{
            //    _binaryCodec.ClearIncomingData();
            //}

            if (_dvlCounter <= 0)
            {
                _dvlCodec.ClearIncomingData();
            }

            if (_pd0Counter <= 0)
            {
                _pd0Codec.ClearIncomingData();
            }

            if (_pd6_13Counter <= 0)
            {
                _pd6_13Codec.ClearIncomingData();
            }

            if (_pd4_5Counter <= 0)
            {
                _pd4_5Codec.ClearIncomingData();
            }

            // Look to find if we have a dominate codec.
            // If we find a dominate codec, clear the other
            // codecs.
            int MAX_ENS_COUNT = 20;

            if (_binaryCounter > MAX_ENS_COUNT)
            {
                _dvlCodec.ClearIncomingData();
                _pd0Codec.ClearIncomingData();
                _pd6_13Codec.ClearIncomingData();
                _pd4_5Codec.ClearIncomingData();

                // Clear counter
                _binaryCounter = 1;
                _dvlCounter    = 0;
                _pd0Counter    = 0;
                _pd6_13Counter = 0;
                _pd4_5Counter  = 0;
            }

            if (_dvlCounter > MAX_ENS_COUNT)
            {
                _binaryCodec.ClearIncomingData();
                _pd0Codec.ClearIncomingData();
                _pd6_13Codec.ClearIncomingData();
                _pd4_5Codec.ClearIncomingData();

                // Clear counter
                _binaryCounter = 0;
                _dvlCounter    = 1;
                _pd0Counter    = 0;
                _pd6_13Counter = 0;
                _pd4_5Counter  = 0;
            }

            if (_pd0Counter > MAX_ENS_COUNT)
            {
                _binaryCodec.ClearIncomingData();
                _dvlCodec.ClearIncomingData();
                _pd6_13Codec.ClearIncomingData();
                _pd4_5Codec.ClearIncomingData();

                // Clear counter
                _binaryCounter = 0;
                _dvlCounter    = 0;
                _pd0Counter    = 1;
                _pd6_13Counter = 0;
                _pd4_5Counter  = 0;
            }

            if (_pd6_13Counter > MAX_ENS_COUNT)
            {
                _binaryCodec.ClearIncomingData();
                _dvlCodec.ClearIncomingData();
                _pd0Codec.ClearIncomingData();
                _pd4_5Codec.ClearIncomingData();

                // Clear counter
                _binaryCounter = 0;
                _dvlCounter    = 0;
                _pd0Counter    = 0;
                _pd6_13Counter = 1;
                _pd4_5Counter  = 0;
            }

            if (_pd4_5Counter > MAX_ENS_COUNT)
            {
                _binaryCodec.ClearIncomingData();
                _dvlCodec.ClearIncomingData();
                _pd0Codec.ClearIncomingData();
                _pd6_13Codec.ClearIncomingData();

                // Clear counter
                _binaryCounter = 0;
                _dvlCounter    = 0;
                _pd0Counter    = 0;
                _pd6_13Counter = 0;
                _pd4_5Counter  = 1;
            }
        }
示例#4
0
        /// <summary>
        /// Check if we should clear the codec based off the
        /// number of ensembles found for each codec.
        /// </summary>
        /// <param name="codec">Codec that received an ensemble.</param>
        private void CheckCodecBuffers(CodecEnum codec)
        {
            //switch(codec)
            //{
            //    case CodecEnum.Binary:
            //        break;
            //    case CodecEnum.DVL:
            //        break;
            //    case CodecEnum.PD0:
            //        break;
            //    case CodecEnum.PD4_5:
            //        break;
            //    case CodecEnum.PD6_13:
            //        break;
            //    default:
            //        break;
            //}

            // Clear the counters to not have a buffer overflow
            if(_binaryCounter <= 0)
            {
                _binaryCodec.ClearIncomingData();
            }

            if(_dvlCounter <= 0)
            {
                _dvlCodec.ClearIncomingData();
            }

            if (_pd0Counter <= 0)
            {
                _pd0Codec.ClearIncomingData();
            }

            if (_pd6_13Counter <= 0)
            {
                _pd6_13Codec.ClearIncomingData();
            }

            if (_pd4_5Counter <= 0)
            {
                _pd4_5Codec.ClearIncomingData();
            }

            // Look to find if we have a dominate codec.
            // If we find a dominate codec, clear the other
            // codecs.
            int MAX_ENS_COUNT = 20;

            if(_binaryCounter > MAX_ENS_COUNT)
            {
                _dvlCodec.ClearIncomingData();
                _pd0Codec.ClearIncomingData();
                _pd6_13Codec.ClearIncomingData();
                _pd4_5Codec.ClearIncomingData();

                // Clear counter
                _binaryCounter = 1;
                _dvlCounter = 0;
                _pd0Counter = 0;
                _pd6_13Counter = 0;
                _pd4_5Counter = 0;
            }

            if(_dvlCounter > MAX_ENS_COUNT)
            {
                _binaryCodec.ClearIncomingData();
                _pd0Codec.ClearIncomingData();
                _pd6_13Codec.ClearIncomingData();
                _pd4_5Codec.ClearIncomingData();

                // Clear counter
                _binaryCounter = 0;
                _dvlCounter = 1;
                _pd0Counter = 0;
                _pd6_13Counter = 0;
                _pd4_5Counter = 0;
            }

            if (_pd0Counter > MAX_ENS_COUNT)
            {
                _binaryCodec.ClearIncomingData();
                _dvlCodec.ClearIncomingData();
                _pd6_13Codec.ClearIncomingData();
                _pd4_5Codec.ClearIncomingData();

                // Clear counter
                _binaryCounter = 0;
                _dvlCounter = 0;
                _pd0Counter = 1;
                _pd6_13Counter = 0;
                _pd4_5Counter = 0;
            }

            if (_pd6_13Counter > MAX_ENS_COUNT)
            {
                _binaryCodec.ClearIncomingData();
                _dvlCodec.ClearIncomingData();
                _pd0Codec.ClearIncomingData();
                _pd4_5Codec.ClearIncomingData();

                // Clear counter
                _binaryCounter = 0;
                _dvlCounter = 0;
                _pd0Counter = 0;
                _pd6_13Counter = 1;
                _pd4_5Counter = 0;
            }

            if(_pd4_5Counter > MAX_ENS_COUNT)
            {
                _binaryCodec.ClearIncomingData();
                _dvlCodec.ClearIncomingData();
                _pd0Codec.ClearIncomingData();
                _pd6_13Codec.ClearIncomingData();

                // Clear counter
                _binaryCounter = 0;
                _dvlCounter = 0;
                _pd0Counter = 0;
                _pd6_13Counter = 0;
                _pd4_5Counter = 1;
            }
        }