[FFmpeg-cvslog] configure: Only try to use the -no_warn_duplicate_libraries flag on Darwin
ffmpeg | branch: master | Martin Storsjö | Mon Oct 14 23:43:11 2024 +0300| [38d08f5c451a312d9064b81472fa05ff53b2e780] | committer: Martin Storsjö configure: Only try to use the -no_warn_duplicate_libraries flag on Darwin While we only add the flag if the linker seems to support it, it turns out that ld.bfd had a bug where the flag is accidentally accepted, and the flag produces an output file named "_warn_duplicate_libraries". The ld.bfd bug was fixed in binutils 2.36, in https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=3991c7acb29aa8d7d52150695eb3efa03a08dd50. Signed-off-by: Martin Storsjö > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=38d08f5c451a312d9064b81472fa05ff53b2e780 --- configure | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/configure b/configure index 8803148ab7..9f508a2527 100755 --- a/configure +++ b/configure @@ -6478,7 +6478,9 @@ check_cc intrinsics_sse2 emmintrin.h "__m128i test = _mm_setzero_si128()" check_ldflags -Wl,--as-needed check_ldflags -Wl,-z,noexecstack -check_ldflags -Wl,-no_warn_duplicate_libraries +if [ $target_os = "darwin" ]; then +check_ldflags -Wl,-no_warn_duplicate_libraries +fi if ! disabled network; then check_func getaddrinfo $network_extralibs ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] avcodec/ffv1dec: Fix end computation with ec=2
ffmpeg | branch: master | Michael Niedermayer | Thu Oct 10 20:39:23 2024 +0200| [10e5af15bf220d9da128ca12d2d474ff6ab0076e] | committer: Michael Niedermayer avcodec/ffv1dec: Fix end computation with ec=2 Sponsored-by: Sovereign Tech Fund Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=10e5af15bf220d9da128ca12d2d474ff6ab0076e --- libavcodec/ffv1dec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/ffv1dec.c b/libavcodec/ffv1dec.c index b4d719a7ee..6aa36716cb 100644 --- a/libavcodec/ffv1dec.c +++ b/libavcodec/ffv1dec.c @@ -347,7 +347,7 @@ static int decode_slice(AVCodecContext *c, void *arg) if (f->ac != AC_GOLOMB_RICE && f->version > 2) { int v; get_rac(&sc->c, (uint8_t[]) { 129 }); -v = sc->c.bytestream_end - sc->c.bytestream - 2 - 5*f->ec; +v = sc->c.bytestream_end - sc->c.bytestream - 2 - 5*!!f->ec; if (v) { av_log(f->avctx, AV_LOG_ERROR, "bytestream end mismatching by %d\n", v); slice_set_damaged(f, sc); ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] avcodec/ffv1enc: Fix RCT with RGB64
ffmpeg | branch: master | Michael Niedermayer | Thu Oct 10 22:14:41 2024 +0200| [c1edec3a24306f8fa31bebe67644183741cbf0e0] | committer: Michael Niedermayer avcodec/ffv1enc: Fix RCT with RGB64 Sponsored-by: Sovereign Tech Fund Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c1edec3a24306f8fa31bebe67644183741cbf0e0 --- libavcodec/ffv1enc.c | 8 1 file changed, 8 insertions(+) diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c index 8295ddedf4..f1228c5252 100644 --- a/libavcodec/ffv1enc.c +++ b/libavcodec/ffv1enc.c @@ -988,6 +988,9 @@ static void choose_rct_params(const FFV1Context *f, FFV1SliceContext *sc, int x, y, i, p, best; int16_t *sample[3]; int lbd = f->bits_per_raw_sample <= 8; +int packed = !src[1]; +int transparency = f->transparency; +int packed_size = (3 + transparency)*2; for (y = 0; y < h; y++) { int lastr=0, lastg=0, lastb=0; @@ -1002,6 +1005,11 @@ static void choose_rct_params(const FFV1Context *f, FFV1SliceContext *sc, b = v& 0xFF; g = (v >> 8) & 0xFF; r = (v >> 16) & 0xFF; +} else if (packed) { +const uint16_t *p = ((const uint16_t*)(src[0] + x*packed_size + stride[0]*y)); +r = p[0]; +g = p[1]; +b = p[2]; } else { b = *((const uint16_t*)(src[0] + x*2 + stride[0]*y)); g = *((const uint16_t*)(src[1] + x*2 + stride[1]*y)); ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] avcodec/ffv1enc: allow manually specifying the crc type
ffmpeg | branch: master | Michael Niedermayer | Thu Oct 10 19:38:52 2024 +0200| [d9269fcacf32a30e502a62e60808e0eee090c588] | committer: Michael Niedermayer avcodec/ffv1enc: allow manually specifying the crc type Sponsored-by: Sovereign Tech Fund Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d9269fcacf32a30e502a62e60808e0eee090c588 --- libavcodec/ffv1enc.c | 6 -- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c index b9ee5b629a..76f5cf4b25 100644 --- a/libavcodec/ffv1enc.c +++ b/libavcodec/ffv1enc.c @@ -559,8 +559,10 @@ static av_cold int encode_init(AVCodecContext *avctx) } // CRC requires version 3+ -if (s->ec) +if (s->ec == 1) s->version = FFMAX(s->version, 3); +if (s->ec == 2) +s->version = FFMAX(s->version, 4); if ((s->version == 2 || s->version>3) && avctx->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL) { av_log(avctx, AV_LOG_ERROR, "Version 2 or 4 needed for requested features but version 2 or 4 is experimental and not enabled\n"); @@ -1266,7 +1268,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, #define OFFSET(x) offsetof(FFV1Context, x) #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM static const AVOption options[] = { -{ "slicecrc", "Protect slices with CRCs", OFFSET(ec), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE }, +{ "slicecrc", "Protect slices with CRCs", OFFSET(ec), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 2, VE }, { "coder", "Coder type", OFFSET(ac), AV_OPT_TYPE_INT, { .i64 = 0 }, -2, 2, VE, .unit = "coder" }, { "rice", "Golomb rice", 0, AV_OPT_TYPE_CONST, ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] avcodec/ffv1enc: Move slice termination into threads
ffmpeg | branch: master | Michael Niedermayer | Thu Oct 10 19:57:07 2024 +0200| [8e52b1525831987bcc389c89ccf53a76e7177fe1] | committer: Michael Niedermayer avcodec/ffv1enc: Move slice termination into threads Sponsored-by: Sovereign Tech Fund Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8e52b1525831987bcc389c89ccf53a76e7177fe1 --- libavcodec/ffv1enc.c | 16 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/libavcodec/ffv1enc.c b/libavcodec/ffv1enc.c index 76f5cf4b25..8295ddedf4 100644 --- a/libavcodec/ffv1enc.c +++ b/libavcodec/ffv1enc.c @@ -1105,6 +1105,13 @@ retry: ret = encode_rgb_frame(f, sc, planes, width, height, p->linesize); } +if (f->ac != AC_GOLOMB_RICE) { +sc->ac_byte_count = ff_rac_terminate(&sc->c, 1); +} else { +flush_put_bits(&sc->pb); // FIXME: nicer padding +sc->ac_byte_count += put_bytes_output(&sc->pb); +} + if (ret < 0) { av_assert0(sc->slice_coding_mode == 0); if (f->version < 4 || !f->ac) { @@ -1229,14 +1236,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, buf_p = pkt->data; for (i = 0; i < f->slice_count; i++) { FFV1SliceContext *sc = &f->slices[i]; -int bytes; - -if (f->ac != AC_GOLOMB_RICE) { -bytes = ff_rac_terminate(&sc->c, 1); -} else { -flush_put_bits(&sc->pb); // FIXME: nicer padding -bytes = sc->ac_byte_count + put_bytes_output(&sc->pb); -} +int bytes = sc->ac_byte_count; if (i > 0 || f->version > 2) { av_assert0(bytes < pkt->size / f->slice_count); memmove(buf_p, sc->c.bytestream_start, bytes); ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] avfilter/vsrc_testsrc: add missing alpha plane define
ffmpeg | branch: master | James Almer | Mon Oct 14 12:02:30 2024 -0300| [3827233187ca843f701b29885e0a3b2510763161] | committer: James Almer avfilter/vsrc_testsrc: add missing alpha plane define "A" was never being defined if yuvtestsrc was enabled but rgbtestsrc disabled. Signed-off-by: James Almer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=3827233187ca843f701b29885e0a3b2510763161 --- libavfilter/vsrc_testsrc.c | 11 +++ 1 file changed, 11 insertions(+) diff --git a/libavfilter/vsrc_testsrc.c b/libavfilter/vsrc_testsrc.c index 3d80267399..7f8db39f84 100644 --- a/libavfilter/vsrc_testsrc.c +++ b/libavfilter/vsrc_testsrc.c @@ -1140,6 +1140,11 @@ const AVFilter ff_vsrc_rgbtestsrc = { FILTER_PIXFMTS_ARRAY(rgbtest_pix_fmts), }; +#undef R +#undef G +#undef B +#undef A + #endif /* CONFIG_RGBTESTSRC_FILTER */ #if CONFIG_YUVTESTSRC_FILTER @@ -1147,6 +1152,7 @@ const AVFilter ff_vsrc_rgbtestsrc = { #define Y 0 #define U 1 #define V 2 +#define A 3 static void yuvtest_put_pixel(uint8_t *dstp[4], int dst_linesizep[4], int i, int j, unsigned y, unsigned u, unsigned v, enum AVPixelFormat fmt, @@ -1264,6 +1270,11 @@ const AVFilter ff_vsrc_yuvtestsrc = { FILTER_PIXFMTS_ARRAY(yuvtest_pix_fmts), }; +#undef Y +#undef U +#undef V +#undef A + #endif /* CONFIG_YUVTESTSRC_FILTER */ #if CONFIG_PAL75BARS_FILTER || CONFIG_PAL100BARS_FILTER || CONFIG_SMPTEBARS_FILTER || CONFIG_SMPTEHDBARS_FILTER ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] avfilter/vsdc_testsrc: simplify yuvtest_fill_picture
ffmpeg | branch: master | James Almer | Sat Oct 12 16:55:05 2024 -0300| [667e22e85dcdf85975cd1f6a9b2bb4d110ff7823] | committer: James Almer avfilter/vsdc_testsrc: simplify yuvtest_fill_picture Copy what's done for rgbtest_fill_picture. It will be useful for the following commit. Signed-off-by: James Almer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=667e22e85dcdf85975cd1f6a9b2bb4d110ff7823 --- libavfilter/drawutils.c| 48 +-- libavfilter/drawutils.h| 1 + libavfilter/vsrc_testsrc.c | 145 ++--- 3 files changed, 75 insertions(+), 119 deletions(-) diff --git a/libavfilter/drawutils.c b/libavfilter/drawutils.c index 95525d38b4..b86f666f1f 100644 --- a/libavfilter/drawutils.c +++ b/libavfilter/drawutils.c @@ -32,19 +32,17 @@ enum { RED = 0, GREEN, BLUE, ALPHA }; -int ff_fill_rgba_map(uint8_t *rgba_map, enum AVPixelFormat pix_fmt) +static int fill_map(const AVPixFmtDescriptor *desc, uint8_t *map) { -const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); -if (!(desc->flags & AV_PIX_FMT_FLAG_RGB)) -return AVERROR(EINVAL); -if (desc->flags & AV_PIX_FMT_FLAG_BITSTREAM) +if (desc->flags & (AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_HWACCEL | + AV_PIX_FMT_FLAG_BAYER | AV_PIX_FMT_FLAG_XYZ | AV_PIX_FMT_FLAG_PAL)) return AVERROR(EINVAL); av_assert0(desc->nb_components == 3 + !!(desc->flags & AV_PIX_FMT_FLAG_ALPHA)); if (desc->flags & AV_PIX_FMT_FLAG_PLANAR) { -rgba_map[RED] = desc->comp[0].plane; -rgba_map[GREEN] = desc->comp[1].plane; -rgba_map[BLUE] = desc->comp[2].plane; -rgba_map[ALPHA] = (desc->flags & AV_PIX_FMT_FLAG_ALPHA) ? desc->comp[3].plane : 3; +map[RED] = desc->comp[0].plane; +map[GREEN] = desc->comp[1].plane; +map[BLUE] = desc->comp[2].plane; +map[ALPHA] = (desc->flags & AV_PIX_FMT_FLAG_ALPHA) ? desc->comp[3].plane : 3; } else { int had0 = 0; unsigned depthb = 0; @@ -60,24 +58,40 @@ int ff_fill_rgba_map(uint8_t *rgba_map, enum AVPixelFormat pix_fmt) return AVERROR(ENOSYS); had0 |= pos == 0; -rgba_map[i] = pos; +map[i] = pos; depthb = db; } if (desc->nb_components == 3) -rgba_map[ALPHA] = had0 ? 3 : 0; +map[ALPHA] = had0 ? 3 : 0; } -av_assert0(rgba_map[RED] != rgba_map[GREEN]); -av_assert0(rgba_map[GREEN] != rgba_map[BLUE]); -av_assert0(rgba_map[BLUE] != rgba_map[RED]); -av_assert0(rgba_map[RED] != rgba_map[ALPHA]); -av_assert0(rgba_map[GREEN] != rgba_map[ALPHA]); -av_assert0(rgba_map[BLUE] != rgba_map[ALPHA]); +av_assert0(map[RED] != map[GREEN]); +av_assert0(map[GREEN] != map[BLUE]); +av_assert0(map[BLUE] != map[RED]); +av_assert0(map[RED] != map[ALPHA]); +av_assert0(map[GREEN] != map[ALPHA]); +av_assert0(map[BLUE] != map[ALPHA]); return 0; } +int ff_fill_rgba_map(uint8_t *rgba_map, enum AVPixelFormat pix_fmt) +{ +const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); +if (!(desc->flags & AV_PIX_FMT_FLAG_RGB)) +return AVERROR(EINVAL); +return fill_map(desc, rgba_map); +} + +int ff_fill_ayuv_map(uint8_t *ayuv_map, enum AVPixelFormat pix_fmt) +{ +const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); +if (desc->flags & AV_PIX_FMT_FLAG_RGB) +return AVERROR(EINVAL); +return fill_map(desc, ayuv_map); +} + int ff_draw_init2(FFDrawContext *draw, enum AVPixelFormat format, enum AVColorSpace csp, enum AVColorRange range, unsigned flags) { diff --git a/libavfilter/drawutils.h b/libavfilter/drawutils.h index 90df55107a..f4903d1a86 100644 --- a/libavfilter/drawutils.h +++ b/libavfilter/drawutils.h @@ -29,6 +29,7 @@ #include "libavutil/pixfmt.h" int ff_fill_rgba_map(uint8_t *rgba_map, enum AVPixelFormat pix_fmt); +int ff_fill_ayuv_map(uint8_t *ayuv_map, enum AVPixelFormat pix_fmt); #define MAX_PLANES 4 diff --git a/libavfilter/vsrc_testsrc.c b/libavfilter/vsrc_testsrc.c index b004d2d0e0..b182abea0f 100644 --- a/libavfilter/vsrc_testsrc.c +++ b/libavfilter/vsrc_testsrc.c @@ -71,6 +71,9 @@ typedef struct TestSourceContext { /* only used by testsrc2 */ int alpha; +/* only used by yuvtest */ +uint8_t ayuv_map[4]; + /* only used by colorspectrum */ int type; @@ -1141,118 +1144,56 @@ const AVFilter ff_vsrc_rgbtestsrc = { #if CONFIG_YUVTESTSRC_FILTER -static void yuvtest_fill_picture8(AVFilterContext *ctx, AVFrame *frame) -{ -int x, y, w = frame->width, h = frame->height / 3; -const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(frame->format); -const int factor = 1 << desc->comp[0].depth; -const int mid = 1 << (desc->comp[0].depth - 1); -uint8_t *ydst = frame->data[0]; -uint8_t *udst = frame->data[1]; -uint8_t *vdst = frame->dat
[FFmpeg-cvslog] fate/filter-video: add tests for packed YUV in yuvtestsrc
ffmpeg | branch: master | James Almer | Sat Oct 12 17:01:35 2024 -0300| [4f0514df62a642a511db13afb27d420ef04713a0] | committer: James Almer fate/filter-video: add tests for packed YUV in yuvtestsrc Signed-off-by: James Almer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=4f0514df62a642a511db13afb27d420ef04713a0 --- tests/fate/filter-video.mak | 12 tests/ref/fate/filter-yuvtestsrc-ayuv | 10 ++ tests/ref/fate/filter-yuvtestsrc-vuya | 10 ++ tests/ref/fate/filter-yuvtestsrc-vyu444 | 10 ++ tests/ref/fate/filter-yuvtestsrc-xv30le | 10 ++ 5 files changed, 52 insertions(+) diff --git a/tests/fate/filter-video.mak b/tests/fate/filter-video.mak index 5b8a294afd..c5c82f72ed 100644 --- a/tests/fate/filter-video.mak +++ b/tests/fate/filter-video.mak @@ -112,6 +112,18 @@ fate-filter-yuvtestsrc-yuv444p: CMD = framecrc -lavfi yuvtestsrc=rate=5:duration FATE_FILTER-$(call FILTERFRAMECRC, YUVTESTSRC SCALE) += fate-filter-yuvtestsrc-yuv444p12 fate-filter-yuvtestsrc-yuv444p12: CMD = framecrc -lavfi yuvtestsrc=rate=5:duration=1,format=yuv444p12,scale -pix_fmt yuv444p12le +FATE_FILTER-$(call FILTERFRAMECRC, YUVTESTSRC) += fate-filter-yuvtestsrc-ayuv +fate-filter-yuvtestsrc-ayuv: CMD = framecrc -lavfi yuvtestsrc=rate=5:duration=1 -pix_fmt ayuv + +FATE_FILTER-$(call FILTERFRAMECRC, YUVTESTSRC) += fate-filter-yuvtestsrc-vuya +fate-filter-yuvtestsrc-vuya: CMD = framecrc -lavfi yuvtestsrc=rate=5:duration=1 -pix_fmt vuya + +FATE_FILTER-$(call FILTERFRAMECRC, YUVTESTSRC) += fate-filter-yuvtestsrc-vyu444 +fate-filter-yuvtestsrc-vyu444: CMD = framecrc -lavfi yuvtestsrc=rate=5:duration=1 -pix_fmt vyu444 + +FATE_FILTER-$(call FILTERFRAMECRC, YUVTESTSRC) += fate-filter-yuvtestsrc-xv30le +fate-filter-yuvtestsrc-xv30le: CMD = framecrc -lavfi yuvtestsrc=rate=5:duration=1 -pix_fmt xv30le + FATE_FILTER-$(call FILTERFRAMECRC, TESTSRC FORMAT CONCAT SCALE, LAVFI_INDEV FILE_PROTOCOL) += fate-filter-lavd-scalenorm fate-filter-lavd-scalenorm: tests/data/filtergraphs/scalenorm fate-filter-lavd-scalenorm: CMD = framecrc -f lavfi -graph_file $(TARGET_PATH)/tests/data/filtergraphs/scalenorm -i dummy diff --git a/tests/ref/fate/filter-yuvtestsrc-ayuv b/tests/ref/fate/filter-yuvtestsrc-ayuv new file mode 100644 index 00..91c15bebb9 --- /dev/null +++ b/tests/ref/fate/filter-yuvtestsrc-ayuv @@ -0,0 +1,10 @@ +#tb 0: 1/5 +#media_type 0: video +#codec_id 0: rawvideo +#dimensions 0: 320x240 +#sar 0: 1/1 +0, 0, 0,1, 307200, 0xd4270fd4 +0, 1, 1,1, 307200, 0xd4270fd4 +0, 2, 2,1, 307200, 0xd4270fd4 +0, 3, 3,1, 307200, 0xd4270fd4 +0, 4, 4,1, 307200, 0xd4270fd4 diff --git a/tests/ref/fate/filter-yuvtestsrc-vuya b/tests/ref/fate/filter-yuvtestsrc-vuya new file mode 100644 index 00..f91ef558d7 --- /dev/null +++ b/tests/ref/fate/filter-yuvtestsrc-vuya @@ -0,0 +1,10 @@ +#tb 0: 1/5 +#media_type 0: video +#codec_id 0: rawvideo +#dimensions 0: 320x240 +#sar 0: 1/1 +0, 0, 0,1, 307200, 0x4df60fd4 +0, 1, 1,1, 307200, 0x4df60fd4 +0, 2, 2,1, 307200, 0x4df60fd4 +0, 3, 3,1, 307200, 0x4df60fd4 +0, 4, 4,1, 307200, 0x4df60fd4 diff --git a/tests/ref/fate/filter-yuvtestsrc-vyu444 b/tests/ref/fate/filter-yuvtestsrc-vyu444 new file mode 100644 index 00..a01e088d1e --- /dev/null +++ b/tests/ref/fate/filter-yuvtestsrc-vyu444 @@ -0,0 +1,10 @@ +#tb 0: 1/5 +#media_type 0: video +#codec_id 0: rawvideo +#dimensions 0: 320x240 +#sar 0: 1/1 +0, 0, 0,1, 230400, 0x8c622a4f +0, 1, 1,1, 230400, 0x8c622a4f +0, 2, 2,1, 230400, 0x8c622a4f +0, 3, 3,1, 230400, 0x8c622a4f +0, 4, 4,1, 230400, 0x8c622a4f diff --git a/tests/ref/fate/filter-yuvtestsrc-xv30le b/tests/ref/fate/filter-yuvtestsrc-xv30le new file mode 100644 index 00..4d5a4ce8c1 --- /dev/null +++ b/tests/ref/fate/filter-yuvtestsrc-xv30le @@ -0,0 +1,10 @@ +#tb 0: 1/5 +#media_type 0: video +#codec_id 0: rawvideo +#dimensions 0: 320x240 +#sar 0: 1/1 +0, 0, 0,1, 307200, 0xc7a544aa +0, 1, 1,1, 307200, 0xc7a544aa +0, 2, 2,1, 307200, 0xc7a544aa +0, 3, 3,1, 307200, 0xc7a544aa +0, 4, 4,1, 307200, 0xc7a544aa ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] avfilter/vsrc_testsrc: add support for packed YUV formats in yuvtestsrc
ffmpeg | branch: master | James Almer | Sat Oct 12 16:55:28 2024 -0300| [f2853002dd33400f1db02ff8371bb36e0755899e] | committer: James Almer avfilter/vsrc_testsrc: add support for packed YUV formats in yuvtestsrc Signed-off-by: James Almer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f2853002dd33400f1db02ff8371bb36e0755899e --- libavfilter/vsrc_testsrc.c | 26 -- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/libavfilter/vsrc_testsrc.c b/libavfilter/vsrc_testsrc.c index b182abea0f..3d80267399 100644 --- a/libavfilter/vsrc_testsrc.c +++ b/libavfilter/vsrc_testsrc.c @@ -1152,9 +1152,28 @@ static void yuvtest_put_pixel(uint8_t *dstp[4], int dst_linesizep[4], int i, int j, unsigned y, unsigned u, unsigned v, enum AVPixelFormat fmt, uint8_t ayuv_map[4]) { +const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(fmt); uint32_t n; switch (fmt) { +case AV_PIX_FMT_VYU444: +n = (y << (ayuv_map[Y]*8)) + (u << (ayuv_map[U]*8)) + (v << (ayuv_map[V]*8)); +AV_WL24(&dstp[0][i*3 + j*dst_linesizep[0]], n); +break; +case AV_PIX_FMT_V30XLE: +case AV_PIX_FMT_XV30LE: +n = (y << ((desc->comp[0].offset*8) + desc->comp[0].shift)) + +(u << ((desc->comp[1].offset*8) + desc->comp[1].shift)) + +(v << ((desc->comp[2].offset*8) + desc->comp[2].shift)); +AV_WL32(&dstp[0][i*4 + j*dst_linesizep[0]], n); +break; +case AV_PIX_FMT_UYVA: +case AV_PIX_FMT_VUYA: +case AV_PIX_FMT_VUYX: +case AV_PIX_FMT_AYUV: +n = (y << (ayuv_map[Y]*8)) + (u << (ayuv_map[U]*8)) + (v << (ayuv_map[V]*8)) + (255U << (ayuv_map[A]*8)); +AV_WL32(&dstp[0][i*4 + j*dst_linesizep[0]], n); +break; case AV_PIX_FMT_YUV444P: case AV_PIX_FMT_YUVJ444P: dstp[0][i + j*dst_linesizep[0]] = y; @@ -1177,7 +1196,7 @@ static void yuvtest_fill_picture(AVFilterContext *ctx, AVFrame *frame) { TestSourceContext *test = ctx->priv; int i, j, w = frame->width, h = frame->height; -const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(frame->format); +const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(ctx->outputs[0]->format); const int factor = 1 << desc->comp[0].depth; const int mid = 1 << (desc->comp[0].depth - 1); @@ -1209,7 +1228,10 @@ static const enum AVPixelFormat yuvtest_pix_fmts[] = { AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUV444P9, AV_PIX_FMT_YUV444P10, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV444P14, -AV_PIX_FMT_YUV444P16, +AV_PIX_FMT_YUV444P16, AV_PIX_FMT_VYU444, +AV_PIX_FMT_AYUV, AV_PIX_FMT_UYVA, +AV_PIX_FMT_VUYA, AV_PIX_FMT_VUYX, +AV_PIX_FMT_XV30LE, AV_PIX_FMT_V30XLE, AV_PIX_FMT_NONE }; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] avcodec/flashsvenc: add compression_level option
ffmpeg | branch: master | Ramiro Polla | Sun Sep 29 20:36:28 2024 +0200| [3661d1982d8305b75bb13a8d2ae9aaf1c2e34bbc] | committer: James Almer avcodec/flashsvenc: add compression_level option This allows setting the compression level used by zlib. Signed-off-by: James Almer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=3661d1982d8305b75bb13a8d2ae9aaf1c2e34bbc --- libavcodec/flashsvenc.c | 10 -- tests/ref/vsynth/vsynth1-flashsv | 2 +- tests/ref/vsynth/vsynth2-flashsv | 4 ++-- tests/ref/vsynth/vsynth3-flashsv | 2 +- tests/ref/vsynth/vsynth_lena-flashsv | 2 +- 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/libavcodec/flashsvenc.c b/libavcodec/flashsvenc.c index 5cf0602f5d..f650e517d0 100644 --- a/libavcodec/flashsvenc.c +++ b/libavcodec/flashsvenc.c @@ -67,6 +67,7 @@ typedef struct FlashSVContext { unsignedpacket_size; int64_t last_key_frame; uint8_t tmpblock[3 * 256 * 256]; +int compression_level; } FlashSVContext; static int copy_region_enc(const uint8_t *sptr, uint8_t *dptr, int dx, int dy, @@ -121,6 +122,10 @@ static av_cold int flashsv_encode_init(AVCodecContext *avctx) nb_blocks = h_blocks * v_blocks; s->packet_size = 4 + nb_blocks * (2 + 3 * BLOCK_WIDTH * BLOCK_HEIGHT); +s->compression_level = avctx->compression_level == FF_COMPRESSION_DEFAULT + ? Z_DEFAULT_COMPRESSION + : av_clip(avctx->compression_level, 0, 9); + return 0; } @@ -170,9 +175,10 @@ static int encode_bitstream(FlashSVContext *s, const AVFrame *p, uint8_t *buf, p->linesize[0], previous_frame); if (res || *I_frame) { -unsigned long zsize = 3 * block_width * block_height; +unsigned long zsize = 3 * block_width * block_height + 12; ret = compress2(ptr + 2, &zsize, s->tmpblock, -3 * cur_blk_width * cur_blk_height, 9); +3 * cur_blk_width * cur_blk_height, +s->compression_level); if (ret != Z_OK) av_log(s->avctx, AV_LOG_ERROR, diff --git a/tests/ref/vsynth/vsynth1-flashsv b/tests/ref/vsynth/vsynth1-flashsv index 8b2783032b..05f9e9432d 100644 --- a/tests/ref/vsynth/vsynth1-flashsv +++ b/tests/ref/vsynth/vsynth1-flashsv @@ -1,4 +1,4 @@ -97894502b4cb57aca1105b6333f72dae *tests/data/fate/vsynth1-flashsv.flv +61b0825258ac6fe85691bdefd892960d *tests/data/fate/vsynth1-flashsv.flv 14681925 tests/data/fate/vsynth1-flashsv.flv 791e1fb999deb2e4156e2286d48c4ed1 *tests/data/fate/vsynth1-flashsv.out.rawvideo stddev:2.84 PSNR: 39.04 MAXDIFF: 49 bytes: 7603200/ 7603200 diff --git a/tests/ref/vsynth/vsynth2-flashsv b/tests/ref/vsynth/vsynth2-flashsv index 9bda896687..f659edaab5 100644 --- a/tests/ref/vsynth/vsynth2-flashsv +++ b/tests/ref/vsynth/vsynth2-flashsv @@ -1,4 +1,4 @@ -f4b45770dd93b43b4077532e8ef90bfc *tests/data/fate/vsynth2-flashsv.flv -11636546 tests/data/fate/vsynth2-flashsv.flv +a2f145e6e44b51f8fc64ead06a994273 *tests/data/fate/vsynth2-flashsv.flv +11637702 tests/data/fate/vsynth2-flashsv.flv 7f0fc12c02e68faddc153e69ddd6841c *tests/data/fate/vsynth2-flashsv.out.rawvideo stddev:1.20 PSNR: 46.52 MAXDIFF: 20 bytes: 7603200/ 7603200 diff --git a/tests/ref/vsynth/vsynth3-flashsv b/tests/ref/vsynth/vsynth3-flashsv index 38a34bd71d..cdf9e7bf99 100644 --- a/tests/ref/vsynth/vsynth3-flashsv +++ b/tests/ref/vsynth/vsynth3-flashsv @@ -1,4 +1,4 @@ -832fe60169f4d91339458c60a5292924 *tests/data/fate/vsynth3-flashsv.flv +a05a9ab0ae21925dd10a83639de77d77 *tests/data/fate/vsynth3-flashsv.flv 171419 tests/data/fate/vsynth3-flashsv.flv faa660b0ecaaab1bf9b5d7284019aa01 *tests/data/fate/vsynth3-flashsv.out.rawvideo stddev:2.97 PSNR: 38.67 MAXDIFF: 49 bytes:86700/86700 diff --git a/tests/ref/vsynth/vsynth_lena-flashsv b/tests/ref/vsynth/vsynth_lena-flashsv index 52046cdf2e..7dfec3edf5 100644 --- a/tests/ref/vsynth/vsynth_lena-flashsv +++ b/tests/ref/vsynth/vsynth_lena-flashsv @@ -1,4 +1,4 @@ -0667077971e0cb63b5f49c580006e90e *tests/data/fate/vsynth_lena-flashsv.flv +59cdcf5f92c5113e27b2fda632ccd55c *tests/data/fate/vsynth_lena-flashsv.flv 12368953 tests/data/fate/vsynth_lena-flashsv.flv 3a984506f1ebfc9fb73b6814cab201cc *tests/data/fate/vsynth_lena-flashsv.out.rawvideo stddev:0.66 PSNR: 51.73 MAXDIFF: 14 bytes: 7603200/ 7603200 ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] tests/fate: disable compression for zlib-based codecs
ffmpeg | branch: master | Ramiro Polla | Sun Sep 29 20:36:29 2024 +0200| [bce5855afb25d318e090c2e6c16117f065458356] | committer: James Almer tests/fate: disable compression for zlib-based codecs FATE results differ when using the original zlib and zlib-ng. Since we don't need to test the result from zlib itself, this commit disables compression on tests for zlib-based codecs, which ends up giving the same results with both libraries. Signed-off-by: James Almer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=bce5855afb25d318e090c2e6c16117f065458356 --- tests/fate/cover-art.mak | 6 ++--- tests/fate/image.mak | 4 ++-- tests/fate/lavf-image.mak | 5 ++-- tests/fate/lavf-video.mak | 4 ++-- tests/fate/mov.mak| 2 +- tests/fate/vcodec.mak | 4 +++- tests/ref/fate/copy-apng | 4 ++-- tests/ref/fate/cover-art-aiff-id3v2-remux | 6 ++--- tests/ref/fate/cover-art-flac-remux | 6 ++--- tests/ref/fate/cover-art-mp3-id3v2-remux | 6 ++--- tests/ref/fate/mov-cover-image| 6 ++--- tests/ref/fate/png-icc| 6 ++--- tests/ref/fate/png-mdcv | 4 ++-- tests/ref/lavf/apng | 4 ++-- tests/ref/lavf/apng.png | 4 ++-- tests/ref/lavf/gray16be.png | 4 ++-- tests/ref/lavf/png| 4 ++-- tests/ref/lavf/rgb48be.png| 4 ++-- tests/ref/seek/vsynth_lena-flashsv| 40 +++ tests/ref/vsynth/vsynth1-flashsv | 4 ++-- tests/ref/vsynth/vsynth1-mpng | 4 ++-- tests/ref/vsynth/vsynth1-zlib | 4 ++-- tests/ref/vsynth/vsynth2-flashsv | 4 ++-- tests/ref/vsynth/vsynth2-mpng | 4 ++-- tests/ref/vsynth/vsynth2-zlib | 4 ++-- tests/ref/vsynth/vsynth3-flashsv | 4 ++-- tests/ref/vsynth/vsynth3-mpng | 4 ++-- tests/ref/vsynth/vsynth3-zlib | 4 ++-- tests/ref/vsynth/vsynth_lena-flashsv | 4 ++-- tests/ref/vsynth/vsynth_lena-mpng | 4 ++-- tests/ref/vsynth/vsynth_lena-zlib | 4 ++-- 31 files changed, 87 insertions(+), 84 deletions(-) diff --git a/tests/fate/cover-art.mak b/tests/fate/cover-art.mak index faa2182745..7f8958e33f 100644 --- a/tests/fate/cover-art.mak +++ b/tests/fate/cover-art.mak @@ -37,14 +37,14 @@ FATE_COVER_ART_REMUX-$(call ALLYES, FILE_PROTOCOL FLAC_DEMUXER MJPEG_DECODER \ AIFF_DEMUXER BMP_DECODER PNG_DECODER \ FRAMECRC_MUXER PIPE_PROTOCOL)\ += fate-cover-art-aiff-id3v2-remux -fate-cover-art-aiff-id3v2-remux: CMD = transcode flac $(TARGET_SAMPLES)/cover_art/cover_art.flac aiff "-map 0 -map 0:v -map 0:v -map 0:v -c:a pcm_s16be -c:v:0 copy -filter:v:1 scale -c:v:1 png -filter:v:2 scale -c:v:2 bmp -c:v:3 copy -write_id3v2 1 -metadata:g unknown_key=unknown_value -metadata compilation=foo -metadata:s:v:0 title=first -metadata:s:v:1 title=second -metadata:s:v:1 comment=Illustration -metadata:s:v:2 title=third -metadata:s:v:2 comment=Conductor -metadata:s:v:3 title=fourth -metadata:s:v:3 comment=Composer" "-map 0 -c copy -t 0.1" "-show_entries format_tags:stream_tags:stream_disposition=attached_pic:stream=index,codec_name" +fate-cover-art-aiff-id3v2-remux: CMD = transcode flac $(TARGET_SAMPLES)/cover_art/cover_art.flac aiff "-map 0 -map 0:v -map 0:v -map 0:v -c:a pcm_s16be -c:v:0 copy -filter:v:1 scale -c:v:1 png -compression_level:v:1 0 -filter:v:2 scale -c:v:2 bmp -c:v:3 copy -write_id3v2 1 -metadata:g unknown_key=unknown_value -metadata compilation=foo -metadata:s:v:0 title=first -metadata:s:v:1 title=second -metadata:s:v:1 comment=Illustration -metadata:s:v:2 title=third -metadata:s:v:2 comment=Conductor -metadata:s:v:3 title=fourth -metadata:s:v:3 comment=Composer" "-map 0 -c copy -t 0.1" "-show_entries format_tags:stream_tags:stream_disposition=attached_pic:stream=index,codec_name" FATE_COVER_ART_REMUX-$(call ALLYES, FILE_PROTOCOL MP3_DEMUXER MJPEG_DECODER \ SCALE_FILTER PNG_ENCODER BMP_ENCODER\ MP3_MUXER BMP_DECODER PNG_DECODER \ FRAMECRC_MUXER PIPE_PROTOCOL) \ += fate-cover-art-mp3-id3v2-remux -fate-cover-art-mp3-id3v2-remux: CMD = transcode mp3 $(TARGET_SAMPLES)/exif/embedded_small.mp3 mp3 "-map 0 -map 0:v -map 0:v -c:a copy -filter:v:0 scale -filter:v:2 scale -c:v:0 bmp -c:v:1 copy -c:v:2 png -metadata:s:v:0 comment=Band/Orchestra" "-map 0 -c copy -t 0.1" "-show_entries stream_tags:stream_disposition=attached_pic:stream=index,codec_name" +fate-cover-art-mp3-id3v2-remux: CMD = transcode mp3 $(TARGET_SAMPLES)/exif/embedded_small.mp3 mp3 "-map 0 -map 0:v -map 0:v -c
[FFmpeg-cvslog] avutil/hwcontext_vulkan: add proper maps for XV3{0,6}
ffmpeg | branch: master | James Almer | Mon Oct 14 11:49:37 2024 -0300| [fd8b0dcfed61ddf36b9523aa4ba1badc493b7707] | committer: James Almer avutil/hwcontext_vulkan: add proper maps for XV3{0,6} Signed-off-by: James Almer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=fd8b0dcfed61ddf36b9523aa4ba1badc493b7707 --- libavutil/hwcontext_vulkan.c | 9 - libavutil/vulkan.c | 3 ++- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libavutil/hwcontext_vulkan.c b/libavutil/hwcontext_vulkan.c index 47e21fda83..465308271e 100644 --- a/libavutil/hwcontext_vulkan.c +++ b/libavutil/hwcontext_vulkan.c @@ -308,7 +308,6 @@ static const struct FFVkFormatEntry { { VK_FORMAT_R32_SFLOAT, AV_PIX_FMT_GRAYF32, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R32_SFLOAT } }, /* RGB formats */ -{ VK_FORMAT_R16G16B16A16_UNORM, AV_PIX_FMT_XV36, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R16G16B16A16_UNORM } }, { VK_FORMAT_B8G8R8A8_UNORM, AV_PIX_FMT_BGRA, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_B8G8R8A8_UNORM } }, { VK_FORMAT_R8G8B8A8_UNORM, AV_PIX_FMT_RGBA, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R8G8B8A8_UNORM } }, { VK_FORMAT_R8G8B8_UNORM, AV_PIX_FMT_RGB24, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R8G8B8_UNORM } }, @@ -367,6 +366,8 @@ static const struct FFVkFormatEntry { { VK_FORMAT_B8G8R8G8_422_UNORM, AV_PIX_FMT_UYVY422, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R8G8B8A8_UNORM } }, { VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16, AV_PIX_FMT_Y210, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R16G16B16A16_UNORM } }, { VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16, AV_PIX_FMT_Y212, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R16G16B16A16_UNORM } }, +{ VK_FORMAT_A2R10G10B10_UNORM_PACK32, AV_PIX_FMT_XV30, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R16G16B16A16_UNORM } }, +{ VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16, AV_PIX_FMT_XV36, VK_IMAGE_ASPECT_COLOR_BIT, 1, 1, 1, { VK_FORMAT_R16G16B16A16_UNORM } }, }; static const int nb_vk_formats_list = FF_ARRAY_ELEMS(vk_formats_list); @@ -2863,10 +2864,8 @@ static const struct { // All these DRM_FORMATs were added in the same libdrm commit. #ifdef DRM_FORMAT_XYUV { DRM_FORMAT_XYUV, VK_FORMAT_R8G8B8A8_UNORM }, -{ DRM_FORMAT_XVYU12_16161616, VK_FORMAT_R16G16B16A16_UNORM} , -// As we had to map XV36 to a 16bit Vulkan format, reverse mapping will -// end up yielding Y416 as the DRM format, so we need to recognise it. -{ DRM_FORMAT_Y416, VK_FORMAT_R16G16B16A16_UNORM }, +{ DRM_FORMAT_XVYU2101010, VK_FORMAT_A2R10G10B10_UNORM_PACK32 } , +{ DRM_FORMAT_XVYU12_16161616, VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 } , #endif }; diff --git a/libavutil/vulkan.c b/libavutil/vulkan.c index 661b2627c9..e2d2478608 100644 --- a/libavutil/vulkan.c +++ b/libavutil/vulkan.c @@ -1311,7 +1311,8 @@ const char *ff_vk_shader_rep_fmt(enum AVPixelFormat pix_fmt, } case AV_PIX_FMT_X2RGB10: case AV_PIX_FMT_X2BGR10: -case AV_PIX_FMT_Y210: { +case AV_PIX_FMT_Y210: +case AV_PIX_FMT_XV30: { const char *rep_tab[] = { [FF_VK_REP_NATIVE] = "rgb10_a2ui", [FF_VK_REP_FLOAT] = "rgb10_a2", ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".
[FFmpeg-cvslog] swscale/input: add input support for RGBF16
ffmpeg | branch: master | Martin Schitter | Mon Oct 14 10:33:12 2024 +0200| [d73b73af5ebebef01cf8206ccef0b83a4425ed93] | committer: Michael Niedermayer swscale/input: add input support for RGBF16 Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d73b73af5ebebef01cf8206ccef0b83a4425ed93 --- libswscale/input.c | 101 ++- libswscale/utils.c | 2 + libswscale/version.h | 2 +- 3 files changed, 103 insertions(+), 2 deletions(-) diff --git a/libswscale/input.c b/libswscale/input.c index e2af1d5541..9beb72b8ec 100644 --- a/libswscale/input.c +++ b/libswscale/input.c @@ -1369,6 +1369,57 @@ static av_always_inline void rgbaf16ToA_endian(uint16_t *dst, const uint16_t *sr } } +static av_always_inline void rgbf16ToUV_half_endian(uint16_t *dstU, uint16_t *dstV, int is_be, +const uint16_t *src, int width, +int32_t *rgb2yuv, Half2FloatTables *h2f_tbl) +{ +int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX]; +int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX]; +int i; +for (i = 0; i < width; i++) { +int r = (lrintf(av_clipf(65535.0f * rdpx(src[i*6+0]), 0.0f, 65535.0f)) + + lrintf(av_clipf(65535.0f * rdpx(src[i*6+3]), 0.0f, 65535.0f))) >> 1; +int g = (lrintf(av_clipf(65535.0f * rdpx(src[i*6+1]), 0.0f, 65535.0f)) + + lrintf(av_clipf(65535.0f * rdpx(src[i*6+4]), 0.0f, 65535.0f))) >> 1; +int b = (lrintf(av_clipf(65535.0f * rdpx(src[i*6+2]), 0.0f, 65535.0f)) + + lrintf(av_clipf(65535.0f * rdpx(src[i*6+5]), 0.0f, 65535.0f))) >> 1; + +dstU[i] = (ru*r + gu*g + bu*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT; +dstV[i] = (rv*r + gv*g + bv*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT; +} +} + +static av_always_inline void rgbf16ToUV_endian(uint16_t *dstU, uint16_t *dstV, int is_be, + const uint16_t *src, int width, + int32_t *rgb2yuv, Half2FloatTables *h2f_tbl) +{ +int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX]; +int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX]; +int i; +for (i = 0; i < width; i++) { +int r = lrintf(av_clipf(65535.0f * rdpx(src[i*3+0]), 0.0f, 65535.0f)); +int g = lrintf(av_clipf(65535.0f * rdpx(src[i*3+1]), 0.0f, 65535.0f)); +int b = lrintf(av_clipf(65535.0f * rdpx(src[i*3+2]), 0.0f, 65535.0f)); + +dstU[i] = (ru*r + gu*g + bu*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT; +dstV[i] = (rv*r + gv*g + bv*b + (0x10001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT; +} +} + +static av_always_inline void rgbf16ToY_endian(uint16_t *dst, const uint16_t *src, int is_be, + int width, int32_t *rgb2yuv, Half2FloatTables *h2f_tbl) +{ +int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX]; +int i; +for (i = 0; i < width; i++) { +int r = lrintf(av_clipf(65535.0f * rdpx(src[i*3+0]), 0.0f, 65535.0f)); +int g = lrintf(av_clipf(65535.0f * rdpx(src[i*3+1]), 0.0f, 65535.0f)); +int b = lrintf(av_clipf(65535.0f * rdpx(src[i*3+2]), 0.0f, 65535.0f)); + +dst[i] = (ry*r + gy*g + by*b + (0x2001<<(RGB2YUV_SHIFT-1))) >> RGB2YUV_SHIFT; +} +} + #undef rdpx #define rgbaf16_funcs_endian(endian_name, endian) \ @@ -1408,7 +1459,37 @@ static void rgbaf16##endian_name##ToA_c(uint8_t *_dst, const uint8_t *_src, cons const uint16_t *src = (const uint16_t*)_src; \ uint16_t *dst = (uint16_t*)_dst; \ rgbaf16ToA_endian(dst, src, endian, width, opq); \ -} +} \ +static void rgbf16##endian_name##ToUV_half_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused, \ + const uint8_t *src1, const uint8_t *src2, \ + int width, uint32_t *_rgb2yuv, void *opq) \ +{ \ +const uint16_t *src = (const uint16_t*)src1; \ +uint16_t *dstU = (uint16_t*)_dstU; \ +uint16_t *dstV = (uint16_t*)_dstV;
[FFmpeg-cvslog] avutil: add RGBF16 pix_fmt
ffmpeg | branch: master | Martin Schitter | Mon Oct 14 10:33:11 2024 +0200| [c993a91bea88027a329eb7a743f1e8bd6f9c8cfb] | committer: Michael Niedermayer avutil: add RGBF16 pix_fmt Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c993a91bea88027a329eb7a743f1e8bd6f9c8cfb --- libavutil/pixdesc.c | 25 + libavutil/pixfmt.h | 4 libavutil/version.h | 2 +- tests/ref/fate/imgutils | 4 tests/ref/fate/sws-pixdesc-query | 11 +++ 5 files changed, 45 insertions(+), 1 deletion(-) diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c index 43b9c08e14..e73600f208 100644 --- a/libavutil/pixdesc.c +++ b/libavutil/pixdesc.c @@ -2630,6 +2630,31 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = { { 0, 4, 0, 0, 8 },/* V */ }, }, +[AV_PIX_FMT_RGBF16BE] = { +.name = "rgbf16be", +.nb_components = 3, +.log2_chroma_w = 0, +.log2_chroma_h = 0, +.comp = { +{ 0, 6, 0, 0, 16 }, /* R */ +{ 0, 6, 2, 0, 16 }, /* G */ +{ 0, 6, 4, 0, 16 }, /* B */ +}, +.flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | + AV_PIX_FMT_FLAG_FLOAT, +}, +[AV_PIX_FMT_RGBF16LE] = { +.name = "rgbf16le", +.nb_components = 3, +.log2_chroma_w = 0, +.log2_chroma_h = 0, +.comp = { +{ 0, 6, 0, 0, 16 }, /* R */ +{ 0, 6, 2, 0, 16 }, /* G */ +{ 0, 6, 4, 0, 16 }, /* B */ +}, +.flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT +}, [AV_PIX_FMT_RGBAF16BE] = { .name = "rgbaf16be", .nb_components = 4, diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h index 3caa183ba0..21564b97ff 100644 --- a/libavutil/pixfmt.h +++ b/libavutil/pixfmt.h @@ -448,6 +448,9 @@ enum AVPixelFormat { AV_PIX_FMT_V30XBE, ///< packed VYUX 4:4:4 like XV30, 32bpp, (msb)10V 10Y 10U 2X(lsb), big-endian AV_PIX_FMT_V30XLE, ///< packed VYUX 4:4:4 like XV30, 32bpp, (msb)10V 10Y 10U 2X(lsb), little-endian +AV_PIX_FMT_RGBF16BE,///< IEEE-754 half precision packed RGB 16:16:16, 48bpp, RGBRGB..., big-endian +AV_PIX_FMT_RGBF16LE,///< IEEE-754 half precision packed RGB 16:16:16, 48bpp, RGBRGB..., little-endian + AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions }; @@ -553,6 +556,7 @@ enum AVPixelFormat { #define AV_PIX_FMT_P216 AV_PIX_FMT_NE(P216BE, P216LE) #define AV_PIX_FMT_P416 AV_PIX_FMT_NE(P416BE, P416LE) +#define AV_PIX_FMT_RGBF16 AV_PIX_FMT_NE(RGBF16BE, RGBF16LE) #define AV_PIX_FMT_RGBAF16AV_PIX_FMT_NE(RGBAF16BE, RGBAF16LE) #define AV_PIX_FMT_RGBF32 AV_PIX_FMT_NE(RGBF32BE, RGBF32LE) diff --git a/libavutil/version.h b/libavutil/version.h index 7eca46cfe4..772addf716 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -79,7 +79,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 59 -#define LIBAVUTIL_VERSION_MINOR 42 +#define LIBAVUTIL_VERSION_MINOR 43 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ diff --git a/tests/ref/fate/imgutils b/tests/ref/fate/imgutils index fd5a510530..4c91358f5a 100644 --- a/tests/ref/fate/imgutils +++ b/tests/ref/fate/imgutils @@ -274,6 +274,8 @@ uyvaplanes: 1, linesizes: 256 0 0 0, plane_sizes: 12288 0 vyu444 planes: 1, linesizes: 192 0 0 0, plane_sizes: 9216 0 0 0, plane_offsets: 0 0 0, total_size: 9216 v30xbe planes: 1, linesizes: 256 0 0 0, plane_sizes: 12288 0 0 0, plane_offsets: 0 0 0, total_size: 12288 v30xle planes: 1, linesizes: 256 0 0 0, plane_sizes: 12288 0 0 0, plane_offsets: 0 0 0, total_size: 12288 +rgbf16beplanes: 1, linesizes: 384 0 0 0, plane_sizes: 18432 0 0 0, plane_offsets: 0 0 0, total_size: 18432 +rgbf16leplanes: 1, linesizes: 384 0 0 0, plane_sizes: 18432 0 0 0, plane_offsets: 0 0 0, total_size: 18432 image_fill_black tests yuv420p total_size: 4608, black_unknown_crc: 0xd00f6cc6, black_tv_crc: 0xd00f6cc6, black_pc_crc: 0x234969af @@ -495,3 +497,5 @@ uyvatotal_size: 12288, black_unknown_crc: 0xdd657297, black_tv_cr vyu444 total_size: 9216, black_unknown_crc: 0x575e6fb1, black_tv_crc: 0x575e6fb1, black_pc_crc: 0x16564599 v30xbe total_size: 12288, black_unknown_crc: 0x7108457c, black_tv_crc: 0x7108457c, black_pc_crc: 0xdefcbbe0 v30xle total_size: 12288, black_unknown_crc: 0xf5b3c795, black_tv_crc: 0xf5b3c795, black_pc
[FFmpeg-cvslog] swscale/input: add input support for RGBF32
ffmpeg | branch: master | Martin Schitter | Mon Oct 14 10:33:10 2024 +0200| [c72a5c486ad7abac2cb430f9db900fccb8ee5513] | committer: Michael Niedermayer swscale/input: add input support for RGBF32 Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c72a5c486ad7abac2cb430f9db900fccb8ee5513 --- libswscale/input.c | 72 +++--- libswscale/utils.c | 2 ++ 2 files changed, 71 insertions(+), 3 deletions(-) diff --git a/libswscale/input.c b/libswscale/input.c index 35c1fb771e..e2af1d5541 100644 --- a/libswscale/input.c +++ b/libswscale/input.c @@ -1170,6 +1170,46 @@ static av_always_inline void planar_rgbf32_to_y(uint8_t *_dst, const uint8_t *_s } } +static av_always_inline void rgbf32_to_uv_c(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *unused1, +const uint8_t *_src, const uint8_t *unused2, +int width, int is_be, int32_t *rgb2yuv) +{ +int i; +const float *src = (const float *)_src; +uint16_t *dstU = (uint16_t *)_dstU; +uint16_t *dstV = (uint16_t *)_dstV; +int32_t ru = rgb2yuv[RU_IDX], gu = rgb2yuv[GU_IDX], bu = rgb2yuv[BU_IDX]; +int32_t rv = rgb2yuv[RV_IDX], gv = rgb2yuv[GV_IDX], bv = rgb2yuv[BV_IDX]; + +for (i = 0; i < width; i++) { +int r = lrintf(av_clipf(65535.0f * rdpx(&src[3*i]), 0.0f, 65535.0f)); +int g = lrintf(av_clipf(65535.0f * rdpx(&src[3*i + 1]), 0.0f, 65535.0f)); +int b = lrintf(av_clipf(65535.0f * rdpx(&src[3*i + 2]), 0.0f, 65535.0f)); + +dstU[i] = (ru*r + gu*g + bu*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT; +dstV[i] = (rv*r + gv*g + bv*b + (0x10001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT; +} +} + +static av_always_inline void rgbf32_to_y_c(uint8_t *_dst, const uint8_t *_src, + const uint8_t *unused1, const uint8_t *unused2, + int width, int is_be, int32_t *rgb2yuv) +{ +int i; +const float *src = (const float *)_src; +uint16_t *dst= (uint16_t *)_dst; + +int32_t ry = rgb2yuv[RY_IDX], gy = rgb2yuv[GY_IDX], by = rgb2yuv[BY_IDX]; + +for (i = 0; i < width; i++) { +int r = lrintf(av_clipf(65535.0f * rdpx(&src[3*i]), 0.0f, 65535.0f)); +int g = lrintf(av_clipf(65535.0f * rdpx(&src[3*i + 1]), 0.0f, 65535.0f)); +int b = lrintf(av_clipf(65535.0f * rdpx(&src[3*i + 2]), 0.0f, 65535.0f)); + +dst[i] = (ry*r + gy*g + by*b + (0x2001 << (RGB2YUV_SHIFT - 1))) >> RGB2YUV_SHIFT; +} +} + static av_always_inline void grayf32ToY16_c(uint8_t *_dst, const uint8_t *_src, const uint8_t *unused1, const uint8_t *unused2, int width, int is_be, uint32_t *unused) { @@ -1226,7 +1266,7 @@ rgb9plus_planar_transparency_funcs(12) rgb9plus_planar_transparency_funcs(14) rgb9plus_planar_transparency_funcs(16) -#define rgbf32_planar_funcs_endian(endian_name, endian) \ +#define rgbf32_funcs_endian(endian_name, endian) \ static void planar_rgbf32##endian_name##_to_y(uint8_t *dst, const uint8_t *src[4], \ int w, int32_t *rgb2yuv, void *opq) \ { \ @@ -1243,6 +1283,20 @@ static void planar_rgbf32##endian_name##_to_a(uint8_t *dst, const uint8_t *src[4 { \ planar_rgbf32_to_a(dst, src, w, endian, rgb2yuv); \ } \ +static void rgbf32##endian_name##_to_y_c(uint8_t *dst, const uint8_t *src, \ + const uint8_t *unused1, const uint8_t *unused2,\ + int w, uint32_t *rgb2yuv, void *opq) \ +{ \ +rgbf32_to_y_c(dst, src, unused1, unused2, w, endian, rgb2yuv); \ +} \ +static void rgbf32##endian_name##_to_uv_c(uint8_t *dstU, uint8_t *dstV, \ +const uint8_t *unused1, \ +const uint8_t *src, const uint8_t *unused2, \ +int w, uint32_t *rgb2yuv,