Merge commit 'c065f4a0c652cc569c927c95148111b3aa2962dc'

* commit 'c065f4a0c652cc569c927c95148111b3aa2962dc':
  huffyuv: K&R formatting cosmetics

Conflicts:
	libavcodec/huffyuvdec.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Michael Niedermayer 2014-08-04 04:34:17 +02:00
commit c1e7fb60d1
1 changed files with 172 additions and 154 deletions

View File

@ -41,17 +41,18 @@
#define classic_shift_luma_table_size 42 #define classic_shift_luma_table_size 42
static const unsigned char classic_shift_luma[classic_shift_luma_table_size + FF_INPUT_BUFFER_PADDING_SIZE] = { static const unsigned char classic_shift_luma[classic_shift_luma_table_size + FF_INPUT_BUFFER_PADDING_SIZE] = {
34,36,35,69,135,232,9,16,10,24,11,23,12,16,13,10,14,8,15,8, 34, 36, 35, 69, 135, 232, 9, 16, 10, 24, 11, 23, 12, 16, 13, 10,
16,8,17,20,16,10,207,206,205,236,11,8,10,21,9,23,8,8,199,70, 14, 8, 15, 8, 16, 8, 17, 20, 16, 10, 207, 206, 205, 236, 11, 8,
69,68, 0, 10, 21, 9, 23, 8, 8, 199, 70, 69, 68, 0,
0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,
}; };
#define classic_shift_chroma_table_size 59 #define classic_shift_chroma_table_size 59
static const unsigned char classic_shift_chroma[classic_shift_chroma_table_size + FF_INPUT_BUFFER_PADDING_SIZE] = { static const unsigned char classic_shift_chroma[classic_shift_chroma_table_size + FF_INPUT_BUFFER_PADDING_SIZE] = {
66,36,37,38,39,40,41,75,76,77,110,239,144,81,82,83,84,85,118,183, 66, 36, 37, 38, 39, 40, 41, 75, 76, 77, 110, 239, 144, 81, 82, 83,
56,57,88,89,56,89,154,57,58,57,26,141,57,56,58,57,58,57,184,119, 84, 85, 118, 183, 56, 57, 88, 89, 56, 89, 154, 57, 58, 57, 26, 141,
214,245,116,83,82,49,80,79,78,77,44,75,41,40,39,38,37,36,34, 0, 57, 56, 58, 57, 58, 57, 184, 119, 214, 245, 116, 83, 82, 49, 80, 79,
78, 77, 44, 75, 41, 40, 39, 38, 37, 36, 34, 0,
0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,
}; };
@ -153,9 +154,9 @@ static int generate_joint_tables(HYuvContext *s)
int i, b, g, r, code; int i, b, g, r, code;
int p0 = s->decorrelate; int p0 = s->decorrelate;
int p1 = !s->decorrelate; int p1 = !s->decorrelate;
// restrict the range to +/-16 because that's pretty much guaranteed to /* Restrict the range to +/-16 because that's pretty much guaranteed
// cover all the combinations that fit in 11 bits total, and it doesn't * to cover all the combinations that fit in 11 bits total, and it
// matter if we miss a few rare codes. * does not matter if we miss a few rare codes. */
for (i = 0, g = -16; g < 16; g++) { for (i = 0, g = -16; g < 16; g++) {
int len0 = s->len[p0][g & 255]; int len0 = s->len[p0][g & 255];
int limit0 = VLC_BITS - len0; int limit0 = VLC_BITS - len0;
@ -209,9 +210,8 @@ static int read_huffman_tables(HYuvContext *s, const uint8_t *src, int length)
for (i = 0; i < count; i++) { for (i = 0; i < count; i++) {
if (read_len_table(s->len[i], &gb, s->vlc_n) < 0) if (read_len_table(s->len[i], &gb, s->vlc_n) < 0)
return -1; return -1;
if (ff_huffyuv_generate_bits_table(s->bits[i], s->len[i], s->vlc_n) < 0) { if (ff_huffyuv_generate_bits_table(s->bits[i], s->len[i], s->vlc_n) < 0)
return -1; return -1;
}
ff_free_vlc(&s->vlc[i]); ff_free_vlc(&s->vlc[i]);
if ((ret = init_vlc(&s->vlc[i], VLC_BITS, s->vlc_n, s->len[i], 1, 1, if ((ret = init_vlc(&s->vlc[i], VLC_BITS, s->vlc_n, s->len[i], 1, 1,
s->bits[i], 4, 4, 0)) < 0) s->bits[i], 4, 4, 0)) < 0)
@ -240,8 +240,10 @@ static int read_old_huffman_tables(HYuvContext *s)
if (read_len_table(s->len[1], &gb, 256) < 0) if (read_len_table(s->len[1], &gb, 256) < 0)
return -1; return -1;
for(i=0; i<256; i++) s->bits[0][i] = classic_add_luma [i]; for (i = 0; i < 256; i++)
for(i=0; i<256; i++) s->bits[1][i] = classic_add_chroma[i]; s->bits[0][i] = classic_add_luma[i];
for (i = 0; i < 256; i++)
s->bits[1][i] = classic_add_chroma[i];
if (s->bitstream_bpp >= 24) { if (s->bitstream_bpp >= 24) {
memcpy(s->bits[1], s->bits[0], 256 * sizeof(uint32_t)); memcpy(s->bits[1], s->bits[0], 256 * sizeof(uint32_t));
@ -271,7 +273,6 @@ static av_cold int decode_init(AVCodecContext *avctx)
memset(s->vlc, 0, 4 * sizeof(VLC)); memset(s->vlc, 0, 4 * sizeof(VLC));
s->interlaced = avctx->height > 288; s->interlaced = avctx->height > 288;
s->bgr32 = 1; s->bgr32 = 1;
if (avctx->extradata_size) { if (avctx->extradata_size) {
@ -356,19 +357,17 @@ static av_cold int decode_init(AVCodecContext *avctx)
s->yuv = 1; s->yuv = 1;
break; break;
case 16: case 16:
if (s->yuy2) { if (s->yuy2)
avctx->pix_fmt = AV_PIX_FMT_YUYV422; avctx->pix_fmt = AV_PIX_FMT_YUYV422;
} else { else
avctx->pix_fmt = AV_PIX_FMT_YUV422P; avctx->pix_fmt = AV_PIX_FMT_YUV422P;
}
s->yuv = 1; s->yuv = 1;
break; break;
case 24: case 24:
if (s->bgr32) { if (s->bgr32)
avctx->pix_fmt = AV_PIX_FMT_0RGB32; avctx->pix_fmt = AV_PIX_FMT_0RGB32;
} else { else
avctx->pix_fmt = AV_PIX_FMT_BGR24; avctx->pix_fmt = AV_PIX_FMT_BGR24;
}
break; break;
case 32: case 32:
av_assert0(s->bgr32); av_assert0(s->bgr32);
@ -803,11 +802,10 @@ static void draw_slice(HYuvContext *s, AVFrame *frame, int y)
h = y - s->last_slice_end; h = y - s->last_slice_end;
y -= h; y -= h;
if (s->bitstream_bpp == 12) { if (s->bitstream_bpp == 12)
cy = y >> 1; cy = y >> 1;
} else { else
cy = y; cy = y;
}
offset[0] = frame->linesize[0] * y; offset[0] = frame->linesize[0] * y;
offset[1] = frame->linesize[1] * cy; offset[1] = frame->linesize[1] * cy;
@ -971,17 +969,20 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
"YUY2 output is not implemented yet\n"); "YUY2 output is not implemented yet\n");
return AVERROR_PATCHWELCOME; return AVERROR_PATCHWELCOME;
} else { } else {
leftv =
leftv = p->data[2][0] = get_bits(&s->gb, 8); p->data[2][0] = get_bits(&s->gb, 8);
lefty = p->data[0][1] = get_bits(&s->gb, 8); lefty =
leftu = p->data[1][0] = get_bits(&s->gb, 8); p->data[0][1] = get_bits(&s->gb, 8);
leftu =
p->data[1][0] = get_bits(&s->gb, 8);
p->data[0][0] = get_bits(&s->gb, 8); p->data[0][0] = get_bits(&s->gb, 8);
switch (s->predictor) { switch (s->predictor) {
case LEFT: case LEFT:
case PLANE: case PLANE:
decode_422_bitstream(s, width - 2); decode_422_bitstream(s, width - 2);
lefty = s->hdsp.add_hfyu_left_pred(p->data[0] + 2, s->temp[0], width - 2, lefty); lefty = s->hdsp.add_hfyu_left_pred(p->data[0] + 2, s->temp[0],
width - 2, lefty);
if (!(s->flags & CODEC_FLAG_GRAY)) { if (!(s->flags & CODEC_FLAG_GRAY)) {
leftu = s->hdsp.add_hfyu_left_pred(p->data[1] + 1, s->temp[1], width2 - 1, leftu); leftu = s->hdsp.add_hfyu_left_pred(p->data[1] + 1, s->temp[1], width2 - 1, leftu);
leftv = s->hdsp.add_hfyu_left_pred(p->data[2] + 1, s->temp[2], width2 - 1, leftv); leftv = s->hdsp.add_hfyu_left_pred(p->data[2] + 1, s->temp[2], width2 - 1, leftv);
@ -995,13 +996,15 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
ydst = p->data[0] + p->linesize[0] * y; ydst = p->data[0] + p->linesize[0] * y;
lefty = s->hdsp.add_hfyu_left_pred(ydst, s->temp[0], width, lefty); lefty = s->hdsp.add_hfyu_left_pred(ydst, s->temp[0],
width, lefty);
if (s->predictor == PLANE) { if (s->predictor == PLANE) {
if (y > s->interlaced) if (y > s->interlaced)
s->hdsp.add_bytes(ydst, ydst - fake_ystride, width); s->hdsp.add_bytes(ydst, ydst - fake_ystride, width);
} }
y++; y++;
if (y >= s->height) break; if (y >= s->height)
break;
} }
draw_slice(s, p, y); draw_slice(s, p, y);
@ -1011,7 +1014,8 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
vdst = p->data[2] + p->linesize[2] * cy; vdst = p->data[2] + p->linesize[2] * cy;
decode_422_bitstream(s, width); decode_422_bitstream(s, width);
lefty = s->hdsp.add_hfyu_left_pred(ydst, s->temp[0], width, lefty); lefty = s->hdsp.add_hfyu_left_pred(ydst, s->temp[0],
width, lefty);
if (!(s->flags & CODEC_FLAG_GRAY)) { if (!(s->flags & CODEC_FLAG_GRAY)) {
leftu = s->hdsp.add_hfyu_left_pred(udst, s->temp[1], width2, leftu); leftu = s->hdsp.add_hfyu_left_pred(udst, s->temp[1], width2, leftu);
leftv = s->hdsp.add_hfyu_left_pred(vdst, s->temp[2], width2, leftv); leftv = s->hdsp.add_hfyu_left_pred(vdst, s->temp[2], width2, leftv);
@ -1032,7 +1036,8 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
case MEDIAN: case MEDIAN:
/* first line except first 2 pixels is left predicted */ /* first line except first 2 pixels is left predicted */
decode_422_bitstream(s, width - 2); decode_422_bitstream(s, width - 2);
lefty = s->hdsp.add_hfyu_left_pred(p->data[0] + 2, s->temp[0], width - 2, lefty); lefty = s->hdsp.add_hfyu_left_pred(p->data[0] + 2, s->temp[0],
width - 2, lefty);
if (!(s->flags & CODEC_FLAG_GRAY)) { if (!(s->flags & CODEC_FLAG_GRAY)) {
leftu = s->hdsp.add_hfyu_left_pred(p->data[1] + 1, s->temp[1], width2 - 1, leftu); leftu = s->hdsp.add_hfyu_left_pred(p->data[1] + 1, s->temp[1], width2 - 1, leftu);
leftv = s->hdsp.add_hfyu_left_pred(p->data[2] + 1, s->temp[2], width2 - 1, leftv); leftv = s->hdsp.add_hfyu_left_pred(p->data[2] + 1, s->temp[2], width2 - 1, leftv);
@ -1043,17 +1048,20 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
/* second line is left predicted for interlaced case */ /* second line is left predicted for interlaced case */
if (s->interlaced) { if (s->interlaced) {
decode_422_bitstream(s, width); decode_422_bitstream(s, width);
lefty = s->hdsp.add_hfyu_left_pred(p->data[0] + p->linesize[0], s->temp[0], width, lefty); lefty = s->hdsp.add_hfyu_left_pred(p->data[0] + p->linesize[0],
s->temp[0], width, lefty);
if (!(s->flags & CODEC_FLAG_GRAY)) { if (!(s->flags & CODEC_FLAG_GRAY)) {
leftu = s->hdsp.add_hfyu_left_pred(p->data[1] + p->linesize[2], s->temp[1], width2, leftu); leftu = s->hdsp.add_hfyu_left_pred(p->data[1] + p->linesize[2], s->temp[1], width2, leftu);
leftv = s->hdsp.add_hfyu_left_pred(p->data[2] + p->linesize[1], s->temp[2], width2, leftv); leftv = s->hdsp.add_hfyu_left_pred(p->data[2] + p->linesize[1], s->temp[2], width2, leftv);
} }
y++; cy++; y++;
cy++;
} }
/* next 4 pixels are left predicted too */ /* next 4 pixels are left predicted too */
decode_422_bitstream(s, 4); decode_422_bitstream(s, 4);
lefty = s->hdsp.add_hfyu_left_pred(p->data[0] + fake_ystride, s->temp[0], 4, lefty); lefty = s->hdsp.add_hfyu_left_pred(p->data[0] + fake_ystride,
s->temp[0], 4, lefty);
if (!(s->flags & CODEC_FLAG_GRAY)) { if (!(s->flags & CODEC_FLAG_GRAY)) {
leftu = s->hdsp.add_hfyu_left_pred(p->data[1] + fake_ustride, s->temp[1], 2, leftu); leftu = s->hdsp.add_hfyu_left_pred(p->data[1] + fake_ustride, s->temp[1], 2, leftu);
leftv = s->hdsp.add_hfyu_left_pred(p->data[2] + fake_vstride, s->temp[2], 2, leftv); leftv = s->hdsp.add_hfyu_left_pred(p->data[2] + fake_vstride, s->temp[2], 2, leftv);
@ -1062,14 +1070,17 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
/* next line except the first 4 pixels is median predicted */ /* next line except the first 4 pixels is median predicted */
lefttopy = p->data[0][3]; lefttopy = p->data[0][3];
decode_422_bitstream(s, width - 4); decode_422_bitstream(s, width - 4);
s->hdsp.add_hfyu_median_pred(p->data[0] + fake_ystride + 4, p->data[0] + 4, s->temp[0], width - 4, &lefty, &lefttopy); s->hdsp.add_hfyu_median_pred(p->data[0] + fake_ystride + 4,
p->data[0] + 4, s->temp[0],
width - 4, &lefty, &lefttopy);
if (!(s->flags & CODEC_FLAG_GRAY)) { if (!(s->flags & CODEC_FLAG_GRAY)) {
lefttopu = p->data[1][1]; lefttopu = p->data[1][1];
lefttopv = p->data[2][1]; lefttopv = p->data[2][1];
s->hdsp.add_hfyu_median_pred(p->data[1] + fake_ustride + 2, p->data[1] + 2, s->temp[1], width2 - 2, &leftu, &lefttopu); s->hdsp.add_hfyu_median_pred(p->data[1] + fake_ustride + 2, p->data[1] + 2, s->temp[1], width2 - 2, &leftu, &lefttopu);
s->hdsp.add_hfyu_median_pred(p->data[2] + fake_vstride + 2, p->data[2] + 2, s->temp[2], width2 - 2, &leftv, &lefttopv); s->hdsp.add_hfyu_median_pred(p->data[2] + fake_vstride + 2, p->data[2] + 2, s->temp[2], width2 - 2, &leftv, &lefttopv);
} }
y++; cy++; y++;
cy++;
for (; y < height; y++, cy++) { for (; y < height; y++, cy++) {
uint8_t *ydst, *udst, *vdst; uint8_t *ydst, *udst, *vdst;
@ -1078,10 +1089,13 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
while (2 * cy > y) { while (2 * cy > y) {
decode_gray_bitstream(s, width); decode_gray_bitstream(s, width);
ydst = p->data[0] + p->linesize[0] * y; ydst = p->data[0] + p->linesize[0] * y;
s->hdsp.add_hfyu_median_pred(ydst, ydst - fake_ystride, s->temp[0], width, &lefty, &lefttopy); s->hdsp.add_hfyu_median_pred(ydst, ydst - fake_ystride,
s->temp[0], width,
&lefty, &lefttopy);
y++; y++;
} }
if (y >= height) break; if (y >= height)
break;
} }
draw_slice(s, p, y); draw_slice(s, p, y);
@ -1091,7 +1105,9 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
udst = p->data[1] + p->linesize[1] * cy; udst = p->data[1] + p->linesize[1] * cy;
vdst = p->data[2] + p->linesize[2] * cy; vdst = p->data[2] + p->linesize[2] * cy;
s->hdsp.add_hfyu_median_pred(ydst, ydst - fake_ystride, s->temp[0], width, &lefty, &lefttopy); s->hdsp.add_hfyu_median_pred(ydst, ydst - fake_ystride,
s->temp[0], width,
&lefty, &lefttopy);
if (!(s->flags & CODEC_FLAG_GRAY)) { if (!(s->flags & CODEC_FLAG_GRAY)) {
s->hdsp.add_hfyu_median_pred(udst, udst - fake_ustride, s->temp[1], width2, &leftu, &lefttopu); s->hdsp.add_hfyu_median_pred(udst, udst - fake_ustride, s->temp[1], width2, &leftu, &lefttopu);
s->hdsp.add_hfyu_median_pred(vdst, vdst - fake_vstride, s->temp[2], width2, &leftv, &lefttopv); s->hdsp.add_hfyu_median_pred(vdst, vdst - fake_vstride, s->temp[2], width2, &leftv, &lefttopv);
@ -1125,14 +1141,17 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
case LEFT: case LEFT:
case PLANE: case PLANE:
decode_bgr_bitstream(s, width - 1); decode_bgr_bitstream(s, width - 1);
s->hdsp.add_hfyu_left_pred_bgr32(p->data[0] + last_line + 4, s->temp[0], width - 1, left); s->hdsp.add_hfyu_left_pred_bgr32(p->data[0] + last_line + 4,
s->temp[0], width - 1, left);
for (y = s->height - 2; y >= 0; y--) { // Yes it is stored upside down. for (y = s->height - 2; y >= 0; y--) { // Yes it is stored upside down.
decode_bgr_bitstream(s, width); decode_bgr_bitstream(s, width);
s->hdsp.add_hfyu_left_pred_bgr32(p->data[0] + p->linesize[0] * y, s->temp[0], width, left); s->hdsp.add_hfyu_left_pred_bgr32(p->data[0] + p->linesize[0] * y,
s->temp[0], width, left);
if (s->predictor == PLANE) { if (s->predictor == PLANE) {
if (s->bitstream_bpp != 32) left[A] = 0; if (s->bitstream_bpp != 32)
left[A] = 0;
if ((y & s->interlaced) == 0 && if ((y & s->interlaced) == 0 &&
y < s->height - 1 - s->interlaced) { y < s->height - 1 - s->interlaced) {
s->hdsp.add_bytes(p->data[0] + p->linesize[0] * y, s->hdsp.add_bytes(p->data[0] + p->linesize[0] * y,
@ -1169,9 +1188,8 @@ static av_cold int decode_end(AVCodecContext *avctx)
ff_huffyuv_common_end(s); ff_huffyuv_common_end(s);
av_freep(&s->bitstream_buffer); av_freep(&s->bitstream_buffer);
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++)
ff_free_vlc(&s->vlc[i]); ff_free_vlc(&s->vlc[i]);
}
return 0; return 0;
} }
@ -1204,4 +1222,4 @@ AVCodec ff_ffvhuff_decoder = {
CODEC_CAP_FRAME_THREADS, CODEC_CAP_FRAME_THREADS,
.init_thread_copy = ONLY_IF_THREADS_ENABLED(decode_init_thread_copy), .init_thread_copy = ONLY_IF_THREADS_ENABLED(decode_init_thread_copy),
}; };
#endif #endif /* CONFIG_FFVHUFF_DECODER */