[FFmpeg-devel] [PATCH] MOV: support stz2 "Compact Sample Size Box"

Alex Converse alex.converse
Fri Mar 6 21:07:03 CET 2009


2009/3/3 Michael Niedermayer <michaelni at gmx.at>:
> On Tue, Mar 03, 2009 at 02:45:15AM -0500, Alex Converse wrote:
> [...]
>> @@ -1143,8 +1150,33 @@ static int mov_read_stsz(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
>> ? ? ?if (!sc->sample_sizes)
>> ? ? ? ? ?return AVERROR(ENOMEM);
>>
>> + ? ?switch(field_size) {
>> + ? ?case 4:
>> + ? ? ? ?for(i=0; i<entries-1; i+=2) {
>> + ? ? ? ? ? ?int field = get_byte(pb);
>> + ? ? ? ? ? ?sc->sample_sizes[i ?] = field >> 4;
>> + ? ? ? ? ? ?sc->sample_sizes[i+1] = field & 0xF;
>> + ? ? ? ?}
>> + ? ? ? ?if(entries&1) {
>> + ? ? ? ? ? ?sc->sample_sizes[entries-1] = get_byte(pb) >> 4;
>> + ? ? ? ?}
>> + ? ? ? ?break;
>> + ? ?case 8:
>> + ? ? ? ?for(i=0; i<entries; i++)
>> + ? ? ? ? ? ?sc->sample_sizes[i] = get_byte(pb);
>> + ? ? ? ?break;
>> + ? ?case 16:
>> + ? ? ? ?for(i=0; i<entries; i++)
>> + ? ? ? ? ? ?sc->sample_sizes[i] = get_be16(pb);
>> + ? ? ? ?break;
>> + ? ?case 32:
>> ? ? ?for(i=0; i<entries; i++)
>> ? ? ? ? ?sc->sample_sizes[i] = get_be32(pb);
>> + ? ? ? ?break;
>> + ? ?default:
>> + ? ? ? ?av_log(c->fc, AV_LOG_ERROR, "Invalid sample field size %d\n", field_size);
>> + ? ? ? ?return -1;
>> + ? ?}
>
> I think that should be using GetBitContext
>

Are you sure that's the best approach? The only thing that doesn't use
whole multiples bytes are half bytes and they are required to begin
and are padded to byte alignment. (And obviously 2 of them fit very
nicely into a byte.) Right now the mov demuxer doesn't use a
GetBitContext at all.

If you do think it's the way to go can you point me to somewhere that
switches back and forth between ByteIOContext to GetBitContext to use
as an example?

[...]

--Alex




More information about the ffmpeg-devel mailing list