Esempio n. 1
0
        static public void Main(string[] args)
        {
            ConfirmQuickSyncReadiness.HaltIfNotReady();

            Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;
            // keep ascending directories until 'media' folder is found
            for (int i = 0; i < 10 && !Directory.Exists("Media"); i++)
            {
                Directory.SetCurrentDirectory("..");
            }
            Directory.SetCurrentDirectory("Media");

            mfxIMPL impl            = mfxIMPL.MFX_IMPL_AUTO;
            CodecId inputCodecId    = CodecId.MFX_CODEC_JPEG;
            CodecId outputCodecId   = CodecId.MFX_CODEC_JPEG;
            string  outputExtension = ".transcoded.264";//this should match codecld above


            string inFilename;

            inFilename = @"C:\x\core-imaging-playground\images\IMG_2301.jpg";
            //  inFilename = "BigBuckBunny_320x180.264";
            //inFilename = "BigBuckBunny_1920x1080.264";
            //inFilename = "BigBuckBunny_3840x2160.264";
            string outFilename = Path.ChangeExtension(inFilename, outputExtension);

            Console.WriteLine("Working directory: {0}", Environment.CurrentDirectory);
            Console.WriteLine("Input filename: {0}", inFilename);
            Console.WriteLine();

            if (!File.Exists(inFilename))
            {
                Console.WriteLine("Input file not found. Press any key to exit.");
                Console.ReadKey();
                return;
            }


            Stream         infs, outfs;
            BenchmarkTimer bt = null;


#if !ENABLE_BENCHMARK
            infs  = File.Open(inFilename, FileMode.Open);
            outfs = File.Open(outFilename, FileMode.Create);
#else       // delete this code for most simple example
            // * Benchmark Mode *
            // this block does a couple things:
            //   1. causes the file to be pre-read into memory so we are not timing disk reads.
            //   2. replaces the output stream with a NullStream so nothing gets written to disk.
            //   3. Starts the timer for benchmarking
            // this pre-reads file into memory for benchmarking
            // maximumMemoryToAllocate = (long)4L * 1024 * 1024 * 1024;
            Console.WriteLine("Pre-reading input");
            infs = new PreReadLargeMemoryStream(File.Open(inFilename, FileMode.Open));
            Console.WriteLine("Input read");

            outfs = new NullStream();
            bt    = new BenchmarkTimer();
            bt.Start();

            //int minimumFrames = 4000;
#endif

            Console.WriteLine("Output filename: {0}",
                              Path.GetFileName((outfs as FileStream)?.Name ?? "NO OUTPUT"));
            Console.WriteLine();


            var config = TranscoderConfiguration.BuildTranscoderConfigurationFromStream(infs,
                                                                                        inputCodecId,
                                                                                        outputCodecId);

            var transcoder = new StreamTranscoder(infs, config, impl, false);

            string impltext = QuickSyncStatic.ImplementationString(transcoder.lowLevelTranscoder.session);
            Console.WriteLine("Implementation = {0}", impltext);
            //string memtext = QuickSyncStatic.ImplementationString(transcoder.lowLevelTranscoder.deviceSetup.memType);
            //Console.WriteLine("Memory type = {0}", memtext);



            int modulo = 100;

            int count = 0;


            foreach (var item in transcoder.GetFrames())
            {
                outfs.Write(item.bitstream, 0, item.bytesAvailable);

                if (++count % modulo == 0)
                {
                    Console.Write("Frames transcoded {0}\r", count);
                }
            }


            Console.WriteLine("Frames transcoded {0}", count);
            Console.WriteLine();

            if (bt != null)
            {
                bt.StopAndReport(count, infs.Position, outfs.Position);
            }

            infs.Close();
            outfs.Close();



            if (Debugger.IsAttached)
            {
                Console.WriteLine("done - press a key to exit");
                Console.ReadKey();
            }
        }
