diff --git a/libvorbis-1.2.2-svn16228.patch b/libvorbis-1.2.2-svn16228.patch
new file mode 100644
index 0000000..4bdda8b
--- /dev/null
+++ b/libvorbis-1.2.2-svn16228.patch
@@ -0,0 +1,92 @@
+diff -up libvorbis-1.2.2/lib/vorbisfile.c.jx libvorbis-1.2.2/lib/vorbisfile.c
+--- libvorbis-1.2.2/lib/vorbisfile.c.jx 2009-06-04 01:06:07.000000000 -0400
++++ libvorbis-1.2.2/lib/vorbisfile.c 2009-07-08 15:04:58.000000000 -0400
+@@ -675,8 +675,13 @@ static int _fetch_and_process_packet(Ogg
+ /* extract packets from page */
+ while(1){
+
+- /* process a packet if we can. If the machine isn't loaded,
+- neither is a page */
++ if(vf->ready_state==STREAMSET){
++ int ret=_make_decode_ready(vf);
++ if(ret<0)return ret;
++ }
++
++ /* process a packet if we can. */
++
+ if(vf->ready_state==INITSET){
+ while(1) {
+ ogg_packet op;
+@@ -844,11 +849,6 @@ static int _fetch_and_process_packet(Ogg
+ link=0;
+ }
+ }
+-
+- {
+- int ret=_make_decode_ready(vf);
+- if(ret<0)return ret;
+- }
+ }
+
+ /* the buffered page is the data we want, and we're ready for it;
+@@ -1255,7 +1255,9 @@ int ov_raw_seek(OggVorbis_File *vf,ogg_i
+ int lastblock=0;
+ int accblock=0;
+ int thisblock=0;
+- int eosflag=0;
++ int lastflag=0;
++ int firstflag=0;
++ ogg_int64_t pagepos=-1;
+
+ ogg_stream_init(&work_os,vf->current_serialno); /* get the memory ready */
+ ogg_stream_reset(&work_os); /* eliminate the spurious OV_HOLE
+@@ -1276,7 +1278,14 @@ int ov_raw_seek(OggVorbis_File *vf,ogg_i
+ thisblock=0;
+ }else{
+
+- if(eosflag)
++ /* We can't get a guaranteed correct pcm position out of the
++ last page in a stream because it might have a 'short'
++ granpos, which can only be detected in the presence of a
++ preceeding page. However, if the last page is also the first
++ page, the granpos rules of a first page take precedence. Not
++ only that, but for first==last, the EOS page must be treated
++ as if its a normal first page for the stream to open/play. */
++ if(lastflag && !firstflag)
+ ogg_stream_packetout(&vf->os,NULL);
+ else
+ if(lastblock)accblock+=(lastblock+thisblock)>>2;
+@@ -1290,6 +1299,7 @@ int ov_raw_seek(OggVorbis_File *vf,ogg_i
+ for(i=0;ipcmlengths[i*2+1];
+ vf->pcm_offset=granulepos-accblock;
++ if(vf->pcm_offset<0)vf->pcm_offset=0;
+ break;
+ }
+ lastblock=thisblock;
+@@ -1300,7 +1310,8 @@ int ov_raw_seek(OggVorbis_File *vf,ogg_i
+ }
+
+ if(!lastblock){
+- if(_get_next_page(vf,&og,-1)<0){
++ pagepos=_get_next_page(vf,&og,-1);
++ if(pagepos<0){
+ vf->pcm_offset=ov_pcm_total(vf,-1);
+ break;
+ }
+@@ -1341,12 +1352,13 @@ int ov_raw_seek(OggVorbis_File *vf,ogg_i
+ ogg_stream_reset_serialno(&vf->os,serialno);
+ ogg_stream_reset_serialno(&work_os,serialno);
+ vf->ready_state=STREAMSET;
+-
++ firstflag=(pagepos<=vf->dataoffsets[link]);
+ }
+
+ ogg_stream_pagein(&vf->os,&og);
+ ogg_stream_pagein(&work_os,&og);
+- eosflag=ogg_page_eos(&og);
++ lastflag=ogg_page_eos(&og);
++
+ }
+ }
+
diff --git a/libvorbis.spec b/libvorbis.spec
index bc7cb9a..f52b604 100644
--- a/libvorbis.spec
+++ b/libvorbis.spec
@@ -1,7 +1,7 @@
Summary: The Vorbis General Audio Compression Codec.
Name: libvorbis
Version: 1.2.2
-Release: 1%{?dist}
+Release: 2%{?dist}
Epoch: 1
Group: System Environment/Libraries
License: BSD
@@ -10,6 +10,8 @@ Source: http://downloads.xiph.org/releases/vorbis/%{name}-%{version}.tar.bz2
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: libogg-devel >= 2:1.1
+Patch0: libvorbis-1.2.2-svn16228.patch
+
%description
Ogg Vorbis is a fully open, non-proprietary, patent- and royalty-free,
general-purpose compressed audio format for audio and music at fixed
@@ -40,6 +42,7 @@ Documentation for developing applications with libvorbis.
%prep
%setup -q
+%patch0 -p1 -b .svn
sed -i "s/-O20/$RPM_OPT_FLAGS/" configure
sed -i "s/-ffast-math//" configure
@@ -82,6 +85,10 @@ rm -rf $RPM_BUILD_ROOT
%postun -p /sbin/ldconfig
%changelog
+* Wed Jul 08 2009 Adam Jackson 1.2.2-2
+- libvorbis-1.2.2-svn16228.patch: Backport a fix from pre-1.2.3 to hopefully
+ fix small sound file playback. (#505610)
+
* Thu Jul 02 2009 Adam Jackson 1.2.2-1
- libvorbis 1.2.2