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

📄 umc_mp4_spl.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) 2004-2007 Intel Corporation. All Rights Reserved.
//
*/

#ifndef __UMC_MP4_SPLITTER_H__
#define __UMC_MP4_SPLITTER_H__

#include "umc_spl_base.h"
#include "umc_mp4_parser.h"

/*
#define NAL_UNITTYPE_BITS       0x1f
#define NAL_UT_IDR_SLICE        0x05
#define NAL_UT_SLICE            0x01
*/

#define NUMBEROFFRAMES          8
#define MINAUDIOBUFFERSIZE      1024 * 16
#define MINVIDEOBUFFERSIZE      1024 * 1024

namespace UMC
{

  class MP4Splitter : public SplitterBase
{

    DYNAMIC_CAST_DECL(MP4Splitter, SplitterBase)

public:

    MP4Splitter();
    ~MP4Splitter();

    Status  Init(SplitterParams& init);
    Status  Close();

protected:
    static Ipp32u VM_THREAD_CALLCONVENTION InitMoofThreadCallback(void* pParam);
    Status          ParseMP4Header();
    Status          InitMoof();
    Status          SelectNextFragment();
    Status          CheckInit();

    Status          ParseAVCCHeader(T_trak_data *pTrak, Ipp32u nTrack);
    Status          ParseESDSHeader(T_trak_data *pTrak, Ipp32u nTrack);

    Status          MapTrafIDToTrackID (Ipp32u trafID, Ipp32u &nTrack);
    Status          AddMoovToIndex(Ipp32u iES);
    Status          AddMoofRunToIndex(Ipp32u iES, T_trex_data *pTrex, T_traf *pTraf,
                                      T_trun *pTrun, Ipp64u &nBaseOffset);
    void            FillSampleSizeAndType(T_trak_data *trak, IndexFragment &frag);
    void            FillSamplePos(T_trak_data *trak, IndexFragment &frag);
    void            FillSampleTimeStamp(T_trak_data *trak, IndexFragment &frag);

    Status          FillAudioInfo(T_trak_data *pTrak, Ipp32u nTrack);
    Status          FillVideoInfo(T_trak_data *pTrak, Ipp32u nTrack);

    Thread          m_InitMoofThread;
    Ipp64u          m_nFragPosEnd;  // Moov or Moof

    long            Get_24(DataReader *dr);
    Ipp32s          Read_mp4_descr_length(DataReader *dr);
    T_trak_data*    Add_trak(T_moov *moov);
    Status          Clear_track(T_trak_data* pTrak);

    Status          ParseTracksDuration(Ipp64u* pDuration);
    Status          ParseTrackFragmentDuration(Ipp64u* dDuration, T_atom_mp4 *atom);


    Ipp32s Compare_Atom(T_atom_mp4 *atom, char *type);
    Status Atom_Skip(UMC::DataReader *dr, T_atom_mp4 *atom);

