summaryrefslogtreecommitdiff
path: root/src/AS_DCP_MPEG2.cpp
diff options
context:
space:
mode:
authorjhurst <jhurst@cinecert.com>2011-05-13 01:50:36 +0000
committerjhurst <>2011-05-13 01:50:36 +0000
commit50fab55d36abf7f01c733d2f80833408dbe0f761 (patch)
treed4f8c7be9b104debe87f560b6ed892786f3a0741 /src/AS_DCP_MPEG2.cpp
parent6a19e4f305c6936ea3a09e2f96a622372e1f4ab2 (diff)
the story so far
Diffstat (limited to 'src/AS_DCP_MPEG2.cpp')
-rwxr-xr-xsrc/AS_DCP_MPEG2.cpp46
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);
+}
+
//------------------------------------------------------------------------------------------