[FFmpeg-devel] [PATCH][RFC] QCP demuxer

Kenan Gillet kenan.gillet
Sat May 16 03:01:27 CEST 2009


On May 15, 2009, at 4:56 PM, Michael Niedermayer wrote:

> On Fri, May 15, 2009 at 03:36:36PM -0700, Kenan Gillet wrote:
>> On Fri, May 15, 2009 at 2:16 PM, Michael Niedermayer <michaelni at gmx.at 
>> > wrote:
>>> On Fri, May 15, 2009 at 10:46:12PM +0200, Reimar D?ffinger wrote:
>>>> On Fri, May 15, 2009 at 11:21:21AM -0700, Kenan Gillet wrote:
>>>>> Any other solution i missed?
>>>>
>>>> e.g. 8-entry LUT and & 7
>>>
>>> this does not appear particularly robust in light of a damaged file
>>>
>>> [...]
>>
>> A file with its rate-map-table corrupted but using a fixed rate
>> would still be  playable, as one with a corrupted but unused entry.
>> So being permissive would be nice, plus, some invalid data would
>> be detected later if a corrupted entry is used.
>>
>
>> FIY, I have a sample, a trashed file, with a corrupted rate-map- 
>> table,
>> which still played correctly with the solution attached which make it
>> round 3.
>
> the probability of a 8 entry table to be corrupted while the rest of  
> the
> file is not is rather small, that is compared to "implementation  
> error"
> in that sense, are you sure your implementation is correct?

I check the code against the RFC, and i believe it is correct.
The rate-map-table is only used if the  var-rate-flag is non zero.
If zero, the file then contains packets of fixed length and the table
is not used.

After further investigation, the trashed file was generating an empty
wav file, so the changes were not making any difference in the output.


> and what makes you think it is corrupted?

I used the trasher tools.
BTW, is there any rule of thumb for a good count/maxburst/filesize ratio
when using the trasher tool?

>
> [...]
>
>> +            int ret, mode = get_byte(pb);
>> +            int pkt_size  = c->fixed_packet_size ? c- 
>> >fixed_packet_size - 1
>> +                                                 : c- 
>> >rates_per_mode[mode];
>
> this still has the same problem of crashing almost instantly
> and being very fragile even if not crashing

what about:

int pkt_size, ret, mode = get_byte(pb);

if (c->fixed_packet_size) {
     pkt_size = c->fixed_packet_size - 1;
} else if (mode <= QCP_MAX_MODE) {
     pkt_size = c->rates_per_mode[mode];
} else
     pkt_size = -1


note that the byte_mode is present either if the packet size is fixed  
or variable.


Kenan




More information about the ffmpeg-devel mailing list