Exemplo n.º 1
0
            public void Input(byte[] buf, FrameFlags flags)
            {
                if (Error == null)
                {
                    bool endOfStream = (flags & FrameFlags.EndOfStream) != 0;
                    if (endOfStream)
                    {
                        T[] res1 = null;
                        T[] res2;
                        // EndOfStream packet may have data
                        // normally we do not send null with EndOfStream flag, but null is still valid here
                        if (buf == null && buf.Length > 0)
                        {
                            res1 = decoder.DecodePacket(buf);
                        }
                        // flush decoder
                        res2 = decoder.DecodeEndOfStream();

                        // if res1 is empty, res2 has correct (possible empty) buffer for EndOfStream frame
                        if (res1 != null && res1.Length == 0)
                        {
                            // output cal per res required
                            if (res2 != null && res2.Length != 0)
                            {
                                output(frameOut.Set(res1, false));
                            }
                            else
                            {
                                // swap results to reuse the code below
                                res2 = res1;
                            }
                        }
                        output(frameOut.Set(res2, true));
                    }
                    else
                    {
                        T[] res;
                        res = decoder.DecodePacket(buf);
                        if (res.Length != 0)
                        {
                            output(frameOut.Set(res, false));
                        }
                    }
                }
            }