ithewei il y a 7 ans
Parent
commit
c8e6f6341d
2 fichiers modifiés avec 41 ajouts et 20 suppressions
  1. 6 2
      hframe.cpp
  2. 35 18
      hframe.h

+ 6 - 2
hframe.cpp

@@ -17,6 +17,10 @@ int HFrameBuf::push(HFrame* pFrame) {
         HFrame& frame = frames.front();
         frames.pop_front();
         free(frame.buf.len);
+        if (frame.userdata) {
+            ::free(frame.userdata);
+            frame.userdata = NULL;
+        }
     }
 
     int ret = 0;
@@ -33,7 +37,7 @@ int HFrameBuf::push(HFrame* pFrame) {
     HFrame frame;
     frame.buf.base = alloc(pFrame->buf.len);
     frame.buf.len  = pFrame->buf.len;
-    frame.copy(*pFrame);
+    frame = *pFrame;
     frames.push_back(frame);
     frame_stats.push_ok_cnt++;
 
@@ -58,7 +62,7 @@ int HFrameBuf::pop(HFrame* pFrame) {
     if (frame.isNull())
         return -30;
 
-    pFrame->copy(frame);
+    *pFrame = frame;
     frame_stats.pop_ok_cnt++;
 
     return 0;

+ 35 - 18
hframe.h

@@ -6,37 +6,54 @@
 #include "hbuf.h"
 #include "hmutex.h"
 
-typedef struct hframe_s {
+class HFrame {
+public:
     hbuf_t buf;
     int w;
     int h;
-    int type;
     int bpp;
+    int type;
     uint64 ts;
+    int64 useridx;
     void* userdata;
-    hframe_s() {
-        w = h = type = bpp = ts = 0;
+    HFrame() {
+        w = h = bpp = type = ts = 0;
+        useridx = -1;
         userdata = NULL;
     }
 
-    bool isNull() {
-        return w == 0 || h == 0 || buf.isNull();
+    HFrame(const HFrame& rhs) {
+        copy(rhs);
+    }
+
+    ~HFrame() {
+    }
+
+    HFrame& operator=(const HFrame& rhs) {
+        if (this != &rhs) {
+            copy(rhs);
+        }
+        return *this;
     }
 
-    // deep copy
-    void copy(const hframe_s& rhs) {
-        this->w = rhs.w;
-        this->h = rhs.h;
-        this->type = rhs.type;
-        this->bpp  = rhs.bpp;
-        this->ts   = rhs.ts;
-        this->userdata = rhs.userdata;
-        if (this->buf.isNull() || this->buf.len != rhs.buf.len) {
-            this->buf.init(rhs.buf.len);
+    void copy(const HFrame& rhs) {
+        w = rhs.w;
+        h = rhs.h;
+        bpp = rhs.bpp;
+        type = rhs.type;
+        ts = rhs.ts;
+        useridx = rhs.useridx;
+        userdata = rhs.userdata;
+        if (buf.isNull() || buf.len != rhs.buf.len) {
+            buf.init(rhs.buf.len);
         }
-        memcpy(this->buf.base, rhs.buf.base, rhs.buf.len);
+        memcpy(buf.base, rhs.buf.base, rhs.buf.len);
     }
-}HFrame;
+
+    bool isNull() {
+        return w == 0 || h == 0 || buf.isNull();
+    }
+};
 
 typedef struct frame_info_s {
     int w;