Commit abaf10c1 authored by rbultje's avatar rbultje

Move av_packet_*() functions from libavformat/ to libavcodec/, where the

AVPacket structure now resides also.

Patch by Thilo Borgmann thilo.borgmann googlemail com, see the mailinglist
thread "Google Summer of Code participation" for additional discussion.



git-svn-id: file:///var/local/repositories/ffmpeg/trunk@18353 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent e9f7f58d
...@@ -7,6 +7,7 @@ HEADERS = avcodec.h opt.h vdpau.h xvmc.h ...@@ -7,6 +7,7 @@ HEADERS = avcodec.h opt.h vdpau.h xvmc.h
OBJS = allcodecs.o \ OBJS = allcodecs.o \
audioconvert.o \ audioconvert.o \
avpacket.o \
bitstream.o \ bitstream.o \
bitstream_filter.o \ bitstream_filter.o \
dsputil.o \ dsputil.o \
......
...@@ -2628,6 +2628,49 @@ typedef struct AVSubtitle { ...@@ -2628,6 +2628,49 @@ typedef struct AVSubtitle {
AVSubtitleRect **rects; AVSubtitleRect **rects;
} AVSubtitle; } AVSubtitle;
/* packet functions */
void av_destruct_packet_nofree(AVPacket *pkt);
/**
* Default packet destructor.
*/
void av_destruct_packet(AVPacket *pkt);
/**
* Initialize optional fields of a packet with default values.
*
* @param pkt packet
*/
void av_init_packet(AVPacket *pkt);
/**
* Allocate the payload of a packet and initialize its fields with
* default values.
*
* @param pkt packet
* @param size wanted payload size
* @return 0 if OK, AVERROR_xxx otherwise
*/
int av_new_packet(AVPacket *pkt, int size);
/**
* @warning This is a hack - the packet memory allocation stuff is broken. The
* packet is allocated if it was not really allocated.
*/
int av_dup_packet(AVPacket *pkt);
/**
* Free a packet.
*
* @param pkt packet to free
*/
static inline void av_free_packet(AVPacket *pkt)
{
if (pkt && pkt->destruct) {
pkt->destruct(pkt);
}
}
/* resample.c */ /* resample.c */
......
/*
* AVPacket functions for libavcodec
* Copyright (c) 2000, 2001, 2002 Fabrice Bellard
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "avcodec.h"
void av_destruct_packet_nofree(AVPacket *pkt)
{
pkt->data = NULL; pkt->size = 0;
}
void av_destruct_packet(AVPacket *pkt)
{
av_free(pkt->data);
pkt->data = NULL; pkt->size = 0;
}
void av_init_packet(AVPacket *pkt)
{
pkt->pts = AV_NOPTS_VALUE;
pkt->dts = AV_NOPTS_VALUE;
pkt->pos = -1;
pkt->duration = 0;
pkt->convergence_duration = 0;
pkt->flags = 0;
pkt->stream_index = 0;
pkt->destruct= av_destruct_packet_nofree;
}
int av_new_packet(AVPacket *pkt, int size)
{
uint8_t *data;
if((unsigned)size > (unsigned)size + FF_INPUT_BUFFER_PADDING_SIZE)
return AVERROR(ENOMEM);
data = av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE);
if (!data)
return AVERROR(ENOMEM);
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;
}
int av_dup_packet(AVPacket *pkt)
{
if (((pkt->destruct == av_destruct_packet_nofree) || (pkt->destruct == NULL)) && pkt->data) {
uint8_t *data;
/* We duplicate the packet and don't forget to add the padding again. */
if((unsigned)pkt->size > (unsigned)pkt->size + FF_INPUT_BUFFER_PADDING_SIZE)
return AVERROR(ENOMEM);
data = av_malloc(pkt->size + FF_INPUT_BUFFER_PADDING_SIZE);
if (!data) {
return AVERROR(ENOMEM);
}
memcpy(data, pkt->data, pkt->size);
memset(data + pkt->size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
pkt->data = data;
pkt->destruct = av_destruct_packet;
}
return 0;
}
...@@ -114,29 +114,6 @@ void av_metadata_free(AVMetadata **m); ...@@ -114,29 +114,6 @@ void av_metadata_free(AVMetadata **m);
/* packet functions */ /* packet functions */
void av_destruct_packet_nofree(AVPacket *pkt);
/**
* Default packet destructor.
*/
void av_destruct_packet(AVPacket *pkt);
/**
* Initialize optional fields of a packet with default values.
*
* @param pkt packet
*/
void av_init_packet(AVPacket *pkt);
/**
* Allocate the payload of a packet and initialize its fields with
* default values.
*
* @param pkt packet
* @param size wanted payload size
* @return 0 if OK, AVERROR_xxx otherwise
*/
int av_new_packet(AVPacket *pkt, int size);
/** /**
* Allocate and read the payload of a packet and initialize its fields with * Allocate and read the payload of a packet and initialize its fields with
...@@ -148,23 +125,6 @@ int av_new_packet(AVPacket *pkt, int size); ...@@ -148,23 +125,6 @@ int av_new_packet(AVPacket *pkt, int size);
*/ */
int av_get_packet(ByteIOContext *s, AVPacket *pkt, int size); int av_get_packet(ByteIOContext *s, AVPacket *pkt, int size);
/**
* @warning This is a hack - the packet memory allocation stuff is broken. The
* packet is allocated if it was not really allocated.
*/
int av_dup_packet(AVPacket *pkt);
/**
* Free a packet.
*
* @param pkt packet to free
*/
static inline void av_free_packet(AVPacket *pkt)
{
if (pkt && pkt->destruct) {
pkt->destruct(pkt);
}
}
/*************************************************/ /*************************************************/
/* fractional numbers for exact pts handling */ /* fractional numbers for exact pts handling */
......
...@@ -258,40 +258,6 @@ AVInputFormat *av_find_input_format(const char *short_name) ...@@ -258,40 +258,6 @@ AVInputFormat *av_find_input_format(const char *short_name)
/* memory handling */ /* memory handling */
void av_destruct_packet(AVPacket *pkt)
{
av_free(pkt->data);
pkt->data = NULL; pkt->size = 0;
}
void av_init_packet(AVPacket *pkt)
{
pkt->pts = AV_NOPTS_VALUE;
pkt->dts = AV_NOPTS_VALUE;
pkt->pos = -1;
pkt->duration = 0;
pkt->convergence_duration = 0;
pkt->flags = 0;
pkt->stream_index = 0;
pkt->destruct= av_destruct_packet_nofree;
}
int av_new_packet(AVPacket *pkt, int size)
{
uint8_t *data;
if((unsigned)size > (unsigned)size + FF_INPUT_BUFFER_PADDING_SIZE)
return AVERROR(ENOMEM);
data = av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE);
if (!data)
return AVERROR(ENOMEM);
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;
}
int av_get_packet(ByteIOContext *s, AVPacket *pkt, int size) int av_get_packet(ByteIOContext *s, AVPacket *pkt, int size)
{ {
...@@ -311,24 +277,6 @@ int av_get_packet(ByteIOContext *s, AVPacket *pkt, int size) ...@@ -311,24 +277,6 @@ int av_get_packet(ByteIOContext *s, AVPacket *pkt, int size)
return ret; return ret;
} }
int av_dup_packet(AVPacket *pkt)
{
if (((pkt->destruct == av_destruct_packet_nofree) || (pkt->destruct == NULL)) && pkt->data) {
uint8_t *data;
/* We duplicate the packet and don't forget to add the padding again. */
if((unsigned)pkt->size > (unsigned)pkt->size + FF_INPUT_BUFFER_PADDING_SIZE)
return AVERROR(ENOMEM);
data = av_malloc(pkt->size + FF_INPUT_BUFFER_PADDING_SIZE);
if (!data) {
return AVERROR(ENOMEM);
}
memcpy(data, pkt->data, pkt->size);
memset(data + pkt->size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
pkt->data = data;
pkt->destruct = av_destruct_packet;
}
return 0;
}
int av_filename_number_test(const char *filename) int av_filename_number_test(const char *filename)
{ {
...@@ -932,10 +880,6 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st, ...@@ -932,10 +880,6 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
pkt->convergence_duration = pc->convergence_duration; pkt->convergence_duration = pc->convergence_duration;
} }
void av_destruct_packet_nofree(AVPacket *pkt)
{
pkt->data = NULL; pkt->size = 0;
}
static int av_read_frame_internal(AVFormatContext *s, AVPacket *pkt) static int av_read_frame_internal(AVFormatContext *s, AVPacket *pkt)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment