第一个正式任务

工作快两个月,好累,现在在用DirectShow播放器. 我作完发现播放时,子窗体的标题框还在.正在解决中...
哦,解决了
    hr = pVW->get_WindowStyle(&WindowStyle);
            if (SUCCEEDED(hr))
            {
                WindowStyle &= ~WS_OVERLAPPEDWINDOW; //No frame junk
                WindowStyle |= WS_CHILD;             //Needs to be child
                hr = pVW->put_WindowStyle(WindowStyle);
            }
//建造视频窗口时.

媒体类型是通过AM_MEDIA_TYPE结构定义的,看看原始定义吧

typedef struct  _MediaType {

    GUID      majortype;

    GUID      subtype;

    BOOL      bFixedSizeSamples;

    BOOL      bTemporalCompression;

    ULONG     lSampleSize;

    GUID      formattype;

    IUnknown  *pUnk;

    ULONG     cbFormat;

    [size_is(cbFormat)] BYTE *pbFormat;

} AM_MEDIA_TYPE;

Major type:是一个GUID,用来定义数据的主类型,包括,音频,视频,unparsed字节流,MIDI数据,等等,具体可以参考msdn

Subtype:子类型,也是一个GUID,用来进一步的细化数据格式,例如,在视频主类型中,还包括RGB-24, RGB-32, UYVY等等一些子类型,在音频主类型中还包括PCM audio, MPEG-1 payload等类型,子类型提供了比主类型更详细的信息,但是并没有定义所有的格式,例如,视频的子类型并没有定义图像大小,桢率。这些由下面的字段定义。

bFixedSizeSamples当这个值为TRUE时,表示sample大小固定。

bTemporalCompression当这个值为TRUE时,表示sample采用了临时压缩格式,表明不是所有的桢都是关键桢,如果为FALSE,表明所有的都是关键桢。

lSampleSize 表示sample的大小。对于压缩的数据,这个值可能为零。

Formattype一个GUID值,用来表明内存块的格式。包括如下:FORMAT_NoneFORMAT_DvInfoFORMAT_MPEGVideoFORMAT_MPEG2VideoFORMAT_VideoInfo

FORMAT_VideoInfo2FORMAT_WaveFormatExGUID_NULL

pUnk该参数没有用到

cbFormat内存块的大小

pbFormat指向内存块的指针,

面我们看一段代码,看看filter如何检测媒体类型的。

HRESULT CheckMediaType(AM_MEDIA_TYPE *pmt)

{

    if (pmt == NULL) return E_POINTER;

 

    // Check the major type. We´re looking for video.

    if (pmt->majortype != MEDIATYPE_Video)

    {

        return VFW_E_INVALIDMEDIATYPE;

    }

    // Check the subtype. We´re looking for 24-bit RGB.

    if (pmt->subtype != MEDIASUBTYPE_RGB24)

    {

        return VFW_E_INVALIDMEDIATYPE;

    }

    // Check the format type and the size of the format block.

    if ((pmt->formattype == FORMAT_VideoInfo) &&

         (pmt->cbFormat >= sizeof(VIDEOINFOHEADER) &&

         (pmt->pbFormat != NULL))

    {

        // Now it´s safe to coerce the format block pointer to the

        // correct structure, as defined by the formattype GUID.

        VIDEOINFOHEADER *pVIH = (VIDEOINFOHEADER*)pmt->pbFormat;

       // Examine pVIH (not shown). If it looks OK, return S_OK.

        return S_OK;

    }

    return VFW_E_INVALIDMEDIATYPE;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值