| 95 | } |
| 96 | |
| 97 | static av_cold int iv_alloc_frames(Indeo3DecodeContext *s) |
| 98 | { |
| 99 | int luma_width = (s->width + 3) & ~3, |
| 100 | luma_height = (s->height + 3) & ~3, |
| 101 | chroma_width = ((luma_width >> 2) + 3) & ~3, |
| 102 | chroma_height = ((luma_height >> 2) + 3) & ~3, |
| 103 | luma_pixels = luma_width * luma_height, |
| 104 | chroma_pixels = chroma_width * chroma_height, |
| 105 | i; |
| 106 | unsigned int bufsize = luma_pixels * 2 + luma_width * 3 + |
| 107 | (chroma_pixels + chroma_width) * 4; |
| 108 | |
| 109 | av_freep(&s->buf); |
| 110 | if(!(s->buf = av_malloc(bufsize))) |
| 111 | return AVERROR(ENOMEM); |
| 112 | s->iv_frame[0].y_w = s->iv_frame[1].y_w = luma_width; |
| 113 | s->iv_frame[0].y_h = s->iv_frame[1].y_h = luma_height; |
| 114 | s->iv_frame[0].uv_w = s->iv_frame[1].uv_w = chroma_width; |
| 115 | s->iv_frame[0].uv_h = s->iv_frame[1].uv_h = chroma_height; |
| 116 | |
| 117 | s->iv_frame[0].Ybuf = s->buf + luma_width; |
| 118 | i = luma_pixels + luma_width * 2; |
| 119 | s->iv_frame[1].Ybuf = s->buf + i; |
| 120 | i += (luma_pixels + luma_width); |
| 121 | s->iv_frame[0].Ubuf = s->buf + i; |
| 122 | i += (chroma_pixels + chroma_width); |
| 123 | s->iv_frame[1].Ubuf = s->buf + i; |
| 124 | i += (chroma_pixels + chroma_width); |
| 125 | s->iv_frame[0].Vbuf = s->buf + i; |
| 126 | i += (chroma_pixels + chroma_width); |
| 127 | s->iv_frame[1].Vbuf = s->buf + i; |
| 128 | |
| 129 | for(i = 1; i <= luma_width; i++) |
| 130 | s->iv_frame[0].Ybuf[-i] = s->iv_frame[1].Ybuf[-i] = |
| 131 | s->iv_frame[0].Ubuf[-i] = 0x80; |
| 132 | |
| 133 | for(i = 1; i <= chroma_width; i++) { |
| 134 | s->iv_frame[1].Ubuf[-i] = 0x80; |
| 135 | s->iv_frame[0].Vbuf[-i] = 0x80; |
| 136 | s->iv_frame[1].Vbuf[-i] = 0x80; |
| 137 | s->iv_frame[1].Vbuf[chroma_pixels+i-1] = 0x80; |
| 138 | } |
| 139 | |
| 140 | return 0; |
| 141 | } |
| 142 | |
| 143 | static av_cold void iv_free_func(Indeo3DecodeContext *s) |
| 144 | { |
no test coverage detected