X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2FAS_DCP_MPEG2.cpp;h=bd2709e3344eae1f6a6c6d78e4cf57fd255baf22;hb=830570c46c4d39a8a5767f83875e3ef2f79ecc98;hp=04010be32af86aae2589a718cc9f726e41448e24;hpb=1c20f520f0ac0d44c64cc53991f12c84a416b48f;p=asdcplib.git diff --git a/src/AS_DCP_MPEG2.cpp b/src/AS_DCP_MPEG2.cpp index 04010be..bd2709e 100755 --- a/src/AS_DCP_MPEG2.cpp +++ b/src/AS_DCP_MPEG2.cpp @@ -1,5 +1,5 @@ /* -Copyright (c) 2004-2006, John Hurst +Copyright (c) 2004-2007, John Hurst All rights reserved. Redistribution and use in source and binary forms, with or without @@ -46,7 +46,8 @@ MD_to_MPEG2_VDesc(MXF::MPEG2VideoDescriptor* VDescObj, MPEG2::VideoDescriptor& V VDesc.SampleRate = VDescObj->SampleRate; VDesc.EditRate = VDescObj->SampleRate; VDesc.FrameRate = VDescObj->SampleRate.Numerator; - VDesc.ContainerDuration = VDescObj->ContainerDuration; + assert(VDescObj->ContainerDuration <= 0xFFFFFFFFL); + VDesc.ContainerDuration = (ui32_t) VDescObj->ContainerDuration; VDesc.FrameLayout = VDescObj->FrameLayout; VDesc.StoredWidth = VDescObj->StoredWidth; @@ -73,7 +74,6 @@ MPEG2_VDesc_to_MD(MPEG2::VideoDescriptor& VDesc, MXF::MPEG2VideoDescriptor* VDes ASDCP_TEST_NULL(VDescObj); VDescObj->SampleRate = VDesc.SampleRate; - VDescObj->SampleRate.Numerator = VDesc.FrameRate; VDescObj->ContainerDuration = VDesc.ContainerDuration; VDescObj->FrameLayout = VDesc.FrameLayout; @@ -231,7 +231,7 @@ ASDCP::MPEG2::MXFReader::h__Reader::ReadFrame(ui32_t FrameNum, FrameBuffer& Fram if ( ! m_File.IsOpen() ) return RESULT_INIT; - Result_t result = ReadEKLVPacket(FrameNum, FrameBuf, Dict::ul(MDD_MPEG2Essence), Ctx, HMAC); + Result_t result = ReadEKLVFrame(FrameNum, FrameBuf, Dict::ul(MDD_MPEG2Essence), Ctx, HMAC); if ( ASDCP_FAILURE(result) ) return result; @@ -264,7 +264,7 @@ ASDCP::MPEG2::FrameBuffer::Dump(FILE* stream, ui32_t dump_len) const if ( stream == 0 ) stream = stderr; - fprintf(stream, "Frame: %06lu, %c%-2hu, %7lu bytes", + fprintf(stream, "Frame: %06u, %c%-2hu, %7u bytes", m_FrameNumber, FrameTypeChar(m_FrameType), m_TemporalOffset, m_Size); if ( m_GOPStart ) @@ -493,8 +493,15 @@ ASDCP::MPEG2::MXFWriter::h__Writer::WriteFrame(const FrameBuffer& FrameBuf, AESE // update the index manager Entry.TemporalOffset = - FrameBuf.TemporalOffset(); - Entry.KeyFrameOffset = m_GOPOffset; + Entry.KeyFrameOffset = 0 - m_GOPOffset; Entry.Flags = Flags; + /* + fprintf(stderr, "to: %4hd ko: %4hd c1: %4hd c2: %4hd fl: 0x%02x\n", + Entry.TemporalOffset, Entry.KeyFrameOffset, + m_GOPOffset + Entry.TemporalOffset, + Entry.KeyFrameOffset - Entry.TemporalOffset, + Entry.Flags); + */ m_FooterPart.PushIndexEntry(Entry); m_FramesWritten++; m_GOPOffset++; @@ -537,14 +544,12 @@ ASDCP::MPEG2::MXFWriter::OpenWrite(const char* filename, const WriterInfo& Info, const VideoDescriptor& VDesc, ui32_t HeaderSize) { m_Writer = new h__Writer; + m_Writer->m_Info = Info; Result_t result = m_Writer->OpenWrite(filename, HeaderSize); if ( ASDCP_SUCCESS(result) ) - { - m_Writer->m_Info = Info; - result = m_Writer->SetSourceStream(VDesc); - } + result = m_Writer->SetSourceStream(VDesc); if ( ASDCP_FAILURE(result) ) m_Writer.release();