From 080acae08ec8cfe413c3e6e45bcf7f9222dfa02d Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期四, 24 十月 2019 16:50:28 +0800
Subject: [PATCH] update

---
 csrc/worker/rec.hpp |   23 ++++++++++++++---------
 1 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/csrc/worker/rec.hpp b/csrc/worker/rec.hpp
index 5ac00a9..fc6ba0d 100644
--- a/csrc/worker/rec.hpp
+++ b/csrc/worker/rec.hpp
@@ -2,12 +2,14 @@
 #define _cffmpeg_rec_hpp_
 
 #include <string>
-#include <memory>
 #include <unordered_map>
 #include <list>
 #include <mutex>
 
 #include "../buz/recorder.hpp"
+
+struct AVPacket;
+class CPacket;
 
 namespace ffwrapper
 {
@@ -22,9 +24,7 @@
     {
     private:
         ffwrapper::FormatIn *recRef_;
-        int     maxduration_;
-        int     minduration_;
-
+        int min_cache_len_;
         // 褰曞儚鐨勫疄渚�,瀵瑰簲浠诲姟
         std::unordered_map<std::string, std::unique_ptr<buz::Recorder> > map_rec_;
         // 澶氱嚎绋嬫坊鍔犱换鍔″疄渚�,鍦ㄨ娴佺嚎绋嬩娇鐢ㄥ綍鍍�,浣嗘槸娣诲姞鍦ㄥ彟涓�涓嚎绋�
@@ -41,35 +41,40 @@
         std::mutex mtx_recInfo_;
 
         // 缂撳瓨鐨勮棰戝抚,绛夊緟firerecsignal瑙﹀彂寮�濮嬪綍鍍�
-        std::list<buz::CPacket> list_pkt_;
+        std::list<CPacket> list_pkt_;
         // 澶氱嚎绋�,鐢熶骇鑰呯嚎绋媟eader push pkt,娑堣垂鑰�,褰曞儚绾跨▼pop
         std::mutex mtx_pkt_;
 
     private: 
+        // 鏌ユ壘缂撳瓨涓殑褰曞埗甯�
+        void findRecFramesIndex(const int64_t &fired_id, const int duration, int &start, int &end);
+
         // 褰曞儚瀹炰緥鐨勫洖璋冨嚱鏁�,褰曞儚瀹屾垚鍚庤缃綍鍍忔枃浠惰矾寰�,id鍜屽抚id
         void setRecInfo(std::string &id, int &index, std::string &path);
         // 缂撳瓨瑙嗛鍖�
-        void cachePacket(std::shared_ptr<ffwrapper::CodedData> data, int64_t &id);
+        void cachePacket(const CPacket &pkt);
         // 涓㈠純缂撳瓨
         int shrinkCache();
         // 鍒涘缓褰曞儚瀹炰緥寮�濮嬪綍鍍�
-        std::unique_ptr<buz::Recorder> startRec(std::string id, std::string dir, const int mind, const int maxd, const bool audio);
+        std::unique_ptr<buz::Recorder> startRec(std::string id, std::string dir, const int64_t &frameID, const int mind, const int maxd, const bool audio);
         // 娓呴櫎缂撳瓨,鏂嚎閲嶈繛鏃堕渶瑕�
         void clear();
     public:
-        void NewRec(const char* id, const char *output, const int mindur, const int maxdur, const bool audio);
+        void NewRec(const char* id, const char *output, const int64_t &frameID, const int mindur, const int maxdur, const bool audio);
 
         // 鍑嗗濂藉綍鍍�
         void Load(ffwrapper::FormatIn *in);
         void Unload();
         const bool Loaded() const;
         // 缂撳瓨褰曞儚鐨勮棰戝寘,绛夊緟瑙﹀彂褰曞儚,鎴栫洿鎺ユ斁鍒板綍鍍忕紦瀛�
-        void SetPacket(std::shared_ptr<ffwrapper::CodedData> data, int64_t &id);
+        void SetPacket(const CPacket &pkt);
         // 瑙﹀彂褰曞儚
         void FireRecSignal(const char* sid,const int64_t &id);
         // 鑾峰彇褰曞儚鏂囦欢璺緞鍜屽抚id
         void GetRecInfo(std::string &recID, int &index, std::string &path);
         
+        // 璁剧疆褰曞埗鏃堕暱浣滀负缂撳瓨
+        void SetRecMinCacheTime(const int min);
     public:
         rec();
         ~rec();

--
Gitblit v1.8.0