diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2011-03-17 16:53:58 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2011-03-17 17:22:52 +0100 |
commit | 0fecf2642b9d909820683647c70031a954f5e58d (patch) | |
tree | 36ca02de9fa27a049829fb589517223d2d0ce5f5 /libavformat | |
parent | e309fdc7018a1027d187ec27fb1d69a41a4ee167 (diff) | |
parent | f1f60f5252b0b448adcce0c1c52f3161ee69b9bf (diff) | |
download | ffmpeg-0fecf2642b9d909820683647c70031a954f5e58d.tar.gz |
Merge remote-tracking branch 'newdev/master'
Conflicts:
Changelog
doc/APIchanges
doc/optimization.txt
libavformat/avio.h
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat')
126 files changed, 735 insertions, 639 deletions
diff --git a/libavformat/4xm.c b/libavformat/4xm.c index ed722805b2..699277248d 100644 --- a/libavformat/4xm.c +++ b/libavformat/4xm.c @@ -106,7 +106,7 @@ static int fourxm_read_header(AVFormatContext *s, fourxm->fps = 1.0; /* skip the first 3 32-bit numbers */ - avio_seek(pb, 12, SEEK_CUR); + avio_skip(pb, 12); /* check for LIST-HEAD */ GET_LIST_HEADER(); @@ -322,12 +322,12 @@ static int fourxm_read_packet(AVFormatContext *s, fourxm->tracks[track_number].audio_pts += audio_frame_count; } else { - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); } break; default: - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); break; } } diff --git a/libavformat/Makefile b/libavformat/Makefile index 4eb1620700..c521cd384c 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -131,9 +131,9 @@ OBJS-$(CONFIG_MMF_MUXER) += mmf.o riff.o OBJS-$(CONFIG_MOV_DEMUXER) += mov.o riff.o isom.o OBJS-$(CONFIG_MOV_MUXER) += movenc.o riff.o isom.o avc.o \ movenchint.o rtpenc_chain.o -OBJS-$(CONFIG_MP2_MUXER) += mp3enc.o +OBJS-$(CONFIG_MP2_MUXER) += mp3enc.o rawenc.o OBJS-$(CONFIG_MP3_DEMUXER) += mp3dec.o -OBJS-$(CONFIG_MP3_MUXER) += mp3enc.o +OBJS-$(CONFIG_MP3_MUXER) += mp3enc.o rawenc.o OBJS-$(CONFIG_MPC_DEMUXER) += mpc.o apetag.o OBJS-$(CONFIG_MPC8_DEMUXER) += mpc8.o OBJS-$(CONFIG_MPEG1SYSTEM_MUXER) += mpegenc.o diff --git a/libavformat/a64.c b/libavformat/a64.c index 17dcd96b5b..3481ee7d03 100644 --- a/libavformat/a64.c +++ b/libavformat/a64.c @@ -149,7 +149,7 @@ static int a64_write_packet(struct AVFormatContext *s, AVPacket *pkt) break; } - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } diff --git a/libavformat/adtsenc.c b/libavformat/adtsenc.c index 1f5453dbaf..a03e128d96 100644 --- a/libavformat/adtsenc.c +++ b/libavformat/adtsenc.c @@ -132,7 +132,7 @@ static int adts_write_packet(AVFormatContext *s, AVPacket *pkt) } } avio_write(pb, pkt->data, pkt->size); - put_flush_packet(pb); + avio_flush(pb); return 0; } diff --git a/libavformat/aea.c b/libavformat/aea.c index 60b2d38fdc..2a1d24d7a2 100644 --- a/libavformat/aea.c +++ b/libavformat/aea.c @@ -62,9 +62,9 @@ static int aea_read_header(AVFormatContext *s, return AVERROR(ENOMEM); /* Parse the amount of channels and skip to pos 2048(0x800) */ - avio_seek(s->pb, 264, SEEK_CUR); + avio_skip(s->pb, 264); st->codec->channels = avio_r8(s->pb); - avio_seek(s->pb, 1783, SEEK_CUR); + avio_skip(s->pb, 1783); st->codec->codec_type = AVMEDIA_TYPE_AUDIO; diff --git a/libavformat/aiffdec.c b/libavformat/aiffdec.c index 9e3d39c371..c43ee32adc 100644 --- a/libavformat/aiffdec.c +++ b/libavformat/aiffdec.c @@ -70,7 +70,7 @@ static void get_meta(AVFormatContext *s, const char *key, int size) int res; if (!str) { - avio_seek(s->pb, size, SEEK_CUR); + avio_skip(s->pb, size); return; } @@ -152,7 +152,7 @@ static unsigned int get_aiff_header(AVIOContext *pb, AVCodecContext *codec, /* Chunk is over */ if (size) - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); return num_frames; } @@ -242,7 +242,7 @@ static int aiff_read_header(AVFormatContext *s, av_log(s, AV_LOG_ERROR, "file is not seekable\n"); return -1; } - avio_seek(pb, size - 8, SEEK_CUR); + avio_skip(pb, size - 8); break; case MKTAG('w', 'a', 'v', 'e'): if ((uint64_t)size > (1<<30)) @@ -256,7 +256,7 @@ static int aiff_read_header(AVFormatContext *s, default: /* Jump */ if (size & 1) /* Always even aligned */ size++; - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); } } diff --git a/libavformat/aiffenc.c b/libavformat/aiffenc.c index 3e5936248c..6fc09aeb63 100644 --- a/libavformat/aiffenc.c +++ b/libavformat/aiffenc.c @@ -98,7 +98,7 @@ static int aiff_write_header(AVFormatContext *s) av_set_pts_info(s->streams[0], 64, 1, s->streams[0]->codec->sample_rate); /* Data is starting here */ - put_flush_packet(pb); + avio_flush(pb); return 0; } @@ -140,7 +140,7 @@ static int aiff_write_trailer(AVFormatContext *s) /* return to the end */ avio_seek(pb, end_size, SEEK_SET); - put_flush_packet(pb); + avio_flush(pb); } return 0; diff --git a/libavformat/amr.c b/libavformat/amr.c index 9d6581dee5..0459632b10 100644 --- a/libavformat/amr.c +++ b/libavformat/amr.c @@ -50,14 +50,14 @@ static int amr_write_header(AVFormatContext *s) { return -1; } - put_flush_packet(pb); + avio_flush(pb); return 0; } static int amr_write_packet(AVFormatContext *s, AVPacket *pkt) { avio_write(s->pb, pkt->data, pkt->size); - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } #endif /* CONFIG_AMR_MUXER */ diff --git a/libavformat/anm.c b/libavformat/anm.c index 2a0109d1de..269e325e42 100644 --- a/libavformat/anm.c +++ b/libavformat/anm.c @@ -83,7 +83,7 @@ static int read_header(AVFormatContext *s, AVStream *st; int i, ret; - avio_seek(pb, 4, SEEK_CUR); /* magic number */ + avio_skip(pb, 4); /* magic number */ if (avio_rl16(pb) != MAX_PAGES) { av_log_ask_for_sample(s, "max_pages != " AV_STRINGIFY(MAX_PAGES) "\n"); return AVERROR_INVALIDDATA; @@ -91,7 +91,7 @@ static int read_header(AVFormatContext *s, anm->nb_pages = avio_rl16(pb); anm->nb_records = avio_rl32(pb); - avio_seek(pb, 2, SEEK_CUR); /* max records per page */ + avio_skip(pb, 2); /* max records per page */ anm->page_table_offset = avio_rl16(pb); if (avio_rl32(pb) != ANIM_TAG) return AVERROR_INVALIDDATA; @@ -107,13 +107,13 @@ static int read_header(AVFormatContext *s, st->codec->height = avio_rl16(pb); if (avio_r8(pb) != 0) goto invalid; - avio_seek(pb, 1, SEEK_CUR); /* frame rate multiplier info */ + avio_skip(pb, 1); /* frame rate multiplier info */ /* ignore last delta record (used for looping) */ if (avio_r8(pb)) /* has_last_delta */ anm->nb_records = FFMAX(anm->nb_records - 1, 0); - avio_seek(pb, 1, SEEK_CUR); /* last_delta_valid */ + avio_skip(pb, 1); /* last_delta_valid */ if (avio_r8(pb) != 0) goto invalid; @@ -121,15 +121,15 @@ static int read_header(AVFormatContext *s, if (avio_r8(pb) != 1) goto invalid; - avio_seek(pb, 1, SEEK_CUR); /* other recs per frame */ + avio_skip(pb, 1); /* other recs per frame */ if (avio_r8(pb) != 1) goto invalid; - avio_seek(pb, 32, SEEK_CUR); /* record_types */ + avio_skip(pb, 32); /* record_types */ st->nb_frames = avio_rl32(pb); av_set_pts_info(st, 64, 1, avio_rl16(pb)); - avio_seek(pb, 58, SEEK_CUR); + avio_skip(pb, 58); /* color cycling and palette data */ st->codec->extradata_size = 16*8 + 4*256; @@ -193,7 +193,7 @@ repeat: /* parse page header */ if (anm->record < 0) { avio_seek(pb, anm->page_table_offset + MAX_PAGES*6 + (anm->page<<16), SEEK_SET); - avio_seek(pb, 8 + 2*p->nb_records, SEEK_CUR); + avio_skip(pb, 8 + 2*p->nb_records); anm->record = 0; } diff --git a/libavformat/ape.c b/libavformat/ape.c index 187c9865a4..456407cb46 100644 --- a/libavformat/ape.c +++ b/libavformat/ape.c @@ -187,7 +187,7 @@ static int ape_read_header(AVFormatContext * s, AVFormatParameters * ap) /* Skip any unknown bytes at the end of the descriptor. This is for future compatibility */ if (ape->descriptorlength > 52) - avio_seek(pb, ape->descriptorlength - 52, SEEK_CUR); + avio_skip(pb, ape->descriptorlength - 52); /* Read header data */ ape->compressiontype = avio_rl16(pb); @@ -212,7 +212,7 @@ static int ape_read_header(AVFormatContext * s, AVFormatParameters * ap) ape->finalframeblocks = avio_rl32(pb); if (ape->formatflags & MAC_FORMAT_FLAG_HAS_PEAK_LEVEL) { - avio_seek(pb, 4, SEEK_CUR); /* Skip the peak level */ + avio_skip(pb, 4); /* Skip the peak level */ ape->headerlength += 4; } @@ -239,7 +239,7 @@ static int ape_read_header(AVFormatContext * s, AVFormatParameters * ap) /* Skip any stored wav header */ if (!(ape->formatflags & MAC_FORMAT_FLAG_CREATE_WAV_HEADER)) - avio_seek(pb, ape->wavheaderlength, SEEK_CUR); + avio_skip(pb, ape->wavheaderlength); } if(!ape->totalframes){ diff --git a/libavformat/applehttp.c b/libavformat/applehttp.c index 231abab87c..324494ad74 100644 --- a/libavformat/applehttp.c +++ b/libavformat/applehttp.c @@ -86,57 +86,6 @@ static int read_chomp_line(AVIOContext *s, char *buf, int maxlen) return len; } -static void make_absolute_url(char *buf, int size, const char *base, - const char *rel) -{ - char *sep; - /* Absolute path, relative to the current server */ - if (base && strstr(base, "://") && rel[0] == '/') { - if (base != buf) - av_strlcpy(buf, base, size); - sep = strstr(buf, "://"); - if (sep) { - sep += 3; - sep = strchr(sep, '/'); - if (sep) - *sep = '\0'; - } - av_strlcat(buf, rel, size); - return; - } - /* If rel actually is an absolute url, just copy it */ - if (!base || strstr(rel, "://") || rel[0] == '/') { - av_strlcpy(buf, rel, size); - return; - } - if (base != buf) - av_strlcpy(buf, base, size); - /* Remove the file name from the base url */ - sep = strrchr(buf, '/'); - if (sep) - sep[1] = '\0'; - else - buf[0] = '\0'; - while (av_strstart(rel, "../", NULL) && sep) { - /* Remove the path delimiter at the end */ - sep[0] = '\0'; - sep = strrchr(buf, '/'); - /* If the next directory name to pop off is "..", break here */ - if (!strcmp(sep ? &sep[1] : buf, "..")) { - /* Readd the slash we just removed */ - av_strlcat(buf, "/", size); - break; - } - /* Cut off the directory name */ - if (sep) - sep[1] = '\0'; - else - buf[0] = '\0'; - rel += 3; - } - av_strlcat(buf, rel, size); -} - static void free_segment_list(struct variant *var) { int i; @@ -183,7 +132,7 @@ static struct variant *new_variant(AppleHTTPContext *c, int bandwidth, return NULL; reset_packet(&var->pkt); var->bandwidth = bandwidth; - make_absolute_url(var->url, sizeof(var->url), base, url); + ff_make_absolute_url(var->url, sizeof(var->url), base, url); dynarray_add(&c->variants, &c->n_variants, var); return var; } @@ -274,7 +223,7 @@ static int parse_playlist(AppleHTTPContext *c, const char *url, goto fail; } seg->duration = duration; - make_absolute_url(seg->url, sizeof(seg->url), url, line); + ff_make_absolute_url(seg->url, sizeof(seg->url), url, line); dynarray_add(&var->segments, &var->n_segments, seg); is_segment = 0; } @@ -519,7 +468,7 @@ reload: c->max_start_seq - c->cur_seq_no); c->cur_seq_no = c->max_start_seq; } - /* If more segments exit, open the next one */ + /* If more segments exist, open the next one */ if (c->cur_seq_no < c->min_end_seq) goto start; /* We've reached the end of the playlists - return eof if this is a diff --git a/libavformat/applehttpproto.c b/libavformat/applehttpproto.c index 4b7e9c72a9..630d02d3d6 100644 --- a/libavformat/applehttpproto.c +++ b/libavformat/applehttpproto.c @@ -75,57 +75,6 @@ static int read_chomp_line(AVIOContext *s, char *buf, int maxlen) return len; } -static void make_absolute_url(char *buf, int size, const char *base, - const char *rel) -{ - char *sep; - /* Absolute path, relative to the current server */ - if (base && strstr(base, "://") && rel[0] == '/') { - if (base != buf) - av_strlcpy(buf, base, size); - sep = strstr(buf, "://"); - if (sep) { - sep += 3; - sep = strchr(sep, '/'); - if (sep) - *sep = '\0'; - } - av_strlcat(buf, rel, size); - return; - } - /* If rel actually is an absolute url, just copy it */ - if (!base || strstr(rel, "://") || rel[0] == '/') { - av_strlcpy(buf, rel, size); - return; - } - if (base != buf) - av_strlcpy(buf, base, size); - /* Remove the file name from the base url */ - sep = strrchr(buf, '/'); - if (sep) - sep[1] = '\0'; - else - buf[0] = '\0'; - while (av_strstart(rel, "../", NULL) && sep) { - /* Remove the path delimiter at the end */ - sep[0] = '\0'; - sep = strrchr(buf, '/'); - /* If the next directory name to pop off is "..", break here */ - if (!strcmp(sep ? &sep[1] : buf, "..")) { - /* Readd the slash we just removed */ - av_strlcat(buf, "/", size); - break; - } - /* Cut off the directory name */ - if (sep) - sep[1] = '\0'; - else - buf[0] = '\0'; - rel += 3; - } - av_strlcat(buf, rel, size); -} - static void free_segment_list(AppleHTTPContext *s) { int i; @@ -201,7 +150,7 @@ static int parse_playlist(URLContext *h, const char *url) goto fail; } seg->duration = duration; - make_absolute_url(seg->url, sizeof(seg->url), url, line); + ff_make_absolute_url(seg->url, sizeof(seg->url), url, line); dynarray_add(&s->segments, &s->n_segments, seg); is_segment = 0; } else if (is_variant) { @@ -211,7 +160,7 @@ static int parse_playlist(URLContext *h, const char *url) goto fail; } var->bandwidth = bandwidth; - make_absolute_url(var->url, sizeof(var->url), url, line); + ff_make_absolute_url(var->url, sizeof(var->url), url, line); dynarray_add(&s->variants, &s->n_variants, var); is_variant = 0; } diff --git a/libavformat/asfdec.c b/libavformat/asfdec.c index f9bb51c895..7d08e6ebcf 100644 --- a/libavformat/asfdec.c +++ b/libavformat/asfdec.c @@ -349,7 +349,7 @@ static int asf_read_stream_properties(AVFormatContext *s, int64_t size) avio_rl16(pb); /* panes */ st->codec->bits_per_coded_sample = avio_rl16(pb); /* depth */ tag1 = avio_rl32(pb); - avio_seek(pb, 20, SEEK_CUR); + avio_skip(pb, 20); // av_log(s, AV_LOG_DEBUG, "size:%d tsize:%d sizeX:%d\n", size, total_size, sizeX); if (sizeX > 40) { st->codec->extradata_size = sizeX - 40; @@ -387,7 +387,7 @@ static int asf_read_stream_properties(AVFormatContext *s, int64_t size) st->need_parsing = AVSTREAM_PARSE_FULL_ONCE; } pos2 = avio_tell(pb); - avio_seek(pb, size - (pos2 - pos1 + 24), SEEK_CUR); + avio_skip(pb, size - (pos2 - pos1 + 24)); return 0; } @@ -427,14 +427,14 @@ static int asf_read_ext_stream_properties(AVFormatContext *s, int64_t size) for (i=0; i<stream_ct; i++){ avio_rl16(pb); ext_len = avio_rl16(pb); - avio_seek(pb, ext_len, SEEK_CUR); + avio_skip(pb, ext_len); } for (i=0; i<payload_ext_ct; i++){ ff_get_guid(pb, &g); ext_d=avio_rl16(pb); ext_len=avio_rl32(pb); - avio_seek(pb, ext_len, SEEK_CUR); + avio_skip(pb, ext_len); } return 0; @@ -454,7 +454,7 @@ static int asf_read_content_desc(AVFormatContext *s, int64_t size) get_tag(s, "author" , 0, len2); get_tag(s, "copyright", 0, len3); get_tag(s, "comment" , 0, len4); - avio_seek(pb, len5, SEEK_CUR); + avio_skip(pb, len5); return 0; } @@ -474,7 +474,7 @@ static int asf_read_ext_content_desc(AVFormatContext *s, int64_t size) if (name_len%2) // must be even, broken lavf versions wrote len-1 name_len += 1; if ((ret = avio_get_str16le(pb, name_len, name, sizeof(name))) < name_len) - avio_seek(pb, name_len - ret, SEEK_CUR); + avio_skip(pb, name_len - ret); value_type = avio_rl16(pb); value_len = avio_rl16(pb); if (!value_type && value_len%2) @@ -504,7 +504,7 @@ static int asf_read_language_list(AVFormatContext *s, int64_t size) char lang[6]; unsigned int lang_len = avio_r8(pb); if ((ret = avio_get_str16le(pb, lang_len, lang, sizeof(lang))) < lang_len) - avio_seek(pb, lang_len - ret, SEEK_CUR); + avio_skip(pb, lang_len - ret); if (j < 128) av_strlcpy(asf->stream_languages[j], lang, sizeof(*asf->stream_languages)); } @@ -530,10 +530,10 @@ static int asf_read_metadata(AVFormatContext *s, int64_t size) value_len= avio_rl32(pb); if ((ret = avio_get_str16le(pb, name_len, name, sizeof(name))) < name_len) - avio_seek(pb, name_len - ret, SEEK_CUR); + avio_skip(pb, name_len - ret); //av_log(s, AV_LOG_ERROR, "%d %d %d %d %d <%s>\n", i, stream_num, name_len, value_type, value_len, name); value_num= avio_rl16(pb);//we should use get_value() here but it does not work 2 is le16 here but le32 elsewhere - avio_seek(pb, value_len - 2, SEEK_CUR); + avio_skip(pb, value_len - 2); if(stream_num<128){ if (!strcmp(name, "AspectRatioX")) asf->dar[stream_num].num= value_num; @@ -570,7 +570,7 @@ static int asf_read_marker(AVFormatContext *s, int64_t size) avio_rl32(pb); // flags name_len = avio_rl32(pb); // name length if ((ret = avio_get_str16le(pb, name_len * 2, name, sizeof(name))) < name_len) - avio_seek(pb, name_len - ret, SEEK_CUR); + avio_skip(pb, name_len - ret); ff_new_chapter(s, i, (AVRational){1, 10000000}, pres_time, AV_NOPTS_VALUE, name ); } @@ -825,16 +825,16 @@ static int asf_read_frame_header(AVFormatContext *s, AVIOContext *pb){ // for(i=0; i<asf->packet_replic_size-8; i++) // av_log(s, AV_LOG_DEBUG, "%02X ",avio_r8(pb)); // av_log(s, AV_LOG_DEBUG, "\n"); - avio_seek(pb, 10, SEEK_CUR); + avio_skip(pb, 10); ts0= avio_rl64(pb); ts1= avio_rl64(pb); - avio_seek(pb, 12, SEEK_CUR); + avio_skip(pb, 12); avio_rl32(pb); - avio_seek(pb, asf->packet_replic_size - 8 - 38 - 4, SEEK_CUR); + avio_skip(pb, asf->packet_replic_size - 8 - 38 - 4); if(ts0!= -1) asf->packet_frag_timestamp= ts0/10000; else asf->packet_frag_timestamp= AV_NOPTS_VALUE; }else - avio_seek(pb, asf->packet_replic_size - 8, SEEK_CUR); + avio_skip(pb, asf->packet_replic_size - 8); rsize += asf->packet_replic_size; // FIXME - check validity } else if (asf->packet_replic_size==1){ // multipacket - frag_offset is beginning timestamp @@ -894,7 +894,7 @@ static int ff_asf_parse_packet(AVFormatContext *s, AVIOContext *pb, AVPacket *pk //printf("PacketLeftSize:%d Pad:%d Pos:%"PRId64"\n", asf->packet_size_left, asf->packet_padsize, avio_tell(pb)); assert(ret>=0); /* fail safe */ - avio_seek(pb, ret, SEEK_CUR); + avio_skip(pb, ret); asf->packet_pos= avio_tell(pb); if (asf->data_object_size != (uint64_t)-1 && @@ -913,7 +913,7 @@ static int ff_asf_parse_packet(AVFormatContext *s, AVIOContext *pb, AVPacket *pk ) { asf->packet_time_start = 0; /* unhandled packet (should not happen) */ - avio_seek(pb, asf->packet_frag_size, SEEK_CUR); + avio_skip(pb, asf->packet_frag_size); asf->packet_size_left -= asf->packet_frag_size; if(asf->stream_index < 0) av_log(s, AV_LOG_ERROR, "ff asf skip %d (unknown stream)\n", asf->packet_frag_size); @@ -933,7 +933,7 @@ static int ff_asf_parse_packet(AVFormatContext *s, AVIOContext *pb, AVPacket *pk if (asf->packet_multi_size < asf->packet_obj_size) { asf->packet_time_start = 0; - avio_seek(pb, asf->packet_multi_size, SEEK_CUR); + avio_skip(pb, asf->packet_multi_size); asf->packet_size_left -= asf->packet_multi_size; continue; } @@ -1198,7 +1198,7 @@ static void asf_build_simple_index(AVFormatContext *s, int stream_index) avio_seek(s->pb, current_pos, SEEK_SET); return; } - avio_seek(s->pb, gsize-24, SEEK_CUR); + avio_skip(s->pb, gsize-24); ff_get_guid(s->pb, &g); } diff --git a/libavformat/asfenc.c b/libavformat/asfenc.c index 3a06044036..36b9472018 100644 --- a/libavformat/asfenc.c +++ b/libavformat/asfenc.c @@ -574,7 +574,7 @@ static int asf_write_header(AVFormatContext *s) return -1; } - put_flush_packet(s->pb); + avio_flush(s->pb); asf->packet_nb_payloads = 0; asf->packet_timestamp_start = -1; @@ -672,7 +672,7 @@ static void flush_packet(AVFormatContext *s) avio_write(s->pb, asf->packet_buf, s->packet_size - packet_hdr_size); - put_flush_packet(s->pb); + avio_flush(s->pb); asf->nb_packets++; asf->packet_nb_payloads = 0; asf->packet_timestamp_start = -1; @@ -864,7 +864,7 @@ static int asf_write_trailer(AVFormatContext *s) if ((!asf->is_streamed) && (asf->nb_index_count != 0)) { asf_write_index(s, asf->index_ptr, asf->maximum_packet, asf->nb_index_count); } - put_flush_packet(s->pb); + avio_flush(s->pb); if (asf->is_streamed || url_is_streamed(s->pb)) { put_chunk(s, 0x4524, 0, 0); /* end of stream */ @@ -875,7 +875,7 @@ static int asf_write_trailer(AVFormatContext *s) asf_write_header1(s, file_size, data_size - asf->data_offset); } - put_flush_packet(s->pb); + avio_flush(s->pb); av_free(asf->index_ptr); return 0; } diff --git a/libavformat/assenc.c b/libavformat/assenc.c index 9abe302744..b367668d2d 100644 --- a/libavformat/assenc.c +++ b/libavformat/assenc.c @@ -50,7 +50,7 @@ static int write_header(AVFormatContext *s) last=p; } - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } @@ -59,7 +59,7 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) { avio_write(s->pb, pkt->data, pkt->size); - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } @@ -72,7 +72,7 @@ static int write_trailer(AVFormatContext *s) avio_write(s->pb, avctx->extradata + ass->extra_index, avctx->extradata_size - ass->extra_index); - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } diff --git a/libavformat/au.c b/libavformat/au.c index 9ea4010039..9c674ac6f6 100644 --- a/libavformat/au.c +++ b/libavformat/au.c @@ -74,7 +74,7 @@ static int au_write_header(AVFormatContext *s) return -1; } - put_flush_packet(pb); + avio_flush(pb); return 0; } @@ -99,7 +99,7 @@ static int au_write_trailer(AVFormatContext *s) avio_wb32(pb, (uint32_t)(file_size - 24)); avio_seek(pb, file_size, SEEK_SET); - put_flush_packet(pb); + avio_flush(pb); } return 0; @@ -147,7 +147,7 @@ static int au_read_header(AVFormatContext *s, if (size >= 24) { /* skip unused data */ - avio_seek(pb, size - 24, SEEK_CUR); + avio_skip(pb, size - 24); } /* now we are ready: build format streams */ diff --git a/libavformat/avidec.c b/libavformat/avidec.c index 83b86d8146..9ba1f5725e 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -321,12 +321,12 @@ static void avi_read_nikon(AVFormatContext *s, uint64_t end) } if (name) av_metadata_set2(&s->metadata, name, buffer, 0); - avio_seek(s->pb, size, SEEK_CUR); + avio_skip(s->pb, size); } break; } default: - avio_seek(s->pb, size, SEEK_CUR); + avio_skip(s->pb, size); break; } } @@ -392,13 +392,13 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) unsigned char date[64] = {0}; size += (size & 1); size -= avio_read(pb, date, FFMIN(size, sizeof(date)-1)); - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); avi_metadata_creation_time(&s->metadata, date); break; } case MKTAG('d', 'm', 'l', 'h'): avi->is_odml = 1; - avio_seek(pb, size + (size & 1), SEEK_CUR); + avio_skip(pb, size + (size & 1)); break; case MKTAG('a', 'm', 'v', 'h'): amv_file_format=1; @@ -410,13 +410,13 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) avio_rl32(pb); avi->non_interleaved |= avio_rl32(pb) & AVIF_MUSTUSEINDEX; - avio_seek(pb, 2 * 4, SEEK_CUR); + avio_skip(pb, 2 * 4); avio_rl32(pb); avio_rl32(pb); avih_width=avio_rl32(pb); avih_height=avio_rl32(pb); - avio_seek(pb, size - 10 * 4, SEEK_CUR); + avio_skip(pb, size - 10 * 4); break; case MKTAG('s', 't', 'r', 'h'): /* stream header */ @@ -425,7 +425,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) handler = avio_rl32(pb); /* codec tag */ if(tag1 == MKTAG('p', 'a', 'd', 's')){ - avio_seek(pb, size - 8, SEEK_CUR); + avio_skip(pb, size - 8); break; }else{ stream_index++; @@ -469,10 +469,10 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) goto fail; } s->streams[0]->priv_data = ast; - avio_seek(pb, 3 * 4, SEEK_CUR); + avio_skip(pb, 3 * 4); ast->scale = avio_rl32(pb); ast->rate = avio_rl32(pb); - avio_seek(pb, 4, SEEK_CUR); /* start time */ + avio_skip(pb, 4); /* start time */ dv_dur = avio_rl32(pb); if (ast->scale > 0 && ast->rate > 0 && dv_dur > 0) { @@ -485,7 +485,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) */ stream_index = s->nb_streams - 1; - avio_seek(pb, size - 9*4, SEEK_CUR); + avio_skip(pb, size - 9*4); break; } @@ -542,12 +542,12 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) if(ast->sample_size == 0) st->duration = st->nb_frames; ast->frame_offset= ast->cum_len; - avio_seek(pb, size - 12 * 4, SEEK_CUR); + avio_skip(pb, size - 12 * 4); break; case MKTAG('s', 't', 'r', 'f'): /* stream header */ if (stream_index >= (unsigned)s->nb_streams || avi->dv_demux) { - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); } else { uint64_t cur_pos = avio_tell(pb); if (cur_pos < list_end) @@ -560,7 +560,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) st->codec->height=avih_height; st->codec->codec_type = AVMEDIA_TYPE_VIDEO; st->codec->codec_id = CODEC_ID_AMV; - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); break; } tag1 = ff_get_bmp_header(pb, st); @@ -620,7 +620,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) } st->codec->height= FFABS(st->codec->height); -// avio_seek(pb, size - 5 * 4, SEEK_CUR); +// avio_skip(pb, size - 5 * 4); break; case AVMEDIA_TYPE_AUDIO: ff_get_wav_header(pb, st->codec, size); @@ -630,7 +630,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) ast->sample_size= st->codec->block_align; } if (size&1) /* 2-aligned (fix for Stargate SG-1 - 3x18 - Shades of Grey.avi) */ - avio_seek(pb, 1, SEEK_CUR); + avio_skip(pb, 1); /* Force parsing as several audio frames can be in * one packet and timestamps refer to packet start. */ st->need_parsing = AVSTREAM_PARSE_TIMESTAMPS; @@ -658,7 +658,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) st->codec->codec_type = AVMEDIA_TYPE_DATA; st->codec->codec_id= CODEC_ID_NONE; st->codec->codec_tag= 0; - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); break; } } @@ -693,7 +693,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) } size -= 9*4; } - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); break; case MKTAG('s', 't', 'r', 'n'): if(s->nb_streams){ @@ -710,7 +710,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) } /* skip tag */ size += (size & 1); - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); break; } } @@ -762,7 +762,7 @@ static int read_gab2_sub(AVStream *st, AVPacket *pkt) { goto error; ret = avio_get_str16le(pb, desc_len, desc, sizeof(desc)); - avio_seek(pb, desc_len - ret, SEEK_CUR); + avio_skip(pb, desc_len - ret); if (*desc) av_metadata_set2(&st->metadata, "title", desc, 0); @@ -1008,14 +1008,14 @@ resync: //parse JUNK ||(d[0] == 'J' && d[1] == 'U' && d[2] == 'N' && d[3] == 'K') ||(d[0] == 'i' && d[1] == 'd' && d[2] == 'x' && d[3] == '1')){ - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); //av_log(s, AV_LOG_DEBUG, "SKIP\n"); goto resync; } //parse stray LIST if(d[0] == 'L' && d[1] == 'I' && d[2] == 'S' && d[3] == 'T'){ - avio_seek(pb, 4, SEEK_CUR); + avio_skip(pb, 4); goto resync; } @@ -1026,7 +1026,7 @@ resync: //detect ##ix chunk and skip if(d[2] == 'i' && d[3] == 'x' && n < s->nb_streams){ - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); goto resync; } @@ -1060,7 +1060,7 @@ resync: /*|| (st->discard >= AVDISCARD_NONKEY && !(pkt->flags & AV_PKT_FLAG_KEY))*/ //FIXME needs a little reordering || st->discard >= AVDISCARD_ALL){ ast->frame_offset += get_duration(ast, size); - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); goto resync; } @@ -1225,7 +1225,7 @@ static int avi_load_index(AVFormatContext *s) default: skip: size += (size & 1); - if (avio_seek(pb, size, SEEK_CUR) < 0) + if (avio_skip(pb, size) < 0) goto the_end; // something is wrong here break; } diff --git a/libavformat/avienc.c b/libavformat/avienc.c index 8d9980cf46..3743abb8d7 100644 --- a/libavformat/avienc.c +++ b/libavformat/avienc.c @@ -393,7 +393,7 @@ static int avi_write_header(AVFormatContext *s) avi->movi_list = ff_start_tag(pb, "LIST"); ffio_wfourcc(pb, "movi"); - put_flush_packet(pb); + avio_flush(pb); return 0; } @@ -438,15 +438,15 @@ static int avi_write_ix(AVFormatContext *s) avio_wl32(pb, ((uint32_t)ie->len & ~0x80000000) | (ie->flags & 0x10 ? 0 : 0x80000000)); } - put_flush_packet(pb); + avio_flush(pb); pos = avio_tell(pb); /* Updating one entry in the AVI OpenDML master index */ avio_seek(pb, avist->indexes.indx_start - 8, SEEK_SET); ffio_wfourcc(pb, "indx"); /* enabling this entry */ - avio_seek(pb, 8, SEEK_CUR); + avio_skip(pb, 8); avio_wl32(pb, avi->riff_id); /* nEntriesInUse */ - avio_seek(pb, 16*avi->riff_id, SEEK_CUR); + avio_skip(pb, 16*avi->riff_id); avio_wl64(pb, ix); /* qwOffset */ avio_wl32(pb, pos - ix); /* dwSize */ avio_wl32(pb, avist->indexes.entry); /* dwDuration */ @@ -578,7 +578,7 @@ static int avi_write_packet(AVFormatContext *s, AVPacket *pkt) if (size & 1) avio_w8(pb, 0); - put_flush_packet(pb); + avio_flush(pb); return 0; } @@ -603,7 +603,7 @@ static int avi_write_trailer(AVFormatContext *s) file_size = avio_tell(pb); avio_seek(pb, avi->odml_list - 8, SEEK_SET); ffio_wfourcc(pb, "LIST"); /* Making this AVI OpenDML one */ - avio_seek(pb, 16, SEEK_CUR); + avio_skip(pb, 16); for (n=nb_frames=0;n<s->nb_streams;n++) { AVCodecContext *stream = s->streams[n]->codec; @@ -624,7 +624,7 @@ static int avi_write_trailer(AVFormatContext *s) avi_write_counters(s, avi->riff_id); } } - put_flush_packet(pb); + avio_flush(pb); for (i=0; i<s->nb_streams; i++) { AVIStream *avist= s->streams[i]->priv_data; diff --git a/libavformat/avio.h b/libavformat/avio.h index 20b5e80e38..2d2afc7112 100644 --- a/libavformat/avio.h +++ b/libavformat/avio.h @@ -429,6 +429,13 @@ attribute_deprecated int64_t url_ftell(AVIOContext *s); attribute_deprecated int64_t url_fsize(AVIOContext *s); #define URL_EOF (-1) attribute_deprecated int url_fgetc(AVIOContext *s); +attribute_deprecated int url_setbufsize(AVIOContext *s, int buf_size); +#ifdef __GNUC__ +attribute_deprecated int url_fprintf(AVIOContext *s, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 2, 3))); +#else +attribute_deprecated int url_fprintf(AVIOContext *s, const char *fmt, ...); +#endif +attribute_deprecated void put_flush_packet(AVIOContext *s); /** * @} */ @@ -488,7 +495,10 @@ int64_t avio_skip(AVIOContext *s, int64_t offset); * ftell() equivalent for AVIOContext. * @return position or AVERROR. */ -#define avio_tell(s) avio_seek((s), 0, SEEK_CUR) +static av_always_inline int64_t avio_tell(AVIOContext *s) +{ + return avio_seek(s, 0, SEEK_CUR); +} /** * Get the filesize. @@ -508,9 +518,9 @@ int64_t av_url_read_fseek(AVIOContext *h, int stream_index, /** @warning currently size is limited */ #ifdef __GNUC__ -int url_fprintf(AVIOContext *s, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 2, 3))); +int avio_printf(AVIOContext *s, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 2, 3))); #else -int url_fprintf(AVIOContext *s, const char *fmt, ...); +int avio_printf(AVIOContext *s, const char *fmt, ...); #endif #if FF_API_OLD_AVIO @@ -519,7 +529,7 @@ int url_fprintf(AVIOContext *s, const char *fmt, ...); attribute_deprecated char *url_fgets(AVIOContext *s, char *buf, int buf_size); #endif -void put_flush_packet(AVIOContext *s); +void avio_flush(AVIOContext *s); /** @@ -570,8 +580,6 @@ unsigned int avio_rb24(AVIOContext *s); unsigned int avio_rb32(AVIOContext *s); uint64_t avio_rb64(AVIOContext *s); -uint64_t ff_get_v(AVIOContext *bc); - static inline int url_is_streamed(AVIOContext *s) { return s->is_streamed; @@ -590,8 +598,6 @@ static inline int url_is_streamed(AVIOContext *s) */ int url_fdopen(AVIOContext **s, URLContext *h); -/** @warning must be called before any I/O */ -int url_setbufsize(AVIOContext *s, int buf_size); #if FF_API_URL_RESETBUF /** Reset the buffer for reading or writing. * @note Will drop any data currently in the buffer without transmitting it. @@ -623,12 +629,12 @@ URLContext *url_fileno(AVIOContext *s); * @deprecated use AVIOContext.max_packet_size directly. */ attribute_deprecated int url_fget_max_packet_size(AVIOContext *s); -#endif -int url_open_buf(AVIOContext **s, uint8_t *buf, int buf_size, int flags); +attribute_deprecated int url_open_buf(AVIOContext **s, uint8_t *buf, int buf_size, int flags); /** return the written or read size */ -int url_close_buf(AVIOContext *s); +attribute_deprecated int url_close_buf(AVIOContext *s); +#endif /** * Open a write only memory stream. diff --git a/libavformat/avio_internal.h b/libavformat/avio_internal.h index 3abb619b8a..12578fac6c 100644 --- a/libavformat/avio_internal.h +++ b/libavformat/avio_internal.h @@ -61,4 +61,9 @@ static av_always_inline void ffio_wfourcc(AVIOContext *pb, const uint8_t *s) */ int ffio_rewind_with_probe_data(AVIOContext *s, unsigned char *buf, int buf_size); +uint64_t ffio_read_varlen(AVIOContext *bc); + +/** @warning must be called before any I/O */ +int ffio_set_buf_size(AVIOContext *s, int buf_size); + #endif // AVFORMAT_AVIO_INTERNAL_H diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c index a4f95210bf..b8cfb9286a 100644 --- a/libavformat/aviobuf.c +++ b/libavformat/aviobuf.c @@ -170,7 +170,7 @@ void avio_write(AVIOContext *s, const unsigned char *buf, int size) } } -void put_flush_packet(AVIOContext *s) +void avio_flush(AVIOContext *s) { flush_buffer(s); s->must_flush = 0; @@ -386,6 +386,26 @@ int64_t url_fsize(AVIOContext *s) { return avio_size(s); } +int url_setbufsize(AVIOContext *s, int buf_size) +{ + return ffio_set_buf_size(s, buf_size); +} +int url_fprintf(AVIOContext *s, const char *fmt, ...) +{ + va_list ap; + char buf[4096]; + int ret; + + va_start(ap, fmt); + ret = vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + avio_write(s, buf, strlen(buf)); + return ret; +} +void put_flush_packet(AVIOContext *s) +{ + avio_flush(s); +} #endif int avio_put_str(AVIOContext *s, const char *str) @@ -499,7 +519,7 @@ static void fill_buffer(AVIOContext *s) /* make buffer smaller in case it ended up large after probing */ if (s->buffer_size > max_buffer_size) { - url_setbufsize(s, max_buffer_size); + ffio_set_buf_size(s, max_buffer_size); s->checksum_ptr = dst = s->buffer; len = s->buffer_size; @@ -762,7 +782,7 @@ uint64_t avio_rb64(AVIOContext *s) return val; } -uint64_t ff_get_v(AVIOContext *bc){ +uint64_t ffio_read_varlen(AVIOContext *bc){ uint64_t val = 0; int tmp; @@ -810,7 +830,7 @@ int url_fdopen(AVIOContext **s, URLContext *h) return 0; } -int url_setbufsize(AVIOContext *s, int buf_size) +int ffio_set_buf_size(AVIOContext *s, int buf_size) { uint8_t *buffer; buffer = av_malloc(buf_size); @@ -917,8 +937,7 @@ URLContext *url_fileno(AVIOContext *s) return s->opaque; } -#if CONFIG_MUXERS -int url_fprintf(AVIOContext *s, const char *fmt, ...) +int avio_printf(AVIOContext *s, const char *fmt, ...) { va_list ap; char buf[4096]; @@ -930,7 +949,6 @@ int url_fprintf(AVIOContext *s, const char *fmt, ...) avio_write(s, buf, strlen(buf)); return ret; } -#endif //CONFIG_MUXERS #if FF_API_OLD_AVIO char *url_fgets(AVIOContext *s, char *buf, int buf_size) @@ -991,6 +1009,7 @@ int64_t av_url_read_fseek(AVIOContext *s, int stream_index, * back to the server even if CONFIG_MUXERS is false. */ #if CONFIG_MUXERS || CONFIG_NETWORK /* buffer handling */ +#if FF_API_OLD_AVIO int url_open_buf(AVIOContext **s, uint8_t *buf, int buf_size, int flags) { int ret; @@ -1007,9 +1026,10 @@ int url_open_buf(AVIOContext **s, uint8_t *buf, int buf_size, int flags) int url_close_buf(AVIOContext *s) { - put_flush_packet(s); + avio_flush(s); return s->buf_ptr - s->buffer; } +#endif /* output in a dynamic buffer */ @@ -1134,7 +1154,7 @@ int url_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer) padding = FF_INPUT_BUFFER_PADDING_SIZE; } - put_flush_packet(s); + avio_flush(s); *pbuffer = d->buffer; size = d->size; diff --git a/libavformat/avs.c b/libavformat/avs.c index 0ddb0af06d..355ae31f35 100644 --- a/libavformat/avs.c +++ b/libavformat/avs.c @@ -61,7 +61,7 @@ static int avs_read_header(AVFormatContext * s, AVFormatParameters * ap) s->ctx_flags |= AVFMTCTX_NOHEADER; - avio_seek(s->pb, 4, SEEK_CUR); + avio_skip(s->pb, 4); avs->width = avio_rl16(s->pb); avs->height = avio_rl16(s->pb); avs->bits_per_sample = avio_rl16(s->pb); @@ -204,7 +204,7 @@ static int avs_read_packet(AVFormatContext * s, AVPacket * pkt) break; default: - avio_seek(s->pb, size - 4, SEEK_CUR); + avio_skip(s->pb, size - 4); } } } diff --git a/libavformat/bethsoftvid.c b/libavformat/bethsoftvid.c index 7987e8e6f6..399d627121 100644 --- a/libavformat/bethsoftvid.c +++ b/libavformat/bethsoftvid.c @@ -67,7 +67,7 @@ static int vid_read_header(AVFormatContext *s, * bytes: 'V' 'I' 'D' * int16s: always_512, nframes, width, height, delay, always_14 */ - avio_seek(pb, 5, SEEK_CUR); + avio_skip(pb, 5); vid->nframes = avio_rl16(pb); stream = av_new_stream(s, 0); diff --git a/libavformat/bfi.c b/libavformat/bfi.c index 21676e440a..843ba9972e 100644 --- a/libavformat/bfi.c +++ b/libavformat/bfi.c @@ -65,19 +65,19 @@ static int bfi_read_header(AVFormatContext * s, AVFormatParameters * ap) return AVERROR(ENOMEM); /* Set the total number of frames. */ - avio_seek(pb, 8, SEEK_CUR); + avio_skip(pb, 8); chunk_header = avio_rl32(pb); bfi->nframes = avio_rl32(pb); avio_rl32(pb); avio_rl32(pb); avio_rl32(pb); fps = avio_rl32(pb); - avio_seek(pb, 12, SEEK_CUR); + avio_skip(pb, 12); vstream->codec->width = avio_rl32(pb); vstream->codec->height = avio_rl32(pb); /*Load the palette to extradata */ - avio_seek(pb, 8, SEEK_CUR); + avio_skip(pb, 8); vstream->codec->extradata = av_malloc(768); vstream->codec->extradata_size = 768; avio_read(pb, vstream->codec->extradata, diff --git a/libavformat/bink.c b/libavformat/bink.c index 22beb4cbbd..4622f89e5a 100644 --- a/libavformat/bink.c +++ b/libavformat/bink.c @@ -98,7 +98,7 @@ static int read_header(AVFormatContext *s, AVFormatParameters *ap) return AVERROR(EIO); } - avio_seek(pb, 4, SEEK_CUR); + avio_skip(pb, 4); vst->codec->width = avio_rl32(pb); vst->codec->height = avio_rl32(pb); @@ -127,7 +127,7 @@ static int read_header(AVFormatContext *s, AVFormatParameters *ap) } if (bink->num_audio_tracks) { - avio_seek(pb, 4 * bink->num_audio_tracks, SEEK_CUR); + avio_skip(pb, 4 * bink->num_audio_tracks); for (i = 0; i < bink->num_audio_tracks; i++) { ast = av_new_stream(s, 1); @@ -169,7 +169,7 @@ static int read_header(AVFormatContext *s, AVFormatParameters *ap) keyframe ? AVINDEX_KEYFRAME : 0); } - avio_seek(pb, 4, SEEK_CUR); + avio_skip(pb, 4); bink->current_track = -1; return 0; @@ -225,7 +225,7 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt) AV_RL32(pkt->data) / (2 * s->streams[bink->current_track]->codec->channels); return 0; } else { - avio_seek(pb, audio_size, SEEK_CUR); + avio_skip(pb, audio_size); } } diff --git a/libavformat/c93.c b/libavformat/c93.c index a4a0fe3ad0..270a09bf6b 100644 --- a/libavformat/c93.c +++ b/libavformat/c93.c @@ -122,7 +122,7 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt) return AVERROR(ENOMEM); c93->audio->codec->codec_type = AVMEDIA_TYPE_AUDIO; } - avio_seek(pb, 26, SEEK_CUR); /* VOC header */ + avio_skip(pb, 26); /* VOC header */ ret = voc_get_packet(s, pkt, c93->audio, datasize - 26); if (ret > 0) { pkt->stream_index = 1; diff --git a/libavformat/cafdec.c b/libavformat/cafdec.c index 829dff44bb..217f4db633 100644 --- a/libavformat/cafdec.c +++ b/libavformat/cafdec.c @@ -114,22 +114,22 @@ static int read_kuki_chunk(AVFormatContext *s, int64_t size) av_log(s, AV_LOG_ERROR, "invalid AAC magic cookie\n"); return AVERROR_INVALIDDATA; } - avio_seek(pb, skip, SEEK_CUR); + avio_skip(pb, skip); } else if (st->codec->codec_id == CODEC_ID_ALAC) { #define ALAC_PREAMBLE 12 #define ALAC_HEADER 36 if (size < ALAC_PREAMBLE + ALAC_HEADER) { av_log(s, AV_LOG_ERROR, "invalid ALAC magic cookie\n"); - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); return AVERROR_INVALIDDATA; } - avio_seek(pb, ALAC_PREAMBLE, SEEK_CUR); + avio_skip(pb, ALAC_PREAMBLE); st->codec->extradata = av_mallocz(ALAC_HEADER + FF_INPUT_BUFFER_PADDING_SIZE); if (!st->codec->extradata) return AVERROR(ENOMEM); avio_read(pb, st->codec->extradata, ALAC_HEADER); st->codec->extradata_size = ALAC_HEADER; - avio_seek(pb, size - ALAC_PREAMBLE - ALAC_HEADER, SEEK_CUR); + avio_skip(pb, size - ALAC_PREAMBLE - ALAC_HEADER); } else { st->codec->extradata = av_mallocz(size + FF_INPUT_BUFFER_PADDING_SIZE); if (!st->codec->extradata) @@ -201,7 +201,7 @@ static int read_header(AVFormatContext *s, int found_data, ret; int64_t size; - avio_seek(pb, 8, SEEK_CUR); /* magic, version, file flags */ + avio_skip(pb, 8); /* magic, version, file flags */ /* audio description chunk */ if (avio_rb32(pb) != MKBETAG('d','e','s','c')) { @@ -233,11 +233,11 @@ static int read_header(AVFormatContext *s, switch (tag) { case MKBETAG('d','a','t','a'): - avio_seek(pb, 4, SEEK_CUR); /* edit count */ + avio_skip(pb, 4); /* edit count */ caf->data_start = avio_tell(pb); caf->data_size = size < 0 ? -1 : size - 4; if (caf->data_size > 0 && !url_is_streamed(pb)) - avio_seek(pb, caf->data_size, SEEK_CUR); + avio_skip(pb, caf->data_size); found_data = 1; break; @@ -265,7 +265,7 @@ static int read_header(AVFormatContext *s, case MKBETAG('f','r','e','e'): if (size < 0) return AVERROR_INVALIDDATA; - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); break; } } diff --git a/libavformat/crcenc.c b/libavformat/crcenc.c index ec106b0b38..b5fed3918d 100644 --- a/libavformat/crcenc.c +++ b/libavformat/crcenc.c @@ -50,7 +50,7 @@ static int crc_write_trailer(struct AVFormatContext *s) snprintf(buf, sizeof(buf), "CRC=0x%08x\n", crc->crcval); avio_write(s->pb, buf, strlen(buf)); - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } diff --git a/libavformat/daud.c b/libavformat/daud.c index 39a994b605..7aa1b6dad2 100644 --- a/libavformat/daud.c +++ b/libavformat/daud.c @@ -60,7 +60,7 @@ static int daud_write_packet(struct AVFormatContext *s, AVPacket *pkt) avio_wb16(s->pb, pkt->size); avio_wb16(s->pb, 0x8010); // unknown avio_write(s->pb, pkt->data, pkt->size); - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } diff --git a/libavformat/dvenc.c b/libavformat/dvenc.c index 6d90024eef..0b80835fae 100644 --- a/libavformat/dvenc.c +++ b/libavformat/dvenc.c @@ -382,7 +382,7 @@ static int dv_write_packet(struct AVFormatContext *s, AVPacket *pkt) pkt->data, pkt->size, &frame); if (fsize > 0) { avio_write(s->pb, frame, fsize); - put_flush_packet(s->pb); + avio_flush(s->pb); } return 0; } diff --git a/libavformat/dxa.c b/libavformat/dxa.c index de72792372..cf93df70d4 100644 --- a/libavformat/dxa.c +++ b/libavformat/dxa.c @@ -96,7 +96,7 @@ static int dxa_read_header(AVFormatContext *s, AVFormatParameters *ap) c->has_sound = 1; size = avio_rb32(pb); c->vidpos = avio_tell(pb) + size; - avio_seek(pb, 16, SEEK_CUR); + avio_skip(pb, 16); fsize = avio_rl32(pb); ast = av_new_stream(s, 0); @@ -108,7 +108,7 @@ static int dxa_read_header(AVFormatContext *s, AVFormatParameters *ap) tag = avio_rl32(pb); fsize = avio_rl32(pb); if(tag == MKTAG('d', 'a', 't', 'a')) break; - avio_seek(pb, fsize, SEEK_CUR); + avio_skip(pb, fsize); } c->bpc = (fsize + c->frames - 1) / c->frames; if(ast->codec->block_align) diff --git a/libavformat/eacdata.c b/libavformat/eacdata.c index 8fc8c4221e..7b109ff888 100644 --- a/libavformat/eacdata.c +++ b/libavformat/eacdata.c @@ -62,7 +62,7 @@ static int cdata_read_header(AVFormatContext *s, AVFormatParameters *ap) }; sample_rate = avio_rb16(pb); - avio_seek(pb, 12, SEEK_CUR); + avio_skip(pb, 12); st = av_new_stream(s, 0); if (!st) diff --git a/libavformat/electronicarts.c b/libavformat/electronicarts.c index 4abf0223e2..6585bbea2d 100644 --- a/libavformat/electronicarts.c +++ b/libavformat/electronicarts.c @@ -222,7 +222,7 @@ static int process_audio_header_eacs(AVFormatContext *s) ea->bytes = avio_r8(pb); /* 1=8-bit, 2=16-bit */ ea->num_channels = avio_r8(pb); compression_type = avio_r8(pb); - avio_seek(pb, 13, SEEK_CUR); + avio_skip(pb, 13); switch (compression_type) { case 0: @@ -261,7 +261,7 @@ static int process_video_header_mdec(AVFormatContext *s) { EaDemuxContext *ea = s->priv_data; AVIOContext *pb = s->pb; - avio_seek(pb, 4, SEEK_CUR); + avio_skip(pb, 4); ea->width = avio_rl16(pb); ea->height = avio_rl16(pb); ea->time_base = (AVRational){1,15}; @@ -274,7 +274,7 @@ static int process_video_header_vp6(AVFormatContext *s) EaDemuxContext *ea = s->priv_data; AVIOContext *pb = s->pb; - avio_seek(pb, 16, SEEK_CUR); + avio_skip(pb, 16); ea->time_base.den = avio_rl32(pb); ea->time_base.num = avio_rl32(pb); ea->video_codec = CODEC_ID_VP6; @@ -316,7 +316,7 @@ static int process_ea_header(AVFormatContext *s) { case SHEN_TAG : blockid = avio_rl32(pb); if (blockid == GSTR_TAG) { - avio_seek(pb, 4, SEEK_CUR); + avio_skip(pb, 4); } else if ((blockid & 0xFFFF)!=PT00_TAG) { av_log (s, AV_LOG_ERROR, "unknown SCHl headerid\n"); return 0; @@ -474,19 +474,19 @@ static int ea_read_packet(AVFormatContext *s, /* audio data */ case ISNh_TAG: /* header chunk also contains data; skip over the header portion*/ - avio_seek(pb, 32, SEEK_CUR); + avio_skip(pb, 32); chunk_size -= 32; case ISNd_TAG: case SCDl_TAG: case SNDC_TAG: case SDEN_TAG: if (!ea->audio_codec) { - avio_seek(pb, chunk_size, SEEK_CUR); + avio_skip(pb, chunk_size); break; } else if (ea->audio_codec == CODEC_ID_PCM_S16LE_PLANAR || ea->audio_codec == CODEC_ID_MP3) { num_samples = avio_rl32(pb); - avio_seek(pb, 8, SEEK_CUR); + avio_skip(pb, 8); chunk_size -= 12; } ret = av_get_packet(pb, pkt, chunk_size); @@ -541,7 +541,7 @@ static int ea_read_packet(AVFormatContext *s, goto get_video_packet; case mTCD_TAG: - avio_seek(pb, 8, SEEK_CUR); // skip ea dct header + avio_skip(pb, 8); // skip ea dct header chunk_size -= 8; goto get_video_packet; @@ -560,7 +560,7 @@ get_video_packet: break; default: - avio_seek(pb, chunk_size, SEEK_CUR); + avio_skip(pb, chunk_size); break; } } diff --git a/libavformat/ffmdec.c b/libavformat/ffmdec.c index eafe4802b7..a54bee059d 100644 --- a/libavformat/ffmdec.c +++ b/libavformat/ffmdec.c @@ -187,7 +187,7 @@ static int64_t get_dts(AVFormatContext *s, int64_t pos) int64_t dts; ffm_seek1(s, pos); - avio_seek(pb, 4, SEEK_CUR); + avio_skip(pb, 4); dts = avio_rb64(pb); #ifdef DEBUG_SEEK av_log(s, AV_LOG_DEBUG, "dts=%0.6f\n", dts / 1000000.0); diff --git a/libavformat/ffmenc.c b/libavformat/ffmenc.c index e648393c89..8071045467 100644 --- a/libavformat/ffmenc.c +++ b/libavformat/ffmenc.c @@ -44,7 +44,7 @@ static void flush_packet(AVFormatContext *s) h |= 0x8000; avio_wb16(pb, h); avio_write(pb, ffm->packet, ffm->packet_end - ffm->packet); - put_flush_packet(pb); + avio_flush(pb); /* prepare next packet */ ffm->frame_offset = 0; /* no key frame */ @@ -187,7 +187,7 @@ static int ffm_write_header(AVFormatContext *s) while ((avio_tell(pb) % ffm->packet_size) != 0) avio_w8(pb, 0); - put_flush_packet(pb); + avio_flush(pb); /* init packet mux */ ffm->packet_ptr = ffm->packet; @@ -235,7 +235,7 @@ static int ffm_write_trailer(AVFormatContext *s) if (ffm->packet_ptr > ffm->packet) flush_packet(s); - put_flush_packet(pb); + avio_flush(pb); return 0; } diff --git a/libavformat/ffmetaenc.c b/libavformat/ffmetaenc.c index 77db0b9bf8..596185b70c 100644 --- a/libavformat/ffmetaenc.c +++ b/libavformat/ffmetaenc.c @@ -53,7 +53,7 @@ static int write_header(AVFormatContext *s) avio_write(s->pb, ID_STRING, sizeof(ID_STRING) - 1); avio_w8(s->pb, '1'); // version avio_w8(s->pb, '\n'); - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } @@ -73,13 +73,13 @@ static int write_trailer(AVFormatContext *s) AVChapter *ch = s->chapters[i]; avio_write(s->pb, ID_CHAPTER, sizeof(ID_CHAPTER) - 1); avio_w8(s->pb, '\n'); - url_fprintf(s->pb, "TIMEBASE=%d/%d\n", ch->time_base.num, ch->time_base.den); - url_fprintf(s->pb, "START=%"PRId64"\n", ch->start); - url_fprintf(s->pb, "END=%"PRId64"\n", ch->end); + avio_printf(s->pb, "TIMEBASE=%d/%d\n", ch->time_base.num, ch->time_base.den); + avio_printf(s->pb, "START=%"PRId64"\n", ch->start); + avio_printf(s->pb, "END=%"PRId64"\n", ch->end); write_tags(s->pb, ch->metadata); } - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } diff --git a/libavformat/filmstripdec.c b/libavformat/filmstripdec.c index 8d56b0e340..46d0635e9d 100644 --- a/libavformat/filmstripdec.c +++ b/libavformat/filmstripdec.c @@ -59,7 +59,7 @@ static int read_header(AVFormatContext *s, return AVERROR_INVALIDDATA; } - avio_seek(pb, 2, SEEK_CUR); + avio_skip(pb, 2); st->codec->codec_type = AVMEDIA_TYPE_VIDEO; st->codec->codec_id = CODEC_ID_RAWVIDEO; st->codec->pix_fmt = PIX_FMT_RGBA; @@ -84,7 +84,7 @@ static int read_packet(AVFormatContext *s, return AVERROR(EIO); pkt->dts = avio_tell(s->pb) / (st->codec->width * (st->codec->height + film->leading) * 4); pkt->size = av_get_packet(s->pb, pkt, st->codec->width * st->codec->height * 4); - avio_seek(s->pb, st->codec->width * film->leading * 4, SEEK_CUR); + avio_skip(s->pb, st->codec->width * film->leading * 4); if (pkt->size < 0) return pkt->size; pkt->flags |= AV_PKT_FLAG_KEY; diff --git a/libavformat/filmstripenc.c b/libavformat/filmstripenc.c index d20b4ecd4c..9bbc546eaf 100644 --- a/libavformat/filmstripenc.c +++ b/libavformat/filmstripenc.c @@ -67,7 +67,7 @@ static int write_trailer(AVFormatContext *s) avio_wb16(pb, 1/av_q2d(st->codec->time_base)); for (i = 0; i < 16; i++) avio_w8(pb, 0x00); // reserved - put_flush_packet(pb); + avio_flush(pb); return 0; } diff --git a/libavformat/flacdec.c b/libavformat/flacdec.c index 73eeacb422..3dd3e1f70f 100644 --- a/libavformat/flacdec.c +++ b/libavformat/flacdec.c @@ -65,7 +65,7 @@ static int flac_read_header(AVFormatContext *s, break; /* skip metadata block for unsupported types */ default: - ret = avio_seek(s->pb, metadata_size, SEEK_CUR); + ret = avio_skip(s->pb, metadata_size); if (ret < 0) return ret; } diff --git a/libavformat/flacenc.c b/libavformat/flacenc.c index 079e6dd713..e7605f5b23 100644 --- a/libavformat/flacenc.c +++ b/libavformat/flacenc.c @@ -104,7 +104,7 @@ static int flac_write_trailer(struct AVFormatContext *s) avio_seek(pb, 8, SEEK_SET); avio_write(pb, streaminfo, FLAC_STREAMINFO_SIZE); avio_seek(pb, file_size, SEEK_SET); - put_flush_packet(pb); + avio_flush(pb); } else { av_log(s, AV_LOG_WARNING, "unable to rewrite FLAC header.\n"); } @@ -114,7 +114,7 @@ static int flac_write_trailer(struct AVFormatContext *s) static int flac_write_packet(struct AVFormatContext *s, AVPacket *pkt) { avio_write(s->pb, pkt->data, pkt->size); - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } diff --git a/libavformat/flic.c b/libavformat/flic.c index 520ba6423e..d6aadb7730 100644 --- a/libavformat/flic.c +++ b/libavformat/flic.c @@ -239,7 +239,7 @@ static int flic_read_packet(AVFormatContext *s, } /* skip useless 10B sub-header (yes, it's not accounted for in the chunk header) */ - avio_seek(pb, 10, SEEK_CUR); + avio_skip(pb, 10); pkt->stream_index = flic->audio_stream_index; pkt->pos = avio_tell(pb); @@ -253,7 +253,7 @@ static int flic_read_packet(AVFormatContext *s, packet_read = 1; } else { /* not interested in this chunk */ - avio_seek(pb, size - 6, SEEK_CUR); + avio_skip(pb, size - 6); } } diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c index 7e02cdd3b4..d84051c7a8 100644 --- a/libavformat/flvdec.c +++ b/libavformat/flvdec.c @@ -113,7 +113,7 @@ static int flv_set_video_codec(AVFormatContext *s, AVStream *vstream, int flv_co static int amf_get_string(AVIOContext *ioc, char *buffer, int buffsize) { int length = avio_rb16(ioc); if(length >= buffsize) { - avio_seek(ioc, length, SEEK_CUR); + avio_skip(ioc, length); return -1; } @@ -149,7 +149,7 @@ static int amf_parse_object(AVFormatContext *s, AVStream *astream, AVStream *vst unsigned int keylen; while(avio_tell(ioc) < max_pos - 2 && (keylen = avio_rb16(ioc))) { - avio_seek(ioc, keylen, SEEK_CUR); //skip key string + avio_skip(ioc, keylen); //skip key string if(amf_parse_object(s, NULL, NULL, NULL, max_pos, depth + 1) < 0) return -1; //if we couldn't skip, bomb out. } @@ -162,7 +162,7 @@ static int amf_parse_object(AVFormatContext *s, AVStream *astream, AVStream *vst case AMF_DATA_TYPE_UNSUPPORTED: break; //these take up no additional space case AMF_DATA_TYPE_MIXEDARRAY: - avio_seek(ioc, 4, SEEK_CUR); //skip 32-bit max array index + avio_skip(ioc, 4); //skip 32-bit max array index while(avio_tell(ioc) < max_pos - 2 && amf_get_string(ioc, str_val, sizeof(str_val)) > 0) { //this is the only case in which we would want a nested parse to not skip over the object if(amf_parse_object(s, astream, vstream, str_val, max_pos, depth + 1) < 0) @@ -182,7 +182,7 @@ static int amf_parse_object(AVFormatContext *s, AVStream *astream, AVStream *vst } break; case AMF_DATA_TYPE_DATE: - avio_seek(ioc, 8 + 2, SEEK_CUR); //timestamp (double) and UTC offset (int16) + avio_skip(ioc, 8 + 2); //timestamp (double) and UTC offset (int16) break; default: //unsupported type, we couldn't skip return -1; @@ -254,7 +254,7 @@ static int flv_read_header(AVFormatContext *s, { int offset, flags; - avio_seek(s->pb, 4, SEEK_CUR); + avio_skip(s->pb, 4); flags = avio_r8(s->pb); /* old flvtool cleared this field */ /* FIXME: better fix needed */ @@ -278,7 +278,7 @@ static int flv_read_header(AVFormatContext *s, offset = avio_rb32(s->pb); avio_seek(s->pb, offset, SEEK_SET); - avio_seek(s->pb, 4, SEEK_CUR); + avio_skip(s->pb, 4); s->start_time = 0; @@ -304,7 +304,7 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt) int64_t dts, pts = AV_NOPTS_VALUE; AVStream *st = NULL; - for(;;avio_seek(s->pb, 4, SEEK_CUR)){ /* pkt size is repeated at end. skip it */ + for(;;avio_skip(s->pb, 4)){ /* pkt size is repeated at end. skip it */ pos = avio_tell(s->pb); type = avio_r8(s->pb); size = avio_rb24(s->pb); @@ -313,7 +313,7 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt) // av_log(s, AV_LOG_DEBUG, "type:%d, size:%d, dts:%d\n", type, size, dts); if (url_feof(s->pb)) return AVERROR_EOF; - avio_seek(s->pb, 3, SEEK_CUR); /* stream id, always 0 */ + avio_skip(s->pb, 3); /* stream id, always 0 */ flags = 0; if(size == 0) @@ -454,7 +454,7 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt) pkt->flags |= AV_PKT_FLAG_KEY; leave: - avio_seek(s->pb, 4, SEEK_CUR); + avio_skip(s->pb, 4); return ret; } diff --git a/libavformat/flvenc.c b/libavformat/flvenc.c index 68da7f6907..b1e048551f 100644 --- a/libavformat/flvenc.c +++ b/libavformat/flvenc.c @@ -291,7 +291,7 @@ static int flv_write_header(AVFormatContext *s) data_size= avio_tell(pb) - metadata_size_pos - 10; avio_seek(pb, metadata_size_pos, SEEK_SET); avio_wb24(pb, data_size); - avio_seek(pb, data_size + 10 - 3, SEEK_CUR); + avio_skip(pb, data_size + 10 - 3); avio_wb32(pb, data_size + 11); for (i = 0; i < s->nb_streams; i++) { @@ -318,7 +318,7 @@ static int flv_write_header(AVFormatContext *s) data_size = avio_tell(pb) - pos; avio_seek(pb, -data_size - 10, SEEK_CUR); avio_wb24(pb, data_size); - avio_seek(pb, data_size + 10 - 3, SEEK_CUR); + avio_skip(pb, data_size + 10 - 3); avio_wb32(pb, data_size + 11); // previous tag size } } @@ -430,7 +430,7 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) avio_wb32(pb,size+flags_size+11); // previous tag size flv->duration = FFMAX(flv->duration, pkt->pts + flv->delay + pkt->duration); - put_flush_packet(pb); + avio_flush(pb); av_free(data); diff --git a/libavformat/framecrcenc.c b/libavformat/framecrcenc.c index 26ede95495..dcdfac882a 100644 --- a/libavformat/framecrcenc.c +++ b/libavformat/framecrcenc.c @@ -29,7 +29,7 @@ static int framecrc_write_packet(struct AVFormatContext *s, AVPacket *pkt) snprintf(buf, sizeof(buf), "%d, %"PRId64", %d, 0x%08x\n", pkt->stream_index, pkt->dts, pkt->size, crc); avio_write(s->pb, buf, strlen(buf)); - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } diff --git a/libavformat/gif.c b/libavformat/gif.c index 17effaaa46..f5f8147e4f 100644 --- a/libavformat/gif.c +++ b/libavformat/gif.c @@ -287,7 +287,7 @@ static int gif_write_header(AVFormatContext *s) gif_image_write_header(pb, width, height, loop_count, NULL); - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } @@ -322,7 +322,7 @@ static int gif_write_video(AVFormatContext *s, gif_image_write_image(pb, 0, 0, enc->width, enc->height, buf, enc->width * 3, PIX_FMT_RGB24); - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } @@ -340,7 +340,7 @@ static int gif_write_trailer(AVFormatContext *s) AVIOContext *pb = s->pb; avio_w8(pb, 0x3b); - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } diff --git a/libavformat/gxf.c b/libavformat/gxf.c index dc0272d5c3..e278b9b846 100644 --- a/libavformat/gxf.c +++ b/libavformat/gxf.c @@ -174,7 +174,7 @@ static void gxf_material_tags(AVIOContext *pb, int *len, struct gxf_stream_info else if (tag == MAT_LAST_FIELD) si->last_field = value; } else - avio_seek(pb, tlen, SEEK_CUR); + avio_skip(pb, tlen); } } @@ -223,7 +223,7 @@ static void gxf_track_tags(AVIOContext *pb, int *len, struct gxf_stream_info *si else if (tag == TRACK_FPF && (value == 1 || value == 2)) si->fields_per_frame = value; } else - avio_seek(pb, tlen, SEEK_CUR); + avio_skip(pb, tlen); } } @@ -238,7 +238,7 @@ static void gxf_read_index(AVFormatContext *s, int pkt_len) { int i; pkt_len -= 8; if (s->flags & AVFMT_FLAG_IGNIDX) { - avio_seek(pb, pkt_len, SEEK_CUR); + avio_skip(pb, pkt_len); return; } if (map_cnt > 1000) { @@ -247,7 +247,7 @@ static void gxf_read_index(AVFormatContext *s, int pkt_len) { } if (pkt_len < 4 * map_cnt) { av_log(s, AV_LOG_ERROR, "invalid index length\n"); - avio_seek(pb, pkt_len, SEEK_CUR); + avio_skip(pb, pkt_len); return; } pkt_len -= 4 * map_cnt; @@ -255,7 +255,7 @@ static void gxf_read_index(AVFormatContext *s, int pkt_len) { for (i = 0; i < map_cnt; i++) av_add_index_entry(st, (uint64_t)avio_rl32(pb) * 1024, i * (uint64_t)fields_per_map + 1, 0, 0, 0); - avio_seek(pb, pkt_len, SEEK_CUR); + avio_skip(pb, pkt_len); } static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) { @@ -283,7 +283,7 @@ static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) { } map_len -= len; gxf_material_tags(pb, &len, &si); - avio_seek(pb, len, SEEK_CUR); + avio_skip(pb, len); map_len -= 2; len = avio_rb16(pb); // length of track description if (len > map_len) { @@ -301,7 +301,7 @@ static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) { track_len = avio_rb16(pb); len -= track_len; gxf_track_tags(pb, &track_len, &si); - avio_seek(pb, track_len, SEEK_CUR); + avio_skip(pb, track_len); if (!(track_type & 0x80)) { av_log(s, AV_LOG_ERROR, "invalid track type %x\n", track_type); continue; @@ -326,7 +326,7 @@ static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) { if (len < 0) av_log(s, AV_LOG_ERROR, "invalid track description length specified\n"); if (map_len) - avio_seek(pb, map_len, SEEK_CUR); + avio_skip(pb, map_len); if (!parse_packet_header(pb, &pkt_type, &len)) { av_log(s, AV_LOG_ERROR, "sync lost in header\n"); return -1; @@ -342,8 +342,8 @@ static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) { if (len >= 0x39) { AVRational fps; len -= 0x39; - avio_seek(pb, 5, SEEK_CUR); // preamble - avio_seek(pb, 0x30, SEEK_CUR); // payload description + avio_skip(pb, 5); // preamble + avio_skip(pb, 0x30); // payload description fps = fps_umf2avr(avio_rl32(pb)); if (!main_timebase.num || !main_timebase.den) { // this may not always be correct, but simply the best we can get @@ -354,7 +354,7 @@ static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) { av_log(s, AV_LOG_INFO, "UMF packet too short\n"); } else av_log(s, AV_LOG_INFO, "UMF packet missing\n"); - avio_seek(pb, len, SEEK_CUR); + avio_skip(pb, len); // set a fallback value, 60000/1001 is specified for audio-only files // so use that regardless of why we do not know the video frame rate. if (!main_timebase.num || !main_timebase.den) @@ -437,7 +437,7 @@ static int gxf_packet(AVFormatContext *s, AVPacket *pkt) { continue; } if (pkt_type != PKT_MEDIA) { - avio_seek(pb, pkt_len, SEEK_CUR); + avio_skip(pb, pkt_len); continue; } if (pkt_len < 16) { @@ -462,7 +462,7 @@ static int gxf_packet(AVFormatContext *s, AVPacket *pkt) { int last = field_info & 0xffff; // last is exclusive int bps = av_get_bits_per_sample(st->codec->codec_id)>>3; if (first <= last && last*bps <= pkt_len) { - avio_seek(pb, first*bps, SEEK_CUR); + avio_skip(pb, first*bps); skip = pkt_len - last*bps; pkt_len = (last-first)*bps; } else @@ -470,7 +470,7 @@ static int gxf_packet(AVFormatContext *s, AVPacket *pkt) { } ret = av_get_packet(pb, pkt, pkt_len); if (skip) - avio_seek(pb, skip, SEEK_CUR); + avio_skip(pb, skip); pkt->stream_index = stream_index; pkt->dts = field_nr; return ret; diff --git a/libavformat/gxfenc.c b/libavformat/gxfenc.c index 44b5020db0..e6c44d6fd9 100644 --- a/libavformat/gxfenc.c +++ b/libavformat/gxfenc.c @@ -753,7 +753,7 @@ static int gxf_write_header(AVFormatContext *s) gxf->packet_count = 3; - put_flush_packet(pb); + avio_flush(pb); return 0; } @@ -781,12 +781,12 @@ static int gxf_write_trailer(AVFormatContext *s) gxf_write_map_packet(s, 1); gxf_write_flt_packet(s); gxf_write_umf_packet(s); - put_flush_packet(pb); + avio_flush(pb); /* update duration in all map packets */ for (i = 1; i < gxf->map_offsets_nb; i++) { avio_seek(pb, gxf->map_offsets[i], SEEK_SET); gxf_write_map_packet(s, 1); - put_flush_packet(pb); + avio_flush(pb); } avio_seek(pb, end, SEEK_SET); @@ -895,7 +895,7 @@ static int gxf_write_packet(AVFormatContext *s, AVPacket *pkt) gxf->packet_count = 0; } - put_flush_packet(pb); + avio_flush(pb); return 0; } diff --git a/libavformat/id3v2.c b/libavformat/id3v2.c index 4c61131c78..027b8d717c 100644 --- a/libavformat/id3v2.c +++ b/libavformat/id3v2.c @@ -136,6 +136,52 @@ static void read_ttag(AVFormatContext *s, AVIOContext *pb, int taglen, const cha av_metadata_set2(&s->metadata, key, val, AV_METADATA_DONT_OVERWRITE); } +static int is_number(const char *str) +{ + while (*str >= '0' && *str <= '9') str++; + return !*str; +} + +static AVMetadataTag* get_date_tag(AVMetadata *m, const char *tag) +{ + AVMetadataTag *t; + if ((t = av_metadata_get(m, tag, NULL, AV_METADATA_MATCH_CASE)) && + strlen(t->value) == 4 && is_number(t->value)) + return t; + return NULL; +} + +static void merge_date(AVMetadata **m) +{ + AVMetadataTag *t; + char date[17] = {0}; // YYYY-MM-DD hh:mm + + if (!(t = get_date_tag(*m, "TYER")) && + !(t = get_date_tag(*m, "TYE"))) + return; + av_strlcpy(date, t->value, 5); + av_metadata_set2(m, "TYER", NULL, 0); + av_metadata_set2(m, "TYE", NULL, 0); + + if (!(t = get_date_tag(*m, "TDAT")) && + !(t = get_date_tag(*m, "TDA"))) + goto finish; + snprintf(date + 4, sizeof(date) - 4, "-%.2s-%.2s", t->value + 2, t->value); + av_metadata_set2(m, "TDAT", NULL, 0); + av_metadata_set2(m, "TDA", NULL, 0); + + if (!(t = get_date_tag(*m, "TIME")) && + !(t = get_date_tag(*m, "TIM"))) + goto finish; + snprintf(date + 10, sizeof(date) - 10, " %.2s:%.2s", t->value, t->value + 2); + av_metadata_set2(m, "TIME", NULL, 0); + av_metadata_set2(m, "TIM", NULL, 0); + +finish: + if (date[0]) + av_metadata_set2(m, "date", date, 0); +} + static void ff_id3v2_parse(AVFormatContext *s, int len, uint8_t version, uint8_t flags) { int isv34, unsync; @@ -172,7 +218,7 @@ static void ff_id3v2_parse(AVFormatContext *s, int len, uint8_t version, uint8_t unsync = flags & 0x80; if (isv34 && flags & 0x40) /* Extended header present, just skip over it */ - avio_seek(s->pb, get_size(s->pb, 4), SEEK_CUR); + avio_skip(s->pb, get_size(s->pb, 4)); while (len >= taghdrlen) { unsigned int tflags; @@ -208,7 +254,7 @@ static void ff_id3v2_parse(AVFormatContext *s, int len, uint8_t version, uint8_t if (tflags & (ID3v2_FLAG_ENCRYPTION | ID3v2_FLAG_COMPRESSION)) { av_log(s, AV_LOG_WARNING, "Skipping encrypted/compressed ID3v2 frame %s.\n", tag); - avio_seek(s->pb, tlen, SEEK_CUR); + avio_skip(s->pb, tlen); } else if (tag[0] == 'T') { if (unsync || tunsync) { int i, j; @@ -229,7 +275,7 @@ static void ff_id3v2_parse(AVFormatContext *s, int len, uint8_t version, uint8_t else if (!tag[0]) { if (tag[1]) av_log(s, AV_LOG_WARNING, "invalid frame id, assuming padding"); - avio_seek(s->pb, tlen, SEEK_CUR); + avio_skip(s->pb, tlen); break; } /* Skip to end of tag */ @@ -238,10 +284,10 @@ static void ff_id3v2_parse(AVFormatContext *s, int len, uint8_t version, uint8_t if (len > 0) { /* Skip padding */ - avio_seek(s->pb, len, SEEK_CUR); + avio_skip(s->pb, len); } if (version == 4 && flags & 0x10) /* Footer preset, always 10 bytes, skip over it */ - avio_seek(s->pb, 10, SEEK_CUR); + avio_skip(s->pb, 10); av_free(buffer); return; @@ -280,6 +326,7 @@ void ff_id3v2_read(AVFormatContext *s, const char *magic) ff_metadata_conv(&s->metadata, NULL, ff_id3v2_34_metadata_conv); ff_metadata_conv(&s->metadata, NULL, ff_id3v2_2_metadata_conv); ff_metadata_conv(&s->metadata, NULL, ff_id3v2_4_metadata_conv); + merge_date(&s->metadata); } const AVMetadataConv ff_id3v2_34_metadata_conv[] = { diff --git a/libavformat/idcin.c b/libavformat/idcin.c index 1aecf86669..fb07788655 100644 --- a/libavformat/idcin.c +++ b/libavformat/idcin.c @@ -257,7 +257,7 @@ static int idcin_read_packet(AVFormatContext *s, chunk_size = avio_rl32(pb); /* skip the number of decoded bytes (always equal to width * height) */ - avio_seek(pb, 4, SEEK_CUR); + avio_skip(pb, 4); chunk_size -= 4; ret= av_get_packet(pb, pkt, chunk_size); if (ret < 0) diff --git a/libavformat/idroqdec.c b/libavformat/idroqdec.c index 391db609b7..cbf3b3ed8d 100644 --- a/libavformat/idroqdec.c +++ b/libavformat/idroqdec.c @@ -136,14 +136,14 @@ static int roq_read_packet(AVFormatContext *s, break; } /* don't care about this chunk anymore */ - avio_seek(pb, RoQ_CHUNK_PREAMBLE_SIZE, SEEK_CUR); + avio_skip(pb, RoQ_CHUNK_PREAMBLE_SIZE); break; case RoQ_QUAD_CODEBOOK: /* packet needs to contain both this codebook and next VQ chunk */ codebook_offset = avio_tell(pb) - RoQ_CHUNK_PREAMBLE_SIZE; codebook_size = chunk_size; - avio_seek(pb, codebook_size, SEEK_CUR); + avio_skip(pb, codebook_size); if (avio_read(pb, preamble, RoQ_CHUNK_PREAMBLE_SIZE) != RoQ_CHUNK_PREAMBLE_SIZE) return AVERROR(EIO); diff --git a/libavformat/idroqenc.c b/libavformat/idroqenc.c index 9935b61e1b..3e8f179846 100644 --- a/libavformat/idroqenc.c +++ b/libavformat/idroqenc.c @@ -30,7 +30,7 @@ static int roq_write_header(struct AVFormatContext *s) }; avio_write(s->pb, header, 8); - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } diff --git a/libavformat/iff.c b/libavformat/iff.c index dd69ce8ca5..24942122ad 100644 --- a/libavformat/iff.c +++ b/libavformat/iff.c @@ -134,7 +134,7 @@ static int iff_read_header(AVFormatContext *s, return AVERROR(ENOMEM); st->codec->channels = 1; - avio_seek(pb, 8, SEEK_CUR); + avio_skip(pb, 8); // codec_tag used by ByteRun1 decoder to distinguish progressive (PBM) and interlaced (ILBM) content st->codec->codec_tag = avio_rl32(pb); @@ -152,10 +152,10 @@ static int iff_read_header(AVFormatContext *s, if (data_size < 14) return AVERROR_INVALIDDATA; - avio_seek(pb, 12, SEEK_CUR); + avio_skip(pb, 12); st->codec->sample_rate = avio_rb16(pb); if (data_size >= 16) { - avio_seek(pb, 1, SEEK_CUR); + avio_skip(pb, 1); compression = avio_r8(pb); } break; @@ -186,14 +186,14 @@ static int iff_read_header(AVFormatContext *s, return AVERROR_INVALIDDATA; st->codec->width = avio_rb16(pb); st->codec->height = avio_rb16(pb); - avio_seek(pb, 4, SEEK_CUR); // x, y offset + avio_skip(pb, 4); // x, y offset st->codec->bits_per_coded_sample = avio_r8(pb); if (data_size >= 11) { - avio_seek(pb, 1, SEEK_CUR); // masking + avio_skip(pb, 1); // masking compression = avio_r8(pb); } if (data_size >= 16) { - avio_seek(pb, 3, SEEK_CUR); // paddding, transparent + avio_skip(pb, 3); // paddding, transparent st->sample_aspect_ratio.num = avio_r8(pb); st->sample_aspect_ratio.den = avio_r8(pb); } @@ -223,7 +223,7 @@ static int iff_read_header(AVFormatContext *s, return res; } } - avio_seek(pb, data_size - (avio_tell(pb) - orig_pos) + (data_size & 1), SEEK_CUR); + avio_skip(pb, data_size - (avio_tell(pb) - orig_pos) + (data_size & 1)); } avio_seek(pb, iff->body_pos, SEEK_SET); diff --git a/libavformat/img2.c b/libavformat/img2.c index c909078ecf..f9c71b97f2 100644 --- a/libavformat/img2.c +++ b/libavformat/img2.c @@ -372,8 +372,8 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) avio_write(pb[0], pkt->data , ysize); avio_write(pb[1], pkt->data + ysize, (pkt->size - ysize)/2); avio_write(pb[2], pkt->data + ysize +(pkt->size - ysize)/2, (pkt->size - ysize)/2); - put_flush_packet(pb[1]); - put_flush_packet(pb[2]); + avio_flush(pb[1]); + avio_flush(pb[2]); avio_close(pb[1]); avio_close(pb[2]); }else{ @@ -402,7 +402,7 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt) } avio_write(pb[0], pkt->data, pkt->size); } - put_flush_packet(pb[0]); + avio_flush(pb[0]); if (!img->is_pipe) { avio_close(pb[0]); } diff --git a/libavformat/ingenientdec.c b/libavformat/ingenientdec.c index eb24da9cac..eb1e6f6521 100644 --- a/libavformat/ingenientdec.c +++ b/libavformat/ingenientdec.c @@ -35,11 +35,11 @@ static int ingenient_read_packet(AVFormatContext *s, AVPacket *pkt) w = avio_rl16(s->pb); h = avio_rl16(s->pb); - avio_seek(s->pb, 8, SEEK_CUR); // zero + size (padded?) - avio_seek(s->pb, 2, SEEK_CUR); + avio_skip(s->pb, 8); // zero + size (padded?) + avio_skip(s->pb, 2); unk1 = avio_rl16(s->pb); unk2 = avio_rl16(s->pb); - avio_seek(s->pb, 22, SEEK_CUR); // ASCII timestamp + avio_skip(s->pb, 22); // ASCII timestamp av_log(s, AV_LOG_DEBUG, "Ingenient packet: size=%d, width=%d, height=%d, unk1=%d unk2=%d\n", size, w, h, unk1, unk2); diff --git a/libavformat/internal.h b/libavformat/internal.h index 02a27e4724..d5bfc33187 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -239,4 +239,15 @@ AVChapter *ff_new_chapter(AVFormatContext *s, int id, AVRational time_base, */ void ff_reduce_index(AVFormatContext *s, int stream_index); +/* + * Convert a relative url into an absolute url, given a base url. + * + * @param buf the buffer where output absolute url is written + * @param size the size of buf + * @param base the base url, may be equal to buf. + * @param rel the new url, which is interpreted relative to base + */ +void ff_make_absolute_url(char *buf, int size, const char *base, + const char *rel); + #endif /* AVFORMAT_INTERNAL_H */ diff --git a/libavformat/ipmovie.c b/libavformat/ipmovie.c index b54df38b23..8ea59a3b08 100644 --- a/libavformat/ipmovie.c +++ b/libavformat/ipmovie.c @@ -299,12 +299,12 @@ static int process_ipmovie_chunk(IPMVEContext *s, AVIOContext *pb, case OPCODE_END_OF_STREAM: debug_ipmovie("end of stream\n"); - avio_seek(pb, opcode_size, SEEK_CUR); + avio_skip(pb, opcode_size); break; case OPCODE_END_OF_CHUNK: debug_ipmovie("end of chunk\n"); - avio_seek(pb, opcode_size, SEEK_CUR); + avio_skip(pb, opcode_size); break; case OPCODE_CREATE_TIMER: @@ -359,7 +359,7 @@ static int process_ipmovie_chunk(IPMVEContext *s, AVIOContext *pb, case OPCODE_START_STOP_AUDIO: debug_ipmovie("start/stop audio\n"); - avio_seek(pb, opcode_size, SEEK_CUR); + avio_skip(pb, opcode_size); break; case OPCODE_INIT_VIDEO_BUFFERS: @@ -393,12 +393,12 @@ static int process_ipmovie_chunk(IPMVEContext *s, AVIOContext *pb, case OPCODE_UNKNOWN_14: case OPCODE_UNKNOWN_15: debug_ipmovie("unknown (but documented) opcode %02X\n", opcode_type); - avio_seek(pb, opcode_size, SEEK_CUR); + avio_skip(pb, opcode_size); break; case OPCODE_SEND_BUFFER: debug_ipmovie("send buffer\n"); - avio_seek(pb, opcode_size, SEEK_CUR); + avio_skip(pb, opcode_size); break; case OPCODE_AUDIO_FRAME: @@ -407,22 +407,22 @@ static int process_ipmovie_chunk(IPMVEContext *s, AVIOContext *pb, /* log position and move on for now */ s->audio_chunk_offset = avio_tell(pb); s->audio_chunk_size = opcode_size; - avio_seek(pb, opcode_size, SEEK_CUR); + avio_skip(pb, opcode_size); break; case OPCODE_SILENCE_FRAME: debug_ipmovie("silence frame\n"); - avio_seek(pb, opcode_size, SEEK_CUR); + avio_skip(pb, opcode_size); break; case OPCODE_INIT_VIDEO_MODE: debug_ipmovie("initialize video mode\n"); - avio_seek(pb, opcode_size, SEEK_CUR); + avio_skip(pb, opcode_size); break; case OPCODE_CREATE_GRADIENT: debug_ipmovie("create gradient\n"); - avio_seek(pb, opcode_size, SEEK_CUR); + avio_skip(pb, opcode_size); break; case OPCODE_SET_PALETTE: @@ -464,7 +464,7 @@ static int process_ipmovie_chunk(IPMVEContext *s, AVIOContext *pb, case OPCODE_SET_PALETTE_COMPRESSED: debug_ipmovie("set palette compressed\n"); - avio_seek(pb, opcode_size, SEEK_CUR); + avio_skip(pb, opcode_size); break; case OPCODE_SET_DECODING_MAP: @@ -473,7 +473,7 @@ static int process_ipmovie_chunk(IPMVEContext *s, AVIOContext *pb, /* log position and move on for now */ s->decode_map_chunk_offset = avio_tell(pb); s->decode_map_chunk_size = opcode_size; - avio_seek(pb, opcode_size, SEEK_CUR); + avio_skip(pb, opcode_size); break; case OPCODE_VIDEO_DATA: @@ -482,7 +482,7 @@ static int process_ipmovie_chunk(IPMVEContext *s, AVIOContext *pb, /* log position and move on for now */ s->video_chunk_offset = avio_tell(pb); s->video_chunk_size = opcode_size; - avio_seek(pb, opcode_size, SEEK_CUR); + avio_skip(pb, opcode_size); break; default: diff --git a/libavformat/iv8.c b/libavformat/iv8.c index 4671a18eac..df5eb116c1 100644 --- a/libavformat/iv8.c +++ b/libavformat/iv8.c @@ -70,7 +70,7 @@ retry: return -1; if(type==258){ - avio_seek(s->pb, size, SEEK_CUR); + avio_skip(s->pb, size); goto retry; } diff --git a/libavformat/ivfenc.c b/libavformat/ivfenc.c index 3913988144..5fffaf7959 100644 --- a/libavformat/ivfenc.c +++ b/libavformat/ivfenc.c @@ -53,7 +53,7 @@ static int ivf_write_packet(AVFormatContext *s, AVPacket *pkt) avio_wl32(pb, pkt->size); avio_wl64(pb, pkt->pts); avio_write(pb, pkt->data, pkt->size); - put_flush_packet(pb); + avio_flush(pb); return 0; } diff --git a/libavformat/jvdec.c b/libavformat/jvdec.c index 9235e51a99..175cd9f33b 100644 --- a/libavformat/jvdec.c +++ b/libavformat/jvdec.c @@ -139,7 +139,7 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt) AVIOContext *pb = s->pb; AVStream *ast = s->streams[0]; - while (!url_feof(s->pb) && jv->pts < ast->nb_index_entries) { + while (!s->pb->eof_reached && jv->pts < ast->nb_index_entries) { const AVIndexEntry *e = ast->index_entries + jv->pts; const JVFrame *jvf = jv->frames + jv->pts; diff --git a/libavformat/libnut.c b/libavformat/libnut.c index 1c13e295f7..5e5831892a 100644 --- a/libavformat/libnut.c +++ b/libavformat/libnut.c @@ -48,7 +48,7 @@ static const AVCodecTag nut_tags[] = { static int av_write(void * h, size_t len, const uint8_t * buf) { AVIOContext * bc = h; avio_write(bc, buf, len); - //put_flush_packet(bc); + //avio_flush(bc); return len; } @@ -142,7 +142,7 @@ static int nut_write_trailer(AVFormatContext * avf) { int i; nut_muxer_uninit_reorder(priv->nut); - put_flush_packet(bc); + avio_flush(bc); for(i = 0; priv->s[i].type != -1; i++ ) av_freep(&priv->s[i].fourcc); av_freep(&priv->s); diff --git a/libavformat/lmlm4.c b/libavformat/lmlm4.c index 97ece0153c..d68e6608ea 100644 --- a/libavformat/lmlm4.c +++ b/libavformat/lmlm4.c @@ -100,7 +100,7 @@ static int lmlm4_read_packet(AVFormatContext *s, AVPacket *pkt) { if ((ret = av_get_packet(pb, pkt, frame_size)) <= 0) return AVERROR(EIO); - avio_seek(pb, padding, SEEK_CUR); + avio_skip(pb, padding); switch (frame_type) { case LMLM4_I_FRAME: diff --git a/libavformat/lxfdec.c b/libavformat/lxfdec.c index 4e98c895cf..20978c674e 100644 --- a/libavformat/lxfdec.c +++ b/libavformat/lxfdec.c @@ -137,8 +137,8 @@ static int get_packet_header(AVFormatContext *s, uint8_t *header, uint32_t *form case 0: //video //skip VBI data and metadata - avio_seek(pb, (int64_t)(uint32_t)AV_RL32(&header[44]) + - (int64_t)(uint32_t)AV_RL32(&header[52]), SEEK_CUR); + avio_skip(pb, (int64_t)(uint32_t)AV_RL32(&header[44]) + + (int64_t)(uint32_t)AV_RL32(&header[52])); break; case 1: //audio @@ -255,7 +255,7 @@ static int lxf_read_header(AVFormatContext *s, AVFormatParameters *ap) if (format == 1) { //skip extended field data - avio_seek(s->pb, (uint32_t)AV_RL32(&header[40]), SEEK_CUR); + avio_skip(s->pb, (uint32_t)AV_RL32(&header[40])); } return 0; diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index d0fe98df0c..d99b6ed487 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -832,7 +832,7 @@ static int ebml_parse_elem(MatroskaDemuxContext *matroska, return ebml_parse_nest(matroska, syntax->def.n, data); case EBML_PASS: return ebml_parse_id(matroska, syntax->def.n, id, data); case EBML_STOP: return 1; - default: return avio_seek(pb,length,SEEK_CUR)<0 ? AVERROR(EIO) : 0; + default: return avio_skip(pb,length)<0 ? AVERROR(EIO) : 0; } if (res == AVERROR_INVALIDDATA) av_log(matroska->ctx, AV_LOG_ERROR, "Invalid element\n"); @@ -1394,10 +1394,10 @@ static int matroska_read_header(AVFormatContext *s, AVFormatParameters *ap) int flavor; ffio_init_context(&b, track->codec_priv.data,track->codec_priv.size, 0, NULL, NULL, NULL, NULL); - avio_seek(&b, 22, SEEK_CUR); + avio_skip(&b, 22); flavor = avio_rb16(&b); track->audio.coded_framesize = avio_rb32(&b); - avio_seek(&b, 12, SEEK_CUR); + avio_skip(&b, 12); track->audio.sub_packet_h = avio_rb16(&b); track->audio.frame_size = avio_rb16(&b); track->audio.sub_packet_size = avio_rb16(&b); diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 4c4f00958e..0c6e51c978 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -873,7 +873,7 @@ static int mkv_write_header(AVFormatContext *s) mkv->cur_audio_pkt.size = 0; mkv->audio_buffer_size = 0; - put_flush_packet(pb); + avio_flush(pb); return 0; } @@ -1172,7 +1172,7 @@ static int mkv_write_trailer(AVFormatContext *s) end_ebml_master(pb, mkv->segment); av_free(mkv->tracks); av_destruct_packet(&mkv->cur_audio_pkt); - put_flush_packet(pb); + avio_flush(pb); return 0; } diff --git a/libavformat/md5enc.c b/libavformat/md5enc.c index 065f7e8dc9..10b3d59581 100644 --- a/libavformat/md5enc.c +++ b/libavformat/md5enc.c @@ -37,7 +37,7 @@ static void md5_finish(struct AVFormatContext *s, char *buf) buf[offset+1] = 0; avio_write(s->pb, buf, strlen(buf)); - put_flush_packet(s->pb); + avio_flush(s->pb); } #if CONFIG_MD5_MUXER diff --git a/libavformat/mm.c b/libavformat/mm.c index 699daac5e9..c6264f1cb7 100644 --- a/libavformat/mm.c +++ b/libavformat/mm.c @@ -102,7 +102,7 @@ static int read_header(AVFormatContext *s, avio_rl16(pb); /* ibm-pc video bios mode */ width = avio_rl16(pb); height = avio_rl16(pb); - avio_seek(pb, length - 10, SEEK_CUR); /* unknown data */ + avio_skip(pb, length - 10); /* unknown data */ /* video stream */ st = av_new_stream(s, 0); @@ -181,7 +181,7 @@ static int read_packet(AVFormatContext *s, default : av_log(s, AV_LOG_INFO, "unknown chunk type 0x%x\n", type); - avio_seek(pb, length, SEEK_CUR); + avio_skip(pb, length); } } diff --git a/libavformat/mmf.c b/libavformat/mmf.c index 0f5cee4f71..4605bf7fbd 100644 --- a/libavformat/mmf.c +++ b/libavformat/mmf.c @@ -102,7 +102,7 @@ static int mmf_write_header(AVFormatContext *s) av_set_pts_info(s->streams[0], 64, 1, s->streams[0]->codec->sample_rate); - put_flush_packet(pb); + avio_flush(pb); return 0; } @@ -160,7 +160,7 @@ static int mmf_write_trailer(AVFormatContext *s) avio_seek(pb, pos, SEEK_SET); - put_flush_packet(pb); + avio_flush(pb); } return 0; } @@ -195,7 +195,7 @@ static int mmf_read_header(AVFormatContext *s, file_size = avio_rb32(pb); /* Skip some unused chunks that may or may not be present */ - for(;; avio_seek(pb, size, SEEK_CUR)) { + for(;; avio_skip(pb, size)) { tag = avio_rl32(pb); size = avio_rb32(pb); if(tag == MKTAG('C','N','T','I')) continue; @@ -226,7 +226,7 @@ static int mmf_read_header(AVFormatContext *s, avio_r8(pb); /* time base g */ /* Skip some unused chunks that may or may not be present */ - for(;; avio_seek(pb, size, SEEK_CUR)) { + for(;; avio_skip(pb, size)) { tag = avio_rl32(pb); size = avio_rb32(pb); if(tag == MKTAG('A','t','s','q')) continue; diff --git a/libavformat/mov.c b/libavformat/mov.c index d3e95980a9..23ba1d47f0 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -296,7 +296,7 @@ static int mov_read_default(MOVContext *c, AVIOContext *pb, MOVAtom atom) parse = mov_read_udta_string; if (!parse) { /* skip leaf atoms data */ - avio_seek(pb, a.size, SEEK_CUR); + avio_skip(pb, a.size); } else { int64_t start_pos = avio_tell(pb); int64_t left; @@ -308,14 +308,14 @@ static int mov_read_default(MOVContext *c, AVIOContext *pb, MOVAtom atom) return 0; left = a.size - avio_tell(pb) + start_pos; if (left > 0) /* skip garbage at atom end */ - avio_seek(pb, left, SEEK_CUR); + avio_skip(pb, left); } total_size += a.size; } if (total_size < atom.size && atom.size < 0x7ffff) - avio_seek(pb, atom.size - total_size, SEEK_CUR); + avio_skip(pb, atom.size - total_size); return 0; } @@ -357,7 +357,7 @@ static int mov_read_dref(MOVContext *c, AVIOContext *pb, MOVAtom atom) uint16_t volume_len, len; int16_t type; - avio_seek(pb, 10, SEEK_CUR); + avio_skip(pb, 10); volume_len = avio_r8(pb); volume_len = FFMIN(volume_len, 27); @@ -365,7 +365,7 @@ static int mov_read_dref(MOVContext *c, AVIOContext *pb, MOVAtom atom) dref->volume[volume_len] = 0; av_log(c->fc, AV_LOG_DEBUG, "volume %s, len %d\n", dref->volume, volume_len); - avio_seek(pb, 12, SEEK_CUR); + avio_skip(pb, 12); len = avio_r8(pb); len = FFMIN(len, 63); @@ -373,7 +373,7 @@ static int mov_read_dref(MOVContext *c, AVIOContext *pb, MOVAtom atom) dref->filename[len] = 0; av_log(c->fc, AV_LOG_DEBUG, "filename %s, len %d\n", dref->filename, len); - avio_seek(pb, 16, SEEK_CUR); + avio_skip(pb, 16); /* read next level up_from_alias/down_to_target */ dref->nlvl_from = avio_rb16(pb); @@ -381,7 +381,7 @@ static int mov_read_dref(MOVContext *c, AVIOContext *pb, MOVAtom atom) av_log(c->fc, AV_LOG_DEBUG, "nlvl from %d, nlvl to %d\n", dref->nlvl_from, dref->nlvl_to); - avio_seek(pb, 16, SEEK_CUR); + avio_skip(pb, 16); for (type = 0; type != -1 && avio_tell(pb) < next; ) { type = avio_rb16(pb); @@ -416,7 +416,7 @@ static int mov_read_dref(MOVContext *c, AVIOContext *pb, MOVAtom atom) dref->dir[j] = '/'; av_log(c->fc, AV_LOG_DEBUG, "dir %s\n", dref->dir); } else - avio_seek(pb, len, SEEK_CUR); + avio_skip(pb, len); } } avio_seek(pb, next, SEEK_SET); @@ -663,9 +663,9 @@ static int mov_read_mvhd(MOVContext *c, AVIOContext *pb, MOVAtom atom) avio_rb16(pb); /* preferred volume */ - avio_seek(pb, 10, SEEK_CUR); /* reserved */ + avio_skip(pb, 10); /* reserved */ - avio_seek(pb, 36, SEEK_CUR); /* display matrix */ + avio_skip(pb, 36); /* display matrix */ avio_rb32(pb); /* preview time */ avio_rb32(pb); /* preview duration */ @@ -782,7 +782,7 @@ static int mov_read_wave(MOVContext *c, AVIOContext *pb, MOVAtom atom) if (mov_read_default(c, pb, atom) < 0) return -1; } else - avio_seek(pb, atom.size, SEEK_CUR); + avio_skip(pb, atom.size); return 0; } @@ -833,7 +833,7 @@ static int mov_read_strf(MOVContext *c, AVIOContext *pb, MOVAtom atom) if (!st->codec->extradata) return AVERROR(ENOMEM); st->codec->extradata_size = atom.size - 40; - avio_seek(pb, 40, SEEK_CUR); + avio_skip(pb, 40); avio_read(pb, st->codec->extradata, atom.size - 40); return 0; } @@ -945,7 +945,7 @@ int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries) * in the MOV demuxer, patch welcome. */ multiple_stsd: av_log(c->fc, AV_LOG_WARNING, "multiple fourcc not supported\n"); - avio_seek(pb, size - (avio_tell(pb) - start_pos), SEEK_CUR); + avio_skip(pb, size - (avio_tell(pb) - start_pos)); continue; } /* we cannot demux concatenated h264 streams because of different extradata */ @@ -1003,7 +1003,7 @@ int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries) len = 31; mov_read_mac_string(c, pb, len, st->codec->codec_name, 32); if (len < 31) - avio_seek(pb, 31 - len, SEEK_CUR); + avio_skip(pb, 31 - len); /* codec_tag YV12 triggers an UV swap in rawdec.c */ if (!memcmp(st->codec->codec_name, "Planar Y'CbCr 8-bit 4:2:0", 25)) st->codec->codec_tag=MKTAG('I', '4', '2', '0'); @@ -1174,7 +1174,7 @@ int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries) st->codec->height = sc->height; } else { /* other codec type, just skip (rtp, mp4s, tmcd ...) */ - avio_seek(pb, size - (avio_tell(pb) - start_pos), SEEK_CUR); + avio_skip(pb, size - (avio_tell(pb) - start_pos)); } /* this will read extra atoms at the end (wave, alac, damr, avcC, SMI ...) */ a.size = size - (avio_tell(pb) - start_pos); @@ -1182,7 +1182,7 @@ int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries) if (mov_read_default(c, pb, a) < 0) return -1; } else if (a.size > 0) - avio_seek(pb, a.size, SEEK_CUR); + avio_skip(pb, a.size); } if(st->codec->codec_type==AVMEDIA_TYPE_AUDIO && st->codec->sample_rate==0 && sc->time_scale>1) @@ -2078,13 +2078,13 @@ static int mov_read_wide(MOVContext *c, AVIOContext *pb, MOVAtom atom) if (atom.size < 8) return 0; /* continue */ if (avio_rb32(pb) != 0) { /* 0 sized mdat atom... use the 'wide' atom size */ - avio_seek(pb, atom.size - 4, SEEK_CUR); + avio_skip(pb, atom.size - 4); return 0; } atom.type = avio_rl32(pb); atom.size -= 8; if (atom.type != MKTAG('m','d','a','t')) { - avio_seek(pb, atom.size, SEEK_CUR); + avio_skip(pb, atom.size); return 0; } err = mov_read_mdat(c, pb, atom); diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 3742baf05e..cd93f45449 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -2043,7 +2043,7 @@ int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt) trk->sampleCount += samplesInChunk; mov->mdat_size += size; - put_flush_packet(pb); + avio_flush(pb); if (trk->hint_track >= 0 && trk->hint_track < mov->nb_streams) ff_mov_add_hinted_packet(s, pkt, trk->hint_track, trk->entry); @@ -2228,7 +2228,7 @@ static int mov_write_header(AVFormatContext *s) } } - put_flush_packet(pb); + avio_flush(pb); return 0; error: @@ -2272,7 +2272,7 @@ static int mov_write_trailer(AVFormatContext *s) } - put_flush_packet(pb); + avio_flush(pb); av_freep(&mov->tracks); diff --git a/libavformat/mp3dec.c b/libavformat/mp3dec.c index 98dde547c8..b7386fb78f 100644 --- a/libavformat/mp3dec.c +++ b/libavformat/mp3dec.c @@ -107,7 +107,7 @@ static int mp3_parse_vbr_tags(AVFormatContext *s, AVStream *st, int64_t base) /* Check tag version */ if(avio_rb16(s->pb) == 1) { /* skip delay and quality */ - avio_seek(s->pb, 4, SEEK_CUR); + avio_skip(s->pb, 4); frames = avio_rb32(s->pb); size = avio_rb32(s->pb); } diff --git a/libavformat/mp3enc.c b/libavformat/mp3enc.c index 27d25f5da9..88b1475313 100644 --- a/libavformat/mp3enc.c +++ b/libavformat/mp3enc.c @@ -23,6 +23,7 @@ #include "avformat.h" #include "id3v1.h" #include "id3v2.h" +#include "rawenc.h" #include "libavutil/intreadwrite.h" #include "libavutil/opt.h" @@ -125,14 +126,6 @@ static int id3v2_put_ttag(AVFormatContext *s, const char *str1, const char *str2 return len + ID3v2_HEADER_SIZE; } - -static int mp3_write_packet(struct AVFormatContext *s, AVPacket *pkt) -{ - avio_write(s->pb, pkt->data, pkt->size); - put_flush_packet(s->pb); - return 0; -} - static int mp3_write_trailer(struct AVFormatContext *s) { uint8_t buf[ID3v1_TAG_SIZE]; @@ -140,7 +133,7 @@ static int mp3_write_trailer(struct AVFormatContext *s) /* write the id3v1 tag */ if (id3v1_create_tag(s, buf) > 0) { avio_write(s->pb, buf, ID3v1_TAG_SIZE); - put_flush_packet(s->pb); + avio_flush(s->pb); } return 0; } @@ -155,7 +148,7 @@ AVOutputFormat ff_mp2_muxer = { CODEC_ID_MP2, CODEC_ID_NONE, NULL, - mp3_write_packet, + ff_raw_write_packet, mp3_write_trailer, }; #endif @@ -254,7 +247,7 @@ AVOutputFormat ff_mp3_muxer = { CODEC_ID_MP3, CODEC_ID_NONE, mp3_write_header, - mp3_write_packet, + ff_raw_write_packet, mp3_write_trailer, AVFMT_NOTIMESTAMPS, .priv_class = &mp3_muxer_class, diff --git a/libavformat/mpc8.c b/libavformat/mpc8.c index b55bf49650..b18726c6db 100644 --- a/libavformat/mpc8.c +++ b/libavformat/mpc8.c @@ -22,6 +22,7 @@ #include "libavcodec/get_bits.h" #include "libavcodec/unary.h" #include "avformat.h" +#include "avio_internal.h" /// Two-byte MPC tag #define MKMPCTAG(a, b) (a | (b << 8)) @@ -122,7 +123,7 @@ static void mpc8_get_chunk_header(AVIOContext *pb, int *tag, int64_t *size) int64_t pos; pos = avio_tell(pb); *tag = avio_rl16(pb); - *size = ff_get_v(pb); + *size = ffio_read_varlen(pb); *size -= avio_tell(pb) - pos; } @@ -177,12 +178,12 @@ static void mpc8_handle_chunk(AVFormatContext *s, int tag, int64_t chunk_pos, in switch(tag){ case TAG_SEEKTBLOFF: pos = avio_tell(pb) + size; - off = ff_get_v(pb); + off = ffio_read_varlen(pb); mpc8_parse_seektable(s, chunk_pos + off); avio_seek(pb, pos, SEEK_SET); break; default: - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); } } @@ -212,14 +213,14 @@ static int mpc8_read_header(AVFormatContext *s, AVFormatParameters *ap) return -1; } pos = avio_tell(pb); - avio_seek(pb, 4, SEEK_CUR); //CRC + avio_skip(pb, 4); //CRC c->ver = avio_r8(pb); if(c->ver != 8){ av_log(s, AV_LOG_ERROR, "Unknown stream version %d\n", c->ver); return -1; } - c->samples = ff_get_v(pb); - ff_get_v(pb); //silence samples at the beginning + c->samples = ffio_read_varlen(pb); + ffio_read_varlen(pb); //silence samples at the beginning st = av_new_stream(s, 0); if (!st) diff --git a/libavformat/mpeg.c b/libavformat/mpeg.c index 740dbc94c0..3903949d5d 100644 --- a/libavformat/mpeg.c +++ b/libavformat/mpeg.c @@ -212,7 +212,7 @@ static long mpegps_psm_parse(MpegDemuxContext *m, AVIOContext *pb) ps_info_length = avio_rb16(pb); /* skip program_stream_info */ - avio_seek(pb, ps_info_length, SEEK_CUR); + avio_skip(pb, ps_info_length); es_map_length = avio_rb16(pb); /* at least one es available? */ @@ -223,7 +223,7 @@ static long mpegps_psm_parse(MpegDemuxContext *m, AVIOContext *pb) /* remember mapping from stream id to stream type */ m->psm_es_type[es_id] = type; /* skip program_stream_info */ - avio_seek(pb, es_info_length, SEEK_CUR); + avio_skip(pb, es_info_length); es_map_length -= 4 + es_info_length; } avio_rb32(pb); /* crc32 */ @@ -264,7 +264,7 @@ static int mpegps_read_pes_header(AVFormatContext *s, if (startcode == SYSTEM_HEADER_START_CODE) goto redo; if (startcode == PADDING_STREAM) { - avio_seek(s->pb, avio_rb16(s->pb), SEEK_CUR); + avio_skip(s->pb, avio_rb16(s->pb)); goto redo; } if (startcode == PRIVATE_STREAM_2) { @@ -281,7 +281,7 @@ static int mpegps_read_pes_header(AVFormatContext *s, } m->sofdec -= !m->sofdec; } - avio_seek(s->pb, len, SEEK_CUR); + avio_skip(s->pb, len); goto redo; } if (startcode == PROGRAM_STREAM_MAP) { @@ -359,7 +359,7 @@ static int mpegps_read_pes_header(AVFormatContext *s, av_log(s, AV_LOG_WARNING, "pes_ext %X is invalid\n", pes_ext); pes_ext=skip=0; } - avio_seek(s->pb, skip, SEEK_CUR); + avio_skip(s->pb, skip); header_len -= skip; if (pes_ext & 0x01) { /* PES extension 2 */ @@ -375,7 +375,7 @@ static int mpegps_read_pes_header(AVFormatContext *s, } if(header_len < 0) goto error_redo; - avio_seek(s->pb, header_len, SEEK_CUR); + avio_skip(s->pb, header_len); } else if( c!= 0xf ) goto redo; @@ -433,7 +433,7 @@ static int mpegps_read_packet(AVFormatContext *s, if(startcode == 0x1bd) { dvdaudio_substream_type = avio_r8(s->pb); - avio_seek(s->pb, 3, SEEK_CUR); + avio_skip(s->pb, 3); len -= 4; } @@ -525,7 +525,7 @@ static int mpegps_read_packet(AVFormatContext *s, } else { skip: /* skip packet */ - avio_seek(s->pb, len, SEEK_CUR); + avio_skip(s->pb, len); goto redo; } /* no stream found: add a new stream */ @@ -602,7 +602,7 @@ static int64_t mpegps_read_dts(AVFormatContext *s, int stream_index, dts != AV_NOPTS_VALUE) { break; } - avio_seek(s->pb, len, SEEK_CUR); + avio_skip(s->pb, len); } #ifdef DEBUG_SEEK printf("pos=0x%"PRIx64" dts=0x%"PRIx64" %0.3f\n", pos, dts, dts / 90000.0); diff --git a/libavformat/mpegenc.c b/libavformat/mpegenc.c index 8c5c644f42..0c86df1eea 100644 --- a/libavformat/mpegenc.c +++ b/libavformat/mpegenc.c @@ -936,7 +936,7 @@ static int flush_packet(AVFormatContext *ctx, int stream_index, for(i=0;i<zero_trail_bytes;i++) avio_w8(ctx->pb, 0x00); - put_flush_packet(ctx->pb); + avio_flush(ctx->pb); s->packet_number++; @@ -965,7 +965,7 @@ static void put_vcd_padding_sector(AVFormatContext *ctx) s->vcd_padding_bytes_written += s->packet_size; - put_flush_packet(ctx->pb); + avio_flush(ctx->pb); /* increasing the packet number is correct. The SCR of the following packs is calculated from the packet_number and it has to include the padding @@ -1221,7 +1221,7 @@ static int mpeg_mux_end(AVFormatContext *ctx) it as it is usually not needed by decoders and because it complicates MPEG stream concatenation. */ //avio_wb32(ctx->pb, ISO_11172_END_CODE); - //put_flush_packet(ctx->pb); + //avio_flush(ctx->pb); for(i=0;i<ctx->nb_streams;i++) { stream = ctx->streams[i]->priv_data; diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index 2fed3cb34a..af0cadbb5a 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -1362,7 +1362,7 @@ static int read_packet(AVFormatContext *s, uint8_t *buf, int raw_packet_size) } else { skip = raw_packet_size - TS_PACKET_SIZE; if (skip > 0) - avio_seek(pb, skip, SEEK_CUR); + avio_skip(pb, skip); break; } } diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index 11a840f8e4..3461a33a6a 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -579,7 +579,7 @@ static int mpegts_write_header(AVFormatContext *s) service->pcr_packet_period, ts->sdt_packet_period, ts->pat_packet_period); - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; @@ -865,7 +865,7 @@ static void mpegts_write_pes(AVFormatContext *s, AVStream *st, payload_size -= len; avio_write(s->pb, buf, TS_PACKET_SIZE); } - put_flush_packet(s->pb); + avio_flush(s->pb); } static int mpegts_write_packet(AVFormatContext *s, AVPacket *pkt) @@ -988,7 +988,7 @@ static int mpegts_write_end(AVFormatContext *s) } av_freep(&ts_st->adts); } - put_flush_packet(s->pb); + avio_flush(s->pb); for(i = 0; i < ts->nb_services; i++) { service = ts->services[i]; diff --git a/libavformat/mpjpeg.c b/libavformat/mpjpeg.c index e98fb363e7..e6f6bcc5f6 100644 --- a/libavformat/mpjpeg.c +++ b/libavformat/mpjpeg.c @@ -30,7 +30,7 @@ static int mpjpeg_write_header(AVFormatContext *s) snprintf(buf1, sizeof(buf1), "--%s\n", BOUNDARY_TAG); avio_write(s->pb, buf1, strlen(buf1)); - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } @@ -44,7 +44,7 @@ static int mpjpeg_write_packet(AVFormatContext *s, AVPacket *pkt) snprintf(buf1, sizeof(buf1), "\n--%s\n", BOUNDARY_TAG); avio_write(s->pb, buf1, strlen(buf1)); - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } diff --git a/libavformat/msnwc_tcp.c b/libavformat/msnwc_tcp.c index c00ca43227..252ce34f6b 100644 --- a/libavformat/msnwc_tcp.c +++ b/libavformat/msnwc_tcp.c @@ -104,19 +104,19 @@ static int msnwc_tcp_read_packet(AVFormatContext *ctx, AVPacket *pkt) uint16_t keyframe; uint32_t size, timestamp; - avio_seek(pb, 1, SEEK_CUR); /* one byte has been read ahead */ - avio_seek(pb, 2, SEEK_CUR); - avio_seek(pb, 2, SEEK_CUR); + avio_skip(pb, 1); /* one byte has been read ahead */ + avio_skip(pb, 2); + avio_skip(pb, 2); keyframe = avio_rl16(pb); size = avio_rl32(pb); - avio_seek(pb, 4, SEEK_CUR); - avio_seek(pb, 4, SEEK_CUR); + avio_skip(pb, 4); + avio_skip(pb, 4); timestamp = avio_rl32(pb); if(!size || av_get_packet(pb, pkt, size) != size) return -1; - avio_seek(pb, 1, SEEK_CUR); /* Read ahead one byte of struct size like read_header */ + avio_skip(pb, 1); /* Read ahead one byte of struct size like read_header */ pkt->pts = timestamp; pkt->dts = timestamp; diff --git a/libavformat/mtv.c b/libavformat/mtv.c index 462ae202fc..76e0862cf4 100644 --- a/libavformat/mtv.c +++ b/libavformat/mtv.c @@ -83,10 +83,10 @@ static int mtv_read_header(AVFormatContext *s, AVFormatParameters *ap) AVStream *st; unsigned int audio_subsegments; - avio_seek(pb, 3, SEEK_CUR); + avio_skip(pb, 3); mtv->file_size = avio_rl32(pb); mtv->segments = avio_rl32(pb); - avio_seek(pb, 32, SEEK_CUR); + avio_skip(pb, 32); mtv->audio_identifier = avio_rl24(pb); mtv->audio_br = avio_rl16(pb); mtv->img_colorfmt = avio_rl24(pb); @@ -105,7 +105,7 @@ static int mtv_read_header(AVFormatContext *s, AVFormatParameters *ap) mtv->img_height=mtv->img_segment_size / (mtv->img_bpp>>3) / mtv->img_width; - avio_seek(pb, 4, SEEK_CUR); + avio_skip(pb, 4); audio_subsegments = avio_rl16(pb); mtv->full_segment_size = audio_subsegments * (MTV_AUDIO_PADDING_SIZE + MTV_ASUBCHUNK_DATA_SIZE) + @@ -164,7 +164,7 @@ static int mtv_read_packet(AVFormatContext *s, AVPacket *pkt) if((avio_tell(pb) - s->data_offset + mtv->img_segment_size) % mtv->full_segment_size) { - avio_seek(pb, MTV_AUDIO_PADDING_SIZE, SEEK_CUR); + avio_skip(pb, MTV_AUDIO_PADDING_SIZE); ret = av_get_packet(pb, pkt, MTV_ASUBCHUNK_DATA_SIZE); if(ret < 0) diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index 19a632b01a..6b44b8f3e3 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -262,7 +262,7 @@ static int mxf_decrypt_triplet(AVFormatContext *s, AVPacket *pkt, KLVPacket *klv av_aes_init(mxf->aesc, s->key, 128, 1); } // crypto context - avio_seek(pb, klv_decode_ber_length(pb), SEEK_CUR); + avio_skip(pb, klv_decode_ber_length(pb)); // plaintext offset klv_decode_ber_length(pb); plaintext_size = avio_rb64(pb); @@ -297,7 +297,7 @@ static int mxf_decrypt_triplet(AVFormatContext *s, AVPacket *pkt, KLVPacket *klv &pkt->data[plaintext_size], size >> 4, ivec, 1); pkt->size = orig_size; pkt->stream_index = index; - avio_seek(pb, end - avio_tell(pb), SEEK_CUR); + avio_skip(pb, end - avio_tell(pb)); return 0; } @@ -339,7 +339,7 @@ static int mxf_read_packet(AVFormatContext *s, AVPacket *pkt) return 0; } else skip: - avio_seek(s->pb, klv.length, SEEK_CUR); + avio_skip(s->pb, klv.length); } return AVERROR_EOF; } @@ -397,7 +397,7 @@ static int mxf_read_content_storage(void *arg, AVIOContext *pb, int tag, int siz mxf->packages_refs = av_malloc(mxf->packages_count * sizeof(UID)); if (!mxf->packages_refs) return -1; - avio_seek(pb, 4, SEEK_CUR); /* useless size of objects, always 16 according to specs */ + avio_skip(pb, 4); /* useless size of objects, always 16 according to specs */ avio_read(pb, (uint8_t *)mxf->packages_refs, mxf->packages_count * sizeof(UID)); break; } @@ -416,7 +416,7 @@ static int mxf_read_source_clip(void *arg, AVIOContext *pb, int tag, int size, U break; case 0x1101: /* UMID, only get last 16 bytes */ - avio_seek(pb, 16, SEEK_CUR); + avio_skip(pb, 16); avio_read(pb, source_clip->source_package_uid, 16); break; case 0x1102: @@ -437,7 +437,7 @@ static int mxf_read_material_package(void *arg, AVIOContext *pb, int tag, int si package->tracks_refs = av_malloc(package->tracks_count * sizeof(UID)); if (!package->tracks_refs) return -1; - avio_seek(pb, 4, SEEK_CUR); /* useless size of objects, always 16 according to specs */ + avio_skip(pb, 4); /* useless size of objects, always 16 according to specs */ avio_read(pb, (uint8_t *)package->tracks_refs, package->tracks_count * sizeof(UID)); break; } @@ -482,7 +482,7 @@ static int mxf_read_sequence(void *arg, AVIOContext *pb, int tag, int size, UID sequence->structural_components_refs = av_malloc(sequence->structural_components_count * sizeof(UID)); if (!sequence->structural_components_refs) return -1; - avio_seek(pb, 4, SEEK_CUR); /* useless size of objects, always 16 according to specs */ + avio_skip(pb, 4); /* useless size of objects, always 16 according to specs */ avio_read(pb, (uint8_t *)sequence->structural_components_refs, sequence->structural_components_count * sizeof(UID)); break; } @@ -500,12 +500,12 @@ static int mxf_read_source_package(void *arg, AVIOContext *pb, int tag, int size package->tracks_refs = av_malloc(package->tracks_count * sizeof(UID)); if (!package->tracks_refs) return -1; - avio_seek(pb, 4, SEEK_CUR); /* useless size of objects, always 16 according to specs */ + avio_skip(pb, 4); /* useless size of objects, always 16 according to specs */ avio_read(pb, (uint8_t *)package->tracks_refs, package->tracks_count * sizeof(UID)); break; case 0x4401: /* UMID, only get last 16 bytes */ - avio_seek(pb, 16, SEEK_CUR); + avio_skip(pb, 16); avio_read(pb, package->package_uid, 16); break; case 0x4701: @@ -558,7 +558,7 @@ static int mxf_read_generic_descriptor(void *arg, AVIOContext *pb, int tag, int descriptor->sub_descriptors_refs = av_malloc(descriptor->sub_descriptors_count * sizeof(UID)); if (!descriptor->sub_descriptors_refs) return -1; - avio_seek(pb, 4, SEEK_CUR); /* useless size of objects, always 16 according to specs */ + avio_skip(pb, 4); /* useless size of objects, always 16 according to specs */ avio_read(pb, (uint8_t *)descriptor->sub_descriptors_refs, descriptor->sub_descriptors_count * sizeof(UID)); break; case 0x3004: @@ -943,7 +943,7 @@ static int mxf_read_header(AVFormatContext *s, AVFormatParameters *ap) } } if (!metadata->read) - avio_seek(s->pb, klv.length, SEEK_CUR); + avio_skip(s->pb, klv.length); } return mxf_parse_structural_metadata(mxf); } diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c index 8e1cfc7b0d..8cf5d93257 100644 --- a/libavformat/mxfenc.c +++ b/libavformat/mxfenc.c @@ -1272,7 +1272,7 @@ static void mxf_write_partition(AVFormatContext *s, int bodysid, avio_seek(pb, pos, SEEK_SET); } - put_flush_packet(pb); + avio_flush(pb); } static const UID mxf_mpeg2_codec_uls[] = { @@ -1731,7 +1731,7 @@ static int mxf_write_packet(AVFormatContext *s, AVPacket *pkt) mxf->body_offset += 16+4+pkt->size + klv_fill_size(16+4+pkt->size); } - put_flush_packet(pb); + avio_flush(pb); return 0; } @@ -1795,7 +1795,7 @@ static int mxf_write_footer(AVFormatContext *s) } } - put_flush_packet(pb); + avio_flush(pb); ff_audio_interleave_close(s); diff --git a/libavformat/ncdec.c b/libavformat/ncdec.c index 79a4dbafab..c95b4bde9d 100644 --- a/libavformat/ncdec.c +++ b/libavformat/ncdec.c @@ -73,7 +73,7 @@ static int nc_read_packet(AVFormatContext *s, AVPacket *pkt) avio_r8(s->pb); size = avio_rl16(s->pb); - avio_seek(s->pb, 9, SEEK_CUR); + avio_skip(s->pb, 9); if (size == 0) { av_log(s, AV_LOG_DEBUG, "Next packet size is zero\n"); diff --git a/libavformat/nsvdec.c b/libavformat/nsvdec.c index 3bfebb263c..4b294d3591 100644 --- a/libavformat/nsvdec.c +++ b/libavformat/nsvdec.c @@ -584,7 +584,7 @@ null_chunk_retry: ((auxtag >> 16) & 0x0ff), ((auxtag >> 24) & 0x0ff), auxsize); - avio_seek(pb, auxsize, SEEK_CUR); + avio_skip(pb, auxsize); vsize -= auxsize + sizeof(uint16_t) + sizeof(uint32_t); /* that's becoming braindead */ } diff --git a/libavformat/nut.h b/libavformat/nut.h index 7013fb126a..033bc0898e 100644 --- a/libavformat/nut.h +++ b/libavformat/nut.h @@ -82,6 +82,10 @@ typedef struct { } StreamContext; typedef struct { + AVRational *time_base; +} ChapterContext; + +typedef struct { AVFormatContext *avf; // int written_packet_size; // int64_t packet_start; @@ -90,6 +94,7 @@ typedef struct { const uint8_t *header[128]; uint64_t next_startcode; ///< stores the next startcode if it has already been parsed but the stream is not seekable StreamContext *stream; + ChapterContext *chapter; unsigned int max_distance; unsigned int time_base_count; int64_t last_syncpoint_pos; diff --git a/libavformat/nutdec.c b/libavformat/nutdec.c index 107ff6815f..b957644f12 100644 --- a/libavformat/nutdec.c +++ b/libavformat/nutdec.c @@ -24,6 +24,7 @@ #include "libavutil/avstring.h" #include "libavutil/bswap.h" #include "libavutil/tree.h" +#include "avio_internal.h" #include "nut.h" #undef NDEBUG @@ -36,7 +37,7 @@ #endif static int get_str(AVIOContext *bc, char *string, unsigned int maxlen){ - unsigned int len= ff_get_v(bc); + unsigned int len= ffio_read_varlen(bc); if(len && maxlen) avio_read(bc, string, FFMIN(len, maxlen)); @@ -55,14 +56,14 @@ static int get_str(AVIOContext *bc, char *string, unsigned int maxlen){ } static int64_t get_s(AVIOContext *bc){ - int64_t v = ff_get_v(bc) + 1; + int64_t v = ffio_read_varlen(bc) + 1; if (v&1) return -(v>>1); else return (v>>1); } static uint64_t get_fourcc(AVIOContext *bc){ - unsigned int len= ff_get_v(bc); + unsigned int len= ffio_read_varlen(bc); if (len==2) return avio_rl16(bc); else if(len==4) return avio_rl32(bc); @@ -71,7 +72,7 @@ static uint64_t get_fourcc(AVIOContext *bc){ #ifdef TRACE static inline uint64_t get_v_trace(AVIOContext *bc, char *file, char *func, int line){ - uint64_t v= ff_get_v(bc); + uint64_t v= ffio_read_varlen(bc); av_log(NULL, AV_LOG_DEBUG, "get_v %5"PRId64" / %"PRIX64" in %s %s:%d\n", v, v, file, func, line); return v; @@ -90,7 +91,7 @@ static inline uint64_t get_vb_trace(AVIOContext *bc, char *file, char *func, int av_log(NULL, AV_LOG_DEBUG, "get_vb %5"PRId64" / %"PRIX64" in %s %s:%d\n", v, v, file, func, line); return v; } -#define ff_get_v(bc) get_v_trace(bc, __FILE__, __PRETTY_FUNCTION__, __LINE__) +#define ffio_read_varlen(bc) get_v_trace(bc, __FILE__, __PRETTY_FUNCTION__, __LINE__) #define get_s(bc) get_s_trace(bc, __FILE__, __PRETTY_FUNCTION__, __LINE__) #define get_vb(bc) get_vb_trace(bc, __FILE__, __PRETTY_FUNCTION__, __LINE__) #endif @@ -104,7 +105,7 @@ static int get_packetheader(NUTContext *nut, AVIOContext *bc, int calculate_chec startcode= ff_crc04C11DB7_update(0, (uint8_t*)&startcode, 8); init_checksum(bc, ff_crc04C11DB7_update, startcode); - size= ff_get_v(bc); + size= ffio_read_varlen(bc); if(size > 4096) avio_rb32(bc); if(get_checksum(bc) && size > 4096) @@ -168,7 +169,7 @@ static int nut_probe(AVProbeData *p){ } #define GET_V(dst, check) \ - tmp= ff_get_v(bc);\ + tmp= ffio_read_varlen(bc);\ if(!(check)){\ av_log(s, AV_LOG_ERROR, "Error " #dst " is (%"PRId64")\n", tmp);\ return -1;\ @@ -201,7 +202,7 @@ static int decode_main_header(NUTContext *nut){ GET_V(tmp , tmp >=2 && tmp <= 3) GET_V(stream_count , tmp > 0 && tmp <= NUT_MAX_STREAMS) - nut->max_distance = ff_get_v(bc); + nut->max_distance = ffio_read_varlen(bc); if(nut->max_distance > 65536){ av_log(s, AV_LOG_DEBUG, "max_distance %d\n", nut->max_distance); nut->max_distance= 65536; @@ -224,22 +225,22 @@ static int decode_main_header(NUTContext *nut){ tmp_match= 1-(1LL<<62); tmp_head_idx= 0; for(i=0; i<256;){ - int tmp_flags = ff_get_v(bc); - int tmp_fields= ff_get_v(bc); + int tmp_flags = ffio_read_varlen(bc); + int tmp_fields= ffio_read_varlen(bc); if(tmp_fields>0) tmp_pts = get_s(bc); - if(tmp_fields>1) tmp_mul = ff_get_v(bc); - if(tmp_fields>2) tmp_stream= ff_get_v(bc); - if(tmp_fields>3) tmp_size = ff_get_v(bc); + if(tmp_fields>1) tmp_mul = ffio_read_varlen(bc); + if(tmp_fields>2) tmp_stream= ffio_read_varlen(bc); + if(tmp_fields>3) tmp_size = ffio_read_varlen(bc); else tmp_size = 0; - if(tmp_fields>4) tmp_res = ff_get_v(bc); + if(tmp_fields>4) tmp_res = ffio_read_varlen(bc); else tmp_res = 0; - if(tmp_fields>5) count = ff_get_v(bc); + if(tmp_fields>5) count = ffio_read_varlen(bc); else count = tmp_mul - tmp_size; if(tmp_fields>6) tmp_match = get_s(bc); - if(tmp_fields>7) tmp_head_idx= ff_get_v(bc); + if(tmp_fields>7) tmp_head_idx= ffio_read_varlen(bc); while(tmp_fields-- > 8) - ff_get_v(bc); + ffio_read_varlen(bc); if(count == 0 || i+count > 256){ av_log(s, AV_LOG_ERROR, "illegal count %d at %d\n", count, i); @@ -315,7 +316,7 @@ static int decode_stream_header(NUTContext *nut){ if (!st) return AVERROR(ENOMEM); - class = ff_get_v(bc); + class = ffio_read_varlen(bc); tmp = get_fourcc(bc); st->codec->codec_tag= tmp; switch(class) @@ -347,10 +348,10 @@ static int decode_stream_header(NUTContext *nut){ GET_V(stc->time_base_id , tmp < nut->time_base_count); GET_V(stc->msb_pts_shift , tmp < 16); - stc->max_pts_distance= ff_get_v(bc); + stc->max_pts_distance= ffio_read_varlen(bc); GET_V(stc->decode_delay , tmp < 1000); //sanity limit, raise this if Moore's law is true st->codec->has_b_frames= stc->decode_delay; - ff_get_v(bc); //stream flags + ffio_read_varlen(bc); //stream flags GET_V(st->codec->extradata_size, tmp < (1<<30)); if(st->codec->extradata_size){ @@ -361,16 +362,16 @@ static int decode_stream_header(NUTContext *nut){ if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO){ GET_V(st->codec->width , tmp > 0) GET_V(st->codec->height, tmp > 0) - st->sample_aspect_ratio.num= ff_get_v(bc); - st->sample_aspect_ratio.den= ff_get_v(bc); + st->sample_aspect_ratio.num= ffio_read_varlen(bc); + st->sample_aspect_ratio.den= ffio_read_varlen(bc); if((!st->sample_aspect_ratio.num) != (!st->sample_aspect_ratio.den)){ av_log(s, AV_LOG_ERROR, "invalid aspect ratio %d/%d\n", st->sample_aspect_ratio.num, st->sample_aspect_ratio.den); return -1; } - ff_get_v(bc); /* csp type */ + ffio_read_varlen(bc); /* csp type */ }else if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO){ GET_V(st->codec->sample_rate , tmp > 0) - ff_get_v(bc); // samplerate_den + ffio_read_varlen(bc); // samplerate_den GET_V(st->codec->channels, tmp > 0) } if(skip_reserved(bc, end) || get_checksum(bc)){ @@ -413,9 +414,9 @@ static int decode_info_header(NUTContext *nut){ GET_V(stream_id_plus1, tmp <= s->nb_streams) chapter_id = get_s(bc); - chapter_start= ff_get_v(bc); - chapter_len = ff_get_v(bc); - count = ff_get_v(bc); + chapter_start= ffio_read_varlen(bc); + chapter_len = ffio_read_varlen(bc); + count = ffio_read_varlen(bc); if(chapter_id && !stream_id_plus1){ int64_t start= chapter_start / nut->time_base_count; @@ -444,7 +445,7 @@ static int decode_info_header(NUTContext *nut){ value= get_s(bc); }else if(value == -4){ type= "t"; - value= ff_get_v(bc); + value= ffio_read_varlen(bc); }else if(value < -4){ type= "r"; get_s(bc); @@ -485,8 +486,8 @@ static int decode_syncpoint(NUTContext *nut, int64_t *ts, int64_t *back_ptr){ end= get_packetheader(nut, bc, 1, SYNCPOINT_STARTCODE); end += avio_tell(bc); - tmp= ff_get_v(bc); - *back_ptr= nut->last_syncpoint_pos - 16*ff_get_v(bc); + tmp= ffio_read_varlen(bc); + *back_ptr= nut->last_syncpoint_pos - 16*ffio_read_varlen(bc); if(*back_ptr < 0) return -1; @@ -523,12 +524,12 @@ static int find_and_decode_index(NUTContext *nut){ end= get_packetheader(nut, bc, 1, INDEX_STARTCODE); end += avio_tell(bc); - ff_get_v(bc); //max_pts + ffio_read_varlen(bc); //max_pts GET_V(syncpoint_count, tmp < INT_MAX/8 && tmp > 0) syncpoints= av_malloc(sizeof(int64_t)*syncpoint_count); has_keyframe= av_malloc(sizeof(int8_t)*(syncpoint_count+1)); for(i=0; i<syncpoint_count; i++){ - syncpoints[i] = ff_get_v(bc); + syncpoints[i] = ffio_read_varlen(bc); if(syncpoints[i] <= 0) goto fail; if(i) @@ -538,7 +539,7 @@ static int find_and_decode_index(NUTContext *nut){ for(i=0; i<s->nb_streams; i++){ int64_t last_pts= -1; for(j=0; j<syncpoint_count;){ - uint64_t x= ff_get_v(bc); + uint64_t x= ffio_read_varlen(bc); int type= x&1; int n= j; x>>=1; @@ -569,10 +570,10 @@ static int find_and_decode_index(NUTContext *nut){ assert(n<=syncpoint_count+1); for(; j<n && j<syncpoint_count; j++){ if(has_keyframe[j]){ - uint64_t B, A= ff_get_v(bc); + uint64_t B, A= ffio_read_varlen(bc); if(!A){ - A= ff_get_v(bc); - B= ff_get_v(bc); + A= ffio_read_varlen(bc); + B= ffio_read_varlen(bc); //eor_pts[j][i] = last_pts + A + B }else B= 0; @@ -687,13 +688,13 @@ static int decode_frame_header(NUTContext *nut, int64_t *pts, int *stream_id, ui if(flags & FLAG_INVALID) return AVERROR_INVALIDDATA; if(flags & FLAG_CODED) - flags ^= ff_get_v(bc); + flags ^= ffio_read_varlen(bc); if(flags & FLAG_STREAM_ID){ GET_V(*stream_id, tmp < s->nb_streams) } stc= &nut->stream[*stream_id]; if(flags&FLAG_CODED_PTS){ - int coded_pts= ff_get_v(bc); + int coded_pts= ffio_read_varlen(bc); //FIXME check last_pts validity? if(coded_pts < (1<<stc->msb_pts_shift)){ *pts=ff_lsb2full(stc, coded_pts); @@ -702,16 +703,16 @@ static int decode_frame_header(NUTContext *nut, int64_t *pts, int *stream_id, ui }else *pts= stc->last_pts + pts_delta; if(flags&FLAG_SIZE_MSB){ - size += size_mul*ff_get_v(bc); + size += size_mul*ffio_read_varlen(bc); } if(flags&FLAG_MATCH_TIME) get_s(bc); if(flags&FLAG_HEADER_IDX) - *header_idx= ff_get_v(bc); + *header_idx= ffio_read_varlen(bc); if(flags&FLAG_RESERVED) - reserved_count= ff_get_v(bc); + reserved_count= ffio_read_varlen(bc); for(i=0; i<reserved_count; i++) - ff_get_v(bc); + ffio_read_varlen(bc); if(*header_idx >= (unsigned)nut->header_count){ av_log(s, AV_LOG_ERROR, "header_idx invalid\n"); @@ -757,7 +758,7 @@ static int decode_frame(NUTContext *nut, AVPacket *pkt, int frame_code){ ||(discard >= AVDISCARD_BIDIR && last_IP_pts != AV_NOPTS_VALUE && last_IP_pts > pts) || discard >= AVDISCARD_ALL || stc->skip_until_key_frame){ - avio_seek(bc, size, SEEK_CUR); + avio_skip(bc, size); return 1; } @@ -803,7 +804,7 @@ static int nut_read_packet(AVFormatContext *s, AVPacket *pkt) case STREAM_STARTCODE: case INDEX_STARTCODE: skip= get_packetheader(nut, bc, 0, tmp); - avio_seek(bc, skip, SEEK_CUR); + avio_skip(bc, skip); break; case INFO_STARTCODE: if(decode_info_header(nut)<0) diff --git a/libavformat/nutenc.c b/libavformat/nutenc.c index 8ecefb012e..86701fa1aa 100644 --- a/libavformat/nutenc.c +++ b/libavformat/nutenc.c @@ -241,9 +241,9 @@ static void build_frame_code(AVFormatContext *s){ nut->frame_code['N'].flags= FLAG_INVALID; } -static void put_tt(NUTContext *nut, StreamContext *nus, AVIOContext *bc, uint64_t val){ +static void put_tt(NUTContext *nut, AVRational *time_base, AVIOContext *bc, uint64_t val){ val *= nut->time_base_count; - val += nus->time_base - nut->time_base; + val += time_base - nut->time_base; ff_put_v(bc, val); } @@ -486,6 +486,34 @@ static int write_streaminfo(NUTContext *nut, AVIOContext *bc, int stream_id){ return count; } +static int write_chapter(NUTContext *nut, AVIOContext *bc, int id) +{ + AVIOContext *dyn_bc; + uint8_t *dyn_buf = NULL; + AVMetadataTag *t = NULL; + AVChapter *ch = nut->avf->chapters[id]; + int ret, dyn_size, count = 0; + + ret = url_open_dyn_buf(&dyn_bc); + if (ret < 0) + return ret; + + ff_put_v(bc, 0); // stream_id_plus1 + put_s(bc, id + 1); // chapter_id + put_tt(nut, nut->chapter[id].time_base, bc, ch->start); // chapter_start + ff_put_v(bc, ch->end - ch->start); // chapter_len + + while ((t = av_metadata_get(ch->metadata, "", t, AV_METADATA_IGNORE_SUFFIX))) + count += add_info(dyn_bc, t->key, t->value); + + ff_put_v(bc, count); + + dyn_size = url_close_dyn_buf(dyn_bc, &dyn_buf); + avio_write(bc, dyn_buf, dyn_size); + av_freep(&dyn_buf); + return 0; +} + static int write_headers(AVFormatContext *avctx, AVIOContext *bc){ NUTContext *nut = avctx->priv_data; AVIOContext *dyn_bc; @@ -530,6 +558,20 @@ static int write_headers(AVFormatContext *avctx, AVIOContext *bc){ } } + for (i = 0; i < nut->avf->nb_chapters; i++) { + ret = url_open_dyn_buf(&dyn_bc); + if (ret < 0) + return ret; + ret = write_chapter(nut, dyn_bc, i); + if (ret < 0) { + uint8_t *buf; + url_close_dyn_buf(dyn_bc, &buf); + av_freep(&buf); + return ret; + } + put_packet(nut, bc, dyn_bc, 1, INFO_STARTCODE); + } + nut->last_syncpoint_pos= INT_MIN; nut->header_count++; return 0; @@ -543,7 +585,9 @@ static int write_header(AVFormatContext *s){ nut->avf= s; nut->stream = av_mallocz(sizeof(StreamContext)*s->nb_streams); - nut->time_base= av_mallocz(sizeof(AVRational )*s->nb_streams); + nut->chapter = av_mallocz(sizeof(ChapterContext)*s->nb_chapters); + nut->time_base= av_mallocz(sizeof(AVRational )*(s->nb_streams + + s->nb_chapters)); for(i=0; i<s->nb_streams; i++){ AVStream *st= s->streams[i]; @@ -570,6 +614,20 @@ static int write_header(AVFormatContext *s){ nut->stream[i].max_pts_distance= FFMAX(time_base.den, time_base.num) / time_base.num; } + for (i = 0; i < s->nb_chapters; i++) { + AVChapter *ch = s->chapters[i]; + + for (j = 0; j < nut->time_base_count; j++) { + if (!memcmp(&ch->time_base, &nut->time_base[j], sizeof(AVRational))) + break; + } + + nut->time_base[j] = ch->time_base; + nut->chapter[i].time_base = &nut->time_base[j]; + if(j == nut->time_base_count) + nut->time_base_count++; + } + nut->max_distance = MAX_DISTANCE; build_elision_headers(s); build_frame_code(s); @@ -581,7 +639,7 @@ static int write_header(AVFormatContext *s){ if ((ret = write_headers(s, bc)) < 0) return ret; - put_flush_packet(bc); + avio_flush(bc); //FIXME index @@ -672,7 +730,7 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt){ ret = url_open_dyn_buf(&dyn_bc); if(ret < 0) return ret; - put_tt(nut, nus, dyn_bc, pkt->dts); + put_tt(nut, nus->time_base, dyn_bc, pkt->dts); ff_put_v(dyn_bc, sp ? (nut->last_syncpoint_pos - sp->pos)>>4 : 0); put_packet(nut, bc, dyn_bc, 1, SYNCPOINT_STARTCODE); @@ -785,7 +843,7 @@ static int write_trailer(AVFormatContext *s){ while(nut->header_count<3) write_headers(s, bc); - put_flush_packet(bc); + avio_flush(bc); ff_nut_free_sp(nut); av_freep(&nut->stream); av_freep(&nut->time_base); diff --git a/libavformat/nuv.c b/libavformat/nuv.c index 6f4a03192d..db31689753 100644 --- a/libavformat/nuv.c +++ b/libavformat/nuv.c @@ -66,7 +66,7 @@ static int get_codec_data(AVIOContext *pb, AVStream *vst, switch (frametype) { case NUV_EXTRADATA: subtype = avio_r8(pb); - avio_seek(pb, 6, SEEK_CUR); + avio_skip(pb, 6); size = PKTSIZE(avio_rl32(pb)); if (vst && subtype == 'R') { vst->codec->extradata_size = size; @@ -78,7 +78,7 @@ static int get_codec_data(AVIOContext *pb, AVStream *vst, } break; case NUV_MYTHEXT: - avio_seek(pb, 7, SEEK_CUR); + avio_skip(pb, 7); size = PKTSIZE(avio_rl32(pb)); if (size != 128 * 4) break; @@ -90,7 +90,7 @@ static int get_codec_data(AVIOContext *pb, AVStream *vst, if (vst->codec->codec_tag == MKTAG('R', 'J', 'P', 'G')) vst->codec->codec_id = CODEC_ID_NUV; } else - avio_seek(pb, 4, SEEK_CUR); + avio_skip(pb, 4); if (ast) { ast->codec->codec_tag = avio_rl32(pb); @@ -102,20 +102,20 @@ static int get_codec_data(AVIOContext *pb, AVStream *vst, ast->codec->bits_per_coded_sample); ast->need_parsing = AVSTREAM_PARSE_FULL; } else - avio_seek(pb, 4 * 4, SEEK_CUR); + avio_skip(pb, 4 * 4); size -= 6 * 4; - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); return 1; case NUV_SEEKP: size = 11; break; default: - avio_seek(pb, 7, SEEK_CUR); + avio_skip(pb, 7); size = PKTSIZE(avio_rl32(pb)); break; } - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); } return 0; } @@ -130,14 +130,14 @@ static int nuv_header(AVFormatContext *s, AVFormatParameters *ap) { AVStream *vst = NULL, *ast = NULL; avio_read(pb, id_string, 12); is_mythtv = !memcmp(id_string, "MythTVVideo", 12); - avio_seek(pb, 5, SEEK_CUR); // version string - avio_seek(pb, 3, SEEK_CUR); // padding + avio_skip(pb, 5); // version string + avio_skip(pb, 3); // padding width = avio_rl32(pb); height = avio_rl32(pb); avio_rl32(pb); // unused, "desiredwidth" avio_rl32(pb); // unused, "desiredheight" avio_r8(pb); // 'P' == progressive, 'I' == interlaced - avio_seek(pb, 3, SEEK_CUR); // padding + avio_skip(pb, 3); // padding aspect = av_int2dbl(avio_rl64(pb)); if (aspect > 0.9999 && aspect < 1.0001) aspect = 4.0 / 3.0; @@ -206,13 +206,13 @@ static int nuv_packet(AVFormatContext *s, AVPacket *pkt) { switch (frametype) { case NUV_EXTRADATA: if (!ctx->rtjpg_video) { - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); break; } case NUV_VIDEO: if (ctx->v_id < 0) { av_log(s, AV_LOG_ERROR, "Video packet in file without video stream!\n"); - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); break; } ret = av_new_packet(pkt, copyhdrsize + size); @@ -236,7 +236,7 @@ static int nuv_packet(AVFormatContext *s, AVPacket *pkt) { case NUV_AUDIO: if (ctx->a_id < 0) { av_log(s, AV_LOG_ERROR, "Audio packet in file without audio stream!\n"); - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); break; } ret = av_get_packet(pb, pkt, size); @@ -250,7 +250,7 @@ static int nuv_packet(AVFormatContext *s, AVPacket *pkt) { // contains no data, size value is invalid break; default: - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); break; } } diff --git a/libavformat/oggenc.c b/libavformat/oggenc.c index 39e36c8b6b..fd88650629 100644 --- a/libavformat/oggenc.c +++ b/libavformat/oggenc.c @@ -99,14 +99,14 @@ static int ogg_write_page(AVFormatContext *s, OGGPage *page, int extra_flags) avio_write(pb, page->data, page->size); ogg_update_checksum(s, pb, crc_offset); - put_flush_packet(pb); + avio_flush(pb); size = url_close_dyn_buf(pb, &buf); if (size < 0) return size; avio_write(s->pb, buf, size); - put_flush_packet(s->pb); + avio_flush(s->pb); av_free(buf); oggstream->page_count--; return 0; diff --git a/libavformat/pva.c b/libavformat/pva.c index a3b350e316..8e8c060a65 100644 --- a/libavformat/pva.c +++ b/libavformat/pva.c @@ -122,7 +122,7 @@ recover: if (pes_signal != 1) { pva_log(s, AV_LOG_WARNING, "expected signaled PES packet, " "trying to recover\n"); - avio_seek(pb, length - 9, SEEK_CUR); + avio_skip(pb, length - 9); if (!read_packet) return AVERROR(EIO); goto recover; diff --git a/libavformat/qcp.c b/libavformat/qcp.c index fefc929279..b4f559ee11 100644 --- a/libavformat/qcp.c +++ b/libavformat/qcp.c @@ -93,7 +93,7 @@ static int qcp_read_header(AVFormatContext *s, AVFormatParameters *ap) avio_rb32(pb); // "RIFF" s->file_size = avio_rl32(pb) + 8; - avio_seek(pb, 8 + 4 + 1 + 1, SEEK_CUR); // "QLCMfmt " + chunk-size + major-version + minor-version + avio_skip(pb, 8 + 4 + 1 + 1); // "QLCMfmt " + chunk-size + major-version + minor-version st->codec->codec_type = AVMEDIA_TYPE_AUDIO; st->codec->channels = 1; @@ -110,13 +110,13 @@ static int qcp_read_header(AVFormatContext *s, AVFormatParameters *ap) av_log(s, AV_LOG_ERROR, "Unknown codec GUID.\n"); return AVERROR_INVALIDDATA; } - avio_seek(pb, 2 + 80, SEEK_CUR); // codec-version + codec-name + avio_skip(pb, 2 + 80); // codec-version + codec-name st->codec->bit_rate = avio_rl16(pb); s->packet_size = avio_rl16(pb); - avio_seek(pb, 2, SEEK_CUR); // block-size + avio_skip(pb, 2); // block-size st->codec->sample_rate = avio_rl16(pb); - avio_seek(pb, 2, SEEK_CUR); // sample-size + avio_skip(pb, 2); // sample-size memset(c->rates_per_mode, -1, sizeof(c->rates_per_mode)); nb_rates = avio_rl32(pb); @@ -129,7 +129,7 @@ static int qcp_read_header(AVFormatContext *s, AVFormatParameters *ap) } else c->rates_per_mode[mode] = size; } - avio_seek(pb, 16 - 2*nb_rates + 20, SEEK_CUR); // empty entries of rate-map-table + reserved + avio_skip(pb, 16 - 2*nb_rates + 20); // empty entries of rate-map-table + reserved return 0; } @@ -174,14 +174,14 @@ static int qcp_read_packet(AVFormatContext *s, AVPacket *pkt) case MKTAG('v', 'r', 'a', 't'): if (avio_rl32(pb)) // var-rate-flag s->packet_size = 0; - avio_seek(pb, 4, SEEK_CUR); // size-in-packets + avio_skip(pb, 4); // size-in-packets break; case MKTAG('d', 'a', 't', 'a'): c->data_size = chunk_size; break; default: - avio_seek(pb, chunk_size, SEEK_CUR); + avio_skip(pb, chunk_size); } } return AVERROR_EOF; diff --git a/libavformat/r3d.c b/libavformat/r3d.c index 39f97ff9aa..aad88ee9c7 100644 --- a/libavformat/r3d.c +++ b/libavformat/r3d.c @@ -72,7 +72,7 @@ static int r3d_read_red1(AVFormatContext *s) tmp = avio_rb32(s->pb); // filenum av_dlog(s, "filenum %d\n", tmp); - avio_seek(s->pb, 32, SEEK_CUR); // unknown + avio_skip(s->pb, 32); // unknown st->codec->width = avio_rb32(s->pb); st->codec->height = avio_rb32(s->pb); @@ -152,7 +152,7 @@ static void r3d_read_reos(AVFormatContext *s) tmp = avio_rb32(s->pb); av_dlog(s, "num audio chunks %d\n", tmp); - avio_seek(s->pb, 6*4, SEEK_CUR); + avio_skip(s->pb, 6*4); } static int r3d_read_header(AVFormatContext *s, AVFormatParameters *ap) @@ -332,7 +332,7 @@ static int r3d_read_packet(AVFormatContext *s, AVPacket *pkt) break; default: skip: - avio_seek(s->pb, atom.size-8, SEEK_CUR); + avio_skip(s->pb, atom.size-8); } } return err; diff --git a/libavformat/rawenc.c b/libavformat/rawenc.c index 20ddfd5609..a43d5f61b2 100644 --- a/libavformat/rawenc.c +++ b/libavformat/rawenc.c @@ -26,7 +26,7 @@ int ff_raw_write_packet(AVFormatContext *s, AVPacket *pkt) { avio_write(s->pb, pkt->data, pkt->size); - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } diff --git a/libavformat/rdt.c b/libavformat/rdt.c index 36e61c02ed..d6a96de5c1 100644 --- a/libavformat/rdt.c +++ b/libavformat/rdt.c @@ -161,16 +161,16 @@ rdt_load_mdpr (PayloadContext *rdt, AVStream *st, int rule_nr) num = avio_rb16(&pb); if (rule_nr < 0 || rule_nr >= num) return -1; - avio_seek(&pb, rule_nr * 2, SEEK_CUR); + avio_skip(&pb, rule_nr * 2); chunk_nr = avio_rb16(&pb); - avio_seek(&pb, (num - 1 - rule_nr) * 2, SEEK_CUR); + avio_skip(&pb, (num - 1 - rule_nr) * 2); /* read MDPR chunks */ num = avio_rb16(&pb); if (chunk_nr >= num) return -1; while (chunk_nr--) - avio_seek(&pb, avio_rb32(&pb), SEEK_CUR); + avio_skip(&pb, avio_rb32(&pb)); size = avio_rb32(&pb); } else { size = rdt->mlti_data_size; diff --git a/libavformat/riff.c b/libavformat/riff.c index 920cd96e37..fb8ab1c075 100644 --- a/libavformat/riff.c +++ b/libavformat/riff.c @@ -502,7 +502,7 @@ void ff_get_wav_header(AVIOContext *pb, AVCodecContext *codec, int size) codec->bits_per_coded_sample = avio_rl16(pb); codec->channel_layout = avio_rl32(pb); /* dwChannelMask */ id = avio_rl32(pb); /* 4 first bytes of GUID */ - avio_seek(pb, 12, SEEK_CUR); /* skip end of GUID */ + avio_skip(pb, 12); /* skip end of GUID */ cbSize -= 22; size -= 22; } @@ -515,7 +515,7 @@ void ff_get_wav_header(AVIOContext *pb, AVCodecContext *codec, int size) /* It is possible for the chunk to contain garbage at the end */ if (size > 0) - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); } codec->codec_id = ff_wav_codec_get_id(id, codec->bits_per_coded_sample); if (codec->codec_id == CODEC_ID_AAC_LATM) { diff --git a/libavformat/rl2.c b/libavformat/rl2.c index 4538d5c5cd..93d4c34459 100644 --- a/libavformat/rl2.c +++ b/libavformat/rl2.c @@ -95,7 +95,7 @@ static av_cold int rl2_read_header(AVFormatContext *s, int i; int ret = 0; - avio_seek(pb,4, SEEK_CUR); /* skip FORM tag */ + avio_skip(pb,4); /* skip FORM tag */ back_size = avio_rl32(pb); /**< get size of the background frame */ signature = avio_rb32(pb); data_size = avio_rb32(pb); diff --git a/libavformat/rmdec.c b/libavformat/rmdec.c index e2e9b0298c..1ffeae56ee 100644 --- a/libavformat/rmdec.c +++ b/libavformat/rmdec.c @@ -132,7 +132,7 @@ static int rm_read_audio_stream_info(AVFormatContext *s, AVIOContext *pb, if (version == 3) { int header_size = avio_rb16(pb); int64_t startpos = avio_tell(pb); - avio_seek(pb, 14, SEEK_CUR); + avio_skip(pb, 14); rm_read_metadata(s, 0); if ((startpos + header_size) >= avio_tell(pb) + 2) { // fourcc (should always be "lpcJ") @@ -141,7 +141,7 @@ static int rm_read_audio_stream_info(AVFormatContext *s, AVIOContext *pb, } // Skip extra header crap (this should never happen) if ((startpos + header_size) > avio_tell(pb)) - avio_seek(pb, header_size + startpos - avio_tell(pb), SEEK_CUR); + avio_skip(pb, header_size + startpos - avio_tell(pb)); st->codec->sample_rate = 8000; st->codec->channels = 1; st->codec->codec_type = AVMEDIA_TYPE_AUDIO; @@ -150,7 +150,7 @@ static int rm_read_audio_stream_info(AVFormatContext *s, AVIOContext *pb, int flavor, sub_packet_h, coded_framesize, sub_packet_size; int codecdata_length; /* old version (4) */ - avio_seek(pb, 2, SEEK_CUR); /* unused */ + avio_skip(pb, 2); /* unused */ avio_rb32(pb); /* .ra4 */ avio_rb32(pb); /* data size */ avio_rb16(pb); /* version2 */ @@ -321,7 +321,7 @@ ff_rm_read_mdpr_codecdata (AVFormatContext *s, AVIOContext *pb, skip: /* skip codec info */ size = avio_tell(pb) - codec_pos; - avio_seek(pb, codec_data_size - size, SEEK_CUR); + avio_skip(pb, codec_data_size - size); return 0; } @@ -340,7 +340,7 @@ static int rm_read_index(AVFormatContext *s) size = avio_rb32(pb); if (size < 20) return -1; - avio_seek(pb, 2, SEEK_CUR); + avio_skip(pb, 2); n_pkts = avio_rb32(pb); str_id = avio_rb16(pb); next_off = avio_rb32(pb); @@ -353,10 +353,10 @@ static int rm_read_index(AVFormatContext *s) goto skip; for (n = 0; n < n_pkts; n++) { - avio_seek(pb, 2, SEEK_CUR); + avio_skip(pb, 2); pts = avio_rb32(pb); pos = avio_rb32(pb); - avio_seek(pb, 4, SEEK_CUR); /* packet no. */ + avio_skip(pb, 4); /* packet no. */ av_add_index_entry(st, pos, pts, 0, 0, AVINDEX_KEYFRAME); } @@ -469,7 +469,7 @@ static int rm_read_header(AVFormatContext *s, AVFormatParameters *ap) goto header_end; default: /* unknown tag: skip it */ - avio_seek(pb, tag_size - 10, SEEK_CUR); + avio_skip(pb, tag_size - 10); break; } } @@ -529,7 +529,7 @@ static int sync(AVFormatContext *s, int64_t *timestamp, int *flags, int *stream_ if(state == MKBETAG('I', 'N', 'D', 'X')){ int n_pkts, expected_len; len = avio_rb32(pb); - avio_seek(pb, 2, SEEK_CUR); + avio_skip(pb, 2); n_pkts = avio_rb32(pb); expected_len = 20 + n_pkts * 14; if (len == 20) @@ -566,7 +566,7 @@ static int sync(AVFormatContext *s, int64_t *timestamp, int *flags, int *stream_ if (i == s->nb_streams) { skip: /* skip packet if unknown number */ - avio_seek(pb, len, SEEK_CUR); + avio_skip(pb, len); rm->remaining_len = 0; continue; } @@ -929,7 +929,7 @@ static int64_t rm_read_dts(AVFormatContext *s, int stream_index, break; } - avio_seek(s->pb, len, SEEK_CUR); + avio_skip(s->pb, len); } *ppos = pos; return dts; diff --git a/libavformat/rmenc.c b/libavformat/rmenc.c index 8a608861f5..4835cf4435 100644 --- a/libavformat/rmenc.c +++ b/libavformat/rmenc.c @@ -341,7 +341,7 @@ static int rm_write_header(AVFormatContext *s) if (rv10_write_header(s, 0, 0)) return AVERROR_INVALIDDATA; - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } @@ -368,7 +368,7 @@ static int rm_write_audio(AVFormatContext *s, const uint8_t *buf, int size, int } else { avio_write(pb, buf, size); } - put_flush_packet(pb); + avio_flush(pb); stream->nb_frames++; av_free(buf1); return 0; @@ -413,7 +413,7 @@ static int rm_write_video(AVFormatContext *s, const uint8_t *buf, int size, int avio_w8(pb, stream->nb_frames & 0xff); avio_write(pb, buf, size); - put_flush_packet(pb); + avio_flush(pb); stream->nb_frames++; return 0; @@ -454,7 +454,7 @@ static int rm_write_trailer(AVFormatContext *s) avio_wb32(pb, 0); avio_wb32(pb, 0); } - put_flush_packet(pb); + avio_flush(pb); return 0; } diff --git a/libavformat/rsoenc.c b/libavformat/rsoenc.c index fc7df76f76..58cfc798c9 100644 --- a/libavformat/rsoenc.c +++ b/libavformat/rsoenc.c @@ -60,7 +60,7 @@ static int rso_write_header(AVFormatContext *s) avio_wb16(pb, enc->sample_rate); avio_wb16(pb, 0x0000); /* play mode ? (0x0000 = don't loop) */ - put_flush_packet(pb); + avio_flush(pb); return 0; } @@ -95,7 +95,7 @@ static int rso_write_trailer(AVFormatContext *s) avio_wb16(pb, coded_file_size); avio_seek(pb, file_size, SEEK_SET); - put_flush_packet(pb); + avio_flush(pb); return 0; } diff --git a/libavformat/rtpdec.c b/libavformat/rtpdec.c index b4b8ffcd72..438ceda810 100644 --- a/libavformat/rtpdec.c +++ b/libavformat/rtpdec.c @@ -320,7 +320,7 @@ int rtp_check_and_send_back_rr(RTPDemuxContext *s, int count) avio_w8(pb, 0); } - put_flush_packet(pb); + avio_flush(pb); len = url_close_dyn_buf(pb, &buf); if ((len > 0) && buf) { int result; @@ -348,7 +348,7 @@ void rtp_send_punch_packets(URLContext* rtp_handle) avio_wb32(pb, 0); /* Timestamp */ avio_wb32(pb, 0); /* SSRC */ - put_flush_packet(pb); + avio_flush(pb); len = url_close_dyn_buf(pb, &buf); if ((len > 0) && buf) url_write(rtp_handle, buf, len); @@ -363,7 +363,7 @@ void rtp_send_punch_packets(URLContext* rtp_handle) avio_wb16(pb, 1); /* length in words - 1 */ avio_wb32(pb, 0); /* our own SSRC */ - put_flush_packet(pb); + avio_flush(pb); len = url_close_dyn_buf(pb, &buf); if ((len > 0) && buf) url_write(rtp_handle, buf, len); diff --git a/libavformat/rtpdec_asf.c b/libavformat/rtpdec_asf.c index 8c4969111c..3c19ad6e5b 100644 --- a/libavformat/rtpdec_asf.c +++ b/libavformat/rtpdec_asf.c @@ -187,11 +187,11 @@ static int asfrtp_parse_packet(AVFormatContext *s, PayloadContext *asf, flags |= RTP_FLAG_KEY; len_off = avio_rb24(pb); if (mflags & 0x20) /**< relative timestamp */ - avio_seek(pb, 4, SEEK_CUR); + avio_skip(pb, 4); if (mflags & 0x10) /**< has duration */ - avio_seek(pb, 4, SEEK_CUR); + avio_skip(pb, 4); if (mflags & 0x8) /**< has location ID */ - avio_seek(pb, 4, SEEK_CUR); + avio_skip(pb, 4); off = avio_tell(pb); if (!(mflags & 0x40)) { @@ -214,7 +214,7 @@ static int asfrtp_parse_packet(AVFormatContext *s, PayloadContext *asf, return AVERROR(EIO); avio_write(asf->pktbuf, buf + off, len - off); - avio_seek(pb, len - off, SEEK_CUR); + avio_skip(pb, len - off); if (!(flags & RTP_FLAG_MARKER)) return -1; out_len = url_close_dyn_buf(asf->pktbuf, &asf->buf); @@ -234,7 +234,7 @@ static int asfrtp_parse_packet(AVFormatContext *s, PayloadContext *asf, asf->buf = av_realloc(asf->buf, out_len); memcpy(asf->buf + prev_len, buf + off, FFMIN(cur_len, len - off)); - avio_seek(pb, cur_len, SEEK_CUR); + avio_skip(pb, cur_len); } } diff --git a/libavformat/rtpdec_qt.c b/libavformat/rtpdec_qt.c index 4041a0fca5..206ed347b4 100644 --- a/libavformat/rtpdec_qt.c +++ b/libavformat/rtpdec_qt.c @@ -149,13 +149,13 @@ static int qt_rtp_parse_packet(AVFormatContext *s, PayloadContext *qt, break; } default: - avio_seek(&pb, tlv_len, SEEK_CUR); + avio_skip(&pb, tlv_len); break; } } /* 32-bit alignment */ - avio_seek(&pb, ((avio_tell(&pb) + 3) & ~3) - avio_tell(&pb), SEEK_CUR); + avio_skip(&pb, ((avio_tell(&pb) + 3) & ~3) - avio_tell(&pb)); } else avio_seek(&pb, 4, SEEK_SET); diff --git a/libavformat/rtpenc.c b/libavformat/rtpenc.c index 6c49d34c31..71ccdabf4a 100644 --- a/libavformat/rtpenc.c +++ b/libavformat/rtpenc.c @@ -206,7 +206,7 @@ static void rtcp_send_sr(AVFormatContext *s1, int64_t ntp_time) avio_wb32(s1->pb, rtp_ts); avio_wb32(s1->pb, s->packet_count); avio_wb32(s1->pb, s->octet_count); - put_flush_packet(s1->pb); + avio_flush(s1->pb); } /* send an rtp packet. sequence number is incremented, but the caller @@ -225,7 +225,7 @@ void ff_rtp_send_data(AVFormatContext *s1, const uint8_t *buf1, int len, int m) avio_wb32(s1->pb, s->ssrc); avio_write(s1->pb, buf1, len); - put_flush_packet(s1->pb); + avio_flush(s1->pb); s->seq++; s->octet_count += len; diff --git a/libavformat/sauce.c b/libavformat/sauce.c index 8f1acb4a77..41e991e3e7 100644 --- a/libavformat/sauce.c +++ b/libavformat/sauce.c @@ -51,14 +51,14 @@ int ff_sauce_read(AVFormatContext *avctx, uint64_t *fsize, int *got_width, int g GET_SAUCE_META("artist", 20) GET_SAUCE_META("publisher", 20) GET_SAUCE_META("date", 8) - avio_seek(pb, 4, SEEK_CUR); + avio_skip(pb, 4); datatype = avio_r8(pb); filetype = avio_r8(pb); t1 = avio_rl16(pb); t2 = avio_rl16(pb); nb_comments = avio_r8(pb); flags = avio_r8(pb); - avio_seek(pb, 4, SEEK_CUR); + avio_skip(pb, 4); GET_SAUCE_META("encoder", 22); if (got_width && datatype && filetype) { diff --git a/libavformat/siff.c b/libavformat/siff.c index 880132ff67..d0f682b0cf 100644 --- a/libavformat/siff.c +++ b/libavformat/siff.c @@ -103,7 +103,7 @@ static int siff_parse_vbv1(AVFormatContext *s, SIFFContext *c, AVIOContext *pb) } width = avio_rl16(pb); height = avio_rl16(pb); - avio_seek(pb, 4, SEEK_CUR); + avio_skip(pb, 4); c->frames = avio_rl16(pb); if(!c->frames){ av_log(s, AV_LOG_ERROR, "File contains no frames ???\n"); @@ -113,7 +113,7 @@ static int siff_parse_vbv1(AVFormatContext *s, SIFFContext *c, AVIOContext *pb) c->rate = avio_rl16(pb); c->block_align = c->rate * (c->bits >> 3); - avio_seek(pb, 16, SEEK_CUR); //zeroes + avio_skip(pb, 16); //zeroes st = av_new_stream(s, 0); if (!st) @@ -145,7 +145,7 @@ static int siff_parse_soun(AVFormatContext *s, SIFFContext *c, AVIOContext *pb) av_log(s, AV_LOG_ERROR, "Header chunk size is incorrect\n"); return -1; } - avio_seek(pb, 4, SEEK_CUR); //unknown value + avio_skip(pb, 4); //unknown value c->rate = avio_rl16(pb); c->bits = avio_rl16(pb); c->block_align = c->rate * (c->bits >> 3); @@ -160,7 +160,7 @@ static int siff_read_header(AVFormatContext *s, AVFormatParameters *ap) if (avio_rl32(pb) != TAG_SIFF) return -1; - avio_seek(pb, 4, SEEK_CUR); //ignore size + avio_skip(pb, 4); //ignore size tag = avio_rl32(pb); if (tag != TAG_VBV1 && tag != TAG_SOUN){ @@ -176,7 +176,7 @@ static int siff_read_header(AVFormatContext *s, AVFormatParameters *ap) av_log(s, AV_LOG_ERROR, "'BODY' chunk is missing\n"); return -1; } - avio_seek(pb, 4, SEEK_CUR); //ignore size + avio_skip(pb, 4); //ignore size return 0; } diff --git a/libavformat/soxdec.c b/libavformat/soxdec.c index 6d99033f47..5e1e220f76 100644 --- a/libavformat/soxdec.c +++ b/libavformat/soxdec.c @@ -58,14 +58,14 @@ static int sox_read_header(AVFormatContext *s, if (avio_rl32(pb) == SOX_TAG) { st->codec->codec_id = CODEC_ID_PCM_S32LE; header_size = avio_rl32(pb); - avio_seek(pb, 8, SEEK_CUR); /* sample count */ + avio_skip(pb, 8); /* sample count */ sample_rate = av_int2dbl(avio_rl64(pb)); st->codec->channels = avio_rl32(pb); comment_size = avio_rl32(pb); } else { st->codec->codec_id = CODEC_ID_PCM_S32BE; header_size = avio_rb32(pb); - avio_seek(pb, 8, SEEK_CUR); /* sample count */ + avio_skip(pb, 8); /* sample count */ sample_rate = av_int2dbl(avio_rb64(pb)); st->codec->channels = avio_rb32(pb); comment_size = avio_rb32(pb); @@ -105,7 +105,7 @@ static int sox_read_header(AVFormatContext *s, AV_METADATA_DONT_STRDUP_VAL); } - avio_seek(pb, header_size - SOX_FIXED_HDR - comment_size, SEEK_CUR); + avio_skip(pb, header_size - SOX_FIXED_HDR - comment_size); st->codec->sample_rate = sample_rate; st->codec->bits_per_coded_sample = 32; diff --git a/libavformat/soxenc.c b/libavformat/soxenc.c index fb68d0b908..214acdd59b 100644 --- a/libavformat/soxenc.c +++ b/libavformat/soxenc.c @@ -78,7 +78,7 @@ static int sox_write_header(AVFormatContext *s) for ( ; comment_size > comment_len; comment_len++) avio_w8(pb, 0); - put_flush_packet(pb); + avio_flush(pb); return 0; } @@ -107,7 +107,7 @@ static int sox_write_trailer(AVFormatContext *s) avio_wb64(pb, num_samples); avio_seek(pb, file_size, SEEK_SET); - put_flush_packet(pb); + avio_flush(pb); } return 0; diff --git a/libavformat/spdifdec.c b/libavformat/spdifdec.c index 8a6b79dd52..dd29a5fecc 100644 --- a/libavformat/spdifdec.c +++ b/libavformat/spdifdec.c @@ -201,7 +201,7 @@ static int spdif_read_packet(AVFormatContext *s, AVPacket *pkt) } /* skip over the padding to the beginning of the next frame */ - avio_seek(pb, offset - pkt->size - BURST_HEADER_SIZE, SEEK_CUR); + avio_skip(pb, offset - pkt->size - BURST_HEADER_SIZE); if (!s->nb_streams) { /* first packet, create a stream */ diff --git a/libavformat/spdifenc.c b/libavformat/spdifenc.c index b4111f62b7..f6d4ec160e 100644 --- a/libavformat/spdifenc.c +++ b/libavformat/spdifenc.c @@ -531,7 +531,7 @@ static int spdif_write_packet(struct AVFormatContext *s, AVPacket *pkt) av_log(s, AV_LOG_DEBUG, "type=%x len=%i pkt_offset=%i\n", ctx->data_type, ctx->out_bytes, ctx->pkt_offset); - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } diff --git a/libavformat/swfdec.c b/libavformat/swfdec.c index c63052c66c..f90564f3db 100644 --- a/libavformat/swfdec.c +++ b/libavformat/swfdec.c @@ -70,7 +70,7 @@ static int swf_read_header(AVFormatContext *s, AVFormatParameters *ap) /* skip rectangle size */ nbits = avio_r8(pb) >> 3; len = (4 * nbits - 3 + 7) / 8; - avio_seek(pb, len, SEEK_CUR); + avio_skip(pb, len); swf->frame_rate = avio_rl16(pb); /* 8.8 fixed */ avio_rl16(pb); /* frame count */ @@ -159,7 +159,7 @@ static int swf_read_packet(AVFormatContext *s, AVPacket *pkt) st = s->streams[i]; if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO && st->id == -1) { if (st->codec->codec_id == CODEC_ID_MP3) { - avio_seek(pb, 4, SEEK_CUR); + avio_skip(pb, 4); av_get_packet(pb, pkt, len-4); } else { // ADPCM, PCM av_get_packet(pb, pkt, len); @@ -202,7 +202,7 @@ static int swf_read_packet(AVFormatContext *s, AVPacket *pkt) return pkt->size; } skip: - avio_seek(pb, len, SEEK_CUR); + avio_skip(pb, len); } return 0; } diff --git a/libavformat/swfenc.c b/libavformat/swfenc.c index 182cb65660..052d7205e8 100644 --- a/libavformat/swfenc.c +++ b/libavformat/swfenc.c @@ -326,7 +326,7 @@ static int swf_write_header(AVFormatContext *s) put_swf_end_tag(s); } - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } @@ -432,7 +432,7 @@ static int swf_write_video(AVFormatContext *s, put_swf_tag(s, TAG_SHOWFRAME); put_swf_end_tag(s); - put_flush_packet(s->pb); + avio_flush(s->pb); return 0; } @@ -489,7 +489,7 @@ static int swf_write_trailer(AVFormatContext *s) put_swf_tag(s, TAG_END); put_swf_end_tag(s); - put_flush_packet(s->pb); + avio_flush(s->pb); /* patch file size and number of frames if not streamed */ if (!url_is_streamed(s->pb) && video_enc) { diff --git a/libavformat/tmv.c b/libavformat/tmv.c index c632988e18..0a16ae111a 100644 --- a/libavformat/tmv.c +++ b/libavformat/tmv.c @@ -152,7 +152,7 @@ static int tmv_read_packet(AVFormatContext *s, AVPacket *pkt) ret = av_get_packet(pb, pkt, pkt_size); if (tmv->stream_index) - avio_seek(pb, tmv->padding, SEEK_CUR); + avio_skip(pb, tmv->padding); pkt->stream_index = tmv->stream_index; tmv->stream_index ^= 1; diff --git a/libavformat/tta.c b/libavformat/tta.c index 8669057fbd..d5f8e1ed61 100644 --- a/libavformat/tta.c +++ b/libavformat/tta.c @@ -50,7 +50,7 @@ static int tta_read_header(AVFormatContext *s, AVFormatParameters *ap) if (avio_rl32(s->pb) != AV_RL32("TTA1")) return -1; // not tta file - avio_seek(s->pb, 2, SEEK_CUR); // FIXME: flags + avio_skip(s->pb, 2); // FIXME: flags channels = avio_rl16(s->pb); bps = avio_rl16(s->pb); samplerate = avio_rl32(s->pb); @@ -65,7 +65,7 @@ static int tta_read_header(AVFormatContext *s, AVFormatParameters *ap) return -1; } - avio_seek(s->pb, 4, SEEK_CUR); // header crc + avio_skip(s->pb, 4); // header crc framelen = samplerate*256/245; c->totalframes = datalen / framelen + ((datalen % framelen) ? 1 : 0); @@ -91,7 +91,7 @@ static int tta_read_header(AVFormatContext *s, AVFormatParameters *ap) av_add_index_entry(st, framepos, i*framelen, size, 0, AVINDEX_KEYFRAME); framepos += size; } - avio_seek(s->pb, 4, SEEK_CUR); // seektable crc + avio_skip(s->pb, 4); // seektable crc st->codec->codec_type = AVMEDIA_TYPE_AUDIO; st->codec->codec_id = CODEC_ID_TTA; diff --git a/libavformat/txd.c b/libavformat/txd.c index 22dcfdbe77..05eb0ce6f3 100644 --- a/libavformat/txd.c +++ b/libavformat/txd.c @@ -73,7 +73,7 @@ next_chunk: if (chunk_size > 100) break; case TXD_EXTRA: - avio_seek(s->pb, chunk_size, SEEK_CUR); + avio_skip(s->pb, chunk_size); case TXD_FILE: case TXD_TEXTURE: goto next_chunk; diff --git a/libavformat/utils.c b/libavformat/utils.c index 469737378a..89eb557647 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -54,13 +54,13 @@ unsigned avformat_version(void) const char *avformat_configuration(void) { - return FFMPEG_CONFIGURATION; + return LIBAV_CONFIGURATION; } const char *avformat_license(void) { #define LICENSE_PREFIX "libavformat license: " - return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1; + return LICENSE_PREFIX LIBAV_LICENSE + sizeof(LICENSE_PREFIX) - 1; } /* fraction handling */ @@ -624,7 +624,7 @@ int av_open_input_file(AVFormatContext **ic_ptr, const char *filename, goto fail; } if (buf_size > 0) { - url_setbufsize(pb, buf_size); + ffio_set_buf_size(pb, buf_size); } if (!fmt && (err = av_probe_input_buffer(pb, &fmt, filename, logctx, 0, logctx ? (*ic_ptr)->probesize : 0)) < 0) { goto fail; @@ -3823,3 +3823,54 @@ int ff_find_stream_index(AVFormatContext *s, int id) } return -1; } + +void ff_make_absolute_url(char *buf, int size, const char *base, + const char *rel) +{ + char *sep; + /* Absolute path, relative to the current server */ + if (base && strstr(base, "://") && rel[0] == '/') { + if (base != buf) + av_strlcpy(buf, base, size); + sep = strstr(buf, "://"); + if (sep) { + sep += 3; + sep = strchr(sep, '/'); + if (sep) + *sep = '\0'; + } + av_strlcat(buf, rel, size); + return; + } + /* If rel actually is an absolute url, just copy it */ + if (!base || strstr(rel, "://") || rel[0] == '/') { + av_strlcpy(buf, rel, size); + return; + } + if (base != buf) + av_strlcpy(buf, base, size); + /* Remove the file name from the base url */ + sep = strrchr(buf, '/'); + if (sep) + sep[1] = '\0'; + else + buf[0] = '\0'; + while (av_strstart(rel, "../", NULL) && sep) { + /* Remove the path delimiter at the end */ + sep[0] = '\0'; + sep = strrchr(buf, '/'); + /* If the next directory name to pop off is "..", break here */ + if (!strcmp(sep ? &sep[1] : buf, "..")) { + /* Readd the slash we just removed */ + av_strlcat(buf, "/", size); + break; + } + /* Cut off the directory name */ + if (sep) + sep[1] = '\0'; + else + buf[0] = '\0'; + rel += 3; + } + av_strlcat(buf, rel, size); +} diff --git a/libavformat/vc1test.c b/libavformat/vc1test.c index 2f84b52674..4ab9bca1af 100644 --- a/libavformat/vc1test.c +++ b/libavformat/vc1test.c @@ -68,7 +68,7 @@ static int vc1t_read_header(AVFormatContext *s, st->codec->width = avio_rl32(pb); if(avio_rl32(pb) != 0xC) return -1; - avio_seek(pb, 8, SEEK_CUR); + avio_skip(pb, 8); fps = avio_rl32(pb); if(fps == 0xFFFFFFFF) av_set_pts_info(st, 32, 1, 1000); diff --git a/libavformat/vc1testenc.c b/libavformat/vc1testenc.c index 65ac6029ac..89ee9ef78c 100644 --- a/libavformat/vc1testenc.c +++ b/libavformat/vc1testenc.c @@ -62,7 +62,7 @@ static int vc1test_write_packet(AVFormatContext *s, AVPacket *pkt) avio_wl32(pb, pkt->size | ((pkt->flags & AV_PKT_FLAG_KEY) ? 0x80000000 : 0)); avio_wl32(pb, pkt->pts); avio_write(pb, pkt->data, pkt->size); - put_flush_packet(pb); + avio_flush(pb); ctx->frames++; return 0; @@ -76,7 +76,7 @@ static int vc1test_write_trailer(AVFormatContext *s) if (!url_is_streamed(s->pb)) { avio_seek(pb, 0, SEEK_SET); avio_wl24(pb, ctx->frames); - put_flush_packet(pb); + avio_flush(pb); } return 0; } diff --git a/libavformat/vocdec.c b/libavformat/vocdec.c index f4fb8cc37b..d11e68c49f 100644 --- a/libavformat/vocdec.c +++ b/libavformat/vocdec.c @@ -45,13 +45,13 @@ static int voc_read_header(AVFormatContext *s, AVFormatParameters *ap) int header_size; AVStream *st; - avio_seek(pb, 20, SEEK_CUR); + avio_skip(pb, 20); header_size = avio_rl16(pb) - 22; if (header_size != 4) { av_log(s, AV_LOG_ERROR, "unknown header size: %d\n", header_size); return AVERROR(ENOSYS); } - avio_seek(pb, header_size, SEEK_CUR); + avio_skip(pb, header_size); st = av_new_stream(s, 0); if (!st) return AVERROR(ENOMEM); @@ -114,13 +114,13 @@ voc_get_packet(AVFormatContext *s, AVPacket *pkt, AVStream *st, int max_size) dec->bits_per_coded_sample = avio_r8(pb); dec->channels = avio_r8(pb); tmp_codec = avio_rl16(pb); - avio_seek(pb, 4, SEEK_CUR); + avio_skip(pb, 4); voc->remaining_size -= 12; max_size -= 12; break; default: - avio_seek(pb, voc->remaining_size, SEEK_CUR); + avio_skip(pb, voc->remaining_size); max_size -= voc->remaining_size; voc->remaining_size = 0; break; diff --git a/libavformat/vqf.c b/libavformat/vqf.c index 49ed8b4e95..94ba543ba5 100644 --- a/libavformat/vqf.c +++ b/libavformat/vqf.c @@ -72,7 +72,7 @@ static int vqf_read_header(AVFormatContext *s, AVFormatParameters *ap) if (!st) return AVERROR(ENOMEM); - avio_seek(s->pb, 12, SEEK_CUR); + avio_skip(s->pb, 12); header_size = avio_rb32(s->pb); @@ -101,7 +101,7 @@ static int vqf_read_header(AVFormatContext *s, AVFormatParameters *ap) st->codec->channels = avio_rb32(s->pb) + 1; read_bitrate = avio_rb32(s->pb); rate_flag = avio_rb32(s->pb); - avio_seek(s->pb, len-12, SEEK_CUR); + avio_skip(s->pb, len-12); st->codec->bit_rate = read_bitrate*1000; st->codec->bits_per_coded_sample = 16; @@ -140,7 +140,7 @@ static int vqf_read_header(AVFormatContext *s, AVFormatParameters *ap) av_log(s, AV_LOG_ERROR, "Unknown chunk: %c%c%c%c\n", ((char*)&chunk_tag)[0], ((char*)&chunk_tag)[1], ((char*)&chunk_tag)[2], ((char*)&chunk_tag)[3]); - avio_seek(s->pb, FFMIN(len, header_size), SEEK_CUR); + avio_skip(s->pb, FFMIN(len, header_size)); break; } diff --git a/libavformat/wav.c b/libavformat/wav.c index 8023a791f3..876defb51d 100644 --- a/libavformat/wav.c +++ b/libavformat/wav.c @@ -71,7 +71,7 @@ static int wav_write_header(AVFormatContext *s) /* data header */ wav->data = ff_start_tag(pb, "data"); - put_flush_packet(pb); + avio_flush(pb); return 0; } @@ -96,7 +96,7 @@ static int wav_write_trailer(AVFormatContext *s) WAVContext *wav = s->priv_data; int64_t file_size; - put_flush_packet(pb); + avio_flush(pb); if (!url_is_streamed(s->pb)) { ff_end_tag(pb, wav->data); @@ -107,7 +107,7 @@ static int wav_write_trailer(AVFormatContext *s) avio_wl32(pb, (uint32_t)(file_size - 8)); avio_seek(pb, file_size, SEEK_SET); - put_flush_packet(pb); + avio_flush(pb); if(s->streams[0]->codec->codec_tag != 0x01) { /* Update num_samps in fact chunk */ @@ -118,7 +118,7 @@ static int wav_write_trailer(AVFormatContext *s) avio_seek(pb, wav->data-12, SEEK_SET); avio_wl32(pb, number_of_samples); avio_seek(pb, file_size, SEEK_SET); - put_flush_packet(pb); + avio_flush(pb); } } return 0; @@ -160,7 +160,7 @@ static int64_t find_tag(AVIOContext *pb, uint32_t tag1) size = next_tag(pb, &tag); if (tag == tag1) break; - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); } return size; } @@ -217,7 +217,7 @@ static int wav_read_header(AVFormatContext *s, avio_rl64(pb); /* RIFF size */ data_size = avio_rl64(pb); sample_count = avio_rl64(pb); - avio_seek(pb, size - 16, SEEK_CUR); /* skip rest of ds64 chunk */ + avio_skip(pb, size - 16); /* skip rest of ds64 chunk */ } /* parse fmt header */ @@ -243,7 +243,7 @@ static int wav_read_header(AVFormatContext *s, sample_count = avio_rl32(pb); size -= 4; } - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); } if (rf64) size = data_size; @@ -276,7 +276,7 @@ static int64_t find_guid(AVIOContext *pb, const uint8_t guid1[16]) return -1; if (!memcmp(guid, guid1, 16)) return size; - avio_seek(pb, FFALIGN(size, INT64_C(8)) - 24, SEEK_CUR); + avio_skip(pb, FFALIGN(size, INT64_C(8)) - 24); } return -1; } @@ -410,7 +410,7 @@ static int w64_read_header(AVFormatContext *s, AVFormatParameters *ap) /* subtract chunk header size - normal wav file doesn't count it */ ff_get_wav_header(pb, st->codec, size - 24); - avio_seek(pb, FFALIGN(size, INT64_C(8)) - size, SEEK_CUR); + avio_skip(pb, FFALIGN(size, INT64_C(8)) - size); st->need_parsing = AVSTREAM_PARSE_FULL; diff --git a/libavformat/wc3movie.c b/libavformat/wc3movie.c index a4dd26b442..0f2e077859 100644 --- a/libavformat/wc3movie.c +++ b/libavformat/wc3movie.c @@ -101,7 +101,7 @@ static int wc3_read_header(AVFormatContext *s, wc3->vpkt.data = NULL; wc3->vpkt.size = 0; /* skip the first 3 32-bit numbers */ - avio_seek(pb, 12, SEEK_CUR); + avio_skip(pb, 12); /* traverse through the chunks and load the header information before * the first BRCH tag */ @@ -114,12 +114,12 @@ static int wc3_read_header(AVFormatContext *s, case SOND_TAG: case INDX_TAG: /* SOND unknown, INDX unnecessary; ignore both */ - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); break; case PC__TAG: /* number of palettes, unneeded */ - avio_seek(pb, 12, SEEK_CUR); + avio_skip(pb, 12); break; case BNAM_TAG: @@ -240,7 +240,7 @@ static int wc3_read_packet(AVFormatContext *s, case TEXT_TAG: /* subtitle chunk */ #if 0 - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); #else if ((unsigned)size > sizeof(text) || (ret = avio_read(pb, text, size)) != size) ret = AVERROR(EIO); diff --git a/libavformat/westwood.c b/libavformat/westwood.c index adb35319e2..818fe2d8d3 100644 --- a/libavformat/westwood.c +++ b/libavformat/westwood.c @@ -303,7 +303,7 @@ static int wsvqa_read_header(AVFormatContext *s, break; } - avio_seek(pb, chunk_size, SEEK_CUR); + avio_skip(pb, chunk_size); } while (chunk_tag != FINF_TAG); return 0; @@ -348,7 +348,7 @@ static int wsvqa_read_packet(AVFormatContext *s, } /* stay on 16-bit alignment */ if (skip_byte) - avio_seek(pb, 1, SEEK_CUR); + avio_skip(pb, 1); return ret; } else { @@ -359,7 +359,7 @@ static int wsvqa_read_packet(AVFormatContext *s, default: av_log(s, AV_LOG_INFO, "Skipping unknown chunk 0x%08X\n", chunk_type); } - avio_seek(pb, chunk_size + skip_byte, SEEK_CUR); + avio_skip(pb, chunk_size + skip_byte); } } diff --git a/libavformat/wtv.c b/libavformat/wtv.c index 0a362dd9da..35d987c061 100644 --- a/libavformat/wtv.c +++ b/libavformat/wtv.c @@ -539,7 +539,7 @@ static void get_tag(AVFormatContext *s, AVIOContext *pb, const char *key, int ty } else { av_freep(&buf); av_log(s, AV_LOG_WARNING, "unsupported metadata entry; key:%s, type:%d, length:0x%x\n", key, type, length); - avio_seek(pb, length, SEEK_CUR); + avio_skip(pb, length); return; } @@ -582,7 +582,7 @@ static int parse_videoinfoheader2(AVFormatContext *s, AVStream *st) WtvContext *wtv = s->priv_data; AVIOContext *pb = wtv->pb; - avio_seek(pb, 72, SEEK_CUR); // picture aspect ratio is unreliable + avio_skip(pb, 72); // picture aspect ratio is unreliable ff_get_bmp_header(pb, st); return 72 + 40; @@ -658,17 +658,17 @@ static AVStream * parse_media_type(AVFormatContext *s, AVStream *st, int sid, if (size < 32) { av_log(s, AV_LOG_WARNING, "format buffer size underflow\n"); - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); return NULL; } - avio_seek(pb, size - 32, SEEK_CUR); + avio_skip(pb, size - 32); ff_get_guid(pb, &actual_subtype); ff_get_guid(pb, &actual_formattype); avio_seek(pb, -size, SEEK_CUR); st = parse_media_type(s, st, sid, mediatype, actual_subtype, actual_formattype, size - 32); - avio_seek(pb, 32, SEEK_CUR); + avio_skip(pb, 32); return st; } else if (!ff_guidcmp(mediatype, mediatype_audio)) { st = new_stream(s, st, sid, AVMEDIA_TYPE_AUDIO); @@ -679,7 +679,7 @@ static AVStream * parse_media_type(AVFormatContext *s, AVStream *st, int sid, } else { if (ff_guidcmp(formattype, format_none)) av_log(s, AV_LOG_WARNING, "unknown formattype:"PRI_GUID"\n", ARG_GUID(formattype)); - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); } if (!memcmp(subtype + 4, (const uint8_t[]){MEDIASUBTYPE_BASE_GUID}, 12)) { @@ -708,7 +708,7 @@ static AVStream * parse_media_type(AVFormatContext *s, AVStream *st, int sid, } else { if (ff_guidcmp(formattype, format_none)) av_log(s, AV_LOG_WARNING, "unknown formattype:"PRI_GUID"\n", ARG_GUID(formattype)); - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); } if (!memcmp(subtype + 4, (const uint8_t[]){MEDIASUBTYPE_BASE_GUID}, 12)) { @@ -726,7 +726,7 @@ static AVStream * parse_media_type(AVFormatContext *s, AVStream *st, int sid, return NULL; if (ff_guidcmp(formattype, format_none)) av_log(s, AV_LOG_WARNING, "unknown formattype:"PRI_GUID"\n", ARG_GUID(formattype)); - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); st->codec->codec_id = CODEC_ID_DVB_SUBTITLE; return st; } else if (!ff_guidcmp(mediatype, mediatype_mstvcaption) && @@ -736,21 +736,21 @@ static AVStream * parse_media_type(AVFormatContext *s, AVStream *st, int sid, return NULL; if (ff_guidcmp(formattype, format_none)) av_log(s, AV_LOG_WARNING, "unknown formattype:"PRI_GUID"\n", ARG_GUID(formattype)); - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); st->codec->codec_id = CODEC_ID_DVB_TELETEXT; return st; } else if (!ff_guidcmp(mediatype, mediatype_mpeg2_sections) && !ff_guidcmp(subtype, mediasubtype_mpeg2_sections)) { if (ff_guidcmp(formattype, format_none)) av_log(s, AV_LOG_WARNING, "unknown formattype:"PRI_GUID"\n", ARG_GUID(formattype)); - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); return NULL; } av_log(s, AV_LOG_WARNING, "unknown media type, mediatype:"PRI_GUID ", subtype:"PRI_GUID", formattype:"PRI_GUID"\n", ARG_GUID(mediatype), ARG_GUID(subtype), ARG_GUID(formattype)); - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); return NULL; } @@ -779,17 +779,17 @@ static int parse_chunks(AVFormatContext *s, int mode, int64_t seekts, int *len_p if (len < 32) break; sid = avio_rl32(pb) & 0x7FFF; - avio_seek(pb, 8, SEEK_CUR); + avio_skip(pb, 8); consumed = 32; if (!ff_guidcmp(g, stream_guid)) { if (ff_find_stream_index(s, sid) < 0) { ff_asf_guid mediatype, subtype, formattype; int size; - avio_seek(pb, 28, SEEK_CUR); + avio_skip(pb, 28); ff_get_guid(pb, &mediatype); ff_get_guid(pb, &subtype); - avio_seek(pb, 12, SEEK_CUR); + avio_skip(pb, 12); ff_get_guid(pb, &formattype); size = avio_rl32(pb); parse_media_type(s, 0, sid, mediatype, subtype, formattype, size); @@ -800,10 +800,10 @@ static int parse_chunks(AVFormatContext *s, int mode, int64_t seekts, int *len_p if (stream_index >= 0 && !((WtvStream*)s->streams[stream_index]->priv_data)->seen_data) { ff_asf_guid mediatype, subtype, formattype; int size; - avio_seek(pb, 12, SEEK_CUR); + avio_skip(pb, 12); ff_get_guid(pb, &mediatype); ff_get_guid(pb, &subtype); - avio_seek(pb, 12, SEEK_CUR); + avio_skip(pb, 12); ff_get_guid(pb, &formattype); size = avio_rl32(pb); parse_media_type(s, s->streams[stream_index], sid, mediatype, subtype, formattype, size); @@ -822,11 +822,11 @@ static int parse_chunks(AVFormatContext *s, int mode, int64_t seekts, int *len_p const uint8_t *pbuf = buf; int buf_size; - avio_seek(pb, 8, SEEK_CUR); + avio_skip(pb, 8); consumed += 8; if (!ff_guidcmp(g, EVENTID_CtxADescriptorSpanningEvent) || !ff_guidcmp(g, EVENTID_CSDescriptorSpanningEvent)) { - avio_seek(pb, 6, SEEK_CUR); + avio_skip(pb, 6); consumed += 6; } @@ -840,7 +840,7 @@ static int parse_chunks(AVFormatContext *s, int mode, int64_t seekts, int *len_p if (stream_index >= 0) { AVStream *st = s->streams[stream_index]; int audio_type; - avio_seek(pb, 8, SEEK_CUR); + avio_skip(pb, 8); audio_type = avio_r8(pb); if (audio_type == 2) st->disposition |= AV_DISPOSITION_HEARING_IMPAIRED; @@ -851,7 +851,7 @@ static int parse_chunks(AVFormatContext *s, int mode, int64_t seekts, int *len_p } else if (!ff_guidcmp(g, EVENTID_DVBScramblingControlSpanningEvent)) { int stream_index = ff_find_stream_index(s, sid); if (stream_index >= 0) { - avio_seek(pb, 12, SEEK_CUR); + avio_skip(pb, 12); if (avio_rl32(pb)) av_log(s, AV_LOG_WARNING, "DVB scrambled stream detected (st:%d), decoding will likely fail\n", stream_index); consumed += 16; @@ -861,7 +861,7 @@ static int parse_chunks(AVFormatContext *s, int mode, int64_t seekts, int *len_p if (stream_index >= 0) { AVStream *st = s->streams[stream_index]; uint8_t language[4]; - avio_seek(pb, 12, SEEK_CUR); + avio_skip(pb, 12); avio_read(pb, language, 3); if (language[0]) { language[3] = 0; @@ -874,7 +874,7 @@ static int parse_chunks(AVFormatContext *s, int mode, int64_t seekts, int *len_p } else if (!ff_guidcmp(g, timestamp_guid)) { int stream_index = ff_find_stream_index(s, sid); if (stream_index >= 0) { - avio_seek(pb, 8, SEEK_CUR); + avio_skip(pb, 8); wtv->pts = avio_rl64(pb); consumed += 16; if (wtv->pts == -1) @@ -885,7 +885,7 @@ static int parse_chunks(AVFormatContext *s, int mode, int64_t seekts, int *len_p wtv->epoch = wtv->pts; if (mode == SEEK_TO_PTS && wtv->pts >= seekts) { #define WTV_PAD8(x) (((x) + 7) & ~7) - avio_seek(pb, WTV_PAD8(len) - consumed, SEEK_CUR); + avio_skip(pb, WTV_PAD8(len) - consumed); return 0; } } @@ -923,7 +923,7 @@ static int parse_chunks(AVFormatContext *s, int mode, int64_t seekts, int *len_p } else av_log(s, AV_LOG_WARNING, "unsupported chunk:"PRI_GUID"\n", ARG_GUID(g)); - avio_seek(pb, WTV_PAD8(len) - consumed, SEEK_CUR); + avio_skip(pb, WTV_PAD8(len) - consumed); } return AVERROR_EOF; } @@ -954,13 +954,13 @@ static int read_header(AVFormatContext *s, AVFormatParameters *ap) wtv->last_valid_pts = AV_NOPTS_VALUE; /* read root directory sector */ - avio_seek(s->pb, 0x30, SEEK_CUR); + avio_skip(s->pb, 0x30); root_size = avio_rl32(s->pb); if (root_size > sizeof(root)) { av_log(s, AV_LOG_ERROR, "root directory size exceeds sector size\n"); return AVERROR_INVALIDDATA; } - avio_seek(s->pb, 4, SEEK_CUR); + avio_skip(s->pb, 4); root_sector = avio_rl32(s->pb); avio_seek(s->pb, root_sector << WTV_SECTOR_BITS, SEEK_SET); @@ -1047,7 +1047,7 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt) return ret; pkt->stream_index = stream_index; pkt->pts = wtv->pts; - avio_seek(pb, WTV_PAD8(len) - len, SEEK_CUR); + avio_skip(pb, WTV_PAD8(len) - len); return 0; } diff --git a/libavformat/wv.c b/libavformat/wv.c index 1b6061ce43..600de9317b 100644 --- a/libavformat/wv.c +++ b/libavformat/wv.c @@ -153,7 +153,7 @@ static int wv_read_block_header(AVFormatContext *ctx, AVIOContext *pb, int appen chmask = avio_rl32(pb); break; case 5: - avio_seek(pb, 1, SEEK_CUR); + avio_skip(pb, 1); chan |= (avio_r8(pb) & 0xF) << 8; chmask = avio_rl24(pb); break; @@ -166,10 +166,10 @@ static int wv_read_block_header(AVFormatContext *ctx, AVIOContext *pb, int appen rate = avio_rl24(pb); break; default: - avio_seek(pb, size, SEEK_CUR); + avio_skip(pb, size); } if(id&0x40) - avio_seek(pb, 1, SEEK_CUR); + avio_skip(pb, 1); } if(rate == -1){ av_log(ctx, AV_LOG_ERROR, "Cannot determine custom sampling rate\n"); diff --git a/libavformat/xa.c b/libavformat/xa.c index 17cf237a9d..3b6a77f4af 100644 --- a/libavformat/xa.c +++ b/libavformat/xa.c @@ -76,9 +76,9 @@ static int xa_read_header(AVFormatContext *s, st->codec->codec_type = AVMEDIA_TYPE_AUDIO; st->codec->codec_id = CODEC_ID_ADPCM_EA_MAXIS_XA; - avio_seek(pb, 4, SEEK_CUR); /* Skip the XA ID */ + avio_skip(pb, 4); /* Skip the XA ID */ xa->out_size = avio_rl32(pb); - avio_seek(pb, 2, SEEK_CUR); /* Skip the tag */ + avio_skip(pb, 2); /* Skip the tag */ st->codec->channels = avio_rl16(pb); st->codec->sample_rate = avio_rl32(pb); /* Value in file is average byte rate*/ diff --git a/libavformat/yop.c b/libavformat/yop.c index 20de06ca85..486fdc5616 100644 --- a/libavformat/yop.c +++ b/libavformat/yop.c @@ -81,7 +81,7 @@ static int yop_read_header(AVFormatContext *s, AVFormatParameters *ap) video_dec->codec_type = AVMEDIA_TYPE_VIDEO; video_dec->codec_id = CODEC_ID_YOP; - avio_seek(pb, 6, SEEK_CUR); + avio_skip(pb, 6); frame_rate = avio_r8(pb); yop->frame_size = avio_r8(pb) * 2048; @@ -153,7 +153,7 @@ static int yop_read_packet(AVFormatContext *s, AVPacket *pkt) // Set position to the start of the frame pkt->pos = yop->video_packet.pos; - avio_seek(pb, yop->audio_block_length - ret, SEEK_CUR); + avio_skip(pb, yop->audio_block_length - ret); ret = avio_read(pb, yop->video_packet.data + yop->palette_size, actual_video_data_size); diff --git a/libavformat/yuv4mpeg.c b/libavformat/yuv4mpeg.c index 01366b08b6..a852568a64 100644 --- a/libavformat/yuv4mpeg.c +++ b/libavformat/yuv4mpeg.c @@ -143,7 +143,7 @@ static int yuv4_write_packet(AVFormatContext *s, AVPacket *pkt) ptr2 += picture->linesize[2]; } } - put_flush_packet(pb); + avio_flush(pb); return 0; } |