Esempio n. 2
0
        static public void Main(string[] args)
        {
            ConfirmQuickSyncReadiness.HaltIfNotReady();

            Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;
            // keep ascending directories until 'media' folder is found
            for (int i = 0; i < 10 && !Directory.Exists("Media"); i++)
            {
                Directory.SetCurrentDirectory("..");
            }
            Directory.SetCurrentDirectory("Media");

            mfxIMPL impl            = mfxIMPL.MFX_IMPL_AUTO;
            CodecId inputCodecId    = CodecId.MFX_CODEC_AVC;
            CodecId outputCodecId   = CodecId.MFX_CODEC_AVC;
            string  outputExtension = ".transcoded.264";//this should match codecld above


            string inFilename = "BigBuckBunny_320x180.264";
            //string inFilename = "BigBuckBunny_1920x1080.264";
            string outFilename = Path.ChangeExtension(inFilename, outputExtension);

            Console.WriteLine("Working directory: {0}", Environment.CurrentDirectory);
            Console.WriteLine("Input filename: {0}", inFilename);
            Console.WriteLine("Output filename: {0}", outFilename);
            Console.WriteLine();

            if (!File.Exists(inFilename))
            {
                Console.WriteLine("Input file not found. Press any key to exit.");
                Console.ReadKey();
                return;
            }

            var infs  = File.Open(inFilename, FileMode.Open);
            var outfs = File.Open(outFilename, FileMode.Create);


            var config = TranscoderConfiguration.BuildTranscoderConfigurationFromStream(infs,
                                                                                        inputCodecId,
                                                                                        outputCodecId);

            var transcoder = new LowLevelTranscoderCSharp(config, impl);

            string impltext = QuickSyncStatic.ImplementationString(transcoder.session);

            Console.WriteLine("Implementation = {0}", impltext);
            //string memtext = QuickSyncStatic.ImplementationString(transcoder.deviceSetup.memType);
            //Console.WriteLine("Memory type = {0}", memtext);

            int            count = 0;
            var            buf   = new byte[transcoder.BufferFreeCount];
            BitStreamChunk bsc   = new BitStreamChunk();

            int modulo = 100;



            while (true)
            {
                int free = transcoder.BufferFreeCount;


                if (free > transcoder.BufferSize / 2)
                {
                    int n = infs.Read(buf, 0, free);
                    if (n <= 0)
                    {
                        break;
                    }
                    transcoder.PutBitstream(buf, 0, n);
                }



                transcoder.GetNextFrame(ref bsc);
                if (bsc.bytesAvailable > 0)
                {
                    outfs.Write(bsc.bitstream, 0, bsc.bytesAvailable);
                    if (++count % modulo == 0)
                    {
                        Console.Write("Frames transcoded {0}\r", count);
                    }
                }
            }

            while (transcoder.GetNextFrame(ref bsc))
            {
                if (bsc.bytesAvailable > 0)
                {
                    outfs.Write(bsc.bitstream, 0, bsc.bytesAvailable);
                    if (++count % modulo == 0)
                    {
                        Console.Write("Frames transcoded {0}\r", count);
                    }
                }
            }

            while (transcoder.Flush1(ref bsc))
            {
                if (bsc.bytesAvailable > 0)
                {
                    outfs.Write(bsc.bitstream, 0, bsc.bytesAvailable);
                    if (++count % modulo == 0)
                    {
                        Console.Write("Frames transcoded {0}\r", count);
                    }
                }
            }

            while (transcoder.Flush2(ref bsc))
            {
                if (bsc.bytesAvailable > 0)
                {
                    outfs.Write(bsc.bitstream, 0, bsc.bytesAvailable);
                    if (++count % modulo == 0)
                    {
                        Console.Write("Frames transcoded {0}\r", count);
                    }
                }
            }

            while (transcoder.Flush3(ref bsc))
            {
                if (bsc.bytesAvailable > 0)
                {
                    outfs.Write(bsc.bitstream, 0, bsc.bytesAvailable);
                    if (++count % modulo == 0)
                    {
                        Console.Write("Frames transcoded {0}\r", count);
                    }
                }
            }

            while (transcoder.Flush4(ref bsc))
            {
                if (bsc.bytesAvailable > 0)
                {
                    outfs.Write(bsc.bitstream, 0, bsc.bytesAvailable);
                    if (++count % modulo == 0)
                    {
                        Console.Write("Frames transcoded {0}\r", count);
                    }
                }
            }

            infs.Close();
            outfs.Close();

            Console.WriteLine("Frames transcoded {0}", count);



            if (Debugger.IsAttached)
            {
                Console.WriteLine("done - press a key to exit");
                Console.ReadKey();
            }
        }