mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
AVPacket.pos
Originally committed as revision 4314 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
4aa606ec17
commit
2692067a45
@ -277,6 +277,7 @@ static int fourxm_read_packet(AVFormatContext *s,
|
||||
return AVERROR_IO;
|
||||
pkt->stream_index = fourxm->video_stream_index;
|
||||
pkt->pts = fourxm->video_pts;
|
||||
pkt->pos = url_ftell(&s->pb);
|
||||
memcpy(pkt->data, header, 8);
|
||||
ret = get_buffer(&s->pb, &pkt->data[8], size);
|
||||
|
||||
@ -293,15 +294,12 @@ static int fourxm_read_packet(AVFormatContext *s,
|
||||
size-=8;
|
||||
|
||||
if (track_number == fourxm->selected_track) {
|
||||
if (av_new_packet(pkt, size))
|
||||
ret= av_get_packet(&s->pb, pkt, size);
|
||||
if(ret<0)
|
||||
return AVERROR_IO;
|
||||
pkt->stream_index =
|
||||
fourxm->tracks[fourxm->selected_track].stream_index;
|
||||
pkt->pts = fourxm->audio_pts;
|
||||
ret = get_buffer(&s->pb, pkt->data, size);
|
||||
if (ret < 0)
|
||||
av_free_packet(pkt);
|
||||
else
|
||||
packet_read = 1;
|
||||
|
||||
/* pts accounting */
|
||||
|
@ -154,7 +154,7 @@ static int amr_read_packet(AVFormatContext *s,
|
||||
return AVERROR_IO;
|
||||
}
|
||||
pkt->stream_index = 0;
|
||||
|
||||
pkt->pos= url_ftell(&s->pb);
|
||||
pkt->data[0]=toc;
|
||||
|
||||
read = get_buffer(&s->pb, pkt->data+1, size);
|
||||
@ -189,6 +189,7 @@ static int amr_read_packet(AVFormatContext *s,
|
||||
}
|
||||
|
||||
pkt->stream_index = 0;
|
||||
pkt->pos= url_ftell(&s->pb);
|
||||
pkt->data[0]=toc;
|
||||
|
||||
read = get_buffer(&s->pb, pkt->data+1, size-1);
|
||||
|
@ -604,6 +604,7 @@ static int asf_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
asf_st->seq = asf->packet_seq;
|
||||
asf_st->pkt.pts = asf->packet_frag_timestamp;
|
||||
asf_st->pkt.stream_index = asf->stream_index;
|
||||
asf_st->pkt.pos =
|
||||
asf_st->packet_pos= asf->packet_pos;
|
||||
//printf("new packet: stream:%d key:%d packet_key:%d audio:%d size:%d\n",
|
||||
//asf->stream_index, asf->packet_key_frame, asf_st->pkt.flags & PKT_FLAG_KEY,
|
||||
|
@ -161,13 +161,11 @@ static int au_read_packet(AVFormatContext *s,
|
||||
|
||||
if (url_feof(&s->pb))
|
||||
return AVERROR_IO;
|
||||
if (av_new_packet(pkt, MAX_SIZE))
|
||||
ret= av_get_packet(&s->pb, pkt, MAX_SIZE);
|
||||
if (ret < 0)
|
||||
return AVERROR_IO;
|
||||
pkt->stream_index = 0;
|
||||
|
||||
ret = get_buffer(&s->pb, pkt->data, pkt->size);
|
||||
if (ret < 0)
|
||||
av_free_packet(pkt);
|
||||
/* note: we need to modify the packet size here to handle the last
|
||||
packet */
|
||||
pkt->size = ret;
|
||||
|
@ -5,7 +5,7 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define LIBAVFORMAT_BUILD 4624
|
||||
#define LIBAVFORMAT_BUILD 4625
|
||||
|
||||
#define LIBAVFORMAT_VERSION_INT FFMPEG_VERSION_INT
|
||||
#define LIBAVFORMAT_VERSION FFMPEG_VERSION
|
||||
@ -28,17 +28,16 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct AVPacket {
|
||||
int64_t pts; /* presentation time stamp in AV_TIME_BASE units (or
|
||||
pts_den units in muxers or demuxers) */
|
||||
int64_t dts; /* decompression time stamp in AV_TIME_BASE units (or
|
||||
pts_den units in muxers or demuxers) */
|
||||
int64_t pts; ///< presentation time stamp in time_base units
|
||||
int64_t dts; ///< decompression time stamp in time_base units
|
||||
uint8_t *data;
|
||||
int size;
|
||||
int stream_index;
|
||||
int flags;
|
||||
int duration; /* presentation duration (0 if not available) */
|
||||
int duration; ///< presentation duration in time_base units (0 if not available)
|
||||
void (*destruct)(struct AVPacket *);
|
||||
void *priv;
|
||||
int64_t pos; ///< byte position in stream, -1 if unknown
|
||||
} AVPacket;
|
||||
#define PKT_FLAG_KEY 0x0001
|
||||
|
||||
@ -49,6 +48,7 @@ static inline void av_init_packet(AVPacket *pkt)
|
||||
{
|
||||
pkt->pts = AV_NOPTS_VALUE;
|
||||
pkt->dts = AV_NOPTS_VALUE;
|
||||
pkt->pos = -1;
|
||||
pkt->duration = 0;
|
||||
pkt->flags = 0;
|
||||
pkt->stream_index = 0;
|
||||
@ -56,6 +56,7 @@ static inline void av_init_packet(AVPacket *pkt)
|
||||
}
|
||||
|
||||
int av_new_packet(AVPacket *pkt, int size);
|
||||
int av_get_packet(ByteIOContext *s, AVPacket *pkt, int size);
|
||||
int av_dup_packet(AVPacket *pkt);
|
||||
|
||||
/**
|
||||
|
@ -423,8 +423,7 @@ resync:
|
||||
|
||||
if(size > ast->remaining)
|
||||
size= ast->remaining;
|
||||
av_new_packet(pkt, size);
|
||||
get_buffer(pb, pkt->data, size);
|
||||
av_get_packet(pb, pkt, size);
|
||||
|
||||
if (avi->dv_demux) {
|
||||
dstr = pkt->destruct;
|
||||
|
@ -234,10 +234,7 @@ static int ea_read_packet(AVFormatContext *s,
|
||||
switch (chunk_type) {
|
||||
/* audio data */
|
||||
case SCDl_TAG:
|
||||
if (av_new_packet(pkt, chunk_size))
|
||||
ret = AVERROR_IO;
|
||||
else {
|
||||
ret = get_buffer(pb, pkt->data, chunk_size);
|
||||
ret = av_get_packet(pb, pkt, chunk_size);
|
||||
if (ret != chunk_size)
|
||||
ret = AVERROR_IO;
|
||||
else {
|
||||
@ -251,7 +248,6 @@ static int ea_read_packet(AVFormatContext *s,
|
||||
ea->audio_frame_counter += ((chunk_size - 12) * 2) /
|
||||
ea->num_channels;
|
||||
}
|
||||
}
|
||||
|
||||
packet_read = 1;
|
||||
break;
|
||||
|
@ -603,6 +603,7 @@ static int ffm_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
|
||||
av_new_packet(pkt, size);
|
||||
pkt->stream_index = ffm->header[0];
|
||||
pkt->pos = url_ftell(&s->pb);
|
||||
if (ffm->header[1] & FLAG_KEY_FRAME)
|
||||
pkt->flags |= PKT_FLAG_KEY;
|
||||
|
||||
|
@ -178,6 +178,7 @@ static int flic_read_packet(AVFormatContext *s,
|
||||
}
|
||||
pkt->stream_index = flic->video_stream_index;
|
||||
pkt->pts = flic->pts;
|
||||
pkt->pos = url_ftell(pb);
|
||||
memcpy(pkt->data, preamble, FLIC_PREAMBLE_SIZE);
|
||||
ret = get_buffer(pb, pkt->data + FLIC_PREAMBLE_SIZE,
|
||||
size - FLIC_PREAMBLE_SIZE);
|
||||
|
@ -147,12 +147,8 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
}
|
||||
}
|
||||
|
||||
if (av_new_packet(pkt, size) < 0)
|
||||
return AVERROR_IO;
|
||||
|
||||
ret = get_buffer(&s->pb, pkt->data, size);
|
||||
ret= av_get_packet(&s->pb, pkt, size);
|
||||
if (ret <= 0) {
|
||||
av_free_packet(pkt);
|
||||
return AVERROR_IO;
|
||||
}
|
||||
/* note: we need to modify the packet size here to handle the last
|
||||
|
@ -255,26 +255,22 @@ static int idcin_read_packet(AVFormatContext *s,
|
||||
/* skip the number of decoded bytes (always equal to width * height) */
|
||||
url_fseek(pb, 4, SEEK_CUR);
|
||||
chunk_size -= 4;
|
||||
if (av_new_packet(pkt, chunk_size))
|
||||
ret = AVERROR_IO;
|
||||
ret= av_get_packet(pb, pkt, chunk_size);
|
||||
if (ret != chunk_size)
|
||||
return AVERROR_IO;
|
||||
pkt->stream_index = idcin->video_stream_index;
|
||||
pkt->pts = idcin->pts;
|
||||
ret = get_buffer(pb, pkt->data, chunk_size);
|
||||
if (ret != chunk_size)
|
||||
ret = AVERROR_IO;
|
||||
} else {
|
||||
/* send out the audio chunk */
|
||||
if (idcin->current_audio_chunk)
|
||||
chunk_size = idcin->audio_chunk_size2;
|
||||
else
|
||||
chunk_size = idcin->audio_chunk_size1;
|
||||
if (av_new_packet(pkt, chunk_size))
|
||||
ret= av_get_packet(pb, pkt, chunk_size);
|
||||
if (ret != chunk_size)
|
||||
return AVERROR_IO;
|
||||
pkt->stream_index = idcin->audio_stream_index;
|
||||
pkt->pts = idcin->pts;
|
||||
ret = get_buffer(&s->pb, pkt->data, chunk_size);
|
||||
if (ret != chunk_size)
|
||||
ret = AVERROR_IO;
|
||||
|
||||
idcin->current_audio_chunk ^= 1;
|
||||
idcin->pts += FRAME_PTS_INC;
|
||||
|
@ -221,13 +221,11 @@ static int roq_read_packet(AVFormatContext *s,
|
||||
url_fseek(pb, codebook_offset, SEEK_SET);
|
||||
|
||||
/* load up the packet */
|
||||
if (av_new_packet(pkt, chunk_size))
|
||||
ret= av_get_packet(pb, pkt, chunk_size);
|
||||
if (ret != chunk_size)
|
||||
return AVERROR_IO;
|
||||
pkt->stream_index = roq->video_stream_index;
|
||||
pkt->pts = roq->video_pts;
|
||||
ret = get_buffer(pb, pkt->data, chunk_size);
|
||||
if (ret != chunk_size)
|
||||
ret = AVERROR_IO;
|
||||
|
||||
roq->video_pts += roq->frame_pts_inc;
|
||||
packet_read = 1;
|
||||
@ -254,6 +252,7 @@ static int roq_read_packet(AVFormatContext *s,
|
||||
roq->audio_frame_count += (chunk_size / roq->audio_channels);
|
||||
}
|
||||
|
||||
pkt->pos= url_ftell(pb);
|
||||
ret = get_buffer(pb, pkt->data + RoQ_CHUNK_PREAMBLE_SIZE,
|
||||
chunk_size);
|
||||
if (ret != chunk_size)
|
||||
|
@ -140,16 +140,11 @@ static int load_ipmovie_packet(IPMVEContext *s, ByteIOContext *pb,
|
||||
audio_pts *= s->audio_frame_count;
|
||||
audio_pts /= s->audio_sample_rate;
|
||||
|
||||
if (av_new_packet(pkt, s->audio_chunk_size))
|
||||
return CHUNK_NOMEM;
|
||||
if (s->audio_chunk_size != av_get_packet(pb, pkt, s->audio_chunk_size))
|
||||
return CHUNK_EOF;
|
||||
|
||||
pkt->stream_index = s->audio_stream_index;
|
||||
pkt->pts = audio_pts;
|
||||
if (get_buffer(pb, pkt->data, s->audio_chunk_size) !=
|
||||
s->audio_chunk_size) {
|
||||
av_free_packet(pkt);
|
||||
return CHUNK_EOF;
|
||||
}
|
||||
|
||||
/* audio frame maintenance */
|
||||
if (s->audio_type != CODEC_ID_INTERPLAY_DPCM)
|
||||
@ -171,6 +166,7 @@ static int load_ipmovie_packet(IPMVEContext *s, ByteIOContext *pb,
|
||||
if (av_new_packet(pkt, s->decode_map_chunk_size + s->video_chunk_size))
|
||||
return CHUNK_NOMEM;
|
||||
|
||||
pkt->pos= s->decode_map_chunk_offset;
|
||||
url_fseek(pb, s->decode_map_chunk_offset, SEEK_SET);
|
||||
s->decode_map_chunk_offset = 0;
|
||||
|
||||
|
@ -2366,6 +2366,7 @@ matroska_parse_blockgroup (MatroskaDemuxContext *matroska,
|
||||
uint32_t *lace_size = NULL;
|
||||
int n, track, flags, laces = 0;
|
||||
uint64_t num;
|
||||
int64_t pos= url_ftell(&matroska->ctx->pb);
|
||||
|
||||
if ((res = ebml_read_binary(matroska, &id, &data, &size)) < 0)
|
||||
break;
|
||||
@ -2507,6 +2508,7 @@ matroska_parse_blockgroup (MatroskaDemuxContext *matroska,
|
||||
matroska->tracks[track]->stream_index;
|
||||
|
||||
pkt->pts = timecode / 1000000; /* ns to ms */
|
||||
pkt->pos= pos;
|
||||
|
||||
matroska_queue_packet(matroska, pkt);
|
||||
}
|
||||
|
@ -253,9 +253,6 @@ typedef struct MOVStreamContext {
|
||||
int time_scale;
|
||||
long current_sample;
|
||||
long left_in_chunk; /* how many samples before next chunk */
|
||||
/* specific MPEG4 header which is added at the beginning of the stream */
|
||||
unsigned int header_len;
|
||||
uint8_t *header_data;
|
||||
MOV_esds_t esds;
|
||||
} MOVStreamContext;
|
||||
|
||||
@ -1672,7 +1669,6 @@ static void mov_free_stream_context(MOVStreamContext *sc)
|
||||
av_freep(&sc->sample_to_chunk);
|
||||
av_freep(&sc->sample_sizes);
|
||||
av_freep(&sc->keyframes);
|
||||
av_freep(&sc->header_data);
|
||||
av_freep(&sc->stts_data);
|
||||
av_freep(&sc->ctts_data);
|
||||
av_freep(&sc);
|
||||
@ -1974,18 +1970,7 @@ readchunk:
|
||||
return -1;
|
||||
url_fseek(&s->pb, offset, SEEK_SET);
|
||||
|
||||
//av_log(NULL, AV_LOG_DEBUG, "READCHUNK hlen: %d %d off: %Ld pos:%Ld\n", size, sc->header_len, offset, url_ftell(&s->pb));
|
||||
if (sc->header_len > 0) {
|
||||
av_new_packet(pkt, size + sc->header_len);
|
||||
memcpy(pkt->data, sc->header_data, sc->header_len);
|
||||
get_buffer(&s->pb, pkt->data + sc->header_len, size);
|
||||
/* free header */
|
||||
av_freep(&sc->header_data);
|
||||
sc->header_len = 0;
|
||||
} else {
|
||||
av_new_packet(pkt, size);
|
||||
get_buffer(&s->pb, pkt->data, pkt->size);
|
||||
}
|
||||
av_get_packet(&s->pb, pkt, size);
|
||||
pkt->stream_index = sc->ffindex;
|
||||
|
||||
// If the keyframes table exists, mark any samples that are in the table as key frames.
|
||||
|
@ -297,13 +297,10 @@ static int mp3_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
|
||||
size= MP3_PACKET_SIZE;
|
||||
|
||||
if (av_new_packet(pkt, size) < 0)
|
||||
return AVERROR_IO;
|
||||
ret= av_get_packet(&s->pb, pkt, size);
|
||||
|
||||
pkt->stream_index = 0;
|
||||
ret = get_buffer(&s->pb, pkt->data, size);
|
||||
if (ret <= 0) {
|
||||
av_free_packet(pkt);
|
||||
return AVERROR_IO;
|
||||
}
|
||||
/* note: we need to modify the packet size here to handle the last
|
||||
|
@ -1234,6 +1234,7 @@ static int mpegts_raw_read_packet(AVFormatContext *s,
|
||||
|
||||
if (av_new_packet(pkt, TS_PACKET_SIZE) < 0)
|
||||
return -ENOMEM;
|
||||
pkt->pos= url_ftell(&s->pb);
|
||||
ret = read_packet(&s->pb, pkt->data, ts->raw_packet_size);
|
||||
if (ret < 0) {
|
||||
av_free_packet(pkt);
|
||||
|
@ -592,8 +592,7 @@ null_chunk_retry:
|
||||
if (vsize/* && st[NSV_ST_VIDEO]*/) {
|
||||
nst = st[NSV_ST_VIDEO]->priv_data;
|
||||
pkt = &nsv->ahead[NSV_ST_VIDEO];
|
||||
av_new_packet(pkt, vsize);
|
||||
get_buffer(pb, pkt->data, vsize);
|
||||
av_get_packet(pb, pkt, vsize);
|
||||
pkt->stream_index = st[NSV_ST_VIDEO]->index;//NSV_ST_VIDEO;
|
||||
pkt->dts = nst->frame_offset++;
|
||||
pkt->flags |= PKT_FLAG_KEY; /* stupid format has no way to tell XXX: try the index */
|
||||
@ -633,9 +632,7 @@ null_chunk_retry:
|
||||
PRINT(("NSV RAWAUDIO: bps %d, nchan %d, srate %ld\n", bps, channels, samplerate));
|
||||
}
|
||||
}
|
||||
av_new_packet(pkt, asize);
|
||||
if (asize)
|
||||
get_buffer(pb, pkt->data, asize);
|
||||
av_get_packet(pb, pkt, asize);
|
||||
pkt->stream_index = st[NSV_ST_AUDIO]->index;//NSV_ST_AUDIO;
|
||||
//pkt->dts = nst->frame_offset;
|
||||
//if (nst->sample_size)
|
||||
|
@ -1236,8 +1236,7 @@ static int decode_frame(NUTContext *nut, AVPacket *pkt, int frame_code, int fram
|
||||
return 1;
|
||||
}
|
||||
|
||||
av_new_packet(pkt, size);
|
||||
get_buffer(bc, pkt->data, size);
|
||||
av_get_packet(bc, pkt, size);
|
||||
pkt->stream_index = stream_id;
|
||||
if (key_frame)
|
||||
pkt->flags |= PKT_FLAG_KEY;
|
||||
|
@ -283,6 +283,7 @@ static int str_read_packet(AVFormatContext *s,
|
||||
if (av_new_packet(pkt, frame_size))
|
||||
return AVERROR_IO;
|
||||
|
||||
pkt->pos= url_ftell(pb) - RAW_CD_SECTOR_SIZE;
|
||||
pkt->stream_index =
|
||||
str->channels[channel].video_stream_index;
|
||||
// pkt->pts = str->pts;
|
||||
|
@ -88,13 +88,10 @@ static int raw_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
|
||||
size= RAW_PACKET_SIZE;
|
||||
|
||||
if (av_new_packet(pkt, size) < 0)
|
||||
return AVERROR_IO;
|
||||
ret= av_get_packet(&s->pb, pkt, size);
|
||||
|
||||
pkt->stream_index = 0;
|
||||
ret = get_buffer(&s->pb, pkt->data, size);
|
||||
if (ret <= 0) {
|
||||
av_free_packet(pkt);
|
||||
return AVERROR_IO;
|
||||
}
|
||||
/* note: we need to modify the packet size here to handle the last
|
||||
@ -112,6 +109,7 @@ static int raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
if (av_new_packet(pkt, size) < 0)
|
||||
return AVERROR_IO;
|
||||
|
||||
pkt->pos= url_ftell(&s->pb);
|
||||
pkt->stream_index = 0;
|
||||
ret = get_partial_buffer(&s->pb, pkt->data, size);
|
||||
if (ret <= 0) {
|
||||
@ -618,18 +616,10 @@ static int rawvideo_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
if (packet_size < 0)
|
||||
return -1;
|
||||
|
||||
if (av_new_packet(pkt, packet_size) < 0)
|
||||
return AVERROR_IO;
|
||||
ret= av_get_packet(&s->pb, pkt, packet_size);
|
||||
|
||||
pkt->stream_index = 0;
|
||||
#if 0
|
||||
/* bypass buffered I/O */
|
||||
ret = url_read(url_fileno(&s->pb), pkt->data, pkt->size);
|
||||
#else
|
||||
ret = get_buffer(&s->pb, pkt->data, pkt->size);
|
||||
#endif
|
||||
if (ret != pkt->size) {
|
||||
av_free_packet(pkt);
|
||||
if (ret != packet_size) {
|
||||
return AVERROR_IO;
|
||||
} else {
|
||||
return 0;
|
||||
|
@ -812,11 +812,9 @@ static int rm_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
if (rm->old_format) {
|
||||
/* just read raw bytes */
|
||||
len = RAW_PACKET_SIZE;
|
||||
av_new_packet(pkt, len);
|
||||
len= av_get_packet(pb, pkt, len);
|
||||
pkt->stream_index = 0;
|
||||
len = get_buffer(pb, pkt->data, len);
|
||||
if (len <= 0) {
|
||||
av_free_packet(pkt);
|
||||
return AVERROR_IO;
|
||||
}
|
||||
pkt->size = len;
|
||||
@ -860,9 +858,8 @@ resync:
|
||||
goto resync;
|
||||
}
|
||||
|
||||
av_new_packet(pkt, len);
|
||||
av_get_packet(pb, pkt, len);
|
||||
pkt->stream_index = i;
|
||||
get_buffer(pb, pkt->data, len);
|
||||
|
||||
#if 0
|
||||
if (st->codec.codec_type == CODEC_TYPE_VIDEO) {
|
||||
|
@ -233,6 +233,7 @@ static int film_read_packet(AVFormatContext *s,
|
||||
return AVERROR_NOMEM;
|
||||
if(pkt->size < 10)
|
||||
return -1;
|
||||
pkt->pos= url_ftell(pb);
|
||||
ret = get_buffer(pb, pkt->data, 10);
|
||||
/* skip the non-spec CVID bytes */
|
||||
url_fseek(pb, film->cvid_extra_bytes, SEEK_CUR);
|
||||
@ -254,6 +255,7 @@ static int film_read_packet(AVFormatContext *s,
|
||||
film->stereo_buffer = av_malloc(film->stereo_buffer_size);
|
||||
}
|
||||
|
||||
pkt->pos= url_ftell(pb);
|
||||
ret = get_buffer(pb, film->stereo_buffer, sample->sample_size);
|
||||
if (ret != sample->sample_size)
|
||||
ret = AVERROR_IO;
|
||||
@ -272,9 +274,7 @@ static int film_read_packet(AVFormatContext *s,
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (av_new_packet(pkt, sample->sample_size))
|
||||
return AVERROR_NOMEM;
|
||||
ret = get_buffer(pb, pkt->data, sample->sample_size);
|
||||
ret= av_get_packet(pb, pkt, sample->sample_size);
|
||||
if (ret != sample->sample_size)
|
||||
ret = AVERROR_IO;
|
||||
}
|
||||
|
@ -269,6 +269,7 @@ static int vmd_read_packet(AVFormatContext *s,
|
||||
|
||||
if (av_new_packet(pkt, frame->frame_size + BYTES_PER_FRAME_RECORD))
|
||||
return AVERROR_NOMEM;
|
||||
pkt->pos= url_ftell(pb);
|
||||
memcpy(pkt->data, frame->frame_record, BYTES_PER_FRAME_RECORD);
|
||||
ret = get_buffer(pb, pkt->data + BYTES_PER_FRAME_RECORD,
|
||||
frame->frame_size);
|
||||
|
@ -131,13 +131,9 @@ static int sol_read_packet(AVFormatContext *s,
|
||||
|
||||
if (url_feof(&s->pb))
|
||||
return -EIO;
|
||||
if (av_new_packet(pkt, MAX_SIZE))
|
||||
return -EIO;
|
||||
ret= av_get_packet(&s->pb, pkt, MAX_SIZE);
|
||||
pkt->stream_index = 0;
|
||||
|
||||
ret = get_buffer(&s->pb, pkt->data, pkt->size);
|
||||
if (ret < 0)
|
||||
av_free_packet(pkt);
|
||||
/* note: we need to modify the packet size here to handle the last
|
||||
packet */
|
||||
pkt->size = ret;
|
||||
|
@ -858,10 +858,9 @@ static int swf_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
if (st->id == 0) {
|
||||
if ( get_le16(pb) == swf->ch_id ) {
|
||||
frame = get_le16(pb);
|
||||
av_new_packet(pkt, len-4);
|
||||
av_get_packet(pb, pkt, len-4);
|
||||
pkt->pts = frame * swf->ms_per_frame;
|
||||
pkt->stream_index = st->index;
|
||||
get_buffer(pb, pkt->data, pkt->size);
|
||||
return pkt->size;
|
||||
} else {
|
||||
url_fskip(pb, len-2);
|
||||
@ -874,9 +873,8 @@ static int swf_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
for( i=0; i<s->nb_streams; i++ ) {
|
||||
st = s->streams[i];
|
||||
if (st->id == 1) {
|
||||
av_new_packet(pkt, len);
|
||||
av_get_packet(pb, pkt, len);
|
||||
pkt->stream_index = st->index;
|
||||
get_buffer(pb, pkt->data, pkt->size);
|
||||
return pkt->size;
|
||||
}
|
||||
}
|
||||
|
@ -195,6 +195,31 @@ int av_new_packet(AVPacket *pkt, int size)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Allocate and read the payload of a packet and intialized its fields to default values.
|
||||
*
|
||||
* @param pkt packet
|
||||
* @param size wanted payload size
|
||||
* @return >0 (read size) if OK. AVERROR_xxx otherwise.
|
||||
*/
|
||||
int av_get_packet(ByteIOContext *s, AVPacket *pkt, int size)
|
||||
{
|
||||
int ret= av_new_packet(pkt, size);
|
||||
|
||||
if(ret<0)
|
||||
return ret;
|
||||
|
||||
pkt->pos= url_ftell(s);
|
||||
|
||||
ret= get_buffer(s, pkt->data, size);
|
||||
if(ret<=0)
|
||||
av_free_packet(pkt);
|
||||
else
|
||||
pkt->size= ret;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* 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)
|
||||
|
@ -318,11 +318,9 @@ static int wc3_read_packet(AVFormatContext *s,
|
||||
|
||||
case VGA__TAG:
|
||||
/* send out video chunk */
|
||||
if (av_new_packet(pkt, size))
|
||||
ret = AVERROR_IO;
|
||||
ret= av_get_packet(pb, pkt, size);
|
||||
pkt->stream_index = wc3->video_stream_index;
|
||||
pkt->pts = wc3->pts;
|
||||
ret = get_buffer(pb, pkt->data, size);
|
||||
if (ret != size)
|
||||
ret = AVERROR_IO;
|
||||
packet_read = 1;
|
||||
@ -349,11 +347,9 @@ static int wc3_read_packet(AVFormatContext *s,
|
||||
|
||||
case AUDI_TAG:
|
||||
/* send out audio chunk */
|
||||
if (av_new_packet(pkt, size))
|
||||
ret = AVERROR_IO;
|
||||
ret= av_get_packet(pb, pkt, size);
|
||||
pkt->stream_index = wc3->audio_stream_index;
|
||||
pkt->pts = wc3->pts;
|
||||
ret = get_buffer(pb, pkt->data, size);
|
||||
if (ret != size)
|
||||
ret = AVERROR_IO;
|
||||
|
||||
|
@ -170,15 +170,12 @@ static int wsaud_read_packet(AVFormatContext *s,
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
chunk_size = LE_16(&preamble[0]);
|
||||
if (av_new_packet(pkt, chunk_size))
|
||||
ret= av_get_packet(pb, pkt, chunk_size);
|
||||
if (ret != chunk_size)
|
||||
return AVERROR_IO;
|
||||
pkt->stream_index = wsaud->audio_stream_index;
|
||||
pkt->pts = wsaud->audio_frame_counter;
|
||||
pkt->pts /= wsaud->audio_samplerate;
|
||||
if ((ret = get_buffer(pb, pkt->data, chunk_size)) != chunk_size) {
|
||||
av_free_packet(pkt);
|
||||
ret = AVERROR_IO;
|
||||
}
|
||||
|
||||
/* 2 samples/byte, 1 or 2 samples per frame depending on stereo */
|
||||
wsaud->audio_frame_counter += (chunk_size * 2) / wsaud->audio_channels;
|
||||
@ -322,11 +319,8 @@ static int wsvqa_read_packet(AVFormatContext *s,
|
||||
|
||||
if ((chunk_type == SND2_TAG) || (chunk_type == VQFR_TAG)) {
|
||||
|
||||
if (av_new_packet(pkt, chunk_size))
|
||||
return AVERROR_IO;
|
||||
ret = get_buffer(pb, pkt->data, chunk_size);
|
||||
av_get_packet(pb, pkt, chunk_size);
|
||||
if (ret != chunk_size) {
|
||||
av_free_packet(pkt);
|
||||
ret = AVERROR_IO;
|
||||
}
|
||||
|
||||
|
@ -356,17 +356,11 @@ static int yuv4_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
if (packet_size < 0)
|
||||
return -1;
|
||||
|
||||
if (av_new_packet(pkt, packet_size) < 0)
|
||||
if (av_get_packet(&s->pb, pkt, packet_size) != packet_size)
|
||||
return AVERROR_IO;
|
||||
|
||||
pkt->stream_index = 0;
|
||||
ret = get_buffer(&s->pb, pkt->data, pkt->size);
|
||||
if (ret != pkt->size) {
|
||||
av_free_packet(pkt);
|
||||
return AVERROR_IO;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int yuv4_read_close(AVFormatContext *s)
|
||||
|
Loading…
Reference in New Issue
Block a user