]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
transcoder: remove some wrappers (duplicated code)
authorJaroslav Kysela <perex@perex.cz>
Mon, 28 Aug 2017 14:37:10 +0000 (16:37 +0200)
committerJaroslav Kysela <perex@perex.cz>
Mon, 28 Aug 2017 14:37:10 +0000 (16:37 +0200)
src/packet.c
src/packet.h
src/transcoding/memutils.c
src/transcoding/memutils.h
src/transcoding/transcode/context.c
src/transcoding/transcode/helpers.c
src/transcoding/transcode/transcoder.c
src/transcoding/transcode/video.c

index 4b543f6a58e9f35069d236f408a6e103f8534c5a..688b8a953a49ce0480e51d2d763a5008bcd67117 100644 (file)
@@ -52,21 +52,32 @@ pkt_destroy(th_pkt_t *pkt)
  * suppoed to take care of)
  */
 th_pkt_t *
-pkt_alloc(streaming_component_type_t type, const void *data, size_t datalen,
+pkt_alloc(streaming_component_type_t type, const uint8_t *data, size_t datalen,
           int64_t pts, int64_t dts, int64_t pcr)
 {
   th_pkt_t *pkt;
+  pktbuf_t *payload;
+
+  if (datalen > 0) {
+    payload = pktbuf_alloc(data, datalen);
+    if (payload == NULL)
+      return NULL;
+  } else {
+    payload = NULL;
+  }
 
   pkt = calloc(1, sizeof(th_pkt_t));
   if (pkt) {
     pkt->pkt_type = type;
-    if(datalen)
-      pkt->pkt_payload = pktbuf_alloc(data, datalen);
+    pkt->pkt_payload = payload;
     pkt->pkt_dts = dts;
     pkt->pkt_pts = pts;
     pkt->pkt_pcr = pcr;
     pkt->pkt_refcount = 1;
     memoryinfo_alloc(&pkt_memoryinfo, sizeof(*pkt));
+  } else {
+    if (payload)
+      pktbuf_ref_dec(payload);
   }
   return pkt;
 }
@@ -350,26 +361,28 @@ pktbuf_ref_inc(pktbuf_t *pb)
 }
 
 pktbuf_t *
-pktbuf_alloc(const void *data, size_t size)
+pktbuf_alloc(const uint8_t *data, size_t size)
 {
-  pktbuf_t *pb = malloc(sizeof(pktbuf_t));
-
-  if (pb == NULL) return NULL;
+  pktbuf_t *pb;
+  uint8_t *buffer;
+
+  buffer = size > 0 ? malloc(size) : NULL;
+  if (buffer) {\
+    if (data != NULL)
+      memcpy(buffer, data, size);
+  } else if (size > 0) {
+    return NULL;
+  }
+  pb = malloc(sizeof(pktbuf_t));
+  if (pb == NULL) {
+    free(buffer);
+    return NULL;
+  }
   pb->pb_refcount = 1;
+  pb->pb_data = buffer;
   pb->pb_size = size;
   pb->pb_err = 0;
-  if(size > 0) {
-    pb->pb_data = malloc(size);
-    if (pb->pb_data != NULL) {
-      if (data != NULL)
-        memcpy(pb->pb_data, data, size);
-    } else {
-      pb->pb_size = 0;
-    }
-  } else {
-    pb->pb_data = NULL;
-  }
-  memoryinfo_alloc(&pktbuf_memoryinfo, sizeof(*pb) + pb->pb_size);
+  memoryinfo_alloc(&pktbuf_memoryinfo, sizeof(*pb) + size);
   return pb;
 }
 
index e32182815585b78295553d0834ab331412e8e883..ec6239541ca256ce11dbe229accea8994bd1b35a 100644 (file)
@@ -126,7 +126,7 @@ void pktref_insert_head(struct th_pktref_queue *q, th_pkt_t *pkt);
 #define PKTREF_FOREACH(item, queue) TAILQ_FOREACH((item), (queue), pr_link)
 
 th_pkt_t *pkt_alloc(streaming_component_type_t type,
-                    const void *data, size_t datalen,
+                    const uint8_t *data, size_t datalen,
                     int64_t pts, int64_t dts, int64_t pcr);
 
 th_pkt_t *pkt_copy_shallow(th_pkt_t *pkt);
@@ -155,7 +155,7 @@ void pktbuf_destroy(pktbuf_t *pb);
 
 pktbuf_t *pktbuf_ref_inc(pktbuf_t *pb);
 
-pktbuf_t *pktbuf_alloc(const void *data, size_t size);
+pktbuf_t *pktbuf_alloc(const uint8_t *data, size_t size);
 
 pktbuf_t *pktbuf_make(void *data, size_t size);
 
