History

avformat: don't unconditionally call ff_read_frame_flush() when trying to seek.

This prevents flushing the packet buffer when the input format does not support seeking.

Justin Ruggles committed 15 years ago

Commit 0041cdb1 parent c6ac30c1 file · +14 −10Browse files

Unified · Split

libavformat/utils.c+14−10
@@ -1749,10 +1749,10 @@ int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int f · 1748 unmodified lines
1749 int ret;1749 int ret;
1750 AVStream *st;1750 AVStream *st;
1751 1751
1752 ff_read_frame_flush(s);1752 if (flags & AVSEEK_FLAG_BYTE) {
1753 1753 ff_read_frame_flush(s);
1754 if(flags & AVSEEK_FLAG_BYTE)
1755 return seek_frame_byte(s, stream_index, timestamp, flags);1754 return seek_frame_byte(s, stream_index, timestamp, flags);
1755 }
1756 1756
1757 if(stream_index < 0){1757 if(stream_index < 0){
1758 stream_index= av_find_default_stream_index(s);1758 stream_index= av_find_default_stream_index(s);
@@ -1765,18 +1765,22 @@ int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int f · 6 unmodified lines
1765 }1765 }
1766 1766
1767 /* first, we try the format specific seek */1767 /* first, we try the format specific seek */
1768 if (s->iformat->read_seek)1768 if (s->iformat->read_seek) {
1769 ff_read_frame_flush(s);
1769 ret = s->iformat->read_seek(s, stream_index, timestamp, flags);1770 ret = s->iformat->read_seek(s, stream_index, timestamp, flags);
1770 else1771 } else
1771 ret = -1;1772 ret = -1;
1772 if (ret >= 0) {1773 if (ret >= 0) {
1773 return 0;1774 return 0;
1774 }1775 }
1775 1776
1776 if(s->iformat->read_timestamp && !(s->iformat->flags & AVFMT_NOBINSEARCH))1777 if (s->iformat->read_timestamp && !(s->iformat->flags & AVFMT_NOBINSEARCH)) {
1778 ff_read_frame_flush(s);
1777 return av_seek_frame_binary(s, stream_index, timestamp, flags);1779 return av_seek_frame_binary(s, stream_index, timestamp, flags);
1778 else if (!(s->iformat->flags & AVFMT_NOGENSEARCH))1780 } else if (!(s->iformat->flags & AVFMT_NOGENSEARCH)) {
1781 ff_read_frame_flush(s);
1779 return seek_frame_generic(s, stream_index, timestamp, flags);1782 return seek_frame_generic(s, stream_index, timestamp, flags);
1783 }
1780 else1784 else
1781 return -1;1785 return -1;
1782}1786}
@@ -1786,10 +1790,10 @@ int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts, int · 3 unmodified lines
1786 if(min_ts > ts || max_ts < ts)1790 if(min_ts > ts || max_ts < ts)
1787 return -1;1791 return -1;
1788 1792
1789 ff_read_frame_flush(s);1793 if (s->iformat->read_seek2) {
1790 1794 ff_read_frame_flush(s);
1791 if (s->iformat->read_seek2)
1792 return s->iformat->read_seek2(s, stream_index, min_ts, ts, max_ts, flags);1795 return s->iformat->read_seek2(s, stream_index, min_ts, ts, max_ts, flags);
1796 }
1793 1797
1794 if(s->iformat->read_timestamp){1798 if(s->iformat->read_timestamp){
1795 //try to seek via read_timestamp()1799 //try to seek via read_timestamp()

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t