Ejemplo n.º 1
0
        void ComputeHistogram(VarArrayBuffer buffer)
        {
            var bufferSize = buffer.ByteLength;

            if (bufferSize == 0)
            {
                return;
            }

            var bufferData = buffer.Map();

            var max = double.MinValue;

            for (uint i = 0; i < bufferSize; i++)
            {
                var index = bufferData[i];
                histogram[index] += 1.0;

                if (histogram[index] > max)
                {
                    max = histogram[index];
                }
            }

            //Normalize
            for (uint i = 0; i < HISTOGRAM_SIZE; i++)
            {
                histogram[i] /= max;
            }
        }
Ejemplo n.º 2
0
 /// Handler for messages coming in from the browser via postMessage().  The
 /// @a var_message can contain anything: a JSON string; a string that encodes
 /// method names and arguments; etc.
 ///
 /// In this case, we only handle <code>pp::VarArrayBuffer</code>s. When we
 /// receive one, we compute and display a histogram based on its contents.
 ///
 /// @param[in] var_message The message posted by the browser.
 private void OnHandleMessage(object sender, Var var_message)
 {
     if (var_message.IsArrayBuffer)
     {
         var buffer = new VarArrayBuffer(var_message);
         ComputeHistogram(buffer);
         DrawHistogram();
     }
 }
Ejemplo n.º 3
0
        void PostDataMessage(byte[] buffer, uint size)
        {
            var dictionary = new VarDictionary();

            dictionary.Set("name", "data");

            VarArrayBuffer array_buffer = null;

            byte[] dataPtr    = null;
            uint   dataOffset = 0;

            if (videoProfile == VideoProfile.Vp8Any ||
                videoProfile == VideoProfile.Vp9Any)
            {
                uint frameOffset = 0;
                if (encodedFrames == 1)
                {
                    array_buffer = new VarArrayBuffer(size + ivfWriter.GetFileHeaderSize() + ivfWriter.GetFrameHeaderSize());
                    dataPtr      = array_buffer.Map();
                    frameOffset  = ivfWriter.WriteFileHeader(dataPtr, VideoProfileToString(videoProfile).ToUpper(),
                                                             frameSize.Width, frameSize.Height);
                }
                else
                {
                    array_buffer = new VarArrayBuffer(size + ivfWriter.GetFrameHeaderSize());
                    dataPtr      = array_buffer.Map();
                }
                var timestamp = frameTimeStampQueue.Peek();
                frameTimeStampQueue.Dequeue();
                dataOffset =
                    frameOffset +
                    ivfWriter.WriteFrameHeader(dataPtr, frameOffset, timestamp, size);
            }

            Array.Copy(buffer, 0, dataPtr, dataOffset, size);

            // Make sure we flush the buffer data back to unmanaged memeory.
            array_buffer.Flush();
            array_buffer.Unmap();
            dictionary.Set("data", array_buffer);

            PostMessage(dictionary);
        }