示例#1
0
        public static ListHeader Read(FourCCHeader fcc, BinaryReader br)
        {
            var r = new ListHeader();

            if (0 != fcc.fourcc.CompareTo("LIST"))
            {
                throw new ArgumentException("LIST header mismatch");
            }

            r.fcc   = fcc.fourcc;
            r.bytes = fcc.bytes;
            r.type  = Common.ReadFourCC(br);

            return(r);
        }
示例#2
0
        /* RIFF "AVI "
         *   LIST "hdrl"
         *     avih AviMainHeader
         *     LIST "strl"
         *       strh AviStreamHeader
         *       strf BitmapInfoHeader
         *   LIST "movi"
         *     00db
         *     00db
         *     ...
         * RIFF "AVIX"
         *   LIST "movi"
         *     00db
         *     00db
         *     ...
         */

        public bool Open(string path)
        {
            mImagePos.Clear();

            mBr = new BinaryReader(new FileStream(path, FileMode.Open, FileAccess.Read));

            var riffHeader = RiffHeader.Read(mBr);

            if (0 != riffHeader.riff.CompareTo("RIFF") ||
                0 != riffHeader.type.CompareTo("AVI "))
            {
                Console.WriteLine("E: this is not AVI");
                return(false);
            }

            try {
                do
                {
                    var fcc = FourCCHeader.Read(mBr);
                    Console.WriteLine("{0}", fcc.fourcc);
                    switch (fcc.fourcc)
                    {
                    case "RIFF":
                        var riffType = Common.ReadFourCC(mBr);
                        if (0 != riffType.CompareTo("AVIX"))
                        {
                            Console.WriteLine("D: Unknown Riff {0}", riffType);
                        }
                        break;

                    case "LIST":
                        var lst = ListHeader.Read(fcc, mBr);
                        break;

                    case "avih":
                        mAviMainHeader = AviMainHeader.Read(fcc, mBr);
                        break;

                    case "strh":
                        mAviStreamHeader = AviStreamHeader.Read(fcc, mBr);
                        break;

                    case "strf":
                        if (0 == mAviStreamHeader.fccType.CompareTo("vids"))
                        {
                            mBmpih = BitmapInfoHeader.Read(fcc, mBr);
                        }
                        else
                        {
                            SkipUnknownHeader(fcc);
                        }
                        break;

                    case "00db":
                    case "00dc":
                        ReadOneImage(fcc);
                        break;

                    default:
                        SkipUnknownHeader(fcc);
                        break;
                    }
                } while (true);
            } catch (EndOfStreamException) {
                // OK
            }

            Console.WriteLine("Total {0} images", mImagePos.Count);

            if (mImagePos.Count == 0)
            {
                Close();
                return(false);
            }

            return(true);
        }