From 34b573998be9f27eb1d148768ae7387a8ca5d37b Mon Sep 17 00:00:00 2001 From: Seven Du Date: Wed, 14 Nov 2018 14:36:18 +0800 Subject: [PATCH] FS-11521: [mod_av] WIP add test code and add png --- conf/vanilla/autoload_configs/av.conf.xml | 1 + src/mod/applications/mod_av/test/Makefile.am | 2 +- src/mod/applications/mod_av/test/cluecon.png | Bin 0 -> 213752 bytes .../applications/mod_av/test/test_avformat.c | 110 ++++++++++++++++++ 4 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 src/mod/applications/mod_av/test/cluecon.png create mode 100644 src/mod/applications/mod_av/test/test_avformat.c diff --git a/conf/vanilla/autoload_configs/av.conf.xml b/conf/vanilla/autoload_configs/av.conf.xml index cf28fab3d3..5a53668c4d 100644 --- a/conf/vanilla/autoload_configs/av.conf.xml +++ b/conf/vanilla/autoload_configs/av.conf.xml @@ -141,5 +141,6 @@ enum AVColorRange { + diff --git a/src/mod/applications/mod_av/test/Makefile.am b/src/mod/applications/mod_av/test/Makefile.am index 4c66bd22f6..b7111a2275 100644 --- a/src/mod/applications/mod_av/test/Makefile.am +++ b/src/mod/applications/mod_av/test/Makefile.am @@ -1,4 +1,4 @@ -bin_PROGRAMS = test_mod_av +bin_PROGRAMS = test_mod_av test_avformat AM_CFLAGS = $(SWITCH_AM_CFLAGS) -I../ $(AVFORMAT_CFLAGS) $(AVCODEC_CFLAGS) $(SWSCALE_CFLAGS) $(AVUTIL_CFLAGS) $(AVRESAMPLE_CFALGS) AM_LDFLAGS = $(switch_builddir)/libfreeswitch.la $(AVFORMAT_LIBS) $(AVCODEC_LIBS) $(SWSCALE_LIBS) $(AVUTIL_LIBS) $(AVRESAMPLE_LIBS) -avoid-version -no-undefined $(SWITCH_AM_LDFLAGS) ../mod_av.la TESTS = $(bin_PROGRAMS) diff --git a/src/mod/applications/mod_av/test/cluecon.png b/src/mod/applications/mod_av/test/cluecon.png new file mode 100644 index 0000000000000000000000000000000000000000..91abe81dd83a317a250c008a0744200119988d36 GIT binary patch literal 213752 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 + * + * Version: MPL 1.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application + * + * The Initial Developer of the Original Code is + * Seven Du + * Portions created by the Initial Developer are Copyright (C) + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * + * test_avformat -- avformat tests + * + */ + +#include + +#define SAMPLES 160 + +FST_CORE_BEGIN("conf") +{ + FST_MODULE_BEGIN(mod_av, mod_av_test) + { + FST_SETUP_BEGIN() + { + fst_requires_module("mod_av"); + } + FST_SETUP_END() + + FST_TEST_BEGIN(avformat_test) + { + switch_status_t status; + switch_image_t *img = switch_img_alloc(NULL, SWITCH_IMG_FMT_I420, 1280, 720, 1); + switch_file_handle_t fh = { 0 }; + uint8_t data[SAMPLES * 2] = { 0 }; + switch_frame_t frame = { 0 }; + switch_size_t len = SAMPLES; + uint32_t flags = SWITCH_FILE_FLAG_WRITE | SWITCH_FILE_DATA_SHORT | SWITCH_FILE_FLAG_VIDEO; + + fst_requires(img); + + status = switch_core_file_open(&fh, "./test.mp4", 1, 8000, flags, fst_pool); + fst_requires(status == SWITCH_STATUS_SUCCESS); + fst_requires(switch_test_flag(&fh, SWITCH_FILE_OPEN)); + + status = switch_core_file_write(&fh, data, &len); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "status: %d len: %d\n", status, len); + fst_check(status == SWITCH_STATUS_SUCCESS); + // fst_requires(len == SAMPLES); + + frame.img = img; + status = switch_core_file_write_video(&fh, &frame); + fst_check(status == SWITCH_STATUS_SUCCESS); + + switch_image_t *ccimg = switch_img_read_png("./cluecon.png", SWITCH_IMG_FMT_ARGB); + fst_requires(ccimg); + + switch_rgb_color_t color = {0}; + color.a = 255; + + for (int i = 0; i < 30; i++) { + len = SAMPLES; + + if (i == 10) { + color.r = 255; + } else if (i == 20) { + color.r = 0; + color.b = 255; + } + + switch_img_fill(img, 0, 0, img->d_w, img->d_h, &color); + switch_img_patch(img, ccimg, i * 10, i * 10); + + status = switch_core_file_write(&fh, data, &len); + status = switch_core_file_write_video(&fh, &frame); + switch_yield(100000); + } + + switch_core_file_close(&fh); + switch_img_free(&img); + switch_img_free(&ccimg); + } + FST_TEST_END() + + FST_TEARDOWN_BEGIN() + { + const char *err = NULL; + switch_sleep(1000000); + fst_check(switch_loadable_module_unload_module(SWITCH_GLOBAL_dirs.mod_dir, (char *)"mod_av", SWITCH_TRUE, &err) == SWITCH_STATUS_SUCCESS); + } + FST_TEARDOWN_END() + } + FST_MODULE_END() +} +FST_CORE_END() -- 2.47.2