index af47f187cb7d4627ce33c2d63bb80be9e638bfd2..f44efce5296e633f61e7da198b49a18a311815c1 100644 (file)
@@ -20,8 +20,6 @@
 
 #include "memutils.h"
 
-#include "memoryinfo.h"
-
 #include <libavutil/mem.h>
 
 
@@ -96,29 +94,6 @@ str_snprintf(char *str, size_t size, const char *format, ...)
     return (ret < 0 || ret >= size) ? -1 : 0;
 }
 
-
-/* meant to replace streaming_msg_create_pkt in streaming.h
-   IMPORTANT: takes ownership of pkt */
-streaming_message_t *
-msg_create(th_pkt_t *pkt)
-{
-    static const size_t msg_size = sizeof(streaming_message_t);
-    streaming_message_t *msg = NULL;
-
-    if ((msg = calloc(1, msg_size))) {
-        msg->sm_type = SMT_PACKET;
-#if ENABLE_TIMESHIFT
-        msg->sm_time = 0;
-#endif
-        msg->sm_data = pkt; // takes ownership
-    }
-    else {
-        TVHPKT_DECREF(pkt);
-    }
-    return msg;
-}
-
-
 /* _IMPORTANT!_: need to check for pb->pb_size and pb->pb_data
    _BEFORE_ calling pktbuf_copy_data */
 uint8_t *
@@ -130,60 +105,3 @@ pktbuf_copy_data(pktbuf_t *pb)
     }
     return data;
 }
-
-
-/* meant to replace pktbuf_alloc in packet.h */
-pktbuf_t *
-pktbuf_create(const uint8_t *data, size_t size)
-{
-    static const size_t pktbuf_size = sizeof(pktbuf_t);
-    pktbuf_t *pktbuf = NULL;
-    uint8_t *buffer = NULL;
-
-    if (size) {
-        if (!(buffer = calloc(1, size))) {
-            return NULL;
-        }
-        else if (data) {
-            memcpy(buffer, data, size);
-        }
-    }
-    if ((pktbuf = calloc(1, pktbuf_size))) {
-        pktbuf->pb_refcount = 1;
-        pktbuf->pb_err = 0;
-        pktbuf->pb_data = buffer;
-        pktbuf->pb_size = size;
-        memoryinfo_alloc(&pktbuf_memoryinfo, pktbuf_size + pktbuf->pb_size);
-    }
-    else if (buffer) {
-        free(buffer);
-        buffer = NULL;
-    }
-    return pktbuf;
-}
-
-
-/* meant to replace pkt_alloc in packet.h */
-th_pkt_t *
-pkt_create(const uint8_t *data, size_t size, int64_t pts, int64_t dts)
-{
-    static const size_t pkt_size = sizeof(th_pkt_t);
-    th_pkt_t *pkt = NULL;
-    pktbuf_t *payload = NULL;
-
-    if (size && !(payload = pktbuf_create(data, size))) {
-        return NULL;
-    }
-    if ((pkt = calloc(1, pkt_size))) {
-        pkt->pkt_refcount = 1;
-        pkt->pkt_pts = pts;
-        pkt->pkt_dts = dts;
-        pkt->pkt_payload = payload;
-        memoryinfo_alloc(&pkt_memoryinfo, pkt_size);
-    }
-    else if (payload) {
-        pktbuf_ref_dec(payload);
-        payload = NULL;
-    }
-    return pkt;
-}
index ad608fef626794d890d44e4808c085bec658f15f..08233ebabdd73401bf9516a42853d85f0cceff98 100644 (file)
@@ -64,20 +64,9 @@ str_join(const char *separator, ...);
 int
 str_snprintf(char *str, size_t size, const char *format, ...);
 
-
-streaming_message_t *
-msg_create(th_pkt_t *pkt);
-
 /* _IMPORTANT!_: need to check for pb->pb_size and pb->pb_data
    _BEFORE_ calling pktbuf_copy_data */
 uint8_t *
 pktbuf_copy_data(pktbuf_t *pb);
 
-pktbuf_t *
-pktbuf_create(const uint8_t *data, size_t size);
-
-th_pkt_t *
-pkt_create(const uint8_t *data, size_t size, int64_t pts, int64_t dts);
-
-
 #endif // TVH_TRANSCODING_MEMUTILS_H__
index 9ce4fff13f607697747cca99b9ef546b51bf0458..3c4f50d423df6c36fbb30c874207b41435aa0c58 100644 (file)
@@ -160,8 +160,8 @@ _context_meta(TVHContext *self, AVPacket *avpkt, th_pkt_t *pkt)
             self->require_meta = self->helper->meta(self, avpkt, pkt);
         }
         else if (self->oavctx->extradata_size) {
-            pkt->pkt_meta = pktbuf_create(self->oavctx->extradata,
-                                          self->oavctx->extradata_size);
+            pkt->pkt_meta = pktbuf_alloc(self->oavctx->extradata,
+                                         self->oavctx->extradata_size);
             self->require_meta = (pkt->pkt_meta) ? 0 : -1;
         }
     }
