TheoraDecodeOutputPin.cpp

Go to the documentation of this file.
00001 //===========================================================================
00002 //Copyright (C) 2003, 2004 Zentaro Kavanagh
00003 //
00004 //Redistribution and use in source and binary forms, with or without
00005 //modification, are permitted provided that the following conditions
00006 //are met:
00007 //
00008 //- Redistributions of source code must retain the above copyright
00009 //  notice, this list of conditions and the following disclaimer.
00010 //
00011 //- Redistributions in binary form must reproduce the above copyright
00012 //  notice, this list of conditions and the following disclaimer in the
00013 //  documentation and/or other materials provided with the distribution.
00014 //
00015 //- Neither the name of Zentaro Kavanagh nor the names of contributors 
00016 //  may be used to endorse or promote products derived from this software 
00017 //  without specific prior written permission.
00018 //
00019 //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00020 //``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00021 //LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
00022 //PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE ORGANISATION OR
00023 //CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00024 //EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00025 //PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00026 //PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00027 //LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00028 //NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00029 //SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00030 //===========================================================================
00031 
00032 #include "stdafx.h"
00033 #include "theoradecodeoutputpin.h"
00034 
00035 
00036 
00037 TheoraDecodeOutputPin::TheoraDecodeOutputPin(CTransformFilter* inParentFilter, HRESULT* outHR) 
00038         :       CTransformOutputPin(NAME("Theora Output Pin"), inParentFilter, outHR, L"YV12 Out")
00039 {
00040         //debugLog.open("G:\\logs\\theooutput.log", ios_base::out);
00041 }
00042 TheoraDecodeOutputPin::~TheoraDecodeOutputPin() {
00043         //debugLog.close();
00044 }
00045 
00046 STDMETHODIMP TheoraDecodeOutputPin::NonDelegatingQueryInterface(REFIID riid, void **ppv) {
00047         //debugLog<<"Querying interface"<<endl;
00048         if (riid == IID_IMediaSeeking) {
00049                 //debugLog<<"Got seekeer"<<endl;
00050                 *ppv = (IMediaSeeking*)this;
00051                 ((IUnknown*)*ppv)->AddRef();
00052                 
00053                 return NOERROR;
00054         } else if (riid == IID_IMediaPosition) {
00055                 //debugLog<<"Asking for OLD SEEKER"<<endl;
00056         }
00057         //debugLog<<"Trying base output pin"<<endl;
00058         return CBaseOutputPin::NonDelegatingQueryInterface(riid, ppv); 
00059 }
00060 
00061 HRESULT TheoraDecodeOutputPin::BreakConnect() {
00062         CAutoLock locLock(m_pLock);
00063         //Need a lock ??
00064         ReleaseDelegate();
00065         //debugLog<<"Break connect"<<endl;
00066         return CTransformOutputPin::BreakConnect();
00067 }
00068 HRESULT TheoraDecodeOutputPin::CompleteConnect (IPin *inReceivePin) {
00069         CAutoLock locLock(m_pLock);
00070         //debugLog<<"Complete connect"<<endl;
00071         IMediaSeeking* locSeeker = NULL;
00072 
00073         m_pFilter->GetPin(0)->QueryInterface(IID_IMediaSeeking, (void**)&locSeeker);
00074 
00075         if (locSeeker == NULL) {
00076                 //debugLog<<"Seeker was NULL"<<endl;
00077         }
00078         SetDelegate(locSeeker);
00079         return CTransformOutputPin::CompleteConnect(inReceivePin);
00080 }
00081 
00082 STDMETHODIMP TheoraDecodeOutputPin::Notify(IBaseFilter* inMessageSource, Quality inQuality) {
00083         return E_NOTIMPL;
00084 }
00085 //----------------------
00086 //OLD IMPLEMENTATION
00087 //----------------------
00088 //TheoraDecodeOutputPin::TheoraDecodeOutputPin(TheoraDecodeFilter* inParentFilter, CCritSec* inFilterLock)
00089 //      : AbstractVideoDecodeOutputPin(inParentFilter, inFilterLock,NAME("TheoraDecodeOutputPin"), L"YV12 Out")
00090 //{
00091 //
00092 //              
00093 //}
00094 //TheoraDecodeOutputPin::~TheoraDecodeOutputPin(void)
00095 //{
00096 //      
00097 //      
00098 //}
00099 //STDMETHODIMP TheoraDecodeOutputPin::NonDelegatingQueryInterface(REFIID riid, void **ppv)
00100 //{
00101 //      if (riid == IID_IMediaSeeking) {
00102 //              *ppv = (IMediaSeeking*)this;
00103 //              ((IUnknown*)*ppv)->AddRef();
00104 //              return NOERROR;
00105 //      //} else if (riid == IID_IStreamBuilder) {
00106 //      //      *ppv = (IStreamBuilder*)this;
00107 //      //      ((IUnknown*)*ppv)->AddRef();
00108 //      //      return NOERROR;
00109 //      }
00110 //
00111 //      return CBaseOutputPin::NonDelegatingQueryInterface(riid, ppv); 
00112 //}
00113 //
00114 //
00115 //STDMETHODIMP TheoraDecodeOutputPin::Notify(IBaseFilter *pSelf, Quality q) {
00116 //      return S_OK;
00117 //
00118 //}
00119 //
00120 //bool TheoraDecodeOutputPin::FillVideoInfoHeader(VIDEOINFOHEADER* inFormatBuffer) {
00121 //      TheoraDecodeFilter* locFilter = ((TheoraDecodeFilter*)m_pFilter);
00122 //
00123 //      inFormatBuffer->AvgTimePerFrame = (UNITS * locFilter->mTheoraFormatInfo->frameRateDenominator) / locFilter->mTheoraFormatInfo->frameRateNumerator;
00124 //      inFormatBuffer->dwBitRate = locFilter->mTheoraFormatInfo->targetBitrate;
00125 //      
00126 //      inFormatBuffer->bmiHeader.biBitCount = 12;   //12 bits per pixel
00127 //      inFormatBuffer->bmiHeader.biClrImportant = 0;   //All colours important
00128 //      inFormatBuffer->bmiHeader.biClrUsed = 0;        //Use max colour depth
00129 //      inFormatBuffer->bmiHeader.biCompression = MAKEFOURCC('Y','V','1','2');
00130 //      inFormatBuffer->bmiHeader.biHeight = locFilter->mTheoraFormatInfo->frameHeight;   //Not sure
00131 //      inFormatBuffer->bmiHeader.biPlanes = 1;    //Must be 1
00132 //      inFormatBuffer->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);    //????? Size of what ?
00133 //      inFormatBuffer->bmiHeader.biSizeImage = ((locFilter->mTheoraFormatInfo->frameHeight * locFilter->mTheoraFormatInfo->frameWidth) * 3)/2;    //Size in bytes of image ??
00134 //      inFormatBuffer->bmiHeader.biWidth = locFilter->mTheoraFormatInfo->frameWidth;
00135 //      inFormatBuffer->bmiHeader.biXPelsPerMeter = 2000;   //Fuck knows
00136 //      inFormatBuffer->bmiHeader.biYPelsPerMeter = 2000;   //" " " " " 
00137 //      
00138 //      inFormatBuffer->rcSource.top = 0;
00139 //      inFormatBuffer->rcSource.bottom = locFilter->mTheoraFormatInfo->frameHeight;
00140 //      inFormatBuffer->rcSource.left = 0;
00141 //      inFormatBuffer->rcSource.right = locFilter->mTheoraFormatInfo->frameWidth;
00142 //
00143 //      inFormatBuffer->rcTarget.top = 0;
00144 //      inFormatBuffer->rcTarget.bottom = locFilter->mTheoraFormatInfo->frameHeight;
00145 //      inFormatBuffer->rcTarget.left = 0;
00146 //      inFormatBuffer->rcTarget.right = locFilter->mTheoraFormatInfo->frameWidth;
00147 //
00148 //      inFormatBuffer->dwBitErrorRate=0;
00149 //      return true;
00150 //}
00151 //

Generated on Tue Feb 15 14:54:16 2005 for oggdsf by  doxygen 1.3.9