Esempio n. 1
0
        public void SendPacket_ThrowsOnNoDecoder()
        {
            var ffmpegMock = new Mock <FFmpegClient>();

            ffmpegMock
            .Setup(c => c.IsCodecOpen(It.IsAny <IntPtr>()))
            .Returns(true)
            .Verifiable();

            ffmpegMock
            .Setup(c => c.IsDecoder(It.IsAny <IntPtr>()))
            .Returns(false)
            .Verifiable();

            ffmpegMock
            .Setup(c => c.SendPacket(It.IsAny <IntPtr>(), It.IsAny <IntPtr>()))
            .Returns(0)
            .Verifiable();

            var ffmpeg = ffmpegMock.Object;

            var nativeCodec        = ffmpeg.FindDecoder(AVCodecID.AV_CODEC_ID_H264);
            var nativeCodecContext = new NativeAVCodecContext
            {
            };

            var codec = new AVCodec(ffmpeg, &nativeCodecContext, (NativeAVCodec *)nativeCodec);

            Assert.Throws <InvalidOperationException>(() => codec.SendPacket(new AVPacket(ffmpeg)));
        }
Esempio n. 2
0
        public void SendPacket_ThrowsOnSendPacketFail()
        {
            var ffmpegMock = new Mock <FFmpegClient>();

            ffmpegMock
            .Setup(c => c.IsCodecOpen(It.IsAny <IntPtr>()))
            .Returns(true)
            .Verifiable();

            ffmpegMock
            .Setup(c => c.IsDecoder(It.IsAny <IntPtr>()))
            .Returns(true)
            .Verifiable();

            ffmpegMock
            .Setup(c => c.SendPacket(It.IsAny <IntPtr>(), It.IsAny <IntPtr>()))
            .Returns(-100)
            .Verifiable();
            ffmpegMock
            .Setup(c => c.ThrowOnAVError(-100, true))
            .Verifiable();

            var ffmpeg = ffmpegMock.Object;

            var nativeCodec        = ffmpeg.FindDecoder(AVCodecID.AV_CODEC_ID_H264);
            var nativeCodecContext = new NativeAVCodecContext
            {
            };

            var codec = new AVCodec(ffmpeg, &nativeCodecContext, (NativeAVCodec *)nativeCodec);

            codec.SendPacket(new AVPacket(ffmpeg));
        }
Esempio n. 3
0
        public void Properties_ReturnNativeValues()
        {
            var ffmpeg = new FFmpegClient();

            var nativeCodec        = ffmpeg.FindDecoder(AVCodecID.AV_CODEC_ID_H264);
            var nativeCodecContext = new NativeAVCodecContext
            {
            };

            var codec = new AVCodec(ffmpeg, &nativeCodecContext, (NativeAVCodec *)nativeCodec);

            Assert.Equal("H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10", codec.LongName);
            Assert.Equal("H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (h264)", codec.ToString());
            Assert.Equal("h264", codec.Name);
            Assert.Equal(AVCodecCapabilities.DR1 | AVCodecCapabilities.Delay | AVCodecCapabilities.Threads | AVCodecCapabilities.SliceThreads, codec.Capabilities);
            Assert.True(codec.IsDecoder);
            Assert.False(codec.IsEncoder);
        }
Esempio n. 4
0
        public void Id_ReturnsNativeId()
        {
            var nativeCodec = new NativeAVCodec
            {
                id = AVCodecID.AV_CODEC_ID_4XM,
            };

            var ffmpegMock   = new Mock <FFmpegClient>();
            var ffmpegClient = ffmpegMock.Object;

            var codecContext = new NativeAVCodecContext
            {
            };

            var codec = new AVCodec(ffmpegClient, &codecContext, &nativeCodec);

            Assert.Equal(AVCodecID.AV_CODEC_ID_4XM, codec.Id);
        }
Esempio n. 5
0
        public void Capabilities_ReturnsNativeCapabilities()
        {
            var capabilities = AVCodecCapabilities.DR1 | AVCodecCapabilities.Delay | AVCodecCapabilities.Threads | AVCodecCapabilities.SliceThreads;

            var nativeCodec = new NativeAVCodec
            {
                capabilities = (int)capabilities,
            };

            var ffmpegMock   = new Mock <FFmpegClient>();
            var ffmpegClient = ffmpegMock.Object;

            var codecContext = new NativeAVCodecContext
            {
            };

            var codec = new AVCodec(ffmpegClient, &codecContext, &nativeCodec);

            Assert.Equal(capabilities, codec.Capabilities);
        }
Esempio n. 6
0
        public void AVCodec_InitializesInstance()
        {
            var nativeCodec = new NativeAVCodec()
            {
                capabilities = (int)AVCodecCapabilities.Truncated,
            };

            var ffmpegMock = new Mock <FFmpegClient>();

            ffmpegMock
            .Setup(c => c.FindDecoder(AVCodecID.AV_CODEC_ID_H264))
            .Returns((IntPtr)(&nativeCodec))
            .Verifiable();

            var codecParameters = new NativeAVCodecParameters
            {
                codec_type = NativeAVMediaType.AVMEDIA_TYPE_VIDEO,
                codec_id   = AVCodecID.AV_CODEC_ID_H264,
            };

            var nativeCodecContext = new NativeAVCodecContext()
            {
                codec_id = AVCodecID.AV_CODEC_ID_H264,
            };

#pragma warning disable CS0618 // Type or member is obsolete
            var nativeStream = new NativeAVStream
            {
                codecpar = &codecParameters,
                codec    = &nativeCodecContext,
            };

            var stream = new AVStream(&nativeStream);

            var ffmpeg = ffmpegMock.Object;
            var codec  = new AVCodec(ffmpeg, stream);

            Assert.Equal((int)AVCodecCapabilities.Truncated, stream.CodecContext->flags);
#pragma warning restore CS0618 // Type or member is obsolete
        }
Esempio n. 7
0
        public void IsEncoder_ReturnsNativeIsDecoder()
        {
            var name = new byte[] { (byte)'t', (byte)'e', (byte)'s', (byte)'t' };

            fixed(byte *p = name)
            {
                var nativeCodec = new NativeAVCodec
                {
                };

                var ffmpegMock   = new Mock <FFmpegClient>();
                var ffmpegClient = ffmpegMock.Object;

                var codecContext = new NativeAVCodecContext
                {
                };

                var codec = new AVCodec(ffmpegClient, &codecContext, &nativeCodec);

                Assert.False(codec.IsDecoder);
            }
        }
Esempio n. 8
0
        public void Name_ReturnsNativeName()
        {
            var name = new byte[] { (byte)'t', (byte)'e', (byte)'s', (byte)'t' };

            fixed(byte *p = name)
            {
                var nativeCodec = new NativeAVCodec
                {
                    name = p,
                };

                var ffmpegMock   = new Mock <FFmpegClient>();
                var ffmpegClient = ffmpegMock.Object;

                var codecContext = new NativeAVCodecContext
                {
                };

                var codec = new AVCodec(ffmpegClient, &codecContext, &nativeCodec);

                Assert.Equal("test", codec.Name);
            }
        }