예제 #1
0
        public void Properties_ReturnsNativeValues()
        {
            var nativeCodecParameters = new NativeAVCodecParameters
            {
                codec_type = NativeAVMediaType.AVMEDIA_TYPE_VIDEO,
                codec_id   = NativeAVCodecID.AV_CODEC_ID_4XM,
                format     = 124,
            };

            var codecParameters = new AVCodecParameters(&nativeCodecParameters);

            Assert.Equal(NativeAVMediaType.AVMEDIA_TYPE_VIDEO, codecParameters.Type);
            Assert.Equal(NativeAVCodecID.AV_CODEC_ID_4XM, codecParameters.Id);
            Assert.Equal(124, codecParameters.Format);
        }
예제 #2
0
        public void Constructor_InitializesInstance()
        {
            var ffmpegMock = new Mock <FFmpegClient>();

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

            var nativeStream = new NativeAVStream
            {
                codecpar = &codecParameters,
            };

            var streamPtr = new IntPtr(&nativeStream);

            var nativeAVFormatContext = new NativeAVFormatContext
            {
                duration    = 10,
                nb_streams  = 1,
                event_flags = (int)AVFormatContextEventFlags.MetadataUpdated,
                ctx_flags   = (int)AVFormatContextFlags.NoHeader,
                streams     = (NativeAVStream **)streamPtr,
            };

            var nativeIOContext = new NativeAVIOContext
            {
            };

            ffmpegMock
            .Setup(c => c.FreeAVFormatContext(It.IsAny <IntPtr>()))
            .Verifiable();
            var ffmpeg = ffmpegMock.Object;

            using (var handle = new AVFormatContextHandle(ffmpeg, &nativeAVFormatContext))
                using (var ioContext = new AVIOContext(ffmpeg, new AVIOContextHandle(ffmpeg, &nativeIOContext)))
                    using (var formatContext = new AVFormatContext(ffmpeg, ioContext, handle))
                    {
                        Assert.Equal(handle, formatContext.Handle);
                        Assert.Equal <uint>(1, formatContext.StreamCount);
                        Assert.False(formatContext.IsClosed);
                        Assert.False(handle.IsClosed);
                        Assert.Equal((int)AVFormatContextEventFlags.MetadataUpdated, (int)formatContext.EventFlags);
                        Assert.Equal((int)AVFormatContextFlags.NoHeader, (int)formatContext.Flags);
                    }

            ffmpegMock.Verify();
        }
예제 #3
0
        public void CodecContext_ReturnsNativeCodecContext()
        {
            var codecParameters = new NativeAVCodecParameters
            {
                codec_type = NativeAVMediaType.AVMEDIA_TYPE_VIDEO,
            };

            var nativeStream = new NativeAVStream
            {
                codecpar = &codecParameters,
            };

            var stream = new AVStream(&nativeStream);

            Assert.Equal(NativeAVMediaType.AVMEDIA_TYPE_VIDEO, stream.CodecParameters.Type);
        }
예제 #4
0
        public void GetVideoStream_ThrowsOnWrongType()
        {
            var ffmpegMock = new Mock <FFmpegClient>();

            ffmpegMock
            .Setup(c => c.FreeAVFormatContext(It.IsAny <IntPtr>()))
            .Verifiable();
            var ffmpeg = ffmpegMock.Object;

            var codecParameters = new NativeAVCodecParameters
            {
                format     = 12346,
                codec_type = NativeAVMediaType.AVMEDIA_TYPE_AUDIO,
            };

            var nativeStream = new NativeAVStream
            {
                codecpar = &codecParameters,
            };
            var streamPtr = new IntPtr(&nativeStream);

            var nativeAVFormatContext = new NativeAVFormatContext
            {
                nb_streams = 1,
                streams    = (NativeAVStream **)&streamPtr,
            };

            var nativeIOContext = new NativeAVIOContext
            {
            };

            using (var handle = new AVFormatContextHandle(ffmpeg, &nativeAVFormatContext))
                using (var ioContext = new AVIOContext(ffmpeg, new AVIOContextHandle(ffmpeg, &nativeIOContext)))
                    using (var formatContext = new AVFormatContext(ffmpeg, ioContext, handle))
                    {
                        Assert.Throws <InvalidOperationException>(() => formatContext.GetVideoStream());
                    }

            ffmpegMock.Verify();
        }
예제 #5
0
        public void GetStream_ReturnsStream()
        {
            var ffmpegMock = new Mock <FFmpegClient>();

            ffmpegMock
            .Setup(c => c.FreeAVFormatContext(It.IsAny <IntPtr>()))
            .Verifiable();
            var ffmpeg = ffmpegMock.Object;

            var codecParameters = new NativeAVCodecParameters
            {
                format = 12346,
            };

            var nativeStream = new NativeAVStream
            {
                codecpar = &codecParameters,
            };
            var streamPtr = new IntPtr(&nativeStream);

            var nativeAVFormatContext = new NativeAVFormatContext
            {
                nb_streams = 1,
                streams    = (NativeAVStream **)&streamPtr,
            };

            var nativeIOContext = new NativeAVIOContext
            {
            };

            using (var handle = new AVFormatContextHandle(ffmpeg, &nativeAVFormatContext))
                using (var ioContext = new AVIOContext(ffmpeg, new AVIOContextHandle(ffmpeg, &nativeIOContext)))
                    using (var formatContext = new AVFormatContext(ffmpeg, ioContext, handle))
                    {
                        var stream = formatContext.GetStream(0);
                        Assert.Equal(12346, stream.CodecParameters.Format);
                    }

            ffmpegMock.Verify();
        }
예제 #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
        }