summaryrefslogtreecommitdiffstats
path: root/debian/transcode/transcode-1.1.7/testsuite/test-ratiocodes.c
diff options
context:
space:
mode:
authorMichele Calgaro <michele.calgaro@yahoo.it>2020-09-11 14:38:47 +0900
committerMichele Calgaro <michele.calgaro@yahoo.it>2020-09-11 14:38:47 +0900
commit884c8093d63402a1ad0b502244b791e3c6782be3 (patch)
treea600d4ab0d431a2bdfe4c15b70df43c14fbd8dd0 /debian/transcode/transcode-1.1.7/testsuite/test-ratiocodes.c
parent14e1aa2006796f147f3f4811fb908a6b01e79253 (diff)
downloadextra-dependencies-884c8093d63402a1ad0b502244b791e3c6782be3.tar.gz
extra-dependencies-884c8093d63402a1ad0b502244b791e3c6782be3.zip
Added debian extra dependency packages.
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
Diffstat (limited to 'debian/transcode/transcode-1.1.7/testsuite/test-ratiocodes.c')
-rw-r--r--debian/transcode/transcode-1.1.7/testsuite/test-ratiocodes.c266
1 files changed, 266 insertions, 0 deletions
diff --git a/debian/transcode/transcode-1.1.7/testsuite/test-ratiocodes.c b/debian/transcode/transcode-1.1.7/testsuite/test-ratiocodes.c
new file mode 100644
index 00000000..f0a2ddd0
--- /dev/null
+++ b/debian/transcode/transcode-1.1.7/testsuite/test-ratiocodes.c
@@ -0,0 +1,266 @@
+/*
+ * test-ratiocodes.c -- testsuite for to/from ratio utility conversion
+ * functions. Everyone feel free to add more tests
+ * and improve existing ones.
+ * (C) 2006-2010 - Francesco Romani <fromani -at- gmail -dot- com>
+ *
+ * This file is part of transcode, a video stream processing tool.
+ *
+ * transcode is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * transcode is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "config.h"
+#include "tc_defaults.h"
+#include "libtc/libtc.h"
+#include "libtc/ratiocodes.h"
+
+#ifndef PACKAGE
+#define PACKAGE __FILE__
+#endif
+
+#define DELTA (0.0005)
+
+static int test_autoloop_from_fps(double fps)
+{
+ int ret = 0, frc;
+ double myfps;
+
+ ret = tc_frc_code_from_value(&frc, fps);
+ if (ret == TC_NULL_MATCH) {
+ tc_log_warn(PACKAGE, "from_fps: failed conversion_from for fps=%f",
+ fps);
+ return 1;
+ }
+
+ ret = tc_frc_code_to_value(frc, &myfps);
+ if (ret == TC_NULL_MATCH) {
+ tc_log_warn(PACKAGE, "from_fps: failed conversion_to for fps=%f",
+ fps);
+ return 2;
+ }
+
+ if (myfps - DELTA < fps && fps < myfps + DELTA) {
+ tc_log_msg(PACKAGE, "from_fps: test for fps=%f -> OK",
+ fps);
+ } else {
+ tc_log_warn(PACKAGE, "from_fps: test for fps=%f -> FAILED (%f)",
+ fps, myfps);
+ ret = -1;
+ }
+ return ret;
+}
+
+static int test_autoloop_to_fps(int frc)
+{
+ int ret = 0, myfrc;
+ double fps;
+
+ ret = tc_frc_code_to_value(frc, &fps);
+ if (ret == TC_NULL_MATCH) {
+ tc_log_warn(PACKAGE, "to_fps: failed conversion_to for frc=%i",
+ frc);
+ return 1;
+ }
+
+ ret = tc_frc_code_from_value(&myfrc, fps);
+ if (ret == TC_NULL_MATCH) {
+ tc_log_warn(PACKAGE, "to_fps: failed conversion_from for frc=%i",
+ frc);
+ return 2;
+ }
+
+ if (frc == myfrc) {
+ tc_log_msg(PACKAGE, "to_fps: test for frc=%i -> OK", frc);
+ } else {
+ tc_log_warn(PACKAGE, "to_fps: test for frc=%i -> FAILED (%i)",
+ frc, myfrc);
+ ret = -1;
+ }
+ return ret;
+}
+
+static int test_autoloop_to_ratio(int dom, int code)
+{
+ int ret = 0, mycode;
+ TCPair pair;
+
+ ret = tc_code_to_ratio(dom, code, &pair.a, &pair.b);
+ if (ret == TC_NULL_MATCH) {
+ tc_log_warn(PACKAGE, "to_ratio: failed conversion_to for "
+ "code=%i (dom=%i)", code, dom);
+ return 1;
+ }
+
+ ret = tc_code_from_ratio(dom, &mycode, pair.a, pair.b);
+ if (ret == TC_NULL_MATCH) {
+ tc_log_warn(PACKAGE, "to_ratio: failed conversion_from for "
+ "code=%i (dom=%i)", code, dom);
+ return 2;
+ }
+
+ if (code == mycode) {
+ tc_log_msg(PACKAGE, "to_ratio: test for code=%i (dom=%i) -> OK",
+ code, dom);
+ } else {
+ tc_log_warn(PACKAGE, "to_ratio: test for code=%i (dom=%i) -> FAILED"
+ " (%i)", code, dom, mycode);
+ ret = -1;
+ }
+ return ret;
+}
+
+static int test_autoloop_from_ratio(int dom, TCPair pair)
+{
+ int ret = 0, code;
+ TCPair mypair;
+
+ ret = tc_code_from_ratio(dom, &code, pair.a, pair.b);
+ if (ret == TC_NULL_MATCH) {
+ tc_log_warn(PACKAGE, "from_ratio: failed conversion_from for "
+ "ratio=%i/%i (dom=%i)", pair.a, pair.b, dom);
+ return 2;
+ }
+
+ ret = tc_code_to_ratio(dom, code, &mypair.a, &mypair.b);
+ if (ret == TC_NULL_MATCH) {
+ tc_log_warn(PACKAGE, "from_ratio: failed conversion_to for "
+ "ratio=%i/%i (dom=%i)", pair.a, pair.b, dom);
+ return 1;
+ }
+
+ if (pair.a == mypair.a && pair.b == mypair.b) {
+ tc_log_msg(PACKAGE, "from_ratio: test for ratio=%i/%i (dom=%i)"
+ " -> OK", pair.a, pair.b, dom);
+ } else {
+ tc_log_warn(PACKAGE, "from_ratio: test for ratio=%i/%i (dom=%i)"
+ " -> FAILED (%i/%i)", pair.a, pair.b, dom,
+ mypair.a, mypair.b);
+ ret = -1;
+ }
+ return ret;
+}
+
+
+struct p_struct {
+ int code;
+ TCPair ratio;
+};
+
+/* intentionally random order */
+static const struct p_struct frc_ratios[] = {
+ { 0, { 0 , 0 } },
+ { 10, { 5000, 1000 } },
+ { 4, { 30000, 1001 } },
+ { 2, { 24000, 1000 } },
+ { 3, { 25000, 1000 } },
+ { 9, { 1000, 1000 } },
+ { 6, { 50000, 1000 } },
+ { 11, { 10000, 1000 } },
+ { 5, { 30000, 1000 } },
+ { 8, { 60000, 1000 } },
+ { 1, { 24000, 1001 } },
+ { 12, { 12000, 1000 } },
+ { 7, { 60000, 1001 } },
+ { 13, { 15000, 1000 } },
+};
+
+/* intentionally random order */
+static const struct p_struct asr_ratios[] = {
+ { 2, { 4, 3 } },
+ { 3, { 16, 9 } },
+ { 1, { 1, 1 } },
+ { 0, { 0, 0 } },
+ { 4, { 221, 100 } },
+};
+
+/* intentionally random order */
+static const struct p_struct par_ratios[] = {
+ { 3, { 1000, 1100 } },
+ { 0, { 1, 1 } },
+ { 5, { 4000, 3300 } },
+ { 4, { 1600, 1100 } },
+ { 2, { 1200, 1100 } },
+};
+
+
+struct fr_struct {
+ int frc;
+ double fps;
+};
+
+/*
+ * testing frc/fps pairs, picked not-so-randomly, but
+ * intentionally left in random order here
+ */
+static const struct fr_struct fps_pairs[] = {
+ { 7, (2*NTSC_VIDEO) },
+ { 8, 60.0 },
+ { 1, NTSC_FILM },
+ { 4, NTSC_VIDEO },
+ { 0, 0.0 },
+ { 13, 15 },
+ { 3, 25.0 },
+// { 15, 0 },
+// known issue: aliasing isn't handled properly
+};
+
+
+#define TABLE_LEN(tab) (sizeof((tab))/sizeof((tab)[0]))
+
+int main(void)
+{
+ int i = 0;
+
+ tc_log_info(PACKAGE, "testing frc <=> fps ...");
+ for (i = 0; i < TABLE_LEN(fps_pairs); i++) {
+ test_autoloop_from_fps(fps_pairs[i].fps);
+ test_autoloop_to_fps(fps_pairs[i].frc);
+ }
+
+ tc_log_info(PACKAGE, "testing frc <=> ratio ...");
+ for (i = 0; i < TABLE_LEN(frc_ratios); i++) {
+ test_autoloop_from_ratio(TC_FRC_CODE, frc_ratios[i].ratio);
+ test_autoloop_to_ratio(TC_FRC_CODE, frc_ratios[i].code);
+ }
+
+ tc_log_info(PACKAGE, "testing asr <=> ratio ...");
+ for (i = 0; i < TABLE_LEN(asr_ratios); i++) {
+ test_autoloop_from_ratio(TC_ASR_CODE, asr_ratios[i].ratio);
+ test_autoloop_to_ratio(TC_ASR_CODE, asr_ratios[i].code);
+ }
+
+ tc_log_info(PACKAGE, "testing par <=> ratio ...");
+ for (i = 0; i < TABLE_LEN(par_ratios); i++) {
+ test_autoloop_from_ratio(TC_PAR_CODE, par_ratios[i].ratio);
+ test_autoloop_to_ratio(TC_PAR_CODE, par_ratios[i].code);
+ }
+
+ return 0;
+}
+
+/*************************************************************************/
+
+/*
+ * Local variables:
+ * c-file-style: "stroustrup"
+ * c-file-offsets: ((case-label . *) (statement-case-intro . *))
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * vim: expandtab shiftwidth=4:
+ */