[FFmpeg-devel] Multiple frame dimensions in a single stream

Ivo ivop
Fri May 4 13:00:02 CEST 2007


On Friday 04 May 2007 03:10, Michael Niedermayer wrote:
> On Fri, May 04, 2007 at 01:10:12AM +0200, Ivo wrote:
> > I am working on a TXD demuxer and decoder
> > (http://wiki.multimedia.cx/index.php?title=TXD) and I have stumbled
> > upon a problem. Basically the demuxer and decoder work fine when all
> > frames have the same width and height. But if the size changes, the
> > output stays at the old size. e.g. [fronten2.txd is from GTA:SA and
> > contains eight frames]
> >
> > ffmpeg -i fronten2.txd %02d.ppm
> >
> > All ppm images are 512x512, but 07.ppm should be 512x256. The upper
> > half of the 512x512 image does contain the right contents though. When
> > I do
> >
> > ffplay fronten2.txd
> >
> > I see the output window resize but it does not display the right
> > contents. It then switches back to 512x512 for the eight frame, which
> > displays correctly again.
> >
> > I have RTFS but I can not figure out what I am doing wrong. Can anybody
> > explain to me how I should handle mid-stream dimension changes?
> > Preferably decoder driven, though I could change that if it should be
> > really done in the demuxer.
> iam not sure if ffplay supports changing dimension, try to concatenate 2
> mpeg streams with differing dimension to check if ffplay can handle that

I did the following:

cat small.mpg big.mpg > up.mpg
cat big.mpg small.mpg > down.mpg

big.mpg's dimensions are twice those of small.mpg.

$ ffplay up.mpg

Window resizes but the contents are not correct. Only the left half of the 
image is shown and the right half is green.

$ ffplay down.mpg

Seems to play correctly. Window resizes and the contents match what I 

$ ffmpeg -i up.mpg %04d.ppm

The images after the switch stay at the old dimensions and show only the 
upper left corner of the frame (one quarter of the image).

$ ffmpeg -i down.mpg %04d.ppm

The images after the switch stay at the old dimensions and show the frame 
twice (upper left corner, and upper right corner one scanline shifted up) 
and the lower half of the image contains garbage.

So it looks like it's ffmpeg and ffplay that have to be adjusted to work 
with changing dimensions mid-stream? Any idea how I should proceed? For 
example, if the width and height of a frame change, do 
st->codec->width/height also have to be changed? (by the demuxer) or is 
that considered a hackish no-go?


More information about the ffmpeg-devel mailing list