From: Jaroslav Kysela Date: Mon, 28 Aug 2017 14:37:10 +0000 (+0200) Subject: transcoder: remove some wrappers (duplicated code) X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=19d2f60201fb2e93e6ecb90506beed0573476e91;p=thirdparty%2Ftvheadend.git transcoder: remove some wrappers (duplicated code) --- diff --git a/src/packet.c b/src/packet.c index 4b543f6a5..688b8a953 100644 --- a/src/packet.c +++ b/src/packet.c @@ -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; } diff --git a/src/packet.h b/src/packet.h index e32182815..ec6239541 100644 --- a/src/packet.h +++ b/src/packet.h @@ -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); diff --git a/src/transcoding/memutils.c b/src/transcoding/memutils.c index af47f187c..f44efce52 100644 --- a/src/transcoding/memutils.c +++ b/src/transcoding/memutils.c @@ -20,8 +20,6 @@ #include "memutils.h" -#include "memoryinfo.h" - #include @@ -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; -} diff --git a/src/transcoding/memutils.h b/src/transcoding/memutils.h index ad608fef6..08233ebab 100644 --- a/src/transcoding/memutils.h +++ b/src/transcoding/memutils.h @@ -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__ diff --git a/src/transcoding/transcode/context.c b/src/transcoding/transcode/context.c index 9ce4fff13..3c4f50d42 100644 --- a/src/transcoding/transcode/context.c +++ b/src/transcoding/transcode/context.c @@ -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"); diff --git a/src/transcoding/transcode/helpers.c b/src/transcoding/transcode/helpers.c index abbff3fd7..be67c074e 100644 --- a/src/transcoding/transcode/helpers.c +++ b/src/transcoding/transcode/helpers.c @@ -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; } diff --git a/src/transcoding/transcode/transcoder.c b/src/transcoding/transcode/transcoder.c index e720eb013..794ba1e3d 100644 --- a/src/transcoding/transcode/transcoder.c +++ b/src/transcoding/transcode/transcoder.c @@ -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; } diff --git a/src/transcoding/transcode/video.c b/src/transcoding/transcode/video.c index a4b5deb2e..0dda4fce8 100644 --- a/src/transcoding/transcode/video.c +++ b/src/transcoding/transcode/video.c @@ -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); }