public PrimaryAudioStreamInfo(MemoryStream ms) : base(PlaylistModel.StreamType.PrimaryAudio) { readStreamAttribute(ms); //StreamAttribute byte[] attributeBuffer = ms.ReadFixedLengthByteArray(ms.ReadInt8()); MemoryStream ms2 = new MemoryStream(attributeBuffer); AudioCodec = (AudioCodec)ms2.ReadInt8(); int value = ms2.ReadInt8(); AudioPresentationMode = (StreamModel.AudioPresentationMode)(value >> 4); SamplingRate samplingRate = (SamplingRate)(value & 0x0f); switch (samplingRate) { case SamplingRate._48: PrimarySamplingRate = 48000; break; case SamplingRate._96: PrimarySamplingRate = 96000; break; case SamplingRate._192: PrimarySamplingRate = 192000; break; default: throw new NotImplementedException(samplingRate.ToString()); } LanguageCode = ms2.ReadFixedLengthString(3); }
/// <summary> /// Writes our settings to an XML writer /// </summary> /// <param name="writer">an XML writer</param> public void WriteXml(System.Xml.XmlWriter writer) { writer.WriteAttributeString("BaudRate", BaudRate.ToString()); writer.WriteAttributeString("ControllerType", ControllerType.ToString()); writer.WriteAttributeString("SamplingChannels", SamplingChannels.ToString()); writer.WriteAttributeString("SamplingCompression", SamplingCompression.ToString()); writer.WriteAttributeString("SamplingMode", SamplingMode.ToString()); writer.WriteAttributeString("SamplingRate", SamplingRate.ToString()); writer.WriteAttributeString("SamplingTime", SamplingTime.ToString()); writer.WriteAttributeString("SerialPortName", SerialPortName); }
private void ParseProgram(byte[] buffer) { MemoryStream ms = new MemoryStream(buffer); ms.Position++; byte numPrograms = ms.ReadInt8(); Programs = new Program[numPrograms]; for (int i = 0; i < numPrograms; i++) { Programs[i] = new Program(); Programs[i].ProgramSequenceStart = ms.ReadInt32BE(); Programs[i].ProgramMapPid = ms.ReadUInt16BE(); Programs[i].NumStreams = ms.ReadInt8(); Programs[i].NumGroups = ms.ReadInt8(); Programs[i].ProgramStreams = new ProgramStream[Programs[i].NumStreams]; for (int j = 0; j < Programs[i].NumStreams; j++) { ushort PID = ms.ReadUInt16BE(); int len = ms.ReadInt8(); int pos = (int)ms.Position; byte codecType = ms.ReadInt8(); switch (codecType) { case 0x01: case 0x02: case 0x1b: case 0xea: VideoProgramStream child = new VideoProgramStream(); child.VideoCodec = (VideoCodec)codecType; int value = ms.ReadInt8(); child.VideoResolution = (VideoResolution)(value >> 4); FrameRate frameRate = (FrameRate)(value & 0x0f); switch (frameRate) { case PlaylistModel.StreamModel.FrameRate._23_076: child.FrameRate = 23.976; break; case PlaylistModel.StreamModel.FrameRate._24: child.FrameRate = 24; break; case PlaylistModel.StreamModel.FrameRate._25: child.FrameRate = 25; break; case PlaylistModel.StreamModel.FrameRate._29_976: child.FrameRate = 29.976; break; case PlaylistModel.StreamModel.FrameRate._50: child.FrameRate = 50; break; case PlaylistModel.StreamModel.FrameRate._59_94: child.FrameRate = 59.94; break; default: throw new NotImplementedException(frameRate.ToString()); } Programs[i].ProgramStreams[j] = child; break; case 0x03: case 0x04: case 0x80: case 0x81: case 0x82: case 0x83: case 0x84: case 0x85: case 0x86: case 0xa1: case 0xa2: AudioProgramStream child2 = new AudioProgramStream(); child2.AudioCodec = (AudioCodec)codecType; int value2 = ms.ReadInt8(); child2.AudioPresentationMode = (AudioPresentationMode)(value2 >> 4); SamplingRate samplingRate = (SamplingRate)(value2 & 0x0f); switch (samplingRate) { case SamplingRate._48: child2.PrimarySamplingRate = 48000; break; case SamplingRate._96: child2.PrimarySamplingRate = 96000; break; case SamplingRate._192: child2.PrimarySamplingRate = 192000; break; default: throw new NotImplementedException(samplingRate.ToString()); } child2.LanguageCode = ms.ReadFixedLengthString(3); Programs[i].ProgramStreams[j] = child2; break; case 0x90: case 0x91: case 0xa0: GraphicsProgramStream child3 = new GraphicsProgramStream(); child3.LanguageCode = ms.ReadFixedLengthString(3); Programs[i].ProgramStreams[j] = child3; break; case 0x92: SubtitleProgramStream child4 = new SubtitleProgramStream(); child4.CharCode = ms.ReadInt8(); child4.LanguageCode = ms.ReadFixedLengthString(3); Programs[i].ProgramStreams[j] = child4; break; default: Debug.WriteLine(String.Format("Unknown codec type: {0}", codecType)); break; } ms.Position = pos + len; Programs[i].ProgramStreams[j].PID = PID; } } }