You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-11-06 08:29:25 +02:00
Fix MJPEG decoder for AMV files.
Since decoding is doing from the end and aligned by 16 previous code worked correctly only when picture height was dividable by 16, otherwise it provides garbage in top lines and truncates bottom. New code adjusts data[] pointers taking in account alignment issue. Originally committed as revision 10727 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
@@ -671,7 +671,8 @@ static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int ss, i
|
||||
linesize[c]=s->linesize[c];
|
||||
if(s->avctx->codec->id==CODEC_ID_AMV) {
|
||||
//picture should be flipped upside-down for this codec
|
||||
data[c] += (linesize[c] * (s->v_scount[i] * 8 * s->mb_height - 1));
|
||||
assert(!(s->avctx->flags & CODEC_FLAG_EMU_EDGE));
|
||||
data[c] += (linesize[c] * (s->v_scount[i] * (8 * s->mb_height -((s->height/s->v_max)&7)) - 1 ));
|
||||
linesize[c] *= -1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,6 +87,7 @@ static int sp5x_decode_frame(AVCodecContext *avctx,
|
||||
recoded[j++] = 0xFF;
|
||||
recoded[j++] = 0xD9;
|
||||
|
||||
avctx->flags &= ~CODEC_FLAG_EMU_EDGE;
|
||||
i = ff_mjpeg_decode_frame(avctx, data, data_size, recoded, j);
|
||||
|
||||
av_free(recoded);
|
||||
@@ -207,6 +208,5 @@ AVCodec amv_decoder = {
|
||||
ff_mjpeg_decode_init,
|
||||
NULL,
|
||||
ff_mjpeg_decode_end,
|
||||
sp5x_decode_frame,
|
||||
CODEC_CAP_DR1
|
||||
sp5x_decode_frame
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user