Originally committed as revision 4314 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
| @@ -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,16 +294,13 @@ 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; | |||
| packet_read = 1; | |||
| /* pts accounting */ | |||
| audio_frame_count = size; | |||
| @@ -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,13 +234,10 @@ static int ea_read_packet(AVFormatContext *s, | |||
| switch (chunk_type) { | |||
| /* audio data */ | |||
| case SCDl_TAG: | |||
| if (av_new_packet(pkt, chunk_size)) | |||
| ret = av_get_packet(pb, pkt, chunk_size); | |||
| if (ret != chunk_size) | |||
| ret = AVERROR_IO; | |||
| else { | |||
| ret = get_buffer(pb, pkt->data, chunk_size); | |||
| if (ret != chunk_size) | |||
| ret = AVERROR_IO; | |||
| else { | |||
| pkt->stream_index = ea->audio_stream_index; | |||
| pkt->pts = 90000; | |||
| pkt->pts *= ea->audio_frame_counter; | |||
| @@ -250,7 +247,6 @@ static int ea_read_packet(AVFormatContext *s, | |||
| * on stereo; chunk also has 12-byte header */ | |||
| ea->audio_frame_counter += ((chunk_size - 12) * 2) / | |||
| ea->num_channels; | |||
| } | |||
| } | |||
| packet_read = 1; | |||
| @@ -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 | |||
| @@ -111,7 +108,8 @@ 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; | |||
| } | |||
| return 0; | |||
| } | |||
| static int yuv4_read_close(AVFormatContext *s) | |||