    Status Read_Atom(DataReader *dr, T_atom_mp4 *atom);
    Status Read_moov(DataReader *dr, T_moov *moov, T_atom_mp4 *atom);
    Status Read_mvhd(DataReader *dr, T_mvhd_data *mvhd_data);
    Status Read_mdhd(DataReader *dr, T_mdhd_data *mdhd);
    Status Read_iods(DataReader *dr, T_iods_data *iods);
    Status Read_tkhd(DataReader *dr, T_tkhd_data *tkhd);
    Status Read_mdia(DataReader *dr, T_mdia_data *mdia, T_atom_mp4 *trak_atom);
    Status Read_minf(DataReader *dr, T_minf_data *minf, T_atom_mp4 *parent_atom);
    Status Read_tref(DataReader *dr, T_tref_data *tref, T_atom_mp4 *atom);
    Status Read_dpnd(DataReader *dr, T_dpnd_data *dpnd);
    Status Read_hdlr(DataReader *dr, T_hdlr_data *hdlr);
    Status Read_hmhd(DataReader *dr, T_hmhd_data *hmhd);
    Status Read_vmhd(DataReader *dr, T_vmhd_data *vmhd);
    Status Read_smhd(DataReader *dr, T_smhd_data *smhd);
    Status Read_stbl(DataReader *dr, T_minf_data *minf, T_stbl_data *stbl, T_atom_mp4 *parent_atom);
    Status Read_stts(DataReader *dr, T_stts_data *stts);
    Status Read_stss(DataReader *dr, T_stss_data *stss);
    Status Read_stsd(DataReader *dr, T_minf_data *minf, T_stsd_data *stsd);
    Status Read_stsc(DataReader *dr, T_stsc_data *stsc);
    Status Read_stco(DataReader *dr, T_stco_data *stco);
    Status Read_co64(DataReader *dr, T_co64_data *co64);
    Status Read_stsz(DataReader *dr, T_stsz_data *stsz);
    Status Read_ctts(DataReader *dr, T_ctts_data *ctts);
    Status Read_stsd_table(DataReader *dr, T_minf_data *minf, T_stsd_table_data *table);
    Status Read_stsd_drms(DataReader *dr, T_stsd_table_data *table, T_atom_mp4 *parent_atom);
    Status Read_trak(DataReader *dr, T_trak_data *trak, T_atom_mp4 *trak_atom);
    Status Read_stsd_audio(DataReader *dr, T_stsd_table_data *table, T_atom_mp4 *parent_atom);
    Status Read_stsd_video(DataReader *dr, T_stsd_table_data *table, T_atom_mp4 *parent_atom);
    Status Read_h263_video(DataReader *dr, T_stsd_table_data *table, T_atom_mp4 *parent_atom);
    Status Read_h264_video(DataReader *dr, T_stsd_table_data *table, T_atom_mp4 *parent_atom);
    Status Read_stsd_hint(DataReader *dr, T_stsd_table_data *table, T_atom_mp4 *parent_atom);
    Status Read_esds(DataReader *dr, T_esds_data *esds);
    Status Read_dinf(DataReader *dr, T_dinf_data *dinf, T_atom_mp4 *dinf_atom);
    Status Read_dref(DataReader *dr, T_dref_data *dref);
    Status Read_dref_table(DataReader *dr, T_dref_table_data *table);
    Status Read_mvex(DataReader *dr, T_mvex_data *mvex, T_atom_mp4 *mvex_atom);
    Status Read_trex(DataReader *dr, T_trex_data *trex);

    Status Read_moof(DataReader *dr, T_moof *moof, T_atom_mp4 *atom);
    Status Clear_moof(T_moof &moof);
    Status Read_mfhd(DataReader *dr, T_mfhd *mfhd);
    Status Read_traf(DataReader *dr, T_traf *traf, T_atom_mp4 *atom);
    Status Read_tfhd(DataReader *dr, T_tfhd *tfhd);
    Status Read_trun(DataReader *dr, T_trun *trun);
    Status Read_trun_table(DataReader *dr, T_trun* trun, T_trun_table_data* table);

    Status Read_samr_audio(DataReader *dr, T_stsd_table_data *table, T_atom_mp4 *parent_atom);
    Status Read_damr_audio(DataReader *dr, T_stsd_table_data *table, T_atom_mp4 *parent_atom);

////    virtual void GetPictureType(int nOverallTrackIndex, SplSample* pSample);

    void SetH264FrameIntraSize(Ipp8u* decoderConfig);

protected:
    info_atoms        m_headerMPEG4;
    Ipp64u            m_nMoovAtomEnd;

    VideoStreamType   m_eVideoStreamType;
    Ipp8u             m_nH264FrameIntraSize;

    Ipp64u*           m_pFirstSegmentDuration;
    Ipp64f           *m_pLastPTS;

};

} // namespace UMC

#endif //__UMC_MP4_SPLITTER_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -