[FFmpeg-devel] [PATCH] ADTS AAC with ID3v2

David DeHaven dave
Thu Jan 22 18:42:52 CET 2009


On Jan 18, 2009, at 9:11 AM, Robert Swain wrote:
> 2009/1/16 Michael Niedermayer <michaelni at gmx.at>:
>> On Fri, Jan 16, 2009 at 11:57:52AM -0500, Alex Converse wrote:
>>> On Thu, Jan 15, 2009 at 5:31 PM, Michael Niedermayer <michaelni at gmx.at 
>>> > wrote:
>>>> On Thu, Jan 15, 2009 at 02:37:11AM -0500, Alex Converse wrote:
>>>>> On Wed, Jan 14, 2009 at 1:53 PM, Michael Niedermayer <michaelni at gmx.at 
>>>>> > wrote:
>>>>>>
>>>>>> On Wed, Jan 14, 2009 at 01:39:05PM -0500, Alex Converse wrote:
>>>>>>> On Wed, Jan 14, 2009 at 12:57 PM, Michael Niedermayer <michaelni at gmx.at 
>>>>>>> >wrote:
>>>>>>>
>>>>>>>> On Wed, Jan 14, 2009 at 10:17:33AM -0500, Alex Converse wrote:
>>>>>>>>> On Wed, Jan 14, 2009 at 10:10 AM, Michael Niedermayer <michaelni at gmx.at
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> On Wed, Jan 14, 2009 at 09:47:29AM -0500, Alex Converse  
>>>>>>>>>> wrote:
>>>>>>>>>>> On Wed, Jan 14, 2009 at 9:17 AM, Michael Niedermayer <
>>>>>>>> michaelni at gmx.at
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> On Wed, Jan 14, 2009 at 12:23:00AM -0500, Alex Converse  
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>
>>>>>>>>>>>>> The attached patch adds support to the ADTS AAC probe to  
>>>>>>>>>>>>> detect
>>>>>>>> AAC
>>>>>>>>>> files
>>>>>>>>>>>>> with ID3v2 tags at a higher level than the MP3 probe and  
>>>>>>>>>>>>> the MPC
>>>>>>>>>> probe.
>>>>>>>>>>>> It
>>>>>>>>>>>>> refactors some id3 detection from mp3.c into id3v2.c.
>>>>>>>>>>>>>
>>>>>>>>>>>> [...]
>>>>>>>>>>>>
>>>>>>>>>>>>> #define ID3v1_TAG_SIZE 128
>>>>>>>>>>>>> -
>>>>>>>>>>>>> #define ID3v1_GENRE_MAX 125
>>>>>>>>>>>>>
>>>>>>>>>>>>> static const char * const  
>>>>>>>>>>>>> id3v1_genre_str[ID3v1_GENRE_MAX + 1] =
>>>>>>>> {
>>>>>>>>>>>>
>>>>>>>>>>>> cosmetic
>>>>>>>>>>>>
>>>>>>>>>>>> [...]
>>>>>>>>>>>>> @@ -487,7 +472,7 @@ static int  
>>>>>>>>>>>>> mp3_read_header(AVFormatContext
>>>>>>>> *s,
>>>>>>>>>>>>>     ret = get_buffer(s->pb, buf, ID3v2_HEADER_SIZE);
>>>>>>>>>>>>>     if (ret != ID3v2_HEADER_SIZE)
>>>>>>>>>>>>>         return -1;
>>>>>>>>>>>>> -    if (id3v2_match(buf)) {
>>>>>>>>>>>>> +    if (ff_id3v2_match(buf)) {
>>>>>>>>>>>>>         /* parse ID3v2 header */
>>>>>>>>>>>>>         len = ((buf[6] & 0x7f) << 21) |
>>>>>>>>>>>>>             ((buf[7] & 0x7f) << 14) |
>>>>>>>>>>>>
>>>>>>>>>>>> the split out of (ff_)id3v2_match is ok but should be a  
>>>>>>>>>>>> seperate
>>>>>>>> patch
>>>>>>>>>>>> and commit
>>>>>>>>>>>>
>>>>>>>>>>>> [...]
>>>>>>>>>>>>>     }
>>>>>>>>>>>>> -    if   (first_frames>=3) return AVPROBE_SCORE_MAX/2+1;
>>>>>>>>>>>>> +    if   (first_frames>=3) return AVPROBE_SCORE_MAX/2+2;
>>>>>>>>>>>>>     else if(max_frames>500)return AVPROBE_SCORE_MAX/2;
>>>>>>>>>>>>>     else if(max_frames>=3) return AVPROBE_SCORE_MAX/4;
>>>>>>>>>>>>>     else if(max_frames>=1) return 1;
>>>>>>>>>>>>
>>>>>>>>>>>> why?
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Just having an ID3v2 tag gives a score of  
>>>>>>>>>>> AVPROBE_SCORE_MAX/2+1 for
>>>>>>>> mp3.
>>>>>>>>>>
>>>>>>>>>> That sounds like a bug ...
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> The comment about mpeg-ps in mp3.c made me think it was a  
>>>>>>>>> hackish design
>>>>>>>>> decision, not a bug.
>>>>>>>>
>>>>>>>> well one could call it that way, still the existence of  
>>>>>>>> hackish code is no
>>>>>>>> argument to add more hackish code like the +1 -> +2
>>>>>>>>
>>>>>>>
>>>>>>> What would be the correct solution for MP3 then? skipping the  
>>>>>>> tag and trying
>>>>>>> again?
>>>>>>
>>>>>> i think so
>>>>>
>>>>> I fixed the MP3 hackishness in the attached patch. I also fixed  
>>>>> a typo
>>>>> in the old patch. Once I fixed MP3, musepack became the next  
>>>>> greedy
>>>>> culprit so to prevent MP3 regressions I had to fix him too. I  
>>>>> don't
>>>>> have any MPC files with ID3v2 so that portion of that patch is
>>>>> untested.
>>>>>
>>>>> In a related note, the tag skipper in mpc_read_header seems to not
>>>>> check for a footer, which I think could be trouble.
>>>> [...]
>>>>> diff --git a/libavformat/id3v2.c b/libavformat/id3v2.c
>>>>> index c27443b..649fafa 100644
>>>>> --- a/libavformat/id3v2.c
>>>>> +++ b/libavformat/id3v2.c
>>>>> @@ -33,3 +33,15 @@ int ff_id3v2_match(const uint8_t *buf)
>>>>>             (buf[8] & 0x80) == 0 &&
>>>>>             (buf[9] & 0x80) == 0;
>>>>> }
>>>>> +
>>>>> +int ff_id3v2_tag_len(const uint8_t * buf)
>>>>> +{
>>>>> +    int len = ((buf[6] & 0x7f) << 21) +
>>>>> +        ((buf[7] & 0x7f) << 14) +
>>>>> +        ((buf[8] & 0x7f) << 7) +
>>>>> +        (buf[9] & 0x7f) +
>>>>> +        ID3v2_HEADER_SIZE;
>>>>> +    if (buf[5] & 0x10)
>>>>> +        len += ID3v2_HEADER_SIZE;
>>>>> +    return len;
>>>>> +}
>>>>
>>>> is this correct?
>>>> i mean this does either X + ID3v2_HEADER_SIZE or X +  
>>>> 2*ID3v2_HEADER_SIZE
>>>>
>>>
>>> That is my understanding.
>>
>> then patches ok
>
> Hrm. I've already applied the one pertaining to AAC but now I see that
> there is overlap between that one and the other ones.
>
> Alex: Could you possibly provide another patch against trunk please?
> And if you have commit rights now, you may as well commit it yourself.
> :)

<parrot mode> FLAC! FLAC! </parrot mode>
This works on all the id3v2 infested flac files I have.

-DrD-
-------------- next part --------------
A non-text attachment was scrubbed...
Name: flac_id3.patch
Type: application/octet-stream
Size: 1532 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090122/d1851c2c/attachment.obj>
-------------- next part --------------






More information about the ffmpeg-devel mailing list