浏览代码

工程文件编码全部改成utf8-bom

huihui 4 年之前
父节点
当前提交
0f6d0efe97

二进制
bin32/VideoPlayer.exe


二进制
bin32/VideoPlayer.pdb


+ 1 - 1
module/VideoPlayer/src/EventHandle/VideoPlayerEventHandle.cpp

@@ -1,4 +1,4 @@
-#include "VideoPlayerEventHandle.h"
+#include "VideoPlayerEventHandle.h"
 
 VideoPlayerCallBack::~VideoPlayerCallBack()
 {

+ 6 - 6
module/VideoPlayer/src/EventHandle/VideoPlayerEventHandle.h

@@ -1,4 +1,4 @@
-#ifndef VIDEOPLAYEREVENTHANDLE_H
+锘�#ifndef VIDEOPLAYEREVENTHANDLE_H
 #define VIDEOPLAYEREVENTHANDLE_H
 
 #include "types.h"
@@ -9,19 +9,19 @@ class VideoPlayerCallBack
 public:
     ~VideoPlayerCallBack();
 
-    ///打开文件失败
+    ///鎵撳紑鏂囦欢澶辫触
     virtual void onOpenVideoFileFailed(const int &code = 0) = 0;
 
-    ///打开sdl失败的时候回调此函数
+    ///鎵撳紑sdl澶辫触鐨勬椂鍊欏洖璋冩�鍑芥暟
     virtual void onOpenSdlFailed(const int &code) = 0;
 
-    ///获取到视频时长的时候调用此函数
+    ///鑾峰彇鍒拌�棰戞椂闀跨殑鏃跺€欒皟鐢ㄦ�鍑芥暟
     virtual void onTotalTimeChanged(const int64_t &uSec) = 0;
 
-    ///播放器状态改变的时候回调此函数
+    ///鎾�斁鍣ㄧ姸鎬佹敼鍙樼殑鏃跺€欏洖璋冩�鍑芥暟
     virtual void onPlayerStateChanged(const VideoPlayerState &state, const bool &hasVideo, const bool &hasAudio) = 0;
 
-    ///播放视频,此函数不宜做耗时操作,否则会影响播放的流畅性。
+    ///鎾�斁瑙嗛�锛屾�鍑芥暟涓嶅疁鍋氳€楁椂鎿嶄綔锛屽惁鍒欎細褰卞搷鎾�斁鐨勬祦鐣呮€с€�
     virtual void onDisplayVideo(VideoFramePtr videoFrame) = 0;
 
 };

+ 6 - 6
module/VideoPlayer/src/Mutex/Cond.cpp

@@ -1,4 +1,4 @@
-#include "Cond.h"
+锘�#include "Cond.h"
 
 Cond::Cond()
 {
@@ -23,7 +23,7 @@ Cond::~Cond()
 
 }
 
-//加锁
+//鍔犻攣
 int Cond::Lock()
 {
 #if defined(WIN32) && !defined(MINGW)
@@ -35,7 +35,7 @@ int Cond::Lock()
 
 }
 
-//解锁
+//瑙i攣
 int Cond::Unlock()
 {
 #if defined(WIN32) && !defined(MINGW)
@@ -58,7 +58,7 @@ int Cond::Wait()
 
 }
 
-//固定时间等待
+//鍥哄畾鏃堕棿绛夊緟
 int Cond::TimedWait(int second)
 {
 #if defined(WIN32) && !defined(MINGW)
@@ -66,7 +66,7 @@ int Cond::TimedWait(int second)
     return 0;
 #else
     struct timespec abstime;
-    //获取从当前时间,并加上等待时间, 设置进程的超时睡眠时间
+    //鑾峰彇浠庡綋鍓嶆椂闂达紝骞跺姞涓婄瓑寰呮椂闂达紝 璁剧疆杩涚▼鐨勮秴鏃剁潯鐪犳椂闂�
     clock_gettime(CLOCK_REALTIME, &abstime);
     abstime.tv_sec += second;
     return pthread_cond_timedwait(&m_cond, &m_mutex, &abstime);
@@ -85,7 +85,7 @@ int Cond::Signal()
     return ret;
 }
 
-//唤醒所有睡眠线程
+//鍞ら啋鎵€鏈夌潯鐪犵嚎绋�
 int Cond::Broadcast()
 {
 #if defined(WIN32) && !defined(MINGW)

+ 7 - 7
module/VideoPlayer/src/Mutex/Cond.h

@@ -1,8 +1,8 @@
-#ifndef COND_H
+锘�#ifndef COND_H
 #define COND_H
 
-/// 注意Mingw的话使用的是linux下的api pthread
-/// 没有_MSC_VER这个宏 我们就认为他用的是mingw编译器
+/// 娉ㄦ剰Mingw鐨勮瘽浣跨敤鐨勬槸linux涓嬬殑api pthread
+/// 娌℃湁_MSC_VER杩欎釜瀹� 鎴戜滑灏辫�涓轰粬鐢ㄧ殑鏄痬ingw缂栬瘧鍣�
 
 #ifndef _MSC_VER
 #define MINGW
@@ -22,22 +22,22 @@ public:
     Cond();
     ~Cond();
 
-    //上锁
+    //涓婇攣
     int Lock();
 
-    //解锁
+    //瑙i攣
     int Unlock();
 
     //
     int Wait();
 
-    //固定时间等待
+    //鍥哄畾鏃堕棿绛夊緟
     int TimedWait(int second);
 
     //
     int Signal();
 
-    //唤醒所有睡眠线程
+    //鍞ら啋鎵€鏈夌潯鐪犵嚎绋�
     int Broadcast();
 
 private:

+ 1 - 1
module/VideoPlayer/src/Mutex/Mutex.cpp

@@ -1,4 +1,4 @@
-#include "Mutex.h"
+#include "Mutex.h"
 
 Mutex::Mutex()
 {

+ 3 - 3
module/VideoPlayer/src/Mutex/Mutex.h

@@ -1,4 +1,4 @@
-#ifndef MUTEX_H
+锘�#ifndef MUTEX_H
 #define MUTEX_H
 
 
@@ -16,10 +16,10 @@ public:
     Mutex();
     ~Mutex();
 
-    //确保拥有互斥对象的线程对被保护资源的独自访问
+    //纭�繚鎷ユ湁浜掓枼瀵硅薄鐨勭嚎绋嬪�琚�繚鎶よ祫婧愮殑鐙�嚜璁块棶
     int Lock() const;
 
-    //释放当前线程拥有的互斥对象,以使其它线程可以拥有互斥对象,对被保护资源进行访问
+    //閲婃斁褰撳墠绾跨▼鎷ユ湁鐨勪簰鏂ュ�璞★紝浠ヤ娇鍏跺畠绾跨▼鍙�互鎷ユ湁浜掓枼瀵硅薄锛屽�琚�繚鎶よ祫婧愯繘琛岃�闂�
     int Unlock() const;
 
 private:

+ 4 - 4
module/VideoPlayer/src/VideoPlayer/Audio/PcmVolumeControl.cpp

@@ -1,6 +1,6 @@
-/**
- * Ò¶º£»Ô
- * QQȺ121376426
+/**
+ * �海辉
+ * QQ群121376426
  * http://blog.yundiantech.com/
  */
 
@@ -38,7 +38,7 @@ PcmVolumeControl::PcmVolumeControl()
 
 }
 
-///bufΪÐèÒªµ÷½ÚÒôÁ¿µÄÒôƵÊý¾Ý¿éÊ×µØÖ·Ö¸Õ룬sizeΪ³¤¶È£¬uRepeatÎªÖØ¸´´ÎÊý£¬Í¨³£ÉèΪ1£¬volΪÔöÒæ±¶Êý,¿ÉÒÔСÓÚ1
+///buf为需�调节音�的音频数��首地�指针,size为长度,uRepeat为��次数,通常设为1,vol为增益�数,�以�于1
 void PcmVolumeControl::RaiseVolume(char* buf, int size, int uRepeat, double vol)
 {
     if (!size)

+ 4 - 4
module/VideoPlayer/src/VideoPlayer/Audio/PcmVolumeControl.h

@@ -1,6 +1,6 @@
-/**
- * Ò¶º£»Ô
- * QQȺ121376426
+/**
+ * �海辉
+ * QQ群121376426
  * http://blog.yundiantech.com/
  */
 
@@ -12,7 +12,7 @@ class PcmVolumeControl
 public:
     PcmVolumeControl();
 
-    ///bufΪÐèÒªµ÷½ÚÒôÁ¿µÄÒôƵÊý¾Ý¿éÊ×µØÖ·Ö¸Õ룬sizeΪ³¤¶È£¬uRepeatÎªÖØ¸´´ÎÊý£¬Í¨³£ÉèΪ1£¬volΪÔöÒæ±¶Êý,¿ÉÒÔСÓÚ1
+    ///buf为需�调节音�的音频数��首地�指针,size为长度,uRepeat为��次数,通常设为1,vol为增益�数,�以�于1
     static void RaiseVolume(char* buf, int size, int uRepeat, double vol);
 
 };

+ 1 - 1
module/VideoPlayer/src/VideoPlayer/Video/VideoFrame.cpp

@@ -1,4 +1,4 @@
-#include "VideoFrame.h"
+#include "VideoFrame.h"
 
 VideoFrame::VideoFrame()
 {

+ 1 - 1
module/VideoPlayer/src/VideoPlayer/Video/VideoFrame.h

@@ -1,4 +1,4 @@
-#ifndef VIDEOFRAME_H
+#ifndef VIDEOFRAME_H
 #define VIDEOFRAME_H
 
 #include <stdint.h>

+ 27 - 27
module/VideoPlayer/src/VideoPlayer/Video/VideoPlayer_VideoThread.cpp

@@ -1,6 +1,6 @@
-/**
- * Ò¶º£»Ô
- * QQȺ121376426
+/**
+ * �海辉
+ * QQ群121376426
  * http://blog.yundiantech.com/
  */
 
@@ -15,16 +15,16 @@ void VideoPlayer::decodeVideoThread()
     int videoWidth  = 0;
     int videoHeight =  0;
 
-    double video_pts = 0; //µ±Ç°ÊÓÆµµÄpts
-    double audio_pts = 0; //񙮵pts
+    double video_pts = 0; //当�视频的pts
+    double audio_pts = 0; //音频pts
 
-    ///½âÂëÊÓÆµÏà¹Ø
+    ///解�视频相关
     AVFrame *pFrame = nullptr;
     AVFrame *pFrameYUV = nullptr;
-    uint8_t *yuv420pBuffer = nullptr; //½âÂëºóµÄyuvÊý¾Ý
-    struct SwsContext *imgConvertCtx = nullptr;  //ÓÃÓÚ½âÂëºóµÄÊÓÆµ¸ñʽת»»
+    uint8_t *yuv420pBuffer = nullptr; //解��的yuv数�
+    struct SwsContext *imgConvertCtx = nullptr;  //用于解��的视频格�转�
 
-    AVCodecContext *pCodecCtx = mVideoStream->codec; //ÊÓÆµ½âÂëÆ÷
+    AVCodecContext *pCodecCtx = mVideoStream->codec; //视频解�器
 
     pFrame = av_frame_alloc();
 
@@ -32,11 +32,11 @@ void VideoPlayer::decodeVideoThread()
     {
         if (mIsQuit)
         {
-            clearVideoQuene(); //Çå¿Õ¶ÓÁÐ
+            clearVideoQuene(); //清空队列
             break;
         }
 
-        if (mIsPause == true) //ÅжÏÔÝÍ£
+        if (mIsPause == true) //判断暂�
         {
             mSleep(10);
             continue;
@@ -49,12 +49,12 @@ void VideoPlayer::decodeVideoThread()
             mConditon_Video->Unlock();
             if (mIsReadFinished)
             {
-                //¶ÓÁÐÀïÃæÃ»ÓÐÊý¾ÝÁËÇÒ¶ÁÈ¡Íê±ÏÁË
+                //队列里�没有数�了且读�完毕了
                 break;
             }
             else
             {
-                mSleep(1); //¶ÓÁÐÖ»ÊÇÔÝʱûÓÐÊý¾Ý¶øÒÑ
+                mSleep(1); //队列�是暂时没有数�而已
                 continue;
             }
         }
@@ -66,7 +66,7 @@ void VideoPlayer::decodeVideoThread()
 
         AVPacket *packet = &pkt1;
 
-        //ÊÕµ½Õâ¸öÊý¾Ý ˵Ã÷¸Õ¸ÕÖ´ÐйýÌø×ª ÏÖÔÚÐèÒª°Ñ½âÂëÆ÷µÄÊý¾Ý Çå³ýÒ»ÏÂ
+        //收到这个数� 说明刚刚执行过跳转 现在需�把解�器的数� 清除一下
         if(strcmp((char*)packet->data, FLUSH_DATA) == 0)
         {
             avcodec_flush_buffers(mVideoStream->codec);
@@ -101,7 +101,7 @@ void VideoPlayer::decodeVideoThread()
     //OUTPUT("%s %f \n", __FUNCTION__, video_pts);
             if (seek_flag_video)
             {
-                //·¢ÉúÁËÌø×ª ÔòÌø¹ý¹Ø¼üÖ¡µ½Ä¿µÄʱ¼äµÄÕ⼸֡
+                //�生了跳转 则跳过关键帧到目的时间的这几帧
                if (video_pts < seek_time)
                {
                    av_packet_unref(packet);
@@ -113,7 +113,7 @@ void VideoPlayer::decodeVideoThread()
                }
             }
 
-            ///ÒôÊÓÆµÍ¬²½£¬ÊµÏÖµÄÔ­Àí¾ÍÊÇ£¬ÅжÏÊÇ·ñµ½ÏÔʾ´Ë֡ͼÏñµÄʱ¼äÁË£¬Ã»µ½ÔòÐÝÃß5ms£¬È»ºó¼ÌÐøÅжÏ
+            ///音视频�步,实现的原�就是,判断是�到显示此帧图�的时间了,没到则休眠5ms,然�继续判断
             while(1)
             {
                 if (mIsQuit)
@@ -124,25 +124,25 @@ void VideoPlayer::decodeVideoThread()
                 if (mAudioStream != NULL && !mIsAudioThreadFinished)
                 {
                     if (mIsReadFinished && mAudioPacktList.size() <= 0)
-                    {//¶ÁÈ¡ÍêÁË ÇÒÒôƵÊý¾ÝÒ²²¥·ÅÍêÁË ¾ÍÊ£ÏÂÊÓÆµÊý¾ÝÁË  Ö±½ÓÏÔʾ³öÀ´ÁË ²»ÓÃͬ²½ÁË
+                    {//读�完了 且音频数�也播放完了 就剩下视频数�了  直接显示出�了 �用�步了
                         break;
                     }
 
-                    ///ÓÐÒôƵµÄÇé¿öÏ£¬½«ÊÓÆµÍ¬²½µ½ÒôƵ
-                    ///¸úÒôƵµÄpts×ö¶Ô±È£¬±ÈÊÓÆµ¿ìÔò×öÑÓʱ
+                    ///有音频的情况下,将视频�步到音频
+                    ///跟音频的pts�对比,比视频快则�延时
                     audio_pts = audio_clock;
                 }
                 else
                 {
-                    ///ûÓÐÒôƵµÄÇé¿öÏ£¬Ö±½Óͬ²½µ½ÍⲿʱÖÓ
+                    ///没有音频的情况下,直接�步到外部时钟
                     audio_pts = (av_gettime() - mVideoStartTime) / 1000000.0;
                     audio_clock = audio_pts;
                 }
 
     //OUTPUT("%s %f %f \n", __FUNCTION__, video_pts, audio_pts);
-                //Ö÷ÒªÊÇ Ìø×ªµÄʱºò ÎÒÃǰÑvideo_clockÉèÖóÉ0ÁË
-                //Òò´ËÕâÀïÐèÒª¸üÐÂvideo_pts
-                //·ñÔòµ±´ÓºóÃæÌø×ªµ½Ç°ÃæµÄʱºò »á¿¨ÔÚÕâÀï
+                //主�是 跳转的时候 我们把video_clock设置�0了
+                //因此这里需�更新video_pts
+                //�则当从��跳转到��的时候 会�在这里
                 video_pts = video_clock;
 
                 if (video_pts <= audio_pts) break;
@@ -179,15 +179,15 @@ void VideoPlayer::decodeVideoThread()
 
                 pFrameYUV = av_frame_alloc();
 
-                int yuvSize = av_image_get_buffer_size(AV_PIX_FMT_YUV420P, pCodecCtx->width, pCodecCtx->height, 1);  //°´1×Ö½Ú½øÐÐÄÚ´æ¶ÔÆë,µÃµ½µÄÄÚ´æ´óС×î½Ó½üʵ¼Ê´óС
-            //    int yuvSize = av_image_get_buffer_size(AV_PIX_FMT_YUV420P, pCodecCtx->width, pCodecCtx->height, 0);  //°´0×Ö½Ú½øÐÐÄÚ´æ¶ÔÆë£¬µÃµ½µÄÄÚ´æ´óСÊÇ0
-            //    int yuvSize = av_image_get_buffer_size(AV_PIX_FMT_YUV420P, pCodecCtx->width, pCodecCtx->height, 4);   //°´4×Ö½Ú½øÐÐÄÚ´æ¶ÔÆë£¬µÃµ½µÄÄÚ´æ´óСÉÔ΢´óһЩ
+                int yuvSize = av_image_get_buffer_size(AV_PIX_FMT_YUV420P, pCodecCtx->width, pCodecCtx->height, 1);  //按1字节进行内存对�,得到的内存大�最接近实际大�
+            //    int yuvSize = av_image_get_buffer_size(AV_PIX_FMT_YUV420P, pCodecCtx->width, pCodecCtx->height, 0);  //按0字节进行内存对�,得到的内存大�是0
+            //    int yuvSize = av_image_get_buffer_size(AV_PIX_FMT_YUV420P, pCodecCtx->width, pCodecCtx->height, 4);   //按4字节进行内存对�,得到的内存大��微大一些
 
                 unsigned int numBytes = static_cast<unsigned int>(yuvSize);
                 yuv420pBuffer = static_cast<uint8_t *>(av_malloc(numBytes * sizeof(uint8_t)));
                 av_image_fill_arrays(pFrameYUV->data, pFrameYUV->linesize, yuv420pBuffer, AV_PIX_FMT_YUV420P, pCodecCtx->width, pCodecCtx->height, 1);
 
-                ///ÓÉÓÚ½âÂëºóµÄÊý¾Ý²»Ò»¶¨¶¼ÊÇyuv420p£¬Òò´ËÐèÒª½«½âÂëºóµÄÊý¾Ýͳһת»»³ÉYUV420P
+                ///由于解��的数��一定都是yuv420p,因此需�将解��的数�统一转��YUV420P
                 imgConvertCtx = sws_getContext(pCodecCtx->width, pCodecCtx->height,
                         pCodecCtx->pix_fmt, pCodecCtx->width, pCodecCtx->height,
                         AV_PIX_FMT_YUV420P, SWS_BICUBIC, NULL, NULL, NULL);

+ 2 - 2
module/VideoPlayer/src/types.cpp

@@ -1,4 +1,4 @@
-#include "types.h"
+#include "types.h"
 
 #include <time.h>
 
@@ -32,7 +32,7 @@ void mSleep(int mSecond)
 int64_t getTimeStamp_MilliSecond()
 {
 
-    int mSecond = 0; //µ±Ç°ºÁÃëÊý
+    int mSecond = 0; //当�毫秒数
 
 #if defined(WIN32)
 

+ 2 - 2
module/VideoPlayer/src/types.h

@@ -1,4 +1,4 @@
-#ifndef TYPES_H
+#ifndef TYPES_H
 #define TYPES_H
 
 #include <stdio.h>
@@ -29,6 +29,6 @@ enum VideoPlayerState
 
 void mSleep(int mSecond);
 
-int64_t getTimeStamp_MilliSecond(); //»ñȡʱ¼ä´Á£¨ºÁÃ룩
+int64_t getTimeStamp_MilliSecond(); //获�时间戳(毫秒)
 
 #endif // TYPES_H

+ 2 - 2
src/Base/FunctionTransfer.cpp

@@ -1,4 +1,4 @@
-#include "FunctionTransfer.h"
+#include "FunctionTransfer.h"
 
 #include <QThread>
 #include <QDebug>
@@ -11,7 +11,7 @@ Q_DECLARE_METATYPE(std::function<void()>)
 FunctionTransfer::FunctionTransfer(QObject *parent) :
     QObject(parent)
 {
-    //ÒòΪstd::function<void()>ÊÇ×Ô¶¨ÒåµÄÀàÐÍ Òª¿çÏ̴߳«µÝÐèÒªÏÈ×¢²áÒ»ÏÂ
+    //因为std::function<void()>是自定义的类型 �跨线程传递需�先注册一下
     qRegisterMetaType<std::function<void()>>();
 
     connect(this, SIGNAL(comming(std::function<void()>)), this, SLOT(slotExec(std::function<void()>)), Qt::BlockingQueuedConnection);

+ 6 - 6
src/Base/FunctionTransfer.h

@@ -1,4 +1,4 @@
-#ifndef FUNCTIONTRANSFER_H
+#ifndef FUNCTIONTRANSFER_H
 #define FUNCTIONTRANSFER_H
 
 #include  <functional>
@@ -17,7 +17,7 @@ class FunctionTransfer : public QObject
     Q_OBJECT
 public:
 
-    ///@brief ¹¹Ô캯Êý
+    ///@brief 构造函数
     explicit FunctionTransfer(QObject *parent = 0);
     ~FunctionTransfer();
 
@@ -25,22 +25,22 @@ public:
     static bool isMainThread();
 
 public:
-    ///@brief ÖÆ¶¨º¯ÊýfÔÚmainÖÐÖ´ÐÐ
+    ///@brief 制定函数f在main中执行
     static void runInMainThread(std::function<void()> f, bool isBlock = false);
 
 private:
     static Qt::HANDLE gMainThreadId;
 
-    //ÔÚÈ«¾ÖÊý¾ÝÇøÊµÀý»¯Ò»¸öFunctionTransferµÄʵÀý£¬¸ÃʵÀýËùÔÚµÄÏ߳̾ÍÊÇÖ÷Ï̡߳£
+    //在全局数�区实例化一个FunctionTransfer的实例,该实例所在的线程就是主线程。
     static FunctionTransfer *main_thread_forward;
 
 Q_SIGNALS:
-    ///@brief ÔÚ±ðµÄÏß³ÌÓк¯Êý¶ÔÏó´«À´
+    ///@brief 在别的线程有函数对象传�
     void comming(std::function<void()> f);
     void comming_noBlock(std::function<void()> f);
 
 private Q_SLOTS:
-    ///@brief Ö´Ðк¯Êý¶ÔÏó
+    ///@brief 执行函数对象
     void slotExec(std::function<void()> f);
 
 };