⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 umc_mp4_mux.h

📁 audio-video-codecs.rar语音编解码器
💻 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 + -