RageSurface *RageMovieTextureDriver_FFMpeg::AVCodecCreateCompatibleSurface( int iTextureWidth, int iTextureHeight, bool bPreferHighColor, int &iAVTexfmt, MovieDecoderPixelFormatYCbCr &fmtout ) { FixLilEndian(); int iAVTexfmtIndex = FindCompatibleAVFormat( bPreferHighColor ); if( iAVTexfmtIndex == -1 ) iAVTexfmtIndex = FindCompatibleAVFormat( !bPreferHighColor ); if( iAVTexfmtIndex == -1 ) { /* No dice. Use the first avcodec format of the preferred bit depth, * and let the display system convert. */ for( iAVTexfmtIndex = 0; AVPixelFormats[iAVTexfmtIndex].bpp; ++iAVTexfmtIndex ) if( AVPixelFormats[iAVTexfmtIndex].bHighColor == bPreferHighColor ) break; ASSERT( AVPixelFormats[iAVTexfmtIndex].bpp != 0 ); } const AVPixelFormat_t *pfd = &AVPixelFormats[iAVTexfmtIndex]; iAVTexfmt = pfd->pf; fmtout = pfd->YUV; LOG->Trace( "Texture pixel format: %i %i (%ibpp, %08x %08x %08x %08x)", iAVTexfmt, fmtout, pfd->bpp, pfd->masks[0], pfd->masks[1], pfd->masks[2], pfd->masks[3] ); if( pfd->YUV == PixelFormatYCbCr_YUYV422 ) iTextureWidth /= 2; return CreateSurface( iTextureWidth, iTextureHeight, pfd->bpp, pfd->masks[0], pfd->masks[1], pfd->masks[2], pfd->masks[3] ); }
MovieDecoder_FFMpeg::MovieDecoder_FFMpeg() { FixLilEndian(); m_fctx = NULL; m_pStream = NULL; m_iCurrentPacketOffset = -1; m_Frame = avcodec::av_frame_alloc(); Init(); }
MovieDecoder_FFMpeg::MovieDecoder_FFMpeg() { FixLilEndian(); m_fctx = NULL; m_pStream = NULL; m_iCurrentPacketOffset = -1; m_fLastFrame = 0; Init(); }
MovieDecoder_FFMpeg::MovieDecoder_FFMpeg() { FixLilEndian(); m_fctx = NULL; m_pStream = NULL; m_iCurrentPacketOffset = -1; /* Until we play the whole movie once without hitting a B-frame, assume * they exist. */ m_bHadBframes = true; m_fLastFrame = 0; Init(); }
MovieTexture_FFMpeg::MovieTexture_FFMpeg( RageTextureID ID ): RageMovieTexture( ID ), m_BufferFinished( "BufferFinished", 0 ) { LOG->Trace( "MovieTexture_FFMpeg::MovieTexture_FFMpeg(%s)", ID.filename.c_str() ); FixLilEndian(); decoder = new FFMpeg_Helper; m_uTexHandle = 0; m_bLoop = true; m_State = DECODER_QUIT; /* it's quit until we call StartThread */ m_img = NULL; m_ImageWaiting = FRAME_NONE; m_Rate = 1; m_bWantRewind = false; m_Clock = 0; m_FrameSkipMode = false; m_bThreaded = PREFSMAN->m_bThreadedMovieDecode.Get(); }