diff --git a/libavformat/nut.c b/libavformat/nut.c index cd46d55d75..aee1606edb 100644 --- a/libavformat/nut.c +++ b/libavformat/nut.c @@ -462,8 +462,7 @@ static inline void put_vb_trace(ByteIOContext *bc, uint64_t v, char *file, char static int put_packetheader(NUTContext *nut, ByteIOContext *bc, int max_size, int calculate_checksum) { put_flush_packet(bc); - nut->packet_start[2]+= nut->written_packet_size; - assert(url_ftell(bc) - 8 == nut->packet_start[2]); + nut->packet_start[2]= url_ftell(bc) - 8; nut->written_packet_size = max_size; if(calculate_checksum) @@ -475,10 +474,14 @@ static int put_packetheader(NUTContext *nut, ByteIOContext *bc, int max_size, in return 0; } +/** + * + * must not be called more then once per packet + */ static int update_packetheader(NUTContext *nut, ByteIOContext *bc, int additional_size, int calculate_checksum){ int64_t start= nut->packet_start[2]; int64_t cur= url_ftell(bc); - int size= cur - start + additional_size; + int size= cur - start - get_length(nut->written_packet_size)/7 - 8; if(calculate_checksum) size += 4; @@ -1276,7 +1279,7 @@ static int nut_read_packet(AVFormatContext *s, AVPacket *pkt) case INDEX_STARTCODE: get_packetheader(nut, bc, 0); assert(nut->packet_start[2] == pos); - url_fseek(bc, nut->written_packet_size + nut->packet_start[2], SEEK_SET); + url_fseek(bc, nut->written_packet_size, SEEK_CUR); break; case INFO_STARTCODE: if(decode_info_header(nut)<0) @@ -1357,7 +1360,7 @@ av_log(s, AV_LOG_DEBUG, "read_timestamp(X,%d,%lld,%lld)\n", stream_index, *pos_a case INFO_STARTCODE: get_packetheader(nut, bc, 0); assert(nut->packet_start[2]==pos); - url_fseek(bc, nut->written_packet_size + pos, SEEK_SET); + url_fseek(bc, nut->written_packet_size, SEEK_CUR); break; case KEYFRAME_STARTCODE: frame_type=2; diff --git a/tests/libav.regression.ref b/tests/libav.regression.ref index 3434385ea0..0c18b45ff8 100644 --- a/tests/libav.regression.ref +++ b/tests/libav.regression.ref @@ -25,7 +25,7 @@ c85c98bb1c9a5fe833eed5d23fbf8499 *./data/b-libav.ffm 55d26d5f682f75fa57a5c126056c4c31 *./data/b-libav.mov 369865 ./data/b-libav.mov ./data/b-libav.mov CRC=48f5a90d -7c1a4d31acaaeaf172f59367e927f72c *./data/b-libav.nut +b66c53a5283f1a28637a617512ba0805 *./data/b-libav.nut 332358 ./data/b-libav.nut ./data/b-libav.nut CRC=ccab3a27 b466c970d54eb254ad0f954b08535634 *./data/b-libav.dv