diff options
| author | jhurst <jhurst@cinecert.com> | 2011-05-13 01:50:36 +0000 |
|---|---|---|
| committer | jhurst <> | 2011-05-13 01:50:36 +0000 |
| commit | 50fab55d36abf7f01c733d2f80833408dbe0f761 (patch) | |
| tree | d4f8c7be9b104debe87f560b6ed892786f3a0741 /src/AS_DCP_MPEG2.cpp | |
| parent | 6a19e4f305c6936ea3a09e2f96a622372e1f4ab2 (diff) | |
the story so far
Diffstat (limited to 'src/AS_DCP_MPEG2.cpp')
| -rwxr-xr-x | src/AS_DCP_MPEG2.cpp | 46 |
1 files changed, 45 insertions, 1 deletions
diff --git a/src/AS_DCP_MPEG2.cpp b/src/AS_DCP_MPEG2.cpp index 5bd998c..252c1fa 100755 --- a/src/AS_DCP_MPEG2.cpp +++ b/src/AS_DCP_MPEG2.cpp @@ -1,5 +1,5 @@ /* -Copyright (c) 2004-2010, John Hurst +Copyright (c) 2004-2011, John Hurst All rights reserved. Redistribution and use in source and binary forms, with or without @@ -174,6 +174,7 @@ public: Result_t ReadFrame(ui32_t, FrameBuffer&, AESDecContext*, HMACContext*); Result_t ReadFrameGOPStart(ui32_t, FrameBuffer&, AESDecContext*, HMACContext*); Result_t FindFrameGOPStart(ui32_t, ui32_t&); + Result_t FrameType(ui32_t FrameNum, FrameType_t& type); }; @@ -245,6 +246,26 @@ ASDCP::MPEG2::MXFReader::h__Reader::FindFrameGOPStart(ui32_t FrameNum, ui32_t& K return RESULT_OK; } +// +ASDCP::Result_t +ASDCP::MPEG2::MXFReader::h__Reader::FrameType(ui32_t FrameNum, FrameType_t& type) +{ + if ( ! m_File.IsOpen() ) + return RESULT_INIT; + + // look up frame index node + IndexTableSegment::IndexEntry TmpEntry; + + if ( ASDCP_FAILURE(m_FooterPart.Lookup(FrameNum, TmpEntry)) ) + { + DefaultLogSink().Error("Frame value out of range: %u\n", FrameNum); + return RESULT_RANGE; + } + + type = ( (TmpEntry.Flags & 0x0f) == 3 ) ? FRAME_B : ( (TmpEntry.Flags & 0x0f) == 2 ) ? FRAME_P : FRAME_I; + return RESULT_OK; +} + // // @@ -403,6 +424,29 @@ ASDCP::MPEG2::MXFReader::DumpIndex(FILE* stream) const m_Reader->m_FooterPart.Dump(stream); } +// +ASDCP::Result_t +ASDCP::MPEG2::MXFReader::Close() const +{ + if ( m_Reader && m_Reader->m_File.IsOpen() ) + { + m_Reader->Close(); + return RESULT_OK; + } + + return RESULT_INIT; +} + +// +ASDCP::Result_t +ASDCP::MPEG2::MXFReader::FrameType(ui32_t FrameNum, FrameType_t& type) const +{ + if ( ! m_Reader ) + return RESULT_INIT; + + return m_Reader->FrameType(FrameNum, type); +} + //------------------------------------------------------------------------------------------ |
