You can subscribe to this list here.
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(121) |
Nov
(68) |
Dec
(10) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2009 |
Jan
(55) |
Feb
(97) |
Mar
(48) |
Apr
(46) |
May
(37) |
Jun
(26) |
Jul
|
Aug
(1) |
Sep
(109) |
Oct
(162) |
Nov
(64) |
Dec
(36) |
2010 |
Jan
(45) |
Feb
(26) |
Mar
(31) |
Apr
(30) |
May
|
Jun
(154) |
Jul
(151) |
Aug
(68) |
Sep
(120) |
Oct
(65) |
Nov
(27) |
Dec
(7) |
2011 |
Jan
(25) |
Feb
|
Mar
(5) |
Apr
(35) |
May
(38) |
Jun
(17) |
Jul
(30) |
Aug
(17) |
Sep
(23) |
Oct
(23) |
Nov
(37) |
Dec
(3) |
2012 |
Jan
(8) |
Feb
(10) |
Mar
|
Apr
(26) |
May
(6) |
Jun
(17) |
Jul
(8) |
Aug
(7) |
Sep
|
Oct
(14) |
Nov
(26) |
Dec
(8) |
2013 |
Jan
(1) |
Feb
|
Mar
|
Apr
(11) |
May
(2) |
Jun
(11) |
Jul
(2) |
Aug
(1) |
Sep
(1) |
Oct
|
Nov
|
Dec
|
2014 |
Jan
(1) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2015 |
Jan
|
Feb
|
Mar
|
Apr
(12) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2016 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(11) |
Dec
|
From: John F. <jo...@us...> - 2016-11-18 10:07:05
|
Update of /cvsroot/ingex/ingex/player/ingex_player In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv32751 Modified Files: on_screen_display.c x11_common.c Log Message: Turned off debug for char_set_to_overlay() Index: on_screen_display.c =================================================================== RCS file: /cvsroot/ingex/ingex/player/ingex_player/on_screen_display.c,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** on_screen_display.c 11 Nov 2016 15:49:10 -0000 1.26 --- on_screen_display.c 18 Nov 2016 10:07:03 -0000 1.27 *************** *** 1887,1891 **** /* note: the order must match UNKNOWN_TC_OVLY_IDX, ... */ CHK_ORET(char_set_to_overlay(&osdd->p_info, &osdd->timecodeTypeData, "?CSVLvlX", ! "Ariel", 48 * fontScale, osdd->pixelAspectRatio, 1) >= 0); CHK_ORET(init_timecode(&osdd->p_info, &osdd->timecodeTextData, "Ariel", --- 1887,1891 ---- /* note: the order must match UNKNOWN_TC_OVLY_IDX, ... */ CHK_ORET(char_set_to_overlay(&osdd->p_info, &osdd->timecodeTypeData, "?CSVLvlX", ! "Ariel", 48 * fontScale, osdd->pixelAspectRatio, 0) >= 0); CHK_ORET(init_timecode(&osdd->p_info, &osdd->timecodeTextData, "Ariel", |
From: John F. <jo...@us...> - 2016-11-18 09:50:32
|
Update of /cvsroot/ingex/ingex/YUVlib In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv32023 Modified Files: YUV_text_overlay.c Log Message: Tidied Index: YUV_text_overlay.c =================================================================== RCS file: /cvsroot/ingex/ingex/YUVlib/YUV_text_overlay.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** YUV_text_overlay.c 16 Nov 2016 16:51:19 -0000 1.7 --- YUV_text_overlay.c 18 Nov 2016 09:50:30 -0000 1.8 *************** *** 966,970 **** BYTE* dstLine; BYTE* srcPtr; - //BYTE* dstPtr; int c; int result; --- 966,969 ---- *************** *** 1145,1149 **** BYTE* dstLine; BYTE* srcPtr; - //BYTE* dstPtr; int result; --- 1144,1147 ---- *************** *** 1252,1256 **** BYTE* dstLine; BYTE* srcPtr; - //BYTE* dstPtr; int c; int result; --- 1250,1253 ---- *************** *** 1274,1278 **** --- 1271,1277 ---- result = set_font(info, font, size, pixel_aspect_ratio); if (result < 0) + { return result; + } // get bounding box for characters bb_t = 1000000; *************** *** 1282,1286 **** for (c = 0; c < csetLen; c++) { ! int tmp; // using this avoids compiler bug in some builds /* load glyph image into the slot (erase previous one) */ if (FT_Load_Char(info->face, cset[c], FT_LOAD_RENDER)) --- 1281,1285 ---- for (c = 0; c < csetLen; c++) { ! int tmp; // using this possibly avoids compiler bug in some builds /* load glyph image into the slot (erase previous one) */ if (FT_Load_Char(info->face, cset[c], FT_LOAD_RENDER)) |
From: John F. <jo...@us...> - 2016-11-18 09:47:20
|
Update of /cvsroot/ingex/ingex/common In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv31898 Removed Files: timecode_test.cpp Log Message: Not part of Ingex --- timecode_test.cpp DELETED --- |
From: John F. <jo...@us...> - 2016-11-18 09:33:14
|
Update of /cvsroot/ingex/ingex/common In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv31330 Modified Files: Makefile Log Message: Correction to build targets Index: Makefile =================================================================== RCS file: /cvsroot/ingex/ingex/common/Makefile,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** Makefile 17 Nov 2016 10:25:23 -0000 1.21 --- Makefile 18 Nov 2016 09:33:11 -0000 1.22 *************** *** 54,58 **** endif ! PROGS = unittests timecode_test 2059_master_test timecode_convert smpte_gmtime_test time_label_test time_label_test2 smpte_timecode_test LIBCOMMON = libcommon.a --- 54,58 ---- endif ! PROGS = unittests LIBCOMMON = libcommon.a |
From: John F. <jo...@us...> - 2016-11-17 10:25:26
|
Update of /cvsroot/ingex/ingex/common In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv1111 Modified Files: Makefile Log Message: Make clean now removes dependency files Index: Makefile =================================================================== RCS file: /cvsroot/ingex/ingex/common/Makefile,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** Makefile 20 Apr 2015 14:39:16 -0000 1.20 --- Makefile 17 Nov 2016 10:25:23 -0000 1.21 *************** *** 54,58 **** endif ! PROGS = unittests LIBCOMMON = libcommon.a --- 54,58 ---- endif ! PROGS = unittests timecode_test 2059_master_test timecode_convert smpte_gmtime_test time_label_test time_label_test2 smpte_timecode_test LIBCOMMON = libcommon.a *************** *** 76,79 **** --- 76,100 ---- $(LINK.o) -o $@ $^ -lstdc++ -lm + timecode_test: timecode_test.o $(LIBCOMMON) + $(LINK.o) -o $@ $^ -lstdc++ + + 2059_master_test: 2059_master_test.o $(LIBCOMMON) + $(LINK.o) -o $@ $^ -lstdc++ + + timecode_convert: timecode_convert.o $(LIBCOMMON) + $(LINK.o) -o $@ $^ -lstdc++ + + smpte_gmtime_test: smpte_gmtime_test.o $(LIBCOMMON) + $(LINK.o) -o $@ $^ -lstdc++ + + time_label_test: time_label_test.o $(LIBCOMMON) + $(LINK.o) -o $@ $^ -lstdc++ + + time_label_test2: time_label_test2.o $(LIBCOMMON) + $(LINK.o) -o $@ $^ -lstdc++ + + smpte_timecode_test: smpte_timecode_test.o $(LIBCOMMON) + $(LINK.o) -o $@ $^ -lstdc++ + .PHONY: check check: all *************** *** 86,90 **** .PHONY: clean clean: ! rm -f $(LIBCOMMON) $(OBJECTS) $(PROGS) cd tools && $(MAKE) $@ --- 107,111 ---- .PHONY: clean clean: ! rm -f $(LIBCOMMON) $(OBJECTS) $(PROGS) $(DEPENDENCIES) cd tools && $(MAKE) $@ |
From: John F. <jo...@us...> - 2016-11-16 16:51:21
|
Update of /cvsroot/ingex/ingex/YUVlib In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv13765 Modified Files: YUV_text_overlay.c YUV_text_overlay.h Log Message: Code tidying, fixes for compiler warnings and revised debug output Index: YUV_text_overlay.c =================================================================== RCS file: /cvsroot/ingex/ingex/YUVlib/YUV_text_overlay.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** YUV_text_overlay.c 11 Nov 2016 15:46:17 -0000 1.6 --- YUV_text_overlay.c 16 Nov 2016 16:51:19 -0000 1.7 *************** *** 302,306 **** BYTE* srcLine; BYTE* dstLine; - int j; int error; int result; --- 302,305 ---- *************** *** 431,434 **** --- 430,434 ---- srcLine = bit->bitmap.buffer; dstLine = ovly->buff - (bit->top * ovly->w) + bit->left; + unsigned int j; for (j = 0; j < bit->bitmap.rows; j++) { *************** *** 450,454 **** int tab_width, int enable_align_right, ! const char* font, const int size, float pixel_aspect_ratio) { --- 450,455 ---- int tab_width, int enable_align_right, ! const char* font, ! unsigned int size, float pixel_aspect_ratio) { *************** *** 456,460 **** BYTE* srcLine; BYTE* dstLine; - int j; int error; int result; --- 457,460 ---- *************** *** 633,636 **** --- 633,637 ---- if (dstLine < ovly->buff) dstLine = ovly->buff; + unsigned int j; for (j = 0; j < bit->bitmap.rows; j++) { *************** *** 663,667 **** BYTE* src; BYTE* dst; ! int j, n; // render each line of text to an overlay --- 664,668 ---- BYTE* src; BYTE* dst; ! int n; // render each line of text to an overlay *************** *** 696,699 **** --- 697,701 ---- src = line_ovly[n].buff; dst = ovly->buff + (ovly->w * n * size); + int j; for (j = 0; j < line_ovly[n].h; j++) { *************** *** 965,969 **** BYTE* srcPtr; //BYTE* dstPtr; ! int c, j; int result; --- 967,971 ---- BYTE* srcPtr; //BYTE* dstPtr; ! int c; int result; *************** *** 999,1003 **** bb_t = -info->face->glyph->bitmap_top; } ! tmp = bb_b < info->face->glyph->bitmap.rows - info->face->glyph->bitmap_top; if (bb_b < tmp) { --- 1001,1005 ---- bb_t = -info->face->glyph->bitmap_top; } ! tmp = info->face->glyph->bitmap.rows - info->face->glyph->bitmap_top; if (bb_b < tmp) { *************** *** 1008,1012 **** bb_l = info->face->glyph->bitmap_left; } ! tmp = bb_r < info->face->glyph->bitmap_left + info->face->glyph->bitmap.width; if (bb_r < tmp) { --- 1010,1014 ---- bb_l = info->face->glyph->bitmap_left; } ! tmp = info->face->glyph->bitmap_left + info->face->glyph->bitmap.width; if (bb_r < tmp) { *************** *** 1054,1057 **** --- 1056,1060 ---- // horizontally centre character dstLine += (tc_data->tc_ovly[c].w - info->face->glyph->bitmap.width) / 2; + unsigned int j; for (j = 0; j < info->face->glyph->bitmap.rows; j++) { *************** *** 1143,1147 **** BYTE* srcPtr; //BYTE* dstPtr; - int j; int result; --- 1146,1149 ---- *************** *** 1175,1179 **** bb_t = -info->face->glyph->bitmap_top; } ! tmp = bb_b < info->face->glyph->bitmap.rows - info->face->glyph->bitmap_top; if (bb_b < tmp) { --- 1177,1181 ---- bb_t = -info->face->glyph->bitmap_top; } ! tmp = info->face->glyph->bitmap.rows - info->face->glyph->bitmap_top; if (bb_b < tmp) { *************** *** 1184,1188 **** bb_l = info->face->glyph->bitmap_left; } ! tmp = bb_r < info->face->glyph->bitmap_left + info->face->glyph->bitmap.width; if (bb_r < tmp) { --- 1186,1190 ---- bb_l = info->face->glyph->bitmap_left; } ! tmp = info->face->glyph->bitmap_left + info->face->glyph->bitmap.width; if (bb_r < tmp) { *************** *** 1212,1216 **** if (character == '(' || character == ')') // add other characters to this list { ! // make colon narrower than other characters ovly->w = info->face->glyph->advance.x / 64; } --- 1214,1218 ---- if (character == '(' || character == ')') // add other characters to this list { ! // make narrower than other characters ovly->w = info->face->glyph->advance.x / 64; } *************** *** 1221,1224 **** --- 1223,1227 ---- // horizontally centre character dstLine += (ovly->w - info->face->glyph->bitmap.width) / 2; + unsigned int j; for (j = 0; j < info->face->glyph->bitmap.rows; j++) { *************** *** 1242,1246 **** YUV_error char_set_to_overlay(p_info_rec* p_info, char_set_data* cs_data, ! const char* cset, const char* font, const int size, float pixel_aspect_ratio, int debug) { --- 1245,1249 ---- YUV_error char_set_to_overlay(p_info_rec* p_info, char_set_data* cs_data, ! const char* cset, const char* font, unsigned int size, float pixel_aspect_ratio, int debug) { *************** *** 1250,1254 **** BYTE* srcPtr; //BYTE* dstPtr; ! int c, j; int result; int csetLen; --- 1253,1257 ---- BYTE* srcPtr; //BYTE* dstPtr; ! int c; int result; int csetLen; *************** *** 1285,1293 **** return YUV_freetype; } if (bb_t > -info->face->glyph->bitmap_top) { bb_t = -info->face->glyph->bitmap_top; } ! tmp = bb_b < info->face->glyph->bitmap.rows - info->face->glyph->bitmap_top; if (bb_b < tmp) { --- 1288,1305 ---- return YUV_freetype; } + if (debug) + { + fprintf(stderr, "cset[c]=%c, bitmap_top=%d, bitmap_left=%d, rows=%d, width=%d\n", + cset[c], + info->face->glyph->bitmap_top, + info->face->glyph->bitmap_left, + info->face->glyph->bitmap.rows, + info->face->glyph->bitmap.width); + } if (bb_t > -info->face->glyph->bitmap_top) { bb_t = -info->face->glyph->bitmap_top; } ! tmp = info->face->glyph->bitmap.rows - info->face->glyph->bitmap_top; if (bb_b < tmp) { *************** *** 1298,1302 **** bb_l = info->face->glyph->bitmap_left; } ! tmp = bb_r < info->face->glyph->bitmap_left + info->face->glyph->bitmap.width; if (bb_r < tmp) { --- 1310,1314 ---- bb_l = info->face->glyph->bitmap_left; } ! tmp = info->face->glyph->bitmap_left + info->face->glyph->bitmap.width; if (bb_r < tmp) { *************** *** 1304,1307 **** --- 1316,1323 ---- } } + if (debug) + { + fprintf(stderr, "bb_t=%d, bb_b=%d, bb_l=%d, bb_r=%d\n", bb_t, bb_b, bb_l, bb_r); + } // expand bounding box a little bb_t -= 1; *************** *** 1319,1323 **** --- 1335,1341 ---- cs_data->cs_ovly[c].h * 2); if (cs_data->cs_ovly[c].buff == NULL) + { return YUV_no_memory; + } memset(cs_data->cs_ovly[c].buff, 0, cs_data->cs_ovly[c].w * cs_data->cs_ovly[c].h * 2); *************** *** 1336,1344 **** return YUV_freetype; } - if (c == 10) - { - // make colon narrower than other characters - cs_data->cs_ovly[c].w = info->face->glyph->advance.x / 64; - } srcPtr = info->face->glyph->bitmap.buffer; dstLine = cs_data->cs_ovly[c].buff; --- 1354,1357 ---- *************** *** 1347,1355 **** // horizontally centre character dstLine += (cs_data->cs_ovly[c].w - info->face->glyph->bitmap.width) / 2; for (j = 0; j < info->face->glyph->bitmap.rows; j++) { ! if (debug) { ! fprintf(stderr,"dstLine=%p, width=%d\n",dstLine, info->face->glyph->bitmap.width); } memcpy(dstLine, srcPtr, info->face->glyph->bitmap.width); --- 1360,1374 ---- // horizontally centre character dstLine += (cs_data->cs_ovly[c].w - info->face->glyph->bitmap.width) / 2; + if (debug) + { + fprintf(stderr,"cs_ovly[%d].buff = %p\n", c, cs_data->cs_ovly[c].buff); + fprintf(stderr,"dstLine = %p\n", dstLine); + } + unsigned int j; for (j = 0; j < info->face->glyph->bitmap.rows; j++) { ! if (0) { ! fprintf(stderr,"dstLine=%p, width=%d\n", dstLine, info->face->glyph->bitmap.width); } memcpy(dstLine, srcPtr, info->face->glyph->bitmap.width); Index: YUV_text_overlay.h =================================================================== RCS file: /cvsroot/ingex/ingex/YUVlib/YUV_text_overlay.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** YUV_text_overlay.h 11 Nov 2016 15:46:17 -0000 1.3 --- YUV_text_overlay.h 16 Nov 2016 16:51:19 -0000 1.4 *************** *** 83,87 **** int tab_width, int enable_align_right, ! const char* font, const int size, float pixel_aspect_ratio); --- 83,88 ---- int tab_width, int enable_align_right, ! const char* font, ! unsigned int size, float pixel_aspect_ratio); *************** *** 142,146 **** YUV_error char_set_to_overlay(p_info_rec* info, char_set_data* cs_data, ! const char* cset, const char* font, const int size, float pixel_aspect_ratio, int debug); --- 143,147 ---- YUV_error char_set_to_overlay(p_info_rec* info, char_set_data* cs_data, ! const char* cset, const char* font, unsigned int size, float pixel_aspect_ratio, int debug); |
From: John F. <jo...@us...> - 2016-11-11 15:49:13
|
Update of /cvsroot/ingex/ingex/player/ingex_player In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv14465 Modified Files: on_screen_display.c Log Message: Added debug Index: on_screen_display.c =================================================================== RCS file: /cvsroot/ingex/ingex/player/ingex_player/on_screen_display.c,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** on_screen_display.c 20 Dec 2012 11:06:05 -0000 1.25 --- on_screen_display.c 11 Nov 2016 15:49:10 -0000 1.26 *************** *** 1887,1891 **** /* note: the order must match UNKNOWN_TC_OVLY_IDX, ... */ CHK_ORET(char_set_to_overlay(&osdd->p_info, &osdd->timecodeTypeData, "?CSVLvlX", ! "Ariel", 48 * fontScale, osdd->pixelAspectRatio) >= 0); CHK_ORET(init_timecode(&osdd->p_info, &osdd->timecodeTextData, "Ariel", --- 1887,1891 ---- /* note: the order must match UNKNOWN_TC_OVLY_IDX, ... */ CHK_ORET(char_set_to_overlay(&osdd->p_info, &osdd->timecodeTypeData, "?CSVLvlX", ! "Ariel", 48 * fontScale, osdd->pixelAspectRatio, 1) >= 0); CHK_ORET(init_timecode(&osdd->p_info, &osdd->timecodeTextData, "Ariel", *************** *** 1893,1900 **** CHK_ORET(char_set_to_overlay(&osdd->p_info, &osdd->numberData, "0123456789", ! "Ariel", 34 * fontScale, osdd->pixelAspectRatio) >= 0); CHK_ORET(char_set_to_overlay(&osdd->p_info, &osdd->vtrErrorCodeData, "0123456789+", ! "Ariel", 34 * fontScale, osdd->pixelAspectRatio) >= 0); /* the message if "FRAME REPEAT" instead of "FRAME DROPPED" because the DVS card repeats the last frame --- 1893,1900 ---- CHK_ORET(char_set_to_overlay(&osdd->p_info, &osdd->numberData, "0123456789", ! "Ariel", 34 * fontScale, osdd->pixelAspectRatio, 0) >= 0); CHK_ORET(char_set_to_overlay(&osdd->p_info, &osdd->vtrErrorCodeData, "0123456789+", ! "Ariel", 34 * fontScale, osdd->pixelAspectRatio, 0) >= 0); /* the message if "FRAME REPEAT" instead of "FRAME DROPPED" because the DVS card repeats the last frame |
From: John F. <jo...@us...> - 2016-11-11 15:46:19
|
Update of /cvsroot/ingex/ingex/YUVlib In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv14371 Modified Files: YUV_text_overlay.c YUV_text_overlay.h Log Message: Added debug Index: YUV_text_overlay.c =================================================================== RCS file: /cvsroot/ingex/ingex/YUVlib/YUV_text_overlay.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** YUV_text_overlay.c 10 Nov 2016 11:32:35 -0000 1.5 --- YUV_text_overlay.c 11 Nov 2016 15:46:17 -0000 1.6 *************** *** 1243,1247 **** YUV_error char_set_to_overlay(p_info_rec* p_info, char_set_data* cs_data, const char* cset, const char* font, const int size, ! float pixel_aspect_ratio) { info_rec* info; --- 1243,1247 ---- YUV_error char_set_to_overlay(p_info_rec* p_info, char_set_data* cs_data, const char* cset, const char* font, const int size, ! float pixel_aspect_ratio, int debug) { info_rec* info; *************** *** 1327,1330 **** --- 1327,1334 ---- for (c = 0; c < csetLen; c++) { + if (debug) + { + fprintf(stderr,"c=%d, cset[c]=%c\n",c, cset[c]); + } /* load glyph image into the slot (erase previous one) */ if (FT_Load_Char(info->face, cset[c], FT_LOAD_RENDER)) *************** *** 1345,1348 **** --- 1349,1356 ---- for (j = 0; j < info->face->glyph->bitmap.rows; j++) { + if (debug) + { + fprintf(stderr,"dstLine=%p, width=%d\n",dstLine, info->face->glyph->bitmap.width); + } memcpy(dstLine, srcPtr, info->face->glyph->bitmap.width); srcPtr += info->face->glyph->bitmap.width; Index: YUV_text_overlay.h =================================================================== RCS file: /cvsroot/ingex/ingex/YUVlib/YUV_text_overlay.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** YUV_text_overlay.h 26 Oct 2011 17:46:06 -0000 1.2 --- YUV_text_overlay.h 11 Nov 2016 15:46:17 -0000 1.3 *************** *** 143,147 **** YUV_error char_set_to_overlay(p_info_rec* info, char_set_data* cs_data, const char* cset, const char* font, const int size, ! float pixel_aspect_ratio); --- 143,147 ---- YUV_error char_set_to_overlay(p_info_rec* info, char_set_data* cs_data, const char* cset, const char* font, const int size, ! float pixel_aspect_ratio, int debug); |
From: John F. <jo...@us...> - 2016-11-10 17:07:07
|
Update of /cvsroot/ingex/ingex/player/ingex_player In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv18175 Modified Files: x11_common.c Log Message: Fix code errors Index: x11_common.c =================================================================== RCS file: /cvsroot/ingex/ingex/player/ingex_player/x11_common.c,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** x11_common.c 20 Dec 2012 11:06:05 -0000 1.12 --- x11_common.c 10 Nov 2016 17:07:05 -0000 1.13 *************** *** 164,168 **** int x11c_initialise(X11Common* x11Common, int reviewDuration, int haveXV, OnScreenDisplay* osd, X11WindowInfo* windowInfo) { ! memset(x11Common, 0, sizeof(x11Common)); x11Common->reviewDuration = reviewDuration; --- 164,168 ---- int x11c_initialise(X11Common* x11Common, int reviewDuration, int haveXV, OnScreenDisplay* osd, X11WindowInfo* windowInfo) { ! memset(x11Common, 0, sizeof(X11Common)); x11Common->reviewDuration = reviewDuration; *************** *** 226,230 **** destroy_mutex(&x11Common->eventMutex); ! memset(x11Common, 0, sizeof(x11Common)); } --- 226,230 ---- destroy_mutex(&x11Common->eventMutex); ! memset(x11Common, 0, sizeof(X11Common)); } |
From: John F. <jo...@us...> - 2016-11-10 11:32:37
|
Update of /cvsroot/ingex/ingex/YUVlib In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv2767 Modified Files: YUV_text_overlay.c Log Message: Code changes to avoid compiler bug See https://sourceforge.net/p/ingex/discussion/531547/thread/e3d25b5a/#5060 Index: YUV_text_overlay.c =================================================================== RCS file: /cvsroot/ingex/ingex/YUVlib/YUV_text_overlay.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** YUV_text_overlay.c 8 Nov 2016 15:36:08 -0000 1.4 --- YUV_text_overlay.c 10 Nov 2016 11:32:35 -0000 1.5 *************** *** 989,992 **** --- 989,993 ---- for (c = 0; c < 12; c++) { + int tmp; // using this avoids compiler bug in some builds /* load glyph image into the slot (erase previous one) */ if (FT_Load_Char(info->face, cset[c], FT_LOAD_RENDER)) *************** *** 998,1002 **** bb_t = -info->face->glyph->bitmap_top; } ! if (bb_b < info->face->glyph->bitmap.rows - info->face->glyph->bitmap_top) { bb_b = info->face->glyph->bitmap.rows - info->face->glyph->bitmap_top; --- 999,1004 ---- bb_t = -info->face->glyph->bitmap_top; } ! tmp = bb_b < info->face->glyph->bitmap.rows - info->face->glyph->bitmap_top; ! if (bb_b < tmp) { bb_b = info->face->glyph->bitmap.rows - info->face->glyph->bitmap_top; *************** *** 1006,1010 **** bb_l = info->face->glyph->bitmap_left; } ! if (bb_r < info->face->glyph->bitmap_left + info->face->glyph->bitmap.width) { bb_r = info->face->glyph->bitmap_left + info->face->glyph->bitmap.width; --- 1008,1013 ---- bb_l = info->face->glyph->bitmap_left; } ! tmp = bb_r < info->face->glyph->bitmap_left + info->face->glyph->bitmap.width; ! if (bb_r < tmp) { bb_r = info->face->glyph->bitmap_left + info->face->glyph->bitmap.width; *************** *** 1164,1167 **** --- 1167,1171 ---- bb_l = 1000000; bb_r = -1000000; + int tmp; // using this avoids compiler bug in some builds /* load glyph image into the slot (erase previous one) */ if (FT_Load_Char(info->face, character, FT_LOAD_RENDER)) *************** *** 1171,1175 **** bb_t = -info->face->glyph->bitmap_top; } ! if (bb_b < info->face->glyph->bitmap.rows - info->face->glyph->bitmap_top) { bb_b = info->face->glyph->bitmap.rows - info->face->glyph->bitmap_top; --- 1175,1180 ---- bb_t = -info->face->glyph->bitmap_top; } ! tmp = bb_b < info->face->glyph->bitmap.rows - info->face->glyph->bitmap_top; ! if (bb_b < tmp) { bb_b = info->face->glyph->bitmap.rows - info->face->glyph->bitmap_top; *************** *** 1179,1183 **** bb_l = info->face->glyph->bitmap_left; } ! if (bb_r < info->face->glyph->bitmap_left + info->face->glyph->bitmap.width) { bb_r = info->face->glyph->bitmap_left + info->face->glyph->bitmap.width; --- 1184,1189 ---- bb_l = info->face->glyph->bitmap_left; } ! tmp = bb_r < info->face->glyph->bitmap_left + info->face->glyph->bitmap.width; ! if (bb_r < tmp) { bb_r = info->face->glyph->bitmap_left + info->face->glyph->bitmap.width; *************** *** 1273,1276 **** --- 1279,1283 ---- for (c = 0; c < csetLen; c++) { + int tmp; // using this avoids compiler bug in some builds /* load glyph image into the slot (erase previous one) */ if (FT_Load_Char(info->face, cset[c], FT_LOAD_RENDER)) *************** *** 1282,1286 **** bb_t = -info->face->glyph->bitmap_top; } ! if (bb_b < info->face->glyph->bitmap.rows - info->face->glyph->bitmap_top) { bb_b = info->face->glyph->bitmap.rows - info->face->glyph->bitmap_top; --- 1289,1294 ---- bb_t = -info->face->glyph->bitmap_top; } ! tmp = bb_b < info->face->glyph->bitmap.rows - info->face->glyph->bitmap_top; ! if (bb_b < tmp) { bb_b = info->face->glyph->bitmap.rows - info->face->glyph->bitmap_top; *************** *** 1290,1294 **** bb_l = info->face->glyph->bitmap_left; } ! if (bb_r < info->face->glyph->bitmap_left + info->face->glyph->bitmap.width) { bb_r = info->face->glyph->bitmap_left + info->face->glyph->bitmap.width; --- 1298,1303 ---- bb_l = info->face->glyph->bitmap_left; } ! tmp = bb_r < info->face->glyph->bitmap_left + info->face->glyph->bitmap.width; ! if (bb_r < tmp) { bb_r = info->face->glyph->bitmap_left + info->face->glyph->bitmap.width; |
From: John F. <jo...@us...> - 2016-02-12 13:56:46
|
Update of /cvsroot/ingex/ingex/studio/capture In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv3007 Modified Files: bmd_sdi.cpp Log Message: Removed obsolete BMD setup code Index: bmd_sdi.cpp =================================================================== RCS file: /cvsroot/ingex/ingex/studio/capture/bmd_sdi.cpp,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** bmd_sdi.cpp 1 Jul 2013 15:31:37 -0000 1.12 --- bmd_sdi.cpp 12 Feb 2016 13:56:43 -0000 1.13 *************** *** 1196,1219 **** goto end; } - // Config Bmd board. - if ( S_OK == (hr = bmd_pBmdArray[i]->QueryInterface(IID_IDeckLinkConfiguration, - reinterpret_cast<void**>(&bmd_pBmdConfigArray[i]))) ) - { - if (bmd_pBmdConfigArray[i] != NULL) - { - hr = bmd_pBmdConfigArray[i]->SetInt(bmdDeckLinkConfigVideoInputConnection, bmd_video_connection); - hr = bmd_pBmdConfigArray[i]->SetInt(bmdDeckLinkConfigAudioInputConnection, bmd_audio_connection); - hr = bmd_pBmdConfigArray[i]->SetFlag(bmdDeckLinkConfig444SDIVideoOutput, false); - hr = bmd_pBmdConfigArray[i]->SetFlag(bmdDeckLinkConfig3GBpsVideoOutput, false); - if (bmd_Setup75) - { - //hr = bmd_pBmdConfigArray[i]->SetAnalogVideoInputFlags(bmdAnalogVideoFlagCompositeSetup75); - } - else - { - //hr = bmd_pBmdConfigArray[i]->SetAnalogVideoInputFlags(0); - } - } - } // Setup handlers bmd_Handlers[i] = new CBmdInputHandler(i); --- 1196,1199 ---- |
From: John F. <jo...@us...> - 2015-04-20 15:35:23
|
Update of /cvsroot/ingex/ingex/studio/scripts In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv31481 Added Files: startIngex_new.sh Log Message: Improved desktop start/stop script --- NEW FILE: startIngex_new.sh --- #!/bin/sh # Starts the Ingex processes as enabled in the file ~/ingex.conf or /etc/ingex.conf usage="Usage: $0 [-a start|stop] [-h] Options: -a [start|stop] Action (start or stop) -h HD mode (only needed for start) " HD_MODE=0 START=1 while getopts 'a:h' OPT do case $OPT in h) HD_MODE=1 ;; a) if [ "$OPTARG" == "start" ] then START=1 elif [ "$OPTARG" == "stop" ] then START=0 else echo "${usage}" exit 1 fi ;; ?) echo "${usage}" exit 1 ;; esac done # Set defaults for Ingex processes and parameters # These can be overidden by ~/ingex.conf or /etc/ingex.conf declare -x INGEX_DIR="/home/ingex/ap-workspace/ingex" CAPTURE=1 MULTICAST=0 TRANSFER=0 INGEX_MONITOR=0 SYSTEM_MONITOR=0 QUAD_SPLIT=0 RECORDERS= CAPTURE_PROGRAM="DVS_SDI" # Nameserver details NAMESERVER=":8888" DOTTED_DECIMAL=1 # Database details DB_HOST='localhost' DB_NAME='prodautodb' DB_USER='bamzooki' DB_PASS='bamzooki' # *** Default HD Capture options **** HD_CAPTURE_CHANNELS=2 HD_CAPTURE_MODE="1920x1080i50" HD_CAPTURE_PRIMARY_BUFFER="YUV422" HD_CAPTURE_SECONDARY_BUFFER="YUV422" HD_CAPTURE_TIMECODE="LTC" #HD_CAPTURE_OPTIONS="-aes8" HD_CAPTURE_OPTIONS="" # HD Recorders (space-separated) HD_RECORDERS="Ingex-HD" # HD Quad player options HD_QUAD_OPTIONS="--disable-shuttle --audio-lineup -18 --audio-mon 2 --source-aspect 16:9 --quad-split --hide-progress-bar --shm-in 0s --shm-in 1s" # Default SD Capture options SD_CAPTURE_CHANNELS=4 SD_CAPTURE_MODE="PAL" SD_CAPTURE_PRIMARY_BUFFER="YUV422" SD_CAPTURE_SECONDARY_BUFFER="None" SD_CAPTURE_TIMECODE="LTC" SD_CAPTURE_OPTIONS="" # SD Recorders (space-separated) SD_RECORDERS="Ingex" # SD Quad player options SD_QUAD_OPTIONS="--disable-shuttle --audio-lineup -18 --audio-mon 2 --source-aspect 16:9 --quad-split --hide-progress-bar --shm-in 0p --shm-in 1p --shm-in 2p --shm-in 3p" # Transfer (copy) options # Set COPY_FTP_SERVER to be the hostname of your ftp server, # otherwise the transfer will be done by file copying. COPY_FTP_SERVER= #COPY_FTP_SERVER='yourFTPserver' COPY_FTP_USER='ingex' COPY_FTP_PASSWORD='ingex' # Priority 1 files (usually the offline quality) can also be copied to a second destination, typically a local USB drive. Put the destination here to activate this (e.g. /video_removeable which might link to your usb drive) #COPY_EXTRA_DEST='/video_removeable' COPY_EXTRA_DEST= # **** end of transfer options **** # ***** Multicasting ***** # Set the multicast address and first port to use. The same address will # be used for all channels (on this PC) but the port number will increment MULTICAST_ADDR='239.255.1.1' MULTICAST_FIRST_PORT=2000 # Set size of down-scaled image. Suggest 360x288 for an mpeg stream or 240x192 # for simple down-scaling #MULTICAST_SIZE='240x192' MULTICAST_SIZE='360x288' # For an mpeg transport stream set the next parameter to 1, for image scaling # only set it to zero. Set your desired mpeg bitrate (kb/s) too. MULTICAST_MPEG_TS=1 MULTICAST_MPEG_BIT_RATE='1000' # **** end of multicast options **** # ********** There are no options to edit below this line ************* #********************************************************************** # Get the required configuration if [ -r $HOME/ingex.conf ] then # Read in ingex mode configuration . $HOME/ingex.conf elif [ -r /etc/ingex.conf ] then # Read in ingex mode configuration . /etc/ingex.conf fi # set up paths etc capture_path="$INGEX_DIR/studio/capture/" xfer_path="$INGEX_DIR/studio/processing/media_transfer/" scripts_path="$INGEX_DIR/studio/scripts/" # recorder details recorder_path="$INGEX_DIR/studio/ace-tao/Recorder/" run_recorder="./Recorder" routerlogger_path="$INGEX_DIR/studio/ace-tao/routerlog/" run_routerLogger="./run_routerlogger.sh" # assemble the database arguments DB_PARAMS="--dbhost $DB_HOST --dbname $DB_NAME --dbuser $DB_USER --dbpass $DB_PASS" # Allow KDE apps to work properly over the network #export $(dbus-launch) # Check to see if capture is already running. If it is, check with the user to avoid stopping it by mistake ABORT=0 if sudo killall -q -0 -e dvs_sdi bmd_sdi then kdialog --title "Confirm... " --warningyesno "Ingex is running. Are you sure you want to stop it?" ABORT=$? fi if [ $ABORT -ne 0 ] ; then exit 1 fi # Kill Ingex processes, if they're running echo "Checking for Ingex processes..." PROCESSES="player Recorder nexus_multicast nexus_web system_info_web dvs_sdi dvs_dummy bmd_sdi testgen xferserver.pl" for PROC in $PROCESSES ; do if sudo killall -q -0 -e ${PROC} then sudo killall -s SIGINT -e ${PROC} while sudo killall -q -0 -e ${PROC} do usleep 100000 done fi done # Can't kill konsole because all konsoles use same PID # You can find shells in konsole tabs with ps -fC bash and suitable grep but killing them # doesn't close tab. # You can use # qdbus org.kde.konsole /Sessions/12 sendText "exit # " # Just need to find Session number echo "All Ingex processes stopped." # If any were already running, by now, all Ingex precesses and their konsoles should have stopped if [ $START -ne 1 ] then exit 0 fi # Start Ingex echo "Starting Ingex..." # set corba options CORBA_OPTIONS="-ORBDefaultInitRef corbaloc:iiop:$NAMESERVER -ORBDottedDecimalAddresses $DOTTED_DECIMAL" # set the capture mode for HD or SD if [ $HD_MODE -ge 1 ] ; then # Set capture options to HD CAPTURE_CHANNELS="${HD_CAPTURE_CHANNELS}" CAPTURE_MODE="${HD_CAPTURE_MODE}" CAPTURE_PRIMARY_BUFFER="${HD_CAPTURE_PRIMARY_BUFFER}" CAPTURE_SECONDARY_BUFFER="${HD_CAPTURE_SECONDARY_BUFFER}" CAPTURE_TIMECODE="${HD_CAPTURE_TIMECODE}" CAPTURE_OPTIONS="${HD_CAPTURE_OPTIONS}" # Recorders RECORDERS="${HD_RECORDERS}" # Quad player options QUAD_OPTIONS="${HD_QUAD_OPTIONS}" else # Set capture options to SD CAPTURE_CHANNELS="${SD_CAPTURE_CHANNELS}" CAPTURE_MODE="${SD_CAPTURE_MODE}" CAPTURE_PRIMARY_BUFFER="${SD_CAPTURE_PRIMARY_BUFFER}" CAPTURE_SECONDARY_BUFFER="${SD_CAPTURE_SECONDARY_BUFFER}" CAPTURE_TIMECODE="${SD_CAPTURE_TIMECODE}" CAPTURE_OPTIONS="${SD_CAPTURE_OPTIONS}" # Recorders (space-separated) RECORDERS="${SD_RECORDERS}" # Quad player options QUAD_OPTIONS="${SD_QUAD_OPTIONS}" fi # export some settings, so other scripts can pick them up if necessary declare -x INGEX_CHANNELS=${CAPTURE_CHANNELS} function SetupTab { # arg: name of tab RC_FILE=/tmp/ingex-$1-bashrc HISTORY=~/.ingex-$1-bash-history rm $HISTORY 2>/dev/null echo "HISTFILE=$HISTORY" > $RC_FILE #separate history for each tab so that we can easily repeat commands echo "konsole -p tabtitle=$1 --new-tab -e bash --rcfile $RC_FILE" >> $KONSOLE_CMD_FILE } function WriteCommand { #arg: command echo "echo \"$1\"" >> $RC_FILE #so that we can see what the command is; quotes allow semicolons echo $1 >> $RC_FILE #execute the command on startup echo $1 >> $HISTORY #allow the command to be manually re-issued } KONSOLE_CMD_FILE=/tmp/ingex-tabs # the file given to the konsole command, containing tab names and a command to be executed for each tab, which only seems to work as a single word, so each points to an executable file rm $KONSOLE_CMD_FILE 2>/dev/null # set the required script path to all sessions if [ $CAPTURE -ge 1 ] ; then SetupTab "Capture" WriteCommand "cd $capture_path" if [ $CAPTURE_PROGRAM = "DVS_SDI" ] ; then # sudo nice -10 WriteCommand "sudo nice --10 ./dvs_sdi -c $CAPTURE_CHANNELS -mode $CAPTURE_MODE -f $CAPTURE_PRIMARY_BUFFER -s $CAPTURE_SECONDARY_BUFFER -mc 0 -tt $CAPTURE_TIMECODE $CAPTURE_OPTIONS" elif [ $CAPTURE_PROGRAM = "DVS_DUMMY" ] ; then WriteCommand "sudo nice --10 ./dvs_dummy -c $CAPTURE_CHANNELS -mode $CAPTURE_MODE -f $CAPTURE_PRIMARY_BUFFER -s $CAPTURE_SECONDARY_BUFFER -mc 0 -tt $CAPTURE_TIMECODE $CAPTURE_OPTIONS" elif [ $CAPTURE_PROGRAM = "BMD_SDI" ] ; then WriteCommand "sudo nice --10 ./bmd_sdi -c $CAPTURE_CHANNELS -mode $CAPTURE_MODE -f $CAPTURE_PRIMARY_BUFFER -s $CAPTURE_SECONDARY_BUFFER -mc 0 -tt $CAPTURE_TIMECODE $CAPTURE_OPTIONS" elif [ $CAPTURE_PROGRAM = "TESTGEN" ] ; then WriteCommand "sudo nice --10 ./testgen -c $CAPTURE_CHANNELS" else echo "Invalid ingex.conf or argument. exit." return 1 fi fi # ** multicasting ** if [ $MULTICAST -ge 1 ] ; then SetupTab "Multicast" WriteCommand "cd $capture_path" # Prepare options. If mpeg transport stream, set -t option and bitrate if [ $MULTICAST_MPEG_TS -ge 1 ] ; then OPTIONS="-t -b ${MULTICAST_MPEG_BIT_RATE}" fi OPTIONS="${OPTIONS} -s ${MULTICAST_SIZE}" PORT=$MULTICAST_FIRST_PORT CHAN=0 while [ "$CHAN" -lt "$CAPTURE_CHANNELS" ] ; do #echo "Starting multicast channel ${CHAN}" WriteCommand "./nexus_multicast -c ${CHAN} -q ${OPTIONS} ${MULTICAST_ADDR}:${PORT} &\n" let CHAN=$CHAN+1 let PORT=$PORT+1 done fi # ** Transfer ** if [ $TRANSFER -ge 1 ] ; then SetupTab "Copy" WriteCommand "cd $xfer_path" if [ -n "${COPY_EXTRA_DEST}" ] ; then EXTRA_DEST="-e ${COPY_EXTRA_DEST}" fi if [ -z "${COPY_FTP_SERVER}" ] ; then WriteCommand "./xferserver.pl ${EXTRA_DEST}" else FTP_OPTIONS="'${COPY_FTP_SERVER} ${COPY_FTP_USER} ${COPY_FTP_PASSWORD}'" WriteCommand "./xferserver.pl ${EXTRA_DEST} -f $FTP_OPTIONS" fi fi if [ $INGEX_MONITOR -ge 1 ] ; then SetupTab "nexusWeb" WriteCommand "cd $capture_path" WriteCommand "./nexus_web" fi if [ $SYSTEM_MONITOR -ge 1 ] ; then SetupTab "sysInfo" WriteCommand "cd $capture_path" WriteCommand "./system_info_web" fi if [ $QUAD_SPLIT -ge 1 ] ; then SetupTab "Quad" WriteCommand "cd $scripts_path" WriteCommand "$INGEX_DIR/player/ingex_player/player $QUAD_OPTIONS" fi if [ $ROUTER_LOGGER -ge 1 ] ; then SetupTab "RouterLogger" WriteCommand "${run_routerLogger}" fi # Start recorders if any are set in the configuration - in the same konsole as they can be detached by the user if [ -n "$RECORDERS" ] ; then echo $RECORDERS for REC in $RECORDERS ; do echo "Starting recorder: $REC" SetupTab "Recorder_$REC" WriteCommand "cd $recorder_path" WriteCommand "${run_recorder} --name ${REC} ${DB_PARAMS} ${CORBA_OPTIONS}" done fi # Start it all up #konsole --tabs-from-file $KONSOLE_CMD_FILE --name "Ingex" #konsole --name "Ingex" -e bash $KONSOLE_CMD_FILE exec bash $KONSOLE_CMD_FILE |
From: John F. <jo...@us...> - 2015-04-20 14:44:53
|
Update of /cvsroot/ingex/ingex/studio/capture In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv26553 Modified Files: Makefile Log Message: Correction Index: Makefile =================================================================== RCS file: /cvsroot/ingex/ingex/studio/capture/Makefile,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** Makefile 20 Apr 2015 14:23:27 -0000 1.29 --- Makefile 20 Apr 2015 14:44:51 -0000 1.30 *************** *** 54,58 **** PROGS = $(SDI_PROGS) nexus_save nexus_xv nexus_stats nexus_web system_info_web nexus_multicast nexus_set_source - PROGS += shm_calc_signatures .PHONY: all --- 54,57 ---- |
From: John F. <jo...@us...> - 2015-04-20 14:39:18
|
Update of /cvsroot/ingex/ingex/common In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv25867 Modified Files: Makefile Log Message: Removed references to unused source files Index: Makefile =================================================================== RCS file: /cvsroot/ingex/ingex/common/Makefile,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** Makefile 20 Apr 2015 14:26:19 -0000 1.19 --- Makefile 20 Apr 2015 14:39:16 -0000 1.20 *************** *** 54,58 **** endif ! PROGS = unittests timecode_test 2059_master_test timecode_convert smpte_gmtime_test time_label_test smpte_timecode_test LIBCOMMON = libcommon.a --- 54,58 ---- endif ! PROGS = unittests LIBCOMMON = libcommon.a *************** *** 76,97 **** $(LINK.o) -o $@ $^ -lstdc++ -lm - timecode_test: timecode_test.o $(LIBCOMMON) - $(LINK.o) -o $@ $^ -lstdc++ - - 2059_master_test: 2059_master_test.o $(LIBCOMMON) - $(LINK.o) -o $@ $^ -lstdc++ - - timecode_convert: timecode_convert.o $(LIBCOMMON) - $(LINK.o) -o $@ $^ -lstdc++ - - smpte_gmtime_test: smpte_gmtime_test.o $(LIBCOMMON) - $(LINK.o) -o $@ $^ -lstdc++ - - time_label_test: time_label_test.o $(LIBCOMMON) - $(LINK.o) -o $@ $^ -lstdc++ - - smpte_timecode_test: smpte_timecode_test.o $(LIBCOMMON) - $(LINK.o) -o $@ $^ -lstdc++ - .PHONY: check check: all --- 76,79 ---- |
From: John F. <jo...@us...> - 2015-04-20 14:26:21
|
Update of /cvsroot/ingex/ingex/common In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv24487/common Modified Files: Makefile Log Message: Update for opensuse 13.2 Index: Makefile =================================================================== RCS file: /cvsroot/ingex/ingex/common/Makefile,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** Makefile 24 Jun 2013 15:57:15 -0000 1.18 --- Makefile 20 Apr 2015 14:26:19 -0000 1.19 *************** *** 27,31 **** OPT = -DNDEBUG -O3 -mmmx -msse2 INCLUDES= ! CFLAGS = -Wall -Wextra -Werror -Wno-unused-parameter -g -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE $(OPT) $(INCLUDES) CXXFLAGS = -Wall -Wextra -Werror -Wno-unused-parameter -g -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE $(OPT) $(INCLUDES) --- 27,31 ---- OPT = -DNDEBUG -O3 -mmmx -msse2 INCLUDES= ! CFLAGS = -std=gnu99 -Wall -Wextra -Werror -Wno-unused-parameter -g -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE $(OPT) $(INCLUDES) CXXFLAGS = -Wall -Wextra -Werror -Wno-unused-parameter -g -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE $(OPT) $(INCLUDES) *************** *** 54,58 **** endif ! PROGS = unittests timecode_test LIBCOMMON = libcommon.a --- 54,58 ---- endif ! PROGS = unittests timecode_test 2059_master_test timecode_convert smpte_gmtime_test time_label_test smpte_timecode_test LIBCOMMON = libcommon.a *************** *** 79,82 **** --- 79,97 ---- $(LINK.o) -o $@ $^ -lstdc++ + 2059_master_test: 2059_master_test.o $(LIBCOMMON) + $(LINK.o) -o $@ $^ -lstdc++ + + timecode_convert: timecode_convert.o $(LIBCOMMON) + $(LINK.o) -o $@ $^ -lstdc++ + + smpte_gmtime_test: smpte_gmtime_test.o $(LIBCOMMON) + $(LINK.o) -o $@ $^ -lstdc++ + + time_label_test: time_label_test.o $(LIBCOMMON) + $(LINK.o) -o $@ $^ -lstdc++ + + smpte_timecode_test: smpte_timecode_test.o $(LIBCOMMON) + $(LINK.o) -o $@ $^ -lstdc++ + .PHONY: check check: all |
From: John F. <jo...@us...> - 2015-04-20 14:24:11
|
Update of /cvsroot/ingex/ingex/player/ingex_player In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv24257/ingex_player Modified Files: Makefile Log Message: Update for opensuse 13.2 Index: Makefile =================================================================== RCS file: /cvsroot/ingex/ingex/player/ingex_player/Makefile,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -d -r1.34 -r1.35 *** Makefile 4 Jul 2012 16:16:14 -0000 1.34 --- Makefile 20 Apr 2015 14:24:09 -0000 1.35 *************** *** 85,88 **** --- 85,90 ---- -lpthread -lfreetype -lfontconfig + LDFLAGS = -Wl,-rpath,/usr/local/lib64 + ifdef DISABLE_QC_LTO_ACCESS CFLAGS += -DDISABLE_QC_LTO_ACCESS *************** *** 307,311 **** player: .objs/player.o libingexplayer.a $(CC) -c $(INCLUDES) version.c -o .objs/version.o ! $(CC) .objs/player.o .objs/version.o libingexplayer.a $(LIBS) -o $@ .deps/qc_player.d : qc_player.c --- 309,313 ---- player: .objs/player.o libingexplayer.a $(CC) -c $(INCLUDES) version.c -o .objs/version.o ! $(CC) .objs/player.o .objs/version.o libingexplayer.a $(LIBS) $(LDFLAGS) -o $@ .deps/qc_player.d : qc_player.c |
From: John F. <jo...@us...> - 2015-04-20 14:23:29
|
Update of /cvsroot/ingex/ingex/studio/capture In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv24153/capture Modified Files: Makefile capture.sh Log Message: Updates for opensuse 13.2 Index: Makefile =================================================================== RCS file: /cvsroot/ingex/ingex/studio/capture/Makefile,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** Makefile 24 Jun 2013 16:16:21 -0000 1.28 --- Makefile 20 Apr 2015 14:23:27 -0000 1.29 *************** *** 54,57 **** --- 54,58 ---- PROGS = $(SDI_PROGS) nexus_save nexus_xv nexus_stats nexus_web system_info_web nexus_multicast nexus_set_source + PROGS += shm_calc_signatures .PHONY: all Index: capture.sh =================================================================== RCS file: /cvsroot/ingex/ingex/studio/capture/capture.sh,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** capture.sh 6 Jul 2010 14:15:13 -0000 1.4 --- capture.sh 20 Apr 2015 14:23:27 -0000 1.5 *************** *** 26,28 **** #sudo nice --10 ./dvs_sdi -c 4 -mc 0 -mt LTC -rt LTC -f YUV422 -s None ! sudo nice --10 ./dvs_sdi -c $MAX_CHANNELS -mode $MODE -mc 0 -mt LTC -rt LTC -f $PRIMARY_BUFFER -s $SECONDARY_BUFFER --- 26,28 ---- #sudo nice --10 ./dvs_sdi -c 4 -mc 0 -mt LTC -rt LTC -f YUV422 -s None ! sudo nice --10 ./dvs_sdi -c $MAX_CHANNELS -mode $MODE -mc 0 -tt LTC -f $PRIMARY_BUFFER -s $SECONDARY_BUFFER |
From: John F. <jo...@us...> - 2015-04-20 14:21:20
|
Update of /cvsroot/ingex/ingex/common In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv24002 Removed Files: multicast_video.c time_utils.c Log Message: Moved to C++ --- multicast_video.c DELETED --- --- time_utils.c DELETED --- |
From: John F. <jo...@us...> - 2015-04-20 14:19:33
|
Update of /cvsroot/ingex/ingex/common/tools In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv23810 Added Files: receive_video.cpp send_video.cpp Removed Files: receive_video.c send_video.c Log Message: Moved to C++ --- NEW FILE: receive_video.cpp --- /* * receive_video.c - Receive uncompressed video over multicast * * Copyright (C) 2003 - 2010 British Broadcasting Corporation * All rights reserved * * This program 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. * * This program 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #define __STDC_LIMIT_MACROS #define __STDC_FORMAT_MACROS #include <inttypes.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> /* for getopt */ #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include "multicast_video.h" #include <audio_utils.h> static void usage(void) { fprintf(stderr, "Usage:\n\treceive_video [options] address[:port]\n\n"); fprintf(stderr, "\tE.g. receive_video 239.255.1.1:2000\n\n"); fprintf(stderr, "\t-o specify a different video output file [default rec.yuv]\n"); fprintf(stderr, "\t playback with ... -rawvideo size=69120:w=240:h=192\n"); fprintf(stderr, "\t -rawvideo size=155520:w=360:h=288\n"); fprintf(stderr, "\t -rawvideo size=622080:w=720:h=576\n"); fprintf(stderr, "\t-a specify a different audio output file [default rec.wav]\n"); fprintf(stderr, "\t-t timeout in decimal seconds for frame read [default 0.045]\n"); fprintf(stderr, "\t-l limit in bytes of the saved video file before program exits\n"); fprintf(stderr, "\t-u update frequency in terms of packets [default 50]\n"); fprintf(stderr, "\t-r read raw packets without interpreting them\n"); fprintf(stderr, "\t-q quiet\n"); fprintf(stderr, "\t-v increase verbosity [default 1]\n"); exit(1); } extern int main(int argc, char *argv[]) { char remote[4096], *p; const char *video_file = "rec.yuv", *audio_file = "rec.wav"; FILE *fp_video = NULL, *fp_audio = NULL; int c, fd, port, verbose = 1, raw_read = 0; uint64_t video_file_limit = UINT64_MAX; double timeout = 0.045; // 1/2 frame while ((c = getopt(argc, argv, ":qvro:a:t:l:h")) != -1) { switch(c) { case 'q': verbose = 0; break; case 'v': verbose++; break; case 'r': raw_read = 1; break; case 'o': video_file = optarg; break; case 'a': audio_file = optarg; break; case 't': timeout = strtod(optarg, NULL); break; case 'l': video_file_limit = strtoll(optarg, NULL, 10); break; case ':': printf("-%c requires an argument\n", optopt); usage(); break; default: case 'h': case '?': printf("unknown option %c\n", optopt); usage(); break; } } if (argc - optind != 1) usage(); /* Parse address - udp://@224.1.0.50:1234 or 224.1.0.50:1234 forms */ if ((p = strchr(argv[optind], '@')) != NULL) strcpy(remote, p+1); /* skip 'udp://@' portion */ else if ((p = strrchr(argv[optind], '/')) != NULL) strcpy(remote, p+1); /* skip 'udp://' portion */ else strcpy(remote, argv[optind]); if ((p = strchr(remote, ':')) == NULL) { /* get the port number */ port =1234; /* default port to 1234 */ } else { port = atol(p+1); *p = '\0'; } /*** network setup ***/ if ((fd = connect_to_multicast_address(remote, port)) == -1) { exit(1); } // Raw read from socket, ignoring any structure if (raw_read) { if ((fp_video = fopen(video_file, "wb")) == NULL) { perror("fopen video"); exit(1); } while (raw_read) { uint8_t buf[5000]; ssize_t bytes_read = recv(fd, buf, PACKET_SIZE, 0); printf("\rRead %zd bytes", bytes_read); if (fwrite(buf, bytes_read, 1, fp_video) != 1) { perror("fwrite"); exit(1); } } } // Read video parameters from multicast stream. // This allows us to allocate enough space for video and audio buffers. IngexNetworkHeader header; if (udp_read_frame_header(fd, &header) == -1) { printf("Could not read video parameters from stream\n"); exit(1); } if ((fp_video = fopen(video_file, "wb")) == NULL) { perror("fopen video"); exit(1); } if ((fp_audio = fopen(audio_file, "wb")) == NULL) { perror("fopen audio"); exit(1); } // write 16bits per sample, 2 channel WAV header if (! writeWavHeader(fp_audio, 16, 2)) { printf("Could not write WAV header\n"); exit(1); } int video_size = header.width * header.height * 3/2; int audio_size = header.audio_size; uint8_t * video = (uint8_t *)malloc(video_size); uint8_t * audio = (uint8_t *)malloc(audio_size); uint8_t * tmp_audio = (uint8_t *)malloc(audio_size); // Clear video and audio buffers since network reads may return // incomplete frames memset(video, 0, video_size); memset(audio, 0, audio_size); #ifndef MULTICAST_SINGLE_THREAD udp_reader_thread_t udp_reader; udp_reader.fd = fd; if (! udp_init_reader(header.width, header.height, &udp_reader)) { return 1; } #endif int packet_count = 0; uint64_t video_file_size = 0; while (1) { int packets_read = 0; int i; #ifdef MULTICAST_SINGLE_THREAD int res = udp_read_frame_audio_video(fd, timeout, &header, video, audio, &packets_read); #else int res = udp_read_next_frame(&udp_reader, timeout, &header, video, audio, &packets_read); #endif if (res == -1) { printf("timeout reading frame\n"); continue; } // write video to file if (fwrite(video, video_size, 1, fp_video) != 1) { perror("fwrite video"); exit(1); } video_file_size += video_size; // reformat audio into interleaved 16bit sample stereo for WAV file for (i = 0; i < audio_size; i+=4) { tmp_audio[i + 0] = audio[i/2 + 0]; tmp_audio[i + 1] = audio[i/2 + 1]; tmp_audio[i + 2] = audio[audio_size/2 + i/2 +0]; tmp_audio[i + 3] = audio[audio_size/2 + i/2 +1]; } // write audio samples to file if (fwrite(tmp_audio, audio_size, 1, fp_audio) != 1) { perror("fwrite audio"); exit(1); } if (verbose) { if (verbose > 1) printf("packet=%5d frame_number=%d packets_read=%d video_file_size=%"PRIu64"\n", packet_count, header.frame_number, packets_read, video_file_size); else { printf("\rpacket=%5d frame_number=%d packets_read=%d video_file_size=%"PRIu64"", packet_count, header.frame_number, packets_read, video_file_size); fflush(stdout); } } // Check optional video file limit if (video_file_size >= video_file_limit) { if (verbose) printf("\nvideo file limit reached\n"); break; } packet_count++; } free(video); free(audio); free(tmp_audio); #ifndef MULTICAST_SINGLE_THREAD udp_shutdown_reader(&udp_reader); #endif return 0; } --- NEW FILE: send_video.cpp --- /* * send_video.c - Send uncompressed video as multicast UDP * * Copyright (C) 2003 Stuart Cunningham <stu...@us...> * * This program 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. * * This program 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include <stdio.h> #include <sys/types.h> #include <string.h> #include <stdlib.h> #include <unistd.h> /* for getopt */ #include <sys/time.h> #define __STDC_FORMAT_MACROS #include <inttypes.h> #include "multicast_video.h" #include "yuvlib/YUV_scale_pic.h" /* Compile with gcc -g -W -Wall -O3 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -o send_video send_video.c */ static struct timeval start_time; static double tv_diff_microsecs(const struct timeval* a, const struct timeval* b) { int64_t diff = (b->tv_sec - a->tv_sec) * 1000000 + b->tv_usec - a->tv_usec; return (double)diff; } static void usage(void) { fprintf(stderr, "Usage:\n\tsend_video [options] address[:port]\n\n"); fprintf(stderr, "\tE.g. send_video 239.255.1.1:2000\n\n"); fprintf(stderr, "\t-b benchmark multicast transmission (no video input file required)\n"); fprintf(stderr, "\t-i specify a different input video file [default out.yuv]\n"); fprintf(stderr, "\t-t specify a pre-prepared MPEG-TS input file\n"); fprintf(stderr, "\t-a specify a 48kHz stereo audio wav input file\n"); fprintf(stderr, "\t-r n limit transmit rate to n kbps\n"); fprintf(stderr, "\t-h input size is HD 1080i [default input is 720x576]\n"); fprintf(stderr, "\t-j input is 4:2:2 YUV [default input is 4:2:0 YUV]\n"); fprintf(stderr, "\t-s x scale down streamed video by e.g. 2 for 360x288, 3 for 240x192\n"); fprintf(stderr, "\t [default is x1 i.e. 720x576]\n"); fprintf(stderr, "\t-d turn on debugging\n"); fprintf(stderr, "\t-l limit number of video frames sent\n"); exit(1); } extern int main(int argc, char *argv[]) { char remote[4096], *p, *audio_input_file = NULL; const char *input_file = "out.yuv", *source_name = "send_video source"; FILE *input = NULL, *fp_audio = NULL; int c, fd, port, //use_limit = 0, mpegts_input = 0, //verbose = 0, benchmark = 0; uint64_t limit = 0; int rate_kbps_limit = 0; int scale = 1; int debug = 0; int input_422yuv = 0; int in_width = 720, in_height = 576; // letters followed by ':' means the option requires an argument while ((c = getopt(argc, argv, ":dbvi:t:a:r:l:s:hj")) != -1) { switch(c) { case 'd': debug = 1; break; case 'b': benchmark = 1; break; case 'v': //verbose = 1; break; case 'i': input_file = optarg; break; case 't': input_file = optarg; mpegts_input = 1; break; case 'a': audio_input_file = optarg; break; case 'r': rate_kbps_limit = strtoll(optarg, NULL, 10); break; case 'l': limit = strtoll(optarg, NULL, 10); //use_limit = 1; break; case 's': scale = strtoll(optarg, NULL, 10); break; case 'h': in_width = 1920; in_height = 1080; break; case 'j': input_422yuv = 1; break; case ':': printf("-%c requires an argument\n", optopt); usage(); break; default: case '?': printf("unknown option %c\n", optopt); usage(); break; } } if (argc - optind != 1) usage(); /* Parse address - udp://@224.1.0.50:1234 or 224.1.0.50:1234 forms */ if ((p = strchr(argv[optind], '@')) != NULL) strcpy(remote, p+1); /* skip 'udp://@' portion */ else if ((p = strrchr(argv[optind], '/')) != NULL) strcpy(remote, p+1); /* skip 'udp://' portion */ else strcpy(remote, argv[optind]); if ((p = strchr(remote, ':')) == NULL) { /* get the port number */ port = 2000; /* default port to 1234 */ } else { port = atol(p+1); *p = '\0'; } /* Setup input data */ int buf_size = in_width * in_height * 3/2; // input video size at 4:2:0 if (input_422yuv) buf_size = in_width * in_height * 2; // input video size at 4:2:2 int audio_buf_size = 1920*2 * 2; // 48kHz, 16bit, 2 channels int out_width = in_width; int out_height = in_height; if (scale > 1) { out_width /= scale; out_height /= scale; } int video_buf_size = out_width * out_height * 3/2; if (mpegts_input) { buf_size = 188; video_buf_size = 188; if (scale != 1 || audio_input_file != NULL) { printf("options incompatible with MPEG-TS transmission\n"); exit(1); } } unsigned char *buf = (unsigned char *)malloc(buf_size); unsigned char *audio = (unsigned char *)malloc(audio_buf_size); if (!mpegts_input) { printf("Scaling input video %dx%d to %dx%d\n", in_width, in_height, out_width, out_height); } // video input if (benchmark) { int i; for (i = 0; i < buf_size; i++) { buf[i] = i % 256; if (i % 188 == 0) buf[i] = 0x47; } } else { if ( (input = fopen(input_file, "rb")) == NULL) { perror("fopen"); exit(1); } } // audio input if (!benchmark && audio_input_file) { if ( (fp_audio = fopen(audio_input_file, "rb")) == NULL) { perror("fopen"); exit(1); } // skip over WAV header if (fseek(fp_audio, 44, SEEK_SET) == -1) { perror("fseek"); exit(1); } } else { // dummy audio int i; for (i = 0; i < audio_buf_size; i+=2) { audio[i+0] = i % 256; audio[i+1] = i % 256; } } /*** network setup ***/ if ((fd = open_socket_for_streaming(remote, port)) == -1) { exit(1); } // debug: save scaled video to debug.yuv FILE *output = NULL; if (debug) { if ((output = fopen("debug.yuv", "wb")) == NULL) { perror("fopen"); exit(1); } } // start rate clock gettimeofday(&start_time, NULL); uint64_t packets = 0; uint64_t total_written = 0; uint8_t *p_video = (uint8_t *)malloc(video_buf_size); while (1) { if (benchmark) { // TODO: increment counter unsigned short tmp = (unsigned short)packets; memcpy(&buf[1], &tmp, sizeof(tmp)); } else { read_video_frame: if (fread(buf, buf_size, 1, input) != 1) { if (feof(input)) { rewind(input); // loop over input goto read_video_frame; } perror("fread"); exit(1); } if (fp_audio) { uint8_t tmp[audio_buf_size]; int i; read_audio_frame: if (fread(tmp, audio_buf_size, 1, fp_audio) != 1) { if (feof(fp_audio)) { fseek(fp_audio, 44, SEEK_SET); // seek to start of audio samples goto read_audio_frame; } perror("fread"); exit(1); } // de-interleave stereo audio into a mono channel followed by second mono channel for (i = 0; i < audio_buf_size; i+=4) { audio[i/2 + 0] = tmp[i + 0]; audio[i/2 + 1] = tmp[i + 1]; audio[audio_buf_size/2 + i/2 +0] = tmp[i + 2]; audio[audio_buf_size/2 + i/2 +1] = tmp[i + 3]; } } } if (scale > 1) { if (input_422yuv) scale_video422_for_multicast(in_width, in_height, out_width, out_height, buf, p_video); else scale_video420_for_multicast(in_width, in_height, out_width, out_height, buf, p_video); } else { p_video = buf; } if (debug) { if (fwrite(p_video, video_buf_size, 1, output) != 1) { perror("fwrite"); exit(1); } } ssize_t bytes_written; if (mpegts_input) { bytes_written = send(fd, p_video, buf_size, 0); } else { bytes_written = send_audio_video(fd, out_width, out_height, 2, p_video, audio, (int)packets, // frame number (int)packets, (int)packets, source_name); } packets++; total_written += bytes_written; // Get times for logging and rate limiting struct timeval now_time; gettimeofday(&now_time, NULL); double diff = tv_diff_microsecs(&start_time, &now_time); if (packets % 5 == 0) { double rate = total_written / diff; // megabytes per sec printf("\rtotal_written = %12"PRIu64", av rate=%10.3fMbps (%10.3fMBps)", total_written, rate * 8, rate); fflush(stdout); } double needed_time; if (rate_kbps_limit) { needed_time = total_written * 8.0 / (rate_kbps_limit * 1000) * 1000000; } else { // limit sending rate to 25fps needed_time = packets / 25.0 * 1000000; // times are all in microseconds } double sleep_time = needed_time - diff; if (sleep_time > 0) usleep(sleep_time); // optional limit on total number of "packets" if (limit == packets) break; } free(buf); free(audio); free(p_video); return 0; } --- receive_video.c DELETED --- --- send_video.c DELETED --- |
From: John F. <jo...@us...> - 2015-04-20 14:13:28
|
Update of /cvsroot/ingex/ingex/common In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv23278 Modified Files: Timecode.h Timecode.cpp Log Message: Handle 24hr roll-over Index: Timecode.h =================================================================== RCS file: /cvsroot/ingex/ingex/common/Timecode.h,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** Timecode.h 22 Aug 2013 15:32:35 -0000 1.16 --- Timecode.h 20 Apr 2015 14:13:26 -0000 1.17 *************** *** 95,98 **** --- 95,99 ---- EpochEnumType Epoch() const { return mEpochEnum; } bool DropFrame() const { return TimecodeFormat::Get(mFormatEnum).DropFrame(); } + unsigned int Days() const; unsigned int Hours() const; unsigned int Minutes() const; Index: Timecode.cpp =================================================================== RCS file: /cvsroot/ingex/ingex/common/Timecode.cpp,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** Timecode.cpp 22 Aug 2013 15:32:35 -0000 1.23 --- Timecode.cpp 20 Apr 2015 14:13:26 -0000 1.24 *************** *** 23,26 **** --- 23,27 ---- */ + #define __STDC_FORMAT_MACROS // for debug only #include "Timecode.h" #include <cstdio> *************** *** 393,396 **** --- 394,428 ---- } + unsigned int Timecode::Days() const + { + unsigned int hours = 0; + unsigned int nominal_fps = TimecodeFormat::Get(mFormatEnum).NominalRate(); + + switch (mFormatEnum) + { + case TimecodeFormat::TC_23NDF: + case TimecodeFormat::TC_24: + case TimecodeFormat::TC_25: + case TimecodeFormat::TC_29NDF: + case TimecodeFormat::TC_30: + case TimecodeFormat::TC_50: + case TimecodeFormat::TC_59NDF: + case TimecodeFormat::TC_60: + hours = mFrameCount / (nominal_fps * 60 * 60); + break; + case TimecodeFormat::TC_29DF: + hours = mFrameCount / DF_FRAMES_PER_HOUR; + break; + case TimecodeFormat::TC_59DF: + hours = mFrameCount / (2 * DF_FRAMES_PER_HOUR); + break; + case TimecodeFormat::TC_NONE: + hours = 0; + break; + } + + return hours / 24; + } + unsigned int Timecode::Hours() const { *************** *** 421,426 **** } ! //hours %= 24; ! return hours; } --- 453,457 ---- } ! return hours % 24; } *************** *** 585,590 **** void Timecode::Check() { ! if (MIDNIGHT == mEpochEnum) { unsigned int hh = Hours(); if (hh >= 24) --- 616,622 ---- void Timecode::Check() { ! if (0) //(MIDNIGHT == mEpochEnum) { + //fprintf(stdout, "pre-check %s %"PRIu64"\n", Text().c_str(), FrameCount()); unsigned int hh = Hours(); if (hh >= 24) *************** *** 592,595 **** --- 624,628 ---- Set(hh % 24, Minutes(), Seconds(), Frames(), FrameOfPair()); } + //fprintf(stdout, "post-check %s %"PRIu64"\n", Text().c_str(), FrameCount()); } } |
From: John F. <jo...@us...> - 2015-04-20 13:59:19
|
Update of /cvsroot/ingex/ingex/common In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv21884 Modified Files: multicast_video.h Added Files: multicast_video.cpp Log Message: Moved to C++ --- NEW FILE: multicast_video.cpp --- #include "multicast_video.h" #include "yuvlib/YUV_scale_pic.h" #include "time_utils.h" #include <sys/time.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #define TESTING_FLAG 0 // Define DUMP_STATS to print out stats //#define DUMP_STATS 1 // Define DEBUG_UDP_SEND_RECV to have packets read/written to a file instead of sockets // This is useful for testing out-of-order and never-arrives packet reception. #ifdef DEBUG_UDP_SEND_RECV #include <sys/types.h> [...992 lines suppressed...] output_frame.Y.lineStride = out_width; output_frame.Y.pixelStride = 1; output_frame.Y.buff = scaled_frame; output_frame.U.w = out_width/2; output_frame.U.h = out_height/2; output_frame.U.lineStride = out_width/2; output_frame.U.pixelStride = 1; output_frame.U.buff = scaled_frame + out_width*out_height; output_frame.V.w = out_width/2; output_frame.V.h = out_height/2; output_frame.V.lineStride = out_width/2; output_frame.V.pixelStride = 1; output_frame.V.buff = scaled_frame + out_width*out_height * 5/4; scale_pic( &input_frame, &output_frame, 0, 0, output_frame.Y.w, output_frame.Y.h, 0, // turn off interlace since this is for monitoring 1, 1, // hfil, vfil workspace, sizeof(workspace)); } Index: multicast_video.h =================================================================== RCS file: /cvsroot/ingex/ingex/common/multicast_video.h,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** multicast_video.h 22 May 2012 14:46:26 -0000 1.7 --- multicast_video.h 20 Apr 2015 13:59:16 -0000 1.8 *************** *** 11,19 **** #include <netinet/in.h> #include <arpa/inet.h> ! ! #ifdef __cplusplus ! extern "C" ! { ! #endif typedef struct { --- 11,15 ---- #include <netinet/in.h> #include <arpa/inet.h> ! #include <pthread.h> typedef struct { *************** *** 73,79 **** extern void scale_video422_for_multicast(int in_width, int in_height, int out_width, int out_height, const uint8_t *video_frame, uint8_t *scaled_frame); - #ifdef __cplusplus - } #endif - #endif --- 69,72 ---- |
From: John F. <jo...@us...> - 2015-04-20 13:57:14
|
Update of /cvsroot/ingex/ingex/common In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv21727 Modified Files: time_utils.h Added Files: time_utils.cpp Log Message: Moved to C++ --- NEW FILE: time_utils.cpp --- /* * $Id: time_utils.cpp,v 1.1 2015/04/20 13:57:12 john_f Exp $ * * Time utility functions * * Copyright (C) 2010 British Broadcasting Corporation * All rights reserved * * This program 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. * * This program 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #include "time_utils.h" #include "UtcOffsetTable.h" #include <stdio.h> int64_t gettimeofday64(void) { struct timeval tv; gettimeofday(&tv, NULL); int64_t tod = (int64_t)tv.tv_sec * 1000000 + tv.tv_usec ; return tod; } int64_t tv_diff_microsecs(const struct timeval * a, const struct timeval * b) { //int64_t diff = (b->tv_sec - a->tv_sec) * 1000000 + b->tv_usec - a->tv_usec; int64_t diff = b->tv_sec - a->tv_sec; diff *= 1000000; diff += (b->tv_usec - a->tv_usec); return diff; } void add_days(struct tm * ttm, int days) { int hour = ttm->tm_hour; int min = ttm->tm_min; time_t tt = mktime(ttm); tt += days * 24 * 60 * 60; localtime_r(&tt, ttm); ttm->tm_hour = hour; ttm->tm_min = min; } struct tm * localtime_r_jf(const time_t * p_t, int is_leap, struct tm * result) { if (is_leap) { time_t t_modified = *p_t - 1; localtime_r(&t_modified, result); result->tm_sec++; } else { localtime_r(p_t, result); // needs modifying } return result; } void print_tm(struct tm * t) { fprintf(stdout, "tm_sec = %d\n", t->tm_sec); fprintf(stdout, "tm_min = %d\n", t->tm_min); fprintf(stdout, "tm_hour = %d\n", t->tm_hour); fprintf(stdout, "tm_mday = %d\n", t->tm_mday); fprintf(stdout, "tm_mon = %d\n", t->tm_mon); fprintf(stdout, "tm_year = %d\n", t->tm_year); fprintf(stdout, "tm_wday = %d\n", t->tm_wday); fprintf(stdout, "tm_yday = %d\n", t->tm_yday); fprintf(stdout, "tm_isdst = %d\n", t->tm_isdst); #ifdef __USE_BSD fprintf(stdout, "tm_gmtoff = %ld\n", t->tm_gmtoff); fprintf(stdout, "tm_tm_zone = %s\n", t->tm_zone); #else fprintf(stdout, "tm_gmtoff = %ld\n", t->__tm_gmtoff); fprintf(stdout, "tm_tm_zone = %s\n", t->__tm_zone); #endif } const char * asctm(struct tm * t) { static char s[40]; strftime(s, 40, "%Y-%m-%d %H:%M:%S %Z", t); return s; } int local_offset_from_utc(time_t t) { tzset(); struct tm local_tm; struct tm utc_tm; localtime_r(&t, &local_tm); gmtime_r(&t, &utc_tm); //printf("local: %s\n", asctm(&local_tm)); //print_tm(local_tm); //printf("utc: %s\n", asctm(&utc_tm)); //print_tm(utc_tm); // hacky but works local_tm.tm_isdst = 0; time_t local_tt = mktime(&local_tm); time_t utc_tt = mktime(&utc_tm); //printf("diff: %ld\n", local_tt - utc_tt); return local_tt - utc_tt; } time_t ptp_from_tm(struct tm * t) { time_t t_utc = mktime(t); return t_utc + UtcOffsetTable::Instance()->OffsetByUtc(t_utc); } Index: time_utils.h =================================================================== RCS file: /cvsroot/ingex/ingex/common/time_utils.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** time_utils.h 30 Mar 2010 08:07:36 -0000 1.1 --- time_utils.h 20 Apr 2015 13:57:12 -0000 1.2 *************** *** 28,35 **** #include <inttypes.h> #include <sys/time.h> ! ! #ifdef __cplusplus ! extern "C" { ! #endif /* Returns time-of-day as microseconds */ --- 28,32 ---- #include <inttypes.h> #include <sys/time.h> ! #include <time.h> /* Returns time-of-day as microseconds */ *************** *** 39,45 **** int64_t tv_diff_microsecs(const struct timeval * a, const struct timeval * b); ! #ifdef __cplusplus ! } ! #endif #endif //ifndef common_time_utils_h --- 36,51 ---- int64_t tv_diff_microsecs(const struct timeval * a, const struct timeval * b); ! /* Add days to a date */ ! void add_days(struct tm * ttm, int days); ! ! struct tm * localtime_r_jf(const time_t * p_t, int is_leap, struct tm * result); ! ! void print_tm(struct tm * t); ! ! const char * asctm(struct tm * t); ! ! int local_offset_from_utc(time_t t); ! ! time_t ptp_from_tm(struct tm * t); #endif //ifndef common_time_utils_h |
From: John F. <jo...@us...> - 2015-04-20 13:53:44
|
Update of /cvsroot/ingex/ingex/common In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv21470 Modified Files: UtcOffsetTable.h UtcOffsetTable.cpp Log Message: Additions re. leap years Index: UtcOffsetTable.cpp =================================================================== RCS file: /cvsroot/ingex/ingex/common/UtcOffsetTable.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** UtcOffsetTable.cpp 3 Apr 2013 13:00:47 -0000 1.1 --- UtcOffsetTable.cpp 20 Apr 2015 13:53:41 -0000 1.2 *************** *** 25,28 **** --- 25,29 ---- #include <cstdlib> #include <cstring> + #include <cstdio> #include "UtcOffsetTable.h" *************** *** 47,76 **** struct tm ttm; ! mTable.push_back(std::make_pair<time_t, int>(0, offset++)); ! strptime("1972-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1972-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1973-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1974-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1975-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1976-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1977-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1978-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1978-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1981-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1982-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1983-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1985-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1987-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1989-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1990-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1992-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1993-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1994-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1995-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1997-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("1998-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("2005-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("2008-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); ! strptime("2012-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm), offset++)); // restore time zone --- 48,89 ---- struct tm ttm; ! // Table is pairs of < TAI time, offset TAI - UTC> ! // where TAI time is time of a leap second ! // and offset is the offset in effect after the leap second ! mTable.push_back(std::make_pair<time_t, int>(0, offset)); ! strptime("1972-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1972-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1973-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1974-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1975-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1976-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1977-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1978-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1978-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1981-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1982-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1983-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1985-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1987-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1989-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1990-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1992-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1993-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1994-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1995-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1997-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("1998-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("2005-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("2008-12-31T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("2012-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! strptime("2015-06-30T23:59:60", datetime_format, &ttm); mTable.push_back(std::make_pair<time_t, int>(mktime(&ttm) + offset, offset + 1)); ++offset; ! ! // debug ! #if 0 ! for (std::vector< std::pair<time_t, int> >::const_iterator it = mTable.begin(); it != mTable.end(); ++it) ! { ! printf("%ld %d\n", (long) it->first, it->second); ! } ! #endif // restore time zone *************** *** 91,95 **** for (std::vector< std::pair<time_t, int> >::const_reverse_iterator it = mTable.rbegin(); it != mTable.rend(); ++it) { ! if (tai - it->second >= it->first) { offset = it->second; --- 104,108 ---- for (std::vector< std::pair<time_t, int> >::const_reverse_iterator it = mTable.rbegin(); it != mTable.rend(); ++it) { ! if (tai > it->first) { offset = it->second; *************** *** 100,103 **** --- 113,133 ---- } + int UtcOffsetTable::LeapByTai(time_t tai) + { + int leap = 0; + for (std::vector< std::pair<time_t, int> >::const_reverse_iterator it = mTable.rbegin(); it != mTable.rend(); ++it) + { + if (tai >= it->first) + { + if (tai == it->first) + { + leap = 1; + } + break; + } + } + return leap; + } + int UtcOffsetTable::OffsetByUtc(time_t utc) { *************** *** 105,109 **** for (std::vector< std::pair<time_t, int> >::const_reverse_iterator it = mTable.rbegin(); it != mTable.rend(); ++it) { ! if (utc >= it->first) { offset = it->second; --- 135,139 ---- for (std::vector< std::pair<time_t, int> >::const_reverse_iterator it = mTable.rbegin(); it != mTable.rend(); ++it) { ! if (utc + it->second > it->first) { offset = it->second; Index: UtcOffsetTable.h =================================================================== RCS file: /cvsroot/ingex/ingex/common/UtcOffsetTable.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** UtcOffsetTable.h 3 Apr 2013 13:00:47 -0000 1.1 --- UtcOffsetTable.h 20 Apr 2015 13:53:41 -0000 1.2 *************** *** 42,45 **** --- 42,46 ---- int OffsetByUtc(time_t utc); int OffsetByTai(time_t tai); + int LeapByTai(time_t tai); protected: |
From: John F. <jo...@us...> - 2014-02-25 15:43:18
|
Update of /cvsroot/ingex/ingex/studio/capture In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv18020 Modified Files: dvs_sdi.cpp Log Message: Suppress warnings re. no audio unless expect_audio option is set Index: dvs_sdi.cpp =================================================================== RCS file: /cvsroot/ingex/ingex/studio/capture/dvs_sdi.cpp,v retrieving revision 1.50 retrieving revision 1.51 diff -C2 -d -r1.50 -r1.51 *** dvs_sdi.cpp 3 Jan 2014 12:36:24 -0000 1.50 --- dvs_sdi.cpp 25 Feb 2014 15:43:15 -0000 1.51 *************** *** 1365,1374 **** if (SV_ERROR_INPUT_AUDIO_NOAIV == get_res && !aes_audio) { ! logTF("chan %d: no audio present - %s\n", chan, sv_geterrortext(get_res)); no_audio = true; } else if (SV_ERROR_INPUT_AUDIO_NOAESEBU == get_res && aes_audio) { ! logTF("chan %d: no audio present - %s\n", chan, sv_geterrortext(get_res)); no_audio = true; } --- 1365,1380 ---- if (SV_ERROR_INPUT_AUDIO_NOAIV == get_res && !aes_audio) { ! if (expect_audio) ! { ! logTF("chan %d: no audio present - %s\n", chan, sv_geterrortext(get_res)); ! } no_audio = true; } else if (SV_ERROR_INPUT_AUDIO_NOAESEBU == get_res && aes_audio) { ! if (expect_audio) ! { ! logTF("chan %d: no audio present - %s\n", chan, sv_geterrortext(get_res)); ! } no_audio = true; } |
From: John F. <jo...@us...> - 2014-01-03 12:36:27
|
Update of /cvsroot/ingex/ingex/studio/capture In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv17063 Modified Files: dvs_sdi.cpp Log Message: Added audio delay option -adelay Index: dvs_sdi.cpp =================================================================== RCS file: /cvsroot/ingex/ingex/studio/capture/dvs_sdi.cpp,v retrieving revision 1.49 retrieving revision 1.50 diff -C2 -d -r1.49 -r1.50 *** dvs_sdi.cpp 1 Jul 2013 15:31:37 -0000 1.49 --- dvs_sdi.cpp 3 Jan 2014 12:36:24 -0000 1.50 *************** *** 156,159 **** --- 156,160 ---- int aes_audio = 0; int aes_routing = 0; + int audio_delay = 0; int use_ffmpeg_hd_sd_scaling = 0; int use_yuvlib_filter = 0; *************** *** 288,293 **** Ingex::Timecode tc2(tc1.FrameCount(), fmt); fprintf(stderr, "%08x %02d:%02d:%02d:%02d (%d) %s\n", bits, hr, min, sec, fm, frame_of_pair, df ? "DF" : "NDF"); ! fprintf(stderr, "%8s %s %d %s\n", "as tc1", tc1.Text().c_str(), tc1.FrameCount(), tc1.FormatName().c_str()); ! fprintf(stderr, "%8s %s %d %s\n", "as tc2", tc2.Text().c_str(), tc2.FrameCount(), tc2.FormatName().c_str()); } --- 289,294 ---- Ingex::Timecode tc2(tc1.FrameCount(), fmt); fprintf(stderr, "%08x %02d:%02d:%02d:%02d (%d) %s\n", bits, hr, min, sec, fm, frame_of_pair, df ? "DF" : "NDF"); ! fprintf(stderr, "%8s %s %"PRIu64" %s\n", "as tc1", tc1.Text().c_str(), tc1.FrameCount(), tc1.FormatName().c_str()); ! fprintf(stderr, "%8s %s %"PRIu64" %s\n", "as tc2", tc2.Text().c_str(), tc2.FrameCount(), tc2.FormatName().c_str()); } *************** *** 1437,1441 **** // Destination in ring buffer ! uint8_t *vid_dest = ring[chan] + element_size * ((pc->lastframe+1) % ring_len); // We always transfer to dma_buffer[] first, even if we want the --- 1438,1443 ---- // Destination in ring buffer ! uint8_t * vid_dest = ring[chan] + element_size * ((pc->lastframe + 1) % ring_len); ! uint8_t * aud_dest = ring[chan] + element_size * ((pc->lastframe + 1 + audio_delay) % ring_len); // We always transfer to dma_buffer[] first, even if we want the *************** *** 1623,1628 **** // Reformat and copy audio reformat_dvs_audio_to_mono_audio(dma_dest, pbuffer, ! vid_dest + primary_audio_offset, // 32bit dest ! vid_dest + secondary_audio_offset, // 16bit dest num_audio_samples, naudioch); // 4 or 8 channels --- 1625,1630 ---- // Reformat and copy audio reformat_dvs_audio_to_mono_audio(dma_dest, pbuffer, ! aud_dest + primary_audio_offset, // 32bit dest ! aud_dest + secondary_audio_offset, // 16bit dest num_audio_samples, naudioch); // 4 or 8 channels *************** *** 1631,1636 **** { // No audio present in signal, so add silence ! memset(vid_dest + primary_audio_offset, 0, primary_audio_size); ! memset(vid_dest + secondary_audio_offset, 0, secondary_audio_size); } --- 1633,1638 ---- { // No audio present in signal, so add silence ! memset(aud_dest + primary_audio_offset, 0, primary_audio_size); ! memset(aud_dest + secondary_audio_offset, 0, secondary_audio_size); } *************** *** 2023,2026 **** --- 2025,2030 ---- nfd = (NexusFrameData *)(ring[chan] + element_size * ((pc->lastframe + 1) % ring_len) + frame_data_offset); + //fprintf(stderr, "chan %d: ltc framecount %"PRIu64"\n", chan, tc_ltc.FrameCount()); + // LTC, VITC, DLTC, DVITC, SYS as Ingex::Timecode nfd->tc_ltc = tc_ltc; *************** *** 2643,2646 **** --- 2647,2651 ---- fprintf(stderr, " -aes0:8 use AES/EBU audio with 0:8 routing (AES8..16 -> 2nd video channel) Atomix LT 4-BNC only!\n"); #endif + fprintf(stderr, " -adelay <frames> delay audio by specified number of frames\n"); //fprintf(stderr, " -audint use interleaved audio for capture (not available on SDStation cards)\n"); fprintf(stderr, " -avsync perform avsync analysis - requires clapper-board input video\n"); *************** *** 2947,2950 **** --- 2952,2967 ---- } #endif + else if (strcmp(argv[n], "-adelay") == 0) + { + if (argc <= n+1) + usage_exit(); + + if (sscanf(argv[n+1], "%d", &audio_delay) != 1) + { + fprintf(stderr, "-adelay requires integer number of frames\n"); + return 1; + } + n++; + } else if (strcmp(argv[n], "-audint") == 0) { |