- //---------------------------------------------------------------------------
- // Sword3 Engine (c) 1999-2000 by Kingsoft
- //
- // File: KMp4Movie.cpp
- // Date: 2000.08.08
- // Code: Daniel Wang
- // Desc: MPEG-4 Movie Play Class
- //---------------------------------------------------------------------------
- #include "KWin32.h"
- #include "KDebug.h"
- #include "KSystem.h"
- #include "KKeyboard.h"
- #include "KMp4Movie.h"
- //---------------------------------------------------------------------------
- // 函数: Open
- // 功能: 打开AVI文件
- // 参数: FileName 文件名
- // 返回: TRUE-成功 FALSE-失败
- //---------------------------------------------------------------------------
- BOOL KMp4Movie::Open(LPSTR FileName)
- {
- // 打开音频AVI文件
- m_Audio.Open(FileName);
- // 打开视频AVI文件
- m_Video.Open(FileName);
- return TRUE;
- }
- //---------------------------------------------------------------------------
- // 函数: Close
- // 功能: 关闭文件,释放资源
- // 参数: void
- // 返回: void
- //---------------------------------------------------------------------------
- void KMp4Movie::Close()
- {
- // 关闭音频流
- m_Audio.Close();
- // 关闭视频流
- m_Video.Close();
- }
- //---------------------------------------------------------------------------
- // 函数: Play
- // 功能: 开始播放
- // 参数: void
- // 返回: void
- //---------------------------------------------------------------------------
- void KMp4Movie::Play(BOOL bZoom)
- {
- m_Audio.Play();
- Sleep(750); //MSDN说音频比视频满0.75秒
- m_Video.Play(bZoom);
- }
- //---------------------------------------------------------------------------
- // 函数: Stop
- // 功能: 停止播放
- // 参数: void
- // 返回: void
- //---------------------------------------------------------------------------
- void KMp4Movie::Stop()
- {
- m_Audio.Stop();
- m_Video.Stop();
- }
- //---------------------------------------------------------------------------
- // 函数: Seek
- // 功能:
- // 参数: void
- // 返回: void
- //---------------------------------------------------------------------------
- void KMp4Movie::Seek(int nPercent)
- {
- m_Audio.Seek(nPercent);
- m_Video.Seek(nPercent);
- }
- //---------------------------------------------------------------------------
- // 函数: Rewind
- // 功能: 从头播放
- // 参数: void
- // 返回: void
- //---------------------------------------------------------------------------
- void KMp4Movie::Rewind()
- {
- m_Audio.Rewind();
- m_Video.Rewind();
- }
- //---------------------------------------------------------------------------
- // 函数: SetPos
- // 功能: 设置位置
- // 参数: nX, nY 坐标
- // 返回: void
- //---------------------------------------------------------------------------
- void KMp4Movie::SetPos(int nX, int nY)
- {
- m_Video.SetPos(nX, nY);
- }
- //---------------------------------------------------------------------------
- // 函数: WaitForEnd
- // 功能: 等待结束
- // 参数: void
- // 返回: void
- //---------------------------------------------------------------------------
- void KMp4Movie::WaitForEnd()
- {
- MSG Msg;
- while (TRUE)
- {
- // 等待消息,释放CPU资源
- WaitMessage();
- // 中途关闭程序
- if (!GetMessage(&Msg, NULL, 0, 0))
- {
- PostQuitMessage(0);
- break;
- }
- // ESCAPE键跳过播放
- g_Keyboard.UpdateState();
- if (g_Keyboard.IsDown(DIK_ESCAPE))
- {
- Close(); // 避免解码线程填充已经释放的内存
- break;
- }
- // 播放完成通告消息
- if (Msg.message == WM_MP4MOVIE_END)
- break;
- // 播放完成通告没有收到时的补救处理
- if (!m_Video.IsPlaying())
- break;
- DispatchMessage(&Msg);
- }
- }
- //---------------------------------------------------------------------------