@@ -269,7 +269,7 @@ tvh_context_pack(TVHContext *self, AVPacket *avpkt)
         pkt = self->helper->pack(self, avpkt);
     }
     else {
-        pkt = pkt_create(avpkt->data, avpkt->size, avpkt->pts, avpkt->dts);
+        pkt = pkt_alloc(self->stream->type, avpkt->data, avpkt->size, avpkt->pts, avpkt->dts, 0);
     }
     if (!pkt) {
         tvh_context_log(self, LOG_ERR, "failed to create packet");
index abbff3fd764d79d0d5215e6d07c86b33f54c3644..be67c074efc5b8d4abb4fb344c2e0d517a5d9f04 100644 (file)
@@ -218,7 +218,7 @@ tvh_mpeg2video_meta(TVHContext *self, AVPacket *avpkt, th_pkt_t *pkt)
             return -1;
         }
         size += 8;
-        if (!(pkt->pkt_meta = pktbuf_create(data, size))) {
+        if (!(pkt->pkt_meta = pktbuf_alloc(data, size))) {
             return -1;
         }
         return 0;
@@ -264,7 +264,7 @@ tvh_h264_meta(TVHContext *self, AVPacket *avpkt, th_pkt_t *pkt)
             break;
         }
         if (size) {
-            if (!(pkt->pkt_meta = pktbuf_create(avpkt->data, size))) {
+            if (!(pkt->pkt_meta = pktbuf_alloc(avpkt->data, size))) {
                 return -1;
             }
             return 0;
@@ -316,7 +316,7 @@ tvh_hevc_meta(TVHContext *self, AVPacket *avpkt, th_pkt_t *pkt)
             break;
         }
         if (size) {
-            if (!(pkt->pkt_meta = pktbuf_create(avpkt->data, size))) {
+            if (!(pkt->pkt_meta = pktbuf_alloc(avpkt->data, size))) {
                 return -1;
             }
             return 0;
@@ -380,14 +380,14 @@ tvh_aac_pack(TVHContext *self, AVPacket *avpkt)
         tvh_context_log(self, LOG_ERR, "aac frame data too big");
     }
     else if (avpkt->data[0] != 0xff || (avpkt->data[1] & 0xf0) != 0xf0) {
-        if ((pkt = pkt_create(NULL, pkt_size, avpkt->pts, avpkt->dts))) {
+        if ((pkt = pkt_alloc(self->stream->type, NULL, pkt_size, avpkt->pts, avpkt->dts, 0))) {
             tvh_aac_pack_adts_header(self, pkt->pkt_payload);
             memcpy(pktbuf_ptr(pkt->pkt_payload) + header_size,
                    avpkt->data, avpkt->size);
         }
     }
     else {
-        pkt = pkt_create(avpkt->data, avpkt->size, avpkt->pts, avpkt->dts);
+        pkt = pkt_alloc(self->stream->type, avpkt->data, avpkt->size, avpkt->pts, avpkt->dts, 0);
     }
     return pkt;
 }
index e720eb01375d60018f96988258af5e856a6ae70d..794ba1e3d811057c8b36d69b4cec976ce7e8fa1a 100644 (file)
@@ -219,7 +219,7 @@ tvh_transcoder_deliver(TVHTranscoder *self, th_pkt_t *pkt)
 {
     tvh_sm_t *msg = NULL;
 
-    if (!(msg = msg_create(pkt))) { // takes ownership of pkt
+    if (!(msg = streaming_msg_create_pkt(pkt))) { // takes ownership of pkt
         tvh_transcoder_log(self, LOG_ERR, "failed to create message");
         return -1;
     }
index a4b5deb2e35083d0d39f53e022c6dcd9c1d634d1..0dda4fce8ad0d3f63d0a9c17623f737b35f4ad45 100644 (file)
@@ -114,7 +114,10 @@ tvh_video_context_notify_gh(TVHContext *self)
     /* the video packets might be delayed */
     th_pkt_t *pkt = NULL;
 
-    pkt = pkt_create(NULL, 0, self->src_pkt->pkt_pts, self->src_pkt->pkt_dts);
+    pkt = pkt_alloc(self->stream->type, NULL, 0,
+                    self->src_pkt->pkt_pts,
+                    self->src_pkt->pkt_dts,
+                    self->src_pkt->pkt_pcr);
     if (pkt) {
         return tvh_context_deliver(self, pkt);
     }