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

📄 gifvsrc.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	return HXR_UNEXPECTED;    }    HX_RESULT ret = HXR_OK;    if ( SUCCEEDED(status) )    {	HX_ASSERT(m_pViewSourceResponse != NULL);	HX_ASSERT(m_pFileObject != NULL);	m_ulFileSize = ulSize;	m_ulModTime = ulModificationTime;        // Now we read we only need the first 13 bytes -	m_state = kStateReadPending;        ret = m_pFileObject->Read(13);    }    else    {	m_state = kStateReady; 	ret = m_pViewSourceResponse->SourceReady(status, NULL);    }    return ret;}/************************************************************************ *  Method: *    IHXFileResponse::InitDone *  Purpose: *    Notification interface provided by users of the IHXFileObject *    interface. This method is called by the IHXFileObject when the *    initialization of the file is complete. */STDMETHODIMPCGIFViewSource::InitDone( HX_RESULT status ){    if ( m_state != kStateInitFilePending )    {	return HXR_UNEXPECTED;    }    HX_ASSERT(m_pViewSourceResponse != NULL);    m_state = kStateReady;    return m_pViewSourceResponse->InitDone(status);}/************************************************************************ *  Method: *	IHXFileResponse::ReadDone *  Purpose: *	Notification interface provided by users of the IHXFileObject *	interface. This method is called by the IHXFileObject when the *	last read from the file is complete and a buffer is available. */STDMETHODIMPCGIFViewSource::ReadDone(HX_RESULT status, 				       IHXBuffer* pBuffer){    if ( m_state != kStateReadPending )    {	return HXR_UNEXPECTED;    }    HX_RESULT result = HXR_OK;    HX_ASSERT(m_pViewSourceResponse != NULL);        m_state = kStateReady;    if ( SUCCEEDED(status) )    {        // Have we read all we were supposed to?        if (pBuffer->GetSize() == 13)        {	    HX_RELEASE(m_pFileBuffer);	    m_pFileBuffer = pBuffer;	    m_pFileBuffer->AddRef();	    IHXBuffer* pReturnBuffer = NULL;	    result = CreateInfoBuffer(pReturnBuffer);	    if ( SUCCEEDED(result) )	    {		result = m_pViewSourceResponse->SourceReady(HXR_OK, 		    pReturnBuffer);	    }	    else	    {		//  don't like the File format 		result = m_pViewSourceResponse->SourceReady(result, 		    NULL);	    }	    HX_RELEASE(pReturnBuffer);        }        else        {	    result = m_pViewSourceResponse->SourceReady(HXR_FAIL,		NULL);        }    }    else    {	result = m_pViewSourceResponse->SourceReady(status,     	    NULL);    }    return result;}/************************************************************************ *  Method: *	IHXFileResponse::WriteDone *  Purpose: *	Notification interface provided by users of the IHXFileObject *	interface. This method is called by the IHXFileObject when the *	last write to the file is complete. */STDMETHODIMPCGIFViewSource::WriteDone(HX_RESULT status){    // We don't ever write, so we don't expect to get this...    return HXR_UNEXPECTED;}/************************************************************************ *  Method: *	IHXFileResponse::SeekDone *  Purpose: *	Notification interface provided by users of the IHXFileObject *	interface. This method is called by the IHXFileObject when the *	last seek in the file is complete. */STDMETHODIMPCGIFViewSource::SeekDone(HX_RESULT status){    return HXR_UNEXPECTED;}/************************************************************************ *  Method: *	IHXFileResponse::CloseDone *  Purpose: *	Notification interface provided by users of the IHXFileObject *	interface. This method is called by the IHXFileObject when the *	close of the file is complete. */STDMETHODIMPCGIFViewSource::CloseDone(HX_RESULT status){    return HXR_OK;}/************************************************************************ *  Method: *	CGIFViewSource::CreateInfoBuffer */STDMETHODIMP CGIFViewSource::CreateInfoBuffer(REF(IHXBuffer*) pBuffer){    char buf[128]; /* Flawfinder: ignore */    CGIFCodec::LogicalScreenDescriptor lsd;    HX_RESULT ret = ParseGif(lsd);    if ( FAILED(ret) )    {	return ret;    }    CBigByteGrowingQueue queue(INITIAL_QUEUESIZE);    queue.EnQueue(z_pOpen);         sprintf(buf, z_pImage_ss, z_pGIFGif, z_pGIFGif); /* Flawfinder: ignore */    queue.EnQueue(buf);    queue.EnQueue(z_pImageType);    if ( m_bIsGIF89a )    {	queue.EnQueue("GIF 89a Image");    }    else    {	queue.EnQueue("GIF 87a Image");    }    queue.EnQueue(z_pEndLine);        queue.EnQueue(z_pFileName);    const char* pFileName;    m_pFileObject->GetFilename(pFileName);    queue.EnQueue(pFileName);    queue.EnQueue(z_pEndLine);        QueueModificationTime(&queue, m_ulModTime);    QueueFileSize(&queue, m_ulFileSize);        sprintf(buf, z_pImageDimen_ii, lsd.m_ulLogicalScreenWidth, /* Flawfinder: ignore */	lsd.m_ulLogicalScreenHeight);    queue.EnQueue(buf);    queue.EnQueue(z_pEndLine);    sprintf(buf, z_pColorTableBits_i, lsd.m_ulColorTableBits); /* Flawfinder: ignore */    queue.EnQueue(buf);    queue.EnQueue(z_pEndLine);        IHXBuffer* pRam = NULL;    IHXBuffer* pCD = NULL;    if (m_pViewSourceOptions &&	SUCCEEDED(m_pViewSourceOptions->GetPropertyCString("RamGenURL",	pRam)) && 	SUCCEEDED(m_pViewSourceOptions->GetPropertyCString("CurrentPath",	pCD)) )    {	queue.EnQueue(z_pRamLink);	queue.EnQueue("<a href =\"");	queue.EnQueue((const char*)pRam->GetBuffer());	const char* p = (const char*)pCD->GetBuffer();	if ( *p == '/' )	{	    p++;	}	queue.EnQueue(p);	queue.EnQueue("/");	const char* pFileName;	m_pFileObject->GetFilename(pFileName);	queue.EnQueue(pFileName);	queue.EnQueue("\">");	queue.EnQueue((const char*)pRam->GetBuffer());	queue.EnQueue(p);	queue.EnQueue("/");	queue.EnQueue(pFileName);	queue.EnQueue("</a>");	queue.EnQueue(z_pEndLine);    }    HX_RELEASE(pRam);    HX_RELEASE(pCD);    queue.EnQueue((void*)z_pClose, strlen(z_pClose));    HX_RELEASE(pBuffer);    m_pCommonClassFactory->CreateInstance(IID_IHXBuffer, (void**)&pBuffer);    if ( !pBuffer )    {	return HXR_OUTOFMEMORY;    }    if ( FAILED(pBuffer->SetSize(queue.GetQueuedItemCount())) )    {	HX_RELEASE(pBuffer);	return HXR_OUTOFMEMORY;    }    unsigned char* chr = pBuffer->GetBuffer();    queue.DeQueue(chr, queue.GetQueuedItemCount());    return HXR_OK;}/************************************************************************ *  Method: *	CGIFViewSource::ParseGif */STDMETHODIMPCGIFViewSource::ParseGif(REF(CGIFCodec::LogicalScreenDescriptor) lsd){    HX_RESULT retVal = HXR_OK;    if ( m_pFileBuffer )    {        // Get the buffer (this causes the initial gather)        BYTE* pBuf = m_pFileBuffer->GetBuffer();        if (pBuf)        {	    UINT32 ulBufSize = m_pFileBuffer->GetSize();	    if ( ulBufSize < 13 )	    {		return HXR_FAIL;	    }	    BYTE  *pBufLimit = pBuf + ulBufSize;	    /* Check the signature */	    if (pBuf[0] != 'G' || pBuf[1] != 'I' || pBuf[2] != 'F')	    {		return HXR_FAIL;	    }	    pBuf += 3;	    /* Check the version */	    if (pBuf[0] == '8' && pBuf[1] == '9' && pBuf[2] == 'a')	    {		m_bIsGIF89a = TRUE;	    }	    else if (pBuf[0] == '8' && pBuf[1] == '7' && pBuf[2] == 'a')	    {		m_bIsGIF89a = FALSE;	    }	    else	    {		return HXR_FAIL;	    }	    pBuf += 3;	    /* Get the logical screen descriptor */	    CGIFCodec::ParseLogicalScreenDescriptor(pBuf, lsd);        }        else        {            retVal = HXR_FAIL;        }    }    else    {        retVal = HXR_UNEXPECTED;    }    return retVal;}

⌨️ 快捷键说明

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