/// <summary> /// ReadMetaInfo /// </summary> /// <param name="br"></param> /// <param name="sampleStreamType"></param> /// <param name="inTotalSize"></param> private void ReadMetaInfo(BinaryReader br, uint sampleStreamType, int inTotalSize) { if (sampleStreamType == QBox.QBOX_SAMPLE_TYPE_H264) { if (v != null) throw new Exception("ReadMetaInfo: QBoxMetaV v already set"); v = new QBoxMetaV(); mSampleHeaderSize = v.Read(br); if ((inTotalSize - mSampleHeaderSize) != 0) throw new Exception("QBoxSample.Read: Video size incorrect."); } else if ((sampleStreamType == QBox.QBOX_SAMPLE_TYPE_QMA) || (sampleStreamType == QBox.QBOX_SAMPLE_TYPE_AAC)) { if (a != null) throw new Exception("There should only be one QBoxMetaA for audio"); a = new QBoxMetaA(); mSampleHeaderSize = a.Read(br); if ((inTotalSize - mSampleHeaderSize) != 0) throw new Exception("QBoxSample.Read: Audio size incorrect."); } else throw new Exception("QBoxSample.Read: Sample stream type not found."); }
public QBoxSample(int dataSize, ulong sampleFlags, ushort sampleStreamType) { if ((sampleFlags & QBox.QBOX_SAMPLE_FLAGS_META_INFO) != 0) { if (sampleStreamType == QBox.QBOX_SAMPLE_TYPE_H264) { if (v != null) throw new Exception("QBoxSample.constructor: QBoxMetaV v already set"); v = new QBoxMetaV(); mSampleHeaderSize = 32; } else if ((sampleStreamType == QBox.QBOX_SAMPLE_TYPE_QMA) || (sampleStreamType == QBox.QBOX_SAMPLE_TYPE_AAC)) { if (a != null) throw new Exception("There should only be one QBoxMetaA for audio"); a = new QBoxMetaA(); mSampleHeaderSize = 24; } else throw new Exception("QBoxSample.Read: Sample stream type not found."); } else if ((sampleFlags & QBox.QBOX_SAMPLE_FLAGS_QMED_PRESENT) > 0) { switch ((uint)sampleStreamType) { case QBOX_SAMPLE_TYPE_AAC: QMed.QMedAAC qmedaac = new QMed.QMedAAC(); qmed = qmedaac; break; //case QBOX_SAMPLE_TYPE_H264: //case QBOX_SAMPLE_TYPE_H264_SLICE: // QMed.QMedH264 qmedh264 = new QMed.QMedH264(); // qmed = qmedh264; // break; case QBOX_SAMPLE_TYPE_QPCM: QMed.QMedPCM qmedpcm = new QMed.QMedPCM(); qmed = qmedpcm; break; case QBOX_SAMPLE_TYPE_Q711: QMed.QMed711 qmed711 = new QMed.QMed711(); qmed = qmed711; break; case QBOX_SAMPLE_TYPE_Q722: QMed.QMed722 qmed722 = new QMed.QMed722(); qmed = qmed722; break; case QBOX_SAMPLE_TYPE_Q726: QMed.QMed726 qmed726 = new QMed.QMed726(); qmed = qmed726; break; case QBOX_SAMPLE_TYPE_Q728: QMed.QMed728 qmed728 = new QMed.QMed728(); qmed = qmed728; break; case QBOX_SAMPLE_TYPE_JPEG: case QBOX_SAMPLE_TYPE_MPEG2_ELEMENTARY: case QBOX_SAMPLE_TYPE_USER_METADATA: case QBOX_SAMPLE_TYPE_QMA: case QBOX_SAMPLE_TYPE_DEBUG: case QBOX_SAMPLE_TYPE_VIN_STATS_GLOBAL: case QBOX_SAMPLE_TYPE_VIN_STATS_MB: break; default: throw new Exception(string.Format("Unknown QMed type: {0}", sampleStreamType)); } mSampleHeaderSize = (int)qmed.boxSize; } else { mSampleHeaderSize = 0; } }