summaryrefslogtreecommitdiff
path: root/libavcodec/indeo3.c
diff options
context:
space:
mode:
authorBenoit Fouet <benoit.fouet@free.fr>2008-09-30 14:43:55 +0000
committerBenoit Fouet <benoit.fouet@free.fr>2008-09-30 14:43:55 +0000
commit21899717a3e559783b6fa73eb7f378789c3c3a46 (patch)
treed41fb82c0ff88167660f0b3c11e4cff3c6a01b8d /libavcodec/indeo3.c
parent950c0373fd65501aeca4bab07be84886b885164d (diff)
Move iv_decode_frame function to remove a forward declaration.
Originally committed as revision 15488 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/indeo3.c')
-rw-r--r--libavcodec/indeo3.c139
1 files changed, 67 insertions, 72 deletions
diff --git a/libavcodec/indeo3.c b/libavcodec/indeo3.c
index 3c98a610e6..5f49290864 100644
--- a/libavcodec/indeo3.c
+++ b/libavcodec/indeo3.c
@@ -96,11 +96,6 @@ static av_cold int build_modpred(Indeo3DecodeContext *s)
return 0;
}
-static void iv_Decode_Chunk(Indeo3DecodeContext *s, uint8_t *cur,
- uint8_t *ref, int width, int height, const uint8_t *buf1,
- long fflags2, const uint8_t *hdr,
- const uint8_t *buf2, int min_width_160);
-
static av_cold int iv_alloc_frames(Indeo3DecodeContext *s)
{
int luma_width, luma_height, luma_pixels, chroma_width, chroma_height,
@@ -158,73 +153,6 @@ static av_cold void iv_free_func(Indeo3DecodeContext *s)
av_free(s->corrector_type);
}
-static unsigned long iv_decode_frame(Indeo3DecodeContext *s,
- const uint8_t *buf, int buf_size)
-{
- unsigned int hdr_width, hdr_height,
- chroma_width, chroma_height;
- unsigned long fflags1, fflags2, fflags3, offs1, offs2, offs3, offs;
- const uint8_t *hdr_pos, *buf_pos;
-
- buf_pos = buf;
- buf_pos += 18;
-
- fflags1 = bytestream_get_le16(&buf_pos);
- fflags3 = bytestream_get_le32(&buf_pos);
- fflags2 = *buf_pos++;
- buf_pos += 3;
- hdr_height = bytestream_get_le16(&buf_pos);
- hdr_width = bytestream_get_le16(&buf_pos);
-
- if(avcodec_check_dimensions(NULL, hdr_width, hdr_height))
- return -1;
-
- chroma_height = ((hdr_height >> 2) + 3) & 0x7ffc;
- chroma_width = ((hdr_width >> 2) + 3) & 0x7ffc;
- offs1 = bytestream_get_le32(&buf_pos);
- offs2 = bytestream_get_le32(&buf_pos);
- offs3 = bytestream_get_le32(&buf_pos);
- buf_pos += 4;
- hdr_pos = buf_pos;
- if(fflags3 == 0x80) return 4;
-
- if(fflags1 & 0x200) {
- s->cur_frame = s->iv_frame + 1;
- s->ref_frame = s->iv_frame;
- } else {
- s->cur_frame = s->iv_frame;
- s->ref_frame = s->iv_frame + 1;
- }
-
- buf_pos = buf + 16 + offs1;
- offs = bytestream_get_le32(&buf_pos);
-
- iv_Decode_Chunk(s, s->cur_frame->Ybuf, s->ref_frame->Ybuf, hdr_width,
- hdr_height, buf_pos + offs * 2, fflags2, hdr_pos, buf_pos,
- FFMIN(hdr_width, 160));
-
- if (!(s->avctx->flags & CODEC_FLAG_GRAY))
- {
-
- buf_pos = buf + 16 + offs2;
- offs = bytestream_get_le32(&buf_pos);
-
- iv_Decode_Chunk(s, s->cur_frame->Vbuf, s->ref_frame->Vbuf, chroma_width,
- chroma_height, buf_pos + offs * 2, fflags2, hdr_pos, buf_pos,
- FFMIN(chroma_width, 40));
-
- buf_pos = buf + 16 + offs3;
- offs = bytestream_get_le32(&buf_pos);
-
- iv_Decode_Chunk(s, s->cur_frame->Ubuf, s->ref_frame->Ubuf, chroma_width,
- chroma_height, buf_pos + offs * 2, fflags2, hdr_pos, buf_pos,
- FFMIN(chroma_width, 40));
-
- }
-
- return 8;
-}
-
typedef struct {
long xpos;
long ypos;
@@ -1048,6 +976,73 @@ static av_cold int indeo3_decode_init(AVCodecContext *avctx)
return ret;
}
+static unsigned long iv_decode_frame(Indeo3DecodeContext *s,
+ const uint8_t *buf, int buf_size)
+{
+ unsigned int hdr_width, hdr_height,
+ chroma_width, chroma_height;
+ unsigned long fflags1, fflags2, fflags3, offs1, offs2, offs3, offs;
+ const uint8_t *hdr_pos, *buf_pos;
+
+ buf_pos = buf;
+ buf_pos += 18;
+
+ fflags1 = bytestream_get_le16(&buf_pos);
+ fflags3 = bytestream_get_le32(&buf_pos);
+ fflags2 = *buf_pos++;
+ buf_pos += 3;
+ hdr_height = bytestream_get_le16(&buf_pos);
+ hdr_width = bytestream_get_le16(&buf_pos);
+
+ if(avcodec_check_dimensions(NULL, hdr_width, hdr_height))
+ return -1;
+
+ chroma_height = ((hdr_height >> 2) + 3) & 0x7ffc;
+ chroma_width = ((hdr_width >> 2) + 3) & 0x7ffc;
+ offs1 = bytestream_get_le32(&buf_pos);
+ offs2 = bytestream_get_le32(&buf_pos);
+ offs3 = bytestream_get_le32(&buf_pos);
+ buf_pos += 4;
+ hdr_pos = buf_pos;
+ if(fflags3 == 0x80) return 4;
+
+ if(fflags1 & 0x200) {
+ s->cur_frame = s->iv_frame + 1;
+ s->ref_frame = s->iv_frame;
+ } else {
+ s->cur_frame = s->iv_frame;
+ s->ref_frame = s->iv_frame + 1;
+ }
+
+ buf_pos = buf + 16 + offs1;
+ offs = bytestream_get_le32(&buf_pos);
+
+ iv_Decode_Chunk(s, s->cur_frame->Ybuf, s->ref_frame->Ybuf, hdr_width,
+ hdr_height, buf_pos + offs * 2, fflags2, hdr_pos, buf_pos,
+ FFMIN(hdr_width, 160));
+
+ if (!(s->avctx->flags & CODEC_FLAG_GRAY))
+ {
+
+ buf_pos = buf + 16 + offs2;
+ offs = bytestream_get_le32(&buf_pos);
+
+ iv_Decode_Chunk(s, s->cur_frame->Vbuf, s->ref_frame->Vbuf, chroma_width,
+ chroma_height, buf_pos + offs * 2, fflags2, hdr_pos, buf_pos,
+ FFMIN(chroma_width, 40));
+
+ buf_pos = buf + 16 + offs3;
+ offs = bytestream_get_le32(&buf_pos);
+
+ iv_Decode_Chunk(s, s->cur_frame->Ubuf, s->ref_frame->Ubuf, chroma_width,
+ chroma_height, buf_pos + offs * 2, fflags2, hdr_pos, buf_pos,
+ FFMIN(chroma_width, 40));
+
+ }
+
+ return 8;
+}
+
static int indeo3_decode_frame(AVCodecContext *avctx,
void *data, int *data_size,
const uint8_t *buf, int buf_size)