diff options
author | Fabrice Bellard <fabrice@bellard.org> | 2003-02-03 22:58:29 +0000 |
---|---|---|
committer | Fabrice Bellard <fabrice@bellard.org> | 2003-02-03 22:58:29 +0000 |
commit | 6fa5a56c1ba7ee770e48ddc8f785d85c00ba9c4d (patch) | |
tree | c60e1a61c337ae83557526b1bbe229a52219479a /libavformat/utils.c | |
parent | cdc90af00835297b8d5f3f06c47cf2c53267c3a3 (diff) | |
download | ffmpeg-6fa5a56c1ba7ee770e48ddc8f785d85c00ba9c4d.tar.gz |
zero copy packet handling for DV1394 by Max Krasnyansky
Originally committed as revision 1542 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/utils.c')
-rw-r--r-- | libavformat/utils.c | 39 |
1 files changed, 16 insertions, 23 deletions
diff --git a/libavformat/utils.c b/libavformat/utils.c index c2e9328cd3..d295e9a3fa 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -151,6 +151,15 @@ AVInputFormat *av_find_input_format(const char *short_name) /* memory handling */ /** + * Default packet destructor + */ +static void av_destruct_packet(AVPacket *pkt) +{ + av_free(pkt->data); + pkt->data = NULL; pkt->size = 0; +} + +/** * Allocate the payload of a packet and intialized its fields to default values. * * @param pkt packet @@ -159,34 +168,18 @@ AVInputFormat *av_find_input_format(const char *short_name) */ int av_new_packet(AVPacket *pkt, int size) { - int i; - pkt->data = av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE); - if (!pkt->data) + void *data = av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE); + if (!data) return AVERROR_NOMEM; - pkt->size = size; - /* sane state */ - pkt->pts = AV_NOPTS_VALUE; - pkt->stream_index = 0; - pkt->flags = 0; - - for(i=0; i<FF_INPUT_BUFFER_PADDING_SIZE; i++) - pkt->data[size+i]= 0; + memset(data + size, 0, FF_INPUT_BUFFER_PADDING_SIZE); + av_init_packet(pkt); + pkt->data = data; + pkt->size = size; + pkt->destruct = av_destruct_packet; return 0; } -/** - * Free a packet - * - * @param pkt packet to free - */ -void av_free_packet(AVPacket *pkt) -{ - av_freep(&pkt->data); - /* fail safe */ - pkt->size = 0; -} - /* fifo handling */ int fifo_init(FifoBuffer *f, int size) |