/// <summary> /// Obtains the header data located in the MPEG file and decodes it /// </summary> /// <param name="br">The binary reader providing random access to the MPEG file data</param> private void GetHeaderInfo(BinaryReader br) { byte[] buffer = new byte[BUFFER_SIZE]; br.BaseStream.Seek(0, SeekOrigin.Begin); br.Read(buffer, 0, BUFFER_SIZE); for (int offset = 0; offset < buffer.Length - 4; offset++) { if (IsStreamMarker(ref buffer, offset, HEADER_PACKET)) { offset += 4; // Move to the data position which follows the stream header uint headerData = GetData(ref buffer, offset); // Mask out the bits containing the property we are after, then // shift the data to the right to get its value m_pictureWidth = (int)(headerData & 0xFFF00000) >> 20; m_pictureHeight = (int)(headerData & 0x000FFF00) >> 8; uint aspectRatioIndex = (headerData & 0x000000F0) >> 4; uint fpsIndex = headerData & 0x0000000F; m_aspectRatio = (eAspectRatios)fpsIndex; m_frameRate = (eFrameRates)fpsIndex; break; } } }