[FFmpeg-devel] [PATCH] TXD demuxer and decoder

Michael Niedermayer michaelni
Sun May 6 18:15:49 CEST 2007


Hi

On Sun, May 06, 2007 at 05:28:34PM +0200, Ivo wrote:
[...]
> > > [..stack based demuxer..]
> >
> > whats the stack good for?
> > i think TXD_FILE / TXD_INFO should be read in the header reading code
> > like read and ignore TXD_FILE
> > skip all TXD_INFO
> >
> > and then the packet read code could do
> > read next chunk
> >
> > if(TXD_TEXTURE)
> >     ignore
> > if(TXD_TEXTURE_DATA)
> >     av_get_packet() ...
> > else
> >     skip
> >
> > or does that fail with any file? if so why?
> > your stack code might appear more robust at first (it did to me) but if
> > the sizes of TXD_TEXTURE and the contained packets missmatch then it will
> > also fail like my suggestion above and if they dont missmatch then i dont
> > see where the stack would do any good ...
> 
> When I started writing the demuxer, I was undecided which approach would be 
> best. I chose to implement a full-blown stack based demuxer because I do 
> not know what other chunks and sub-chunks might exist in other files. I  
> only tested files of Grand Theft Auto: San Andreas, that only have v8 and 
> v9 texture_data chunks and the (sub)chunks I described at the wiki page. 
> But there might well be other sub-chunks that re-use id's of other scopes 
> and/or more levels of encapsulation. The Renderware engine has been in use 
> for over six years and there are more than 60 games listed at 
> http://en.wikipedia.org/wiki/Renderware. I did not want to risk being 
> forced to overhaul the whole demuxer when I encounter a file that cannot be 
> demuxed without knowing the proper context in which a subchunk appears. I 
> think the cost (both in size and speed) of the current demuxer compared to 
> what you suggest is negligible. Sadly I do not have more test files (I 
> might be able to get my hands on older GTA games) so I can not be sure if 
> the current filedescription is conclusive. If it were, I could simplify the 
> demuxer.

even if context would be needed that doesnt mean the stack would be

that is you can write

read_txd_texture_header()
read_txd_texture_data_header()
av_get_packet()

no stack and you have alot of context 


also i think that all cases where the stack would be really needed would
need significant changes anyway ...

i mean where would the current code fail?
if there are several data streams
if TXD_TEXTURE_DATA chunks are split up somehow in smaller chunks

but for these the read_txd_texture_header; read_txd_texture_data_header; ...
should still work ...
and its not hard to add a variable to the context to hold a little bit of
info about the parent chunk, i mean putting the parent chunk id or some other
field into the context is trivial and i dont see what you would gain by 
adding these onto the stack structure

also its not size or speed why i dont like the stack approach but
rather that its hard to understand and debug

and i dont like messy code being justified by (its not slower or bigger
and i know of no case where its needed but maybe there exist some files
which have a different structure which might benefit from the messy code)

messy code rather should be justified with (its smaller or its faster or
file xyz needs it)

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Breaking DRM is a little like attempting to break through a door even
though the window is wide open and the only thing in the house is a bunch
of things you dont want and which you would get tomorrow for free anyway
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20070506/98ed7774/attachment.pgp>



More information about the ffmpeg-devel mailing list