* cehoyos/master: Move the iconv test to the bottom of configure. Make 32bit zmbv colour-space opaque. Use uint8_t instead of uint16_t pointer in kega decoder. kgv1dec: Simplify kega decoding by using memcpy instead of loops Merged-by: Michael Niedermayer <michaelni@gmx.at>tags/n1.2
| @@ -3888,7 +3888,6 @@ enabled avisynth && require2 vfw32 "windows.h vfw.h" AVIFileInit -lavifil32 | |||||
| enabled fontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit | enabled fontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit | ||||
| enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; } | enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; } | ||||
| enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init | enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init | ||||
| enabled iconv && { check_func_headers iconv.h iconv || check_lib2 iconv.h iconv -liconv || die "ERROR: iconv not found"; } | |||||
| enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883 | enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883 | ||||
| enabled libaacplus && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus | enabled libaacplus && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus | ||||
| enabled libass && require_pkg_config libass ass/ass.h ass_library_init | enabled libass && require_pkg_config libass ass/ass.h ass_library_init | ||||
| @@ -4053,6 +4052,9 @@ enabled vdpau && | |||||
| check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" || | check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" || | ||||
| disable vdpau | disable vdpau | ||||
| # Funny iconv installations are not unusual, so check it after all flags have been set | |||||
| enabled iconv && { check_func_headers iconv.h iconv || check_lib2 iconv.h iconv -liconv || die "ERROR: iconv not found"; } | |||||
| enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel" | enabled debug && add_cflags -g"$debuglevel" && add_asflags -g"$debuglevel" | ||||
| enabled coverage && add_cflags "-fprofile-arcs -ftest-coverage" && add_ldflags "-fprofile-arcs -ftest-coverage" | enabled coverage && add_cflags "-fprofile-arcs -ftest-coverage" && add_ldflags "-fprofile-arcs -ftest-coverage" | ||||
| test -n "$valgrind" && target_exec="$valgrind --error-exitcode=1 --malloc-fill=0x2a --track-origins=yes --leak-check=full --gen-suppressions=all --suppressions=$source_path/tests/fate-valgrind.supp" | test -n "$valgrind" && target_exec="$valgrind --error-exitcode=1 --malloc-fill=0x2a --track-origins=yes --leak-check=full --gen-suppressions=all --suppressions=$source_path/tests/fate-valgrind.supp" | ||||
| @@ -50,7 +50,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, | |||||
| const uint8_t *buf_end = buf + avpkt->size; | const uint8_t *buf_end = buf + avpkt->size; | ||||
| KgvContext * const c = avctx->priv_data; | KgvContext * const c = avctx->priv_data; | ||||
| int offsets[8]; | int offsets[8]; | ||||
| uint16_t *out, *prev; | |||||
| uint8_t *out, *prev; | |||||
| int outcnt = 0, maxcnt; | int outcnt = 0, maxcnt; | ||||
| int w, h, i, res; | int w, h, i, res; | ||||
| @@ -75,9 +75,9 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, | |||||
| c->cur.reference = 3; | c->cur.reference = 3; | ||||
| if ((res = ff_get_buffer(avctx, &c->cur)) < 0) | if ((res = ff_get_buffer(avctx, &c->cur)) < 0) | ||||
| return res; | return res; | ||||
| out = (uint16_t *) c->cur.data[0]; | |||||
| out = c->cur.data[0]; | |||||
| if (c->prev.data[0]) { | if (c->prev.data[0]) { | ||||
| prev = (uint16_t *) c->prev.data[0]; | |||||
| prev = c->prev.data[0]; | |||||
| } else { | } else { | ||||
| prev = NULL; | prev = NULL; | ||||
| } | } | ||||
| @@ -90,11 +90,10 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, | |||||
| buf += 2; | buf += 2; | ||||
| if (!(code & 0x8000)) { | if (!(code & 0x8000)) { | ||||
| out[outcnt++] = code; // rgb555 pixel coded directly | |||||
| AV_WN16A(&out[2 * outcnt], code); // rgb555 pixel coded directly | |||||
| outcnt++; | |||||
| } else { | } else { | ||||
| int count; | int count; | ||||
| int inp_off; | |||||
| uint16_t *inp; | |||||
| if ((code & 0x6000) == 0x6000) { | if ((code & 0x6000) == 0x6000) { | ||||
| // copy from previous frame | // copy from previous frame | ||||
| @@ -112,7 +111,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, | |||||
| start = (outcnt + offsets[oidx]) % maxcnt; | start = (outcnt + offsets[oidx]) % maxcnt; | ||||
| if (maxcnt - start < count) | |||||
| if (maxcnt - start < count || maxcnt - outcnt < count) | |||||
| break; | break; | ||||
| if (!prev) { | if (!prev) { | ||||
| @@ -121,8 +120,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, | |||||
| break; | break; | ||||
| } | } | ||||
| inp = prev; | |||||
| inp_off = start; | |||||
| memcpy(out + 2 * outcnt, prev + 2 * start, 2 * count); | |||||
| } else { | } else { | ||||
| // copy from earlier in this frame | // copy from earlier in this frame | ||||
| int offset = (code & 0x1FFF) + 1; | int offset = (code & 0x1FFF) + 1; | ||||
| @@ -137,19 +135,12 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, | |||||
| count = 4 + *buf++; | count = 4 + *buf++; | ||||
| } | } | ||||
| if (outcnt < offset) | |||||
| if (outcnt < offset || maxcnt - outcnt < count) | |||||
| break; | break; | ||||
| inp = out; | |||||
| inp_off = outcnt - offset; | |||||
| } | |||||
| if (maxcnt - outcnt < count) | |||||
| break; | |||||
| for (i = inp_off; i < count + inp_off; i++) { | |||||
| out[outcnt++] = inp[i]; | |||||
| av_memcpy_backptr(out + 2 * outcnt, 2 * offset, 2 * count); | |||||
| } | } | ||||
| outcnt += count; | |||||
| } | } | ||||
| } | } | ||||
| @@ -479,7 +479,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPac | |||||
| c->bpp = 32; | c->bpp = 32; | ||||
| decode_intra = zmbv_decode_intra; | decode_intra = zmbv_decode_intra; | ||||
| c->decode_xor = zmbv_decode_xor_32; | c->decode_xor = zmbv_decode_xor_32; | ||||
| avctx->pix_fmt = AV_PIX_FMT_BGRA; | |||||
| avctx->pix_fmt = AV_PIX_FMT_BGR0; | |||||
| c->stride = c->width * 4; | c->stride = c->width * 4; | ||||
| break; | break; | ||||
| default: | default: | ||||