[MPlayer-dev-eng] [PATCH] use avcodec_decode_audio2

Reimar Döffinger Reimar.Doeffinger at stud.uni-karlsruhe.de
Tue Mar 20 12:50:06 CET 2007


Hello,
On Mon, Mar 19, 2007 at 07:32:55PM +0100, Reimar D?ffinger wrote:
> does attached patch look okay?

Sorry, previous patch was only correct on the first loop iteration,
attached one might actually be correct (though either is an
improvement over the current situation with no checking at all).
Some testing would be welcome, since the function currently still
requires the buffer to be at least AVCODEC_MAX_AUDIO_FRAME_SIZE bytes
big whether the codec needs it or not it _might_ cause some regressions.

Greetings,
Reimar Döffinger
-------------- next part --------------
Index: libmpcodecs/ad_ffmpeg.c
===================================================================
--- libmpcodecs/ad_ffmpeg.c	(revision 22763)
+++ libmpcodecs/ad_ffmpeg.c	(working copy)
@@ -150,7 +150,7 @@
     unsigned char *start=NULL;
     int y,len=-1;
     while(len<minlen){
-	int len2=0;
+	int len2=maxlen;
 	double pts;
 	int x=ds_get_packet_pts(sh_audio->ds,&start, &pts);
 	if(x<=0) break; // error
@@ -158,7 +158,7 @@
 	    sh_audio->pts = pts;
 	    sh_audio->pts_bytes = 0;
 	}
-	y=avcodec_decode_audio(sh_audio->context,(int16_t*)buf,&len2,start,x);
+	y=avcodec_decode_audio2(sh_audio->context,(int16_t*)buf,&len2,start,x);
 //printf("return:%d samples_out:%d bitstream_in:%d sample_sum:%d\n", y, len2, x, len); fflush(stdout);
 	if(y<0){ mp_msg(MSGT_DECAUDIO,MSGL_V,"lavc_audio: error\n");break; }
 	if(y<x) sh_audio->ds->buffer_pos+=y-x;  // put back data (HACK!)
@@ -166,6 +166,7 @@
 	  //len=len2;break;
 	  if(len<0) len=len2; else len+=len2;
 	  buf+=len2;
+	  maxlen -= len2;
 	  sh_audio->pts_bytes += len2;
 	}
         mp_dbg(MSGT_DECAUDIO,MSGL_DBG2,"Decoded %d -> %d  \n",y,len2);


More information about the MPlayer-dev-eng mailing list