Chris Robinson : winemp3: Don't keep unused data buffered.

Alexandre Julliard julliard at winehq.org
Thu Feb 21 07:42:22 CST 2008


Module: wine
Branch: master
Commit: 8f46a5119249562aceabff6d120948cbfacb6423
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=8f46a5119249562aceabff6d120948cbfacb6423

Author: Chris Robinson <chris.kcat at gmail.com>
Date:   Wed Feb 20 05:14:07 2008 -0800

winemp3: Don't keep unused data buffered.

---

 dlls/winemp3.acm/interface.c |    5 ++++-
 dlls/winemp3.acm/mpegl3.c    |    7 +++++--
 dlls/winemp3.acm/mpglib.h    |    2 +-
 3 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/dlls/winemp3.acm/interface.c b/dlls/winemp3.acm/interface.c
index 336a4f8..6ed8562 100644
--- a/dlls/winemp3.acm/interface.c
+++ b/dlls/winemp3.acm/interface.c
@@ -48,7 +48,7 @@ BOOL InitMP3(struct mpstr *mp)
 	return !0;
 }
 
-void ExitMP3(struct mpstr *mp)
+void ClearMP3Buffer(struct mpstr *mp)
 {
 	struct buf *b,*bn;
 
@@ -59,6 +59,9 @@ void ExitMP3(struct mpstr *mp)
 		free(b);
 		b = bn;
 	}
+	mp->tail = NULL;
+	mp->head = NULL;
+	mp->bsize = 0;
 }
 
 static struct buf *addbuf(struct mpstr *mp,const unsigned char *buf,int size)
diff --git a/dlls/winemp3.acm/mpegl3.c b/dlls/winemp3.acm/mpegl3.c
index e960dbe..3d18c9e 100644
--- a/dlls/winemp3.acm/mpegl3.c
+++ b/dlls/winemp3.acm/mpegl3.c
@@ -163,6 +163,9 @@ static void mp3_horse(PACMDRVSTREAMINSTANCE adsi,
 
     buffered_after = get_num_buffered_bytes(&amd->mp);
     TRACE("before %d put %d during %d after %d\n", buffered_before, *nsrc, buffered_during, buffered_after);
+
+    *nsrc -= buffered_after;
+    ClearMP3Buffer(&amd->mp);
 }
 
 /***********************************************************************
@@ -376,7 +379,7 @@ static	LRESULT	MPEG3_FormatSuggest(PACMDRVFORMATSUGGEST adfs)
  */
 static	void	MPEG3_Reset(PACMDRVSTREAMINSTANCE adsi, AcmMpeg3Data* aad)
 {
-    ExitMP3(&aad->mp);
+    ClearMP3Buffer(&aad->mp);
     InitMP3(&aad->mp);
 }
 
@@ -438,7 +441,7 @@ static	LRESULT	MPEG3_StreamOpen(PACMDRVSTREAMINSTANCE adsi)
  */
 static	LRESULT	MPEG3_StreamClose(PACMDRVSTREAMINSTANCE adsi)
 {
-    ExitMP3(&((AcmMpeg3Data*)adsi->dwDriver)->mp);
+    ClearMP3Buffer(&((AcmMpeg3Data*)adsi->dwDriver)->mp);
     HeapFree(GetProcessHeap(), 0, (void*)adsi->dwDriver);
     return MMSYSERR_NOERROR;
 }
diff --git a/dlls/winemp3.acm/mpglib.h b/dlls/winemp3.acm/mpglib.h
index 4efe8ae..865e781 100644
--- a/dlls/winemp3.acm/mpglib.h
+++ b/dlls/winemp3.acm/mpglib.h
@@ -62,7 +62,7 @@ extern "C" {
 BOOL InitMP3(struct mpstr *mp);
 int decodeMP3(struct mpstr *mp,const unsigned char *inmemory,int inmemsize,
      unsigned char *outmemory,int outmemsize,int *done);
-void ExitMP3(struct mpstr *mp);
+void ClearMP3Buffer(struct mpstr *mp);
 
 #ifdef __cplusplus
 }




More information about the wine-cvs mailing list