diff options
| author | mikey <mikey@cinecert.com> | 2013-04-12 23:39:31 +0000 |
|---|---|---|
| committer | mikey <> | 2013-04-12 23:39:31 +0000 |
| commit | 252740d6f7d8924c6af30e55d2da487356a0acdc (patch) | |
| tree | ba01aa630cf6cd11e7c286a60380aa35be916616 /src/AS_DCP_internal.h | |
| parent | c9e20228d6c328a0b446c1417e0082389ff045ff (diff) | |
Added atmos support and new ULs per SMPTE 429-2:2013 - see README for deets.
Diffstat (limited to 'src/AS_DCP_internal.h')
| -rwxr-xr-x | src/AS_DCP_internal.h | 43 |
1 files changed, 35 insertions, 8 deletions
diff --git a/src/AS_DCP_internal.h b/src/AS_DCP_internal.h index af6b553..5310100 100755 --- a/src/AS_DCP_internal.h +++ b/src/AS_DCP_internal.h @@ -25,7 +25,7 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /*! \file AS_DCP_internal.h - \version $Id$ + \version $Id$ \brief AS-DCP library, non-public common elements */ @@ -62,7 +62,7 @@ namespace ASDCP std::vector<int> result; const char* pstr = str; const char* r = strchr(pstr, '.'); - + while ( r != 0 ) { assert(r >= pstr); @@ -132,7 +132,7 @@ namespace ASDCP const ASDCP::WriterInfo& Info, Kumu::fpos_t& LastPosition, ASDCP::FrameBuffer& CtFrameBuf, ui32_t FrameNum, ui32_t SequenceNum, ASDCP::FrameBuffer& FrameBuf, const byte_t* EssenceUL, AESDecContext* Ctx, HMACContext* HMAC); - + // class KLReader : public ASDCP::KLVPacket { @@ -146,7 +146,7 @@ namespace ASDCP inline const byte_t* Key() { return m_KeyBuf; } inline const ui64_t Length() { return m_ValueLength; } inline const ui64_t KLLength() { return m_KLLength; } - + Result_t ReadKLFromFile(Kumu::FileReader& Reader); }; @@ -207,7 +207,7 @@ namespace ASDCP if ( KM_SUCCESS(result) ) { Result_t cr_result = m_HeaderPart.GetMDObjectByType(OBJ_TYPE_ARGS(CryptographicContext), &Object); - + if ( KM_SUCCESS(cr_result) ) MD_to_CryptoInfo((CryptographicContext*)Object, m_Info, *m_Dict); } @@ -223,7 +223,9 @@ namespace ASDCP if ( KM_SUCCESS(result) ) result = m_HeaderPart.InitFromFile(m_File); - + else + DefaultLogSink().Error("ASDCP::h__Reader::OpenMXFRead, OpenRead failed\n"); + return result; } @@ -266,6 +268,28 @@ namespace ASDCP FrameNum, SequenceNum, FrameBuf, EssenceUL, Ctx, HMAC); } + // Get the position of a frame from a track file + Result_t LocateFrame(const ASDCP::MXF::Partition& CurrentPartition, + ui32_t FrameNum, Kumu::fpos_t& streamOffset, + i8_t& temporalOffset, i8_t& keyFrameOffset) + { + // look up frame index node + IndexTableSegment::IndexEntry TmpEntry; + + if ( KM_FAILURE(m_FooterPart.Lookup(FrameNum, TmpEntry)) ) + { + DefaultLogSink().Error("Frame value out of range: %u\n", FrameNum); + return RESULT_RANGE; + } + + // get frame position, temporal offset, and key frame ofset + streamOffset = CurrentPartition.BodyOffset + TmpEntry.StreamOffset; + temporalOffset = TmpEntry.TemporalOffset; + keyFrameOffset = TmpEntry.KeyFrameOffset; + + return RESULT_OK; + } + // void Close() { m_File.Close(); @@ -291,6 +315,9 @@ namespace ASDCP Result_t InitMXFIndex(); Result_t ReadEKLVFrame(ui32_t FrameNum, ASDCP::FrameBuffer& FrameBuf, const byte_t* EssenceUL, AESDecContext* Ctx, HMACContext* HMAC); + Result_t LocateFrame(ui32_t FrameNum, Kumu::fpos_t& streamOffset, + i8_t& temporalOffset, i8_t& keyFrameOffset); + }; @@ -392,13 +419,13 @@ namespace ASDCP { public: byte_t Data[klv_intpack_size]; - + IntegrityPack() { memset(Data, 0, klv_intpack_size); } ~IntegrityPack() {} - + Result_t CalcValues(const ASDCP::FrameBuffer&, const byte_t* AssetID, ui32_t sequence, HMACContext* HMAC); Result_t TestValues(const ASDCP::FrameBuffer&, const byte_t* AssetID, ui32_t sequence, HMACContext* HMAC); }; |
