📄 umc_mp4_mux.h
字号:
/*//////////////////////////////////////////////////////////////////////////////
//
// INTEL CORPORATION PROPRIETARY INFORMATION
// This software is supplied under the terms of a license agreement or
// nondisclosure agreement with Intel Corporation and may not be copied
// or disclosed except in accordance with the terms of that agreement.
// Copyright(c) 2003-2007 Intel Corporation. All Rights Reserved.
//
*/
#ifndef __UMC_MP4_MUX_H__
#define __UMC_MP4_MUX_H__
#include <ipps.h>
#include "umc_muxer.h"
#include "umc_mp4_parser_w.h"
#include "umc_cyclic_buffer.h"
namespace UMC
{
struct sH246_Header;
struct sMuxTMrack;
class MP4Muxer : public Muxer
{
public:
// Default constructor
MP4Muxer();
// Destructor
~MP4Muxer();
// Init muxer
Status Init(MuxerParams *lpInit);
// Close muxer (release internal tools)
Status Close(void);
// Flushes all data from buffers to output stream
Status Flush(void);
Status UnlockBuffer(MediaData *pData, Ipp32s iTrack);
Status PutEndOfStream(Ipp32s iTrack);
//must return MuxerProcessStatus value
Status GetMuxerStatus(Ipp32u &sts) {sts = (Ipp32s)bMuxerInitialized; return UMC_OK;};
Status DumpState();
protected:
// Add video data to stream
Status AdjustVideoData(MediaData* &lpData, Ipp32s nStreamNumber);
// Add audio data to stream
Status AdjustAudioData(MediaData* &lpData, Ipp32s nStreamNumber);
// Provides time of first output sample
Status GetOutputTime(Ipp32s nStreamNumber, Ipp64f &dTime) { return UMC_ERR_NOT_IMPLEMENTED; };
Status MuxData(bool bFlushMode);
MediaData emptyMediaData[1];
MediaData* m_mH264DataOut;
Ipp8s* m_pH264Data;
Ipp32u m_iH264DataCurSize;
Ipp32u m_nH264DataOffset;
sH246_Header* m_pH264Header;
bool m_bDataFromEncoder;
Ipp32s* m_nIDRFrames;
Ipp32s* m_FirstFrame;
bool bMuxerInitialized;
Ipp32s m_nMoovSize;
Ipp32s m_nMoofSize;
vm_mutex m_PutDataMutex;
bool m_bMoov;
TM_moov m_headerMPEG4;
TM_moof m_headerMoof;
TM_mvex m_headerMVEX;
Ipp32u m_nMdatSize;
Ipp32u nTimeScale;
Ipp32u *tracks_size;
Ipp32u header_size;
vm_file *m_fTempOutput1;
vm_file **m_fTempOutput2;
sMuxTMrack *m_sTrack;
Ipp32u m_nHeaderSize;
/////////////////////////////////
Status SetHeaderSizes(Ipp32s nMoovSize, Ipp32s nMoofSize);
Ipp64f GetMaxDuration();
Ipp64f GetTrakDuration(Ipp32s ntrak);
Ipp32s GetMP4VideoTypeID(VideoStreamType type);
Ipp32s GetMP4AudioTypeID(AudioStreamType type);
Ipp32s GetMP4StreamType(Ipp32s type);
Status SampleInfo(MediaData *lpData, Ipp32s ntrak);
Status WriteHeader();
Status WriteHeaderFragment();
Status InitHeader();
Status UpdateHeader();
Status Write_size(vm_file *dw, Ipp32u value);
Status WriteMdatSize();
Ipp32s CalculateSizes();
Ipp32s CalculateMvexExtendedSize(TM_mvex* mvex);
Ipp32s CalculateFragmentSize(TM_moof *moof);
Status InitTemporaryOutputFile1();
Status InitAdditionalTemporaryOutputFiles();
//functions
Status InitTracks(Ipp32s nTracks);
Status InitBuffers(Ipp32s nAudioTracks, Ipp32s nVideoTracks);
//atom inits
Status InitAtoms();
Status InitStsz(Ipp32s nTrack);
Status InitStco(Ipp32s nTrack);
Status InitStts(Ipp32s nTrack);
Status InitCtts(Ipp32s nTrack);
Status InitStsc(Ipp32s nTrack);
Status InitStss(Ipp32s nTrack);
Status InitEsds(MuxerParams* params);
Status InitMoof();
FrameType GetPictureType(MediaData *lpData, Ipp32s nTrak);
Status GetBits(Ipp32s *data, Ipp32s nbits, Ipp32s *ptr, Ipp8u *buf);
bool needNewFragment(MediaData *lpData, Ipp32s nTrak);
Status DisposeDataToFile();
Status TransferDataFromTemporaryFile(vm_file* fTemp);
Ipp32s FindMinTrackEnd(sMuxTMrack* sTrack, Ipp32s nTracksNum);
//H264 ES
MediaData* TransformH264Frame(MediaData* mH264Data, Ipp32u nTrack);
Status CheckStartCode(Ipp32s nNal, Ipp8s* pData, Ipp32u nPos, MediaData* mH264Data, bool bLastPart);
}; // class MP4Muxer
} // namespace UMC
#endif // __UMC_MP4_MUX_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -