[FFmpeg-devel] FreeBSD libamr.c block_size error

Benoit Fouet benoit.fouet
Thu Feb 28 15:46:47 CET 2008


Hi,

John Fitzgerald wrote:
> On Thu, Feb 28, 2008 at 8:16 AM, Reimar D?ffinger
> <Reimar.Doeffinger at stud.uni-karlsruhe.de> wrote:
>   
>> On Thu, Feb 28, 2008 at 01:33:43PM +0100, Michael Niedermayer wrote:
>>     
>>> On Wed, Feb 27, 2008 at 10:23:27AM -0500, John J Fitzgerald wrote:
>>>       
>>>> Ah, right, thanks.
>>>>
>>>> The diff -urN patch is named freebsd_libamr.patch and can be downloaded
>>>> here:
>>>>
>>>> http://www.mediafire.com/?dnl0z5xrrae
>>>>
>>>> Contents of freebsd_libamr.patch:
>>>>
>>>> --- libavcodec/libamr.c.orig    Wed Feb 27 11:21:44 2008
>>>> +++ libavcodec/libamr.c Wed Feb 27 11:21:58 2008
>>>> @@ -663,6 +663,7 @@
>>>>      }
>>>>
>>>>      mode = (amrData[0] >> 3) & 0x000F;
>>>> +    static short block_size[16]={18, 23, 33, 37, 41, 47, 51, 59, 61, 6, 6,
>>>> 0, 0, 0, 1, 1};
>>>>         
>>> The patch is mangled, attach it properly!
>>> Also const is missing and it should be unit8_t.
>>>       
>> uint8_t actually. And the variable declaration should not be in the
>> middle of the code either.
>>
>>     
>
> How's this diff -urN patch look? I hardly ever code in C or create
> patches, so please look it over. I prepended the block_size variables
> with nb_ and wb_ respectively because I think (?) that static
> variables are program-wide, so if that's the case, I wanted to avoid
> any conflict. But I don't know if I even declared the variables
> correctly.
>
> Cheers,
>
> JJ
>   
> ------------------------------------------------------------------------
>
> --- libavcodec/libamr.c.orig	Wed Feb 27 11:21:44 2008
> +++ libavcodec/libamr.c	Thu Feb 28 10:34:14 2008
> @@ -444,14 +444,14 @@
>  {
>      AMRContext *s = avctx->priv_data;
>      uint8_t*amrData=buf;
> -    static short block_size[16]={ 12, 13, 15, 17, 19, 20, 26, 31, 5, 0, 0, 0, 0, 0, 0, 0 };
> +    static const uint8_t nb_block_size[16]={ 12, 13, 15, 17, 19, 20, 26, 31, 5, 0, 0, 0, 0, 0, 0, 0 };
>   

this should be in a separate patch (and you don't need to rename the
variable)

>      enum Mode dec_mode;
>      int packet_size;
>  
>      /* av_log(NULL,AV_LOG_DEBUG,"amr_decode_frame buf=%p buf_size=%d frameCount=%d!!\n",buf,buf_size,s->frameCount); */
>  
>      dec_mode = (buf[0] >> 3) & 0x000F;
> -    packet_size = block_size[dec_mode]+1;
> +    packet_size = nb_block_size[dec_mode]+1;
>  
>      if(packet_size > buf_size) {
>          av_log(avctx, AV_LOG_ERROR, "amr frame too short (%u, should be %u)\n", buf_size, packet_size);
> @@ -652,6 +652,7 @@
>              void *data, int *data_size,
>              uint8_t * buf, int buf_size)
>  {
> +    static const uint8_t wb_block_size[16]= {18, 23, 33, 37, 41, 47, 51, 59, 61, 6, 6, 0, 0, 0, 1, 1};
>   

you don't need to rename the variable neither

>      AMRWBContext *s = avctx->priv_data;
>      uint8_t*amrData=buf;
>      int mode;
> @@ -663,7 +664,7 @@
>      }
>  
>      mode = (amrData[0] >> 3) & 0x000F;
> -    packet_size = block_size[mode];
> +    packet_size = wb_block_size[mode];
>  
>      if(packet_size > buf_size) {
>          av_log(avctx, AV_LOG_ERROR, "amr frame too short (%u, should be %u)\n", buf_size, packet_size+1);
>   
>   

Otherwise, I guess the patch is ok

-- 
Benoit Fouet
Purple Labs S.A.
www.purplelabs.com




More information about the ffmpeg-devel mailing list