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

📄 fssapmp4parser.h

📁 6410BSP1
💻 H
字号:
//------------------------------------------------------------------------------
// File: fSsapMp4Parser.h
//
// Desc: define CMP4ParserFilter class
//
// Copyright (c) 2008, Samsung Electronics S.LSI.  All rights reserved.
//------------------------------------------------------------------------------

#if !defined(_SYSLSI_FSSAP_MP4_PARSER_H_)
#define _SYSLSI_FSSAP_MP4_PARSER_H_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class CMP4ParserAudioOp;
class CMP4ParserVideoOp;


class CMP4ParserFilter : public CSource, public IFileSourceFilter
{
    friend class CMP4ParserAudioOp;
    friend class CMP4ParserVideoOp;

public:
    CMP4ParserFilter(LPUNKNOWN pUnk, HRESULT *phr);
    virtual ~CMP4ParserFilter(void);

// static
public:
    static CUnknown * WINAPI CreateInstance(LPUNKNOWN pUnk, HRESULT *phr);

// Implementations
protected:
    // IUnknown interface
    DECLARE_IUNKNOWN;
    STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv)
    {
        if (riid == IID_IFileSourceFilter) 
            return GetInterface((IFileSourceFilter *)this, ppv);

        return CSource::NonDelegatingQueryInterface(riid, ppv);
    }

    // IFileSourceFilter interface
    STDMETHODIMP Load(LPCOLESTR pwszFileName, const AM_MEDIA_TYPE *pmt);
    STDMETHODIMP GetCurFile(LPOLESTR *ppwszFileName, AM_MEDIA_TYPE *pmt);

private:
    HRESULT  CheckFile(LPCTSTR pszFileName);
    HRESULT  MakeVideoMediaType(CMediaType *pMediaType);
    HRESULT  MakeAudioMediaType(CMediaType *pMediaType);

// member variables
private:
    CMediaType      m_video_mt;
    CMediaType      m_audio_mt;
    LPWSTR          m_pwFileName;

#define RAW_STRM_TYPE_M4V        100
#define RAW_STRM_TYPE_H263        101
#define RAW_STRM_TYPE_H264RAW    102
#define RAW_STRM_TYPE_M4A        200
#define RAW_STRM_TYPE_AMR_NB    201
    int             m_video_codec;
    int             m_audio_codec;


    void           *m_hMP4File;        // MP4 file handle

    int             m_video_trId;
    int             m_video_num_samples;
    unsigned int    m_video_timescale;
    unsigned int    m_video_duration;
    unsigned int    m_video_sample_max_size;

    int             m_video_width, m_video_height;
    double          m_video_framerate;
    int             m_video_profile;


    int             m_audio_trId;
    int             m_audio_num_samples;
    unsigned int    m_audio_timescale;
    unsigned int    m_audio_duration;
    unsigned int    m_audio_sample_max_size;

    int             m_audio_num_channels;



    unsigned int    m_h264_bufleng_size;
    unsigned char  *m_h264_tmp_buf;

public:
    double         GetVideoFrameRate()      { return  m_video_framerate; };
    unsigned int   GetVideoMSecDuration()   { return  (unsigned int) ((float) m_video_duration / m_video_timescale * 1000.0f); };
    unsigned int   GetVideoSampleMaxSize()  { return  m_video_sample_max_size; };
    unsigned int   GetVideoNumSamples()     { return  m_video_num_samples; };
    unsigned int   IsSyncSample(int sample_id);

    double         GetAudioTimescale()      { return  m_audio_timescale; };
    unsigned int   GetAudioMSecDuration()   { return  (unsigned int) ((float) m_audio_duration / m_audio_timescale * 1000.0f); };
    unsigned int   GetAudioSampleMaxSize()  { return  m_audio_sample_max_size; };

    int     GetVideoFrame(unsigned char *pFrameBuf, unsigned int *pSize, unsigned int *isIframe, int  sample_id);
    int     GetAudioFrame(unsigned char *pFrameBuf, unsigned int *pSize, int  sample_id);
    double  GetVideoFrameTime();    // returns the time (in seconds) per one video frame
    double  GetAudioFrameTime();    // returns the time (in seconds) per one audio frame
};



//#define RETAILMSG(a, msg)    0

#endif // !defined(_SYSLSI_FSSAP_MP4_PARSER_H_)

⌨️ 快捷键说明

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