libtsfuncs is a library for mpeg PSI parsing and generation. https://georgi.unixsol.org/programs/libtsfuncs/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

tstest.c 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #include "tsfuncs.h"
  2. #define NOW 1234567890
  3. void ts_pat_test() {
  4. struct ts_pat *pat = ts_pat_alloc_init(0x7878);
  5. ts_pat_dump(pat);
  6. ts_pat_add_program(pat, 1, 0x100);
  7. ts_pat_add_program(pat, 2, 0x100);
  8. ts_pat_add_program(pat, 3, 0x100);
  9. ts_pat_dump(pat);
  10. ts_pat_del_program(pat, 2);
  11. ts_pat_dump(pat);
  12. ts_pat_del_program(pat, 3);
  13. ts_pat_dump(pat);
  14. int i;
  15. for (i=0;i<10;i++) {
  16. ts_pat_add_program(pat, i+10, (i+5)*10);
  17. }
  18. ts_pat_dump(pat);
  19. ts_pat_free(&pat);
  20. }
  21. int ts_sdt_test() {
  22. struct ts_sdt *sdt = ts_sdt_alloc_init(1, 2);
  23. ts_sdt_add_service_descriptor(sdt, 1007, 1, "BULSATCOM", "bTV");
  24. ts_sdt_dump(sdt);
  25. int i;
  26. for (i=0;i<25;i++) {
  27. ts_sdt_add_service_descriptor(sdt, 9, 0, "PROVIDER", "SERVICE33333333333333333333333333333333333333333333333333333333333333");
  28. ts_sdt_add_service_descriptor(sdt, 13, 0, "PROddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddVIDER", "SERVICE");
  29. ts_sdt_add_service_descriptor(sdt, 7, 0, "PROVIDER", "SERVICE");
  30. }
  31. ts_sdt_dump(sdt);
  32. // write(1, sdt->section_header->packet_data, sdt->section_header->num_packets * 188);
  33. ts_sdt_free(&sdt);
  34. return 0;
  35. }
  36. void ts_eit_test1(struct ts_eit *eit) { // Exactly one TS packet (188 bytes)
  37. //int ts_eit_add_short_event_descriptor(struct ts_eit *eit, uint16_t event_id, uint8_t running, time_t start_time, int duration_sec, char *event_name, char *event_short_descr) {
  38. ts_eit_add_short_event_descriptor(eit, 4, 1, NOW, 3600,
  39. "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  40. "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy****");
  41. }
  42. void ts_eit_test2(struct ts_eit *eit) { // One TS packet + 2 bytes (2 bytes of the CRC are in the next packet
  43. ts_eit_add_short_event_descriptor(eit, 4, 1, NOW, 3600,
  44. "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  45. "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy**");
  46. }
  47. void ts_eit_test3(struct ts_eit *eit) { // Test 4096 PSI packet
  48. int i;
  49. for (i=0;i<15;i++) {
  50. // Maximum descriptor size, 255 bytes
  51. if (ts_eit_add_short_event_descriptor(eit, 4, 1, NOW, 3600, "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") != 1) {
  52. break;
  53. }
  54. }
  55. ts_eit_add_short_event_descriptor(eit, 4, 1, NOW, 3600, "00000000000000000000000", "1111111111111111111111111111111");
  56. }
  57. void ts_eit_test4(struct ts_eit *eit) { // Test almost full PSI packet on the TS packet boundary
  58. int i;
  59. for (i=0;i<15;i++) {
  60. // Maximum descriptor size, 255 bytes
  61. if (ts_eit_add_short_event_descriptor(eit, 4, 1, NOW, 3600, "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") != 1) {
  62. break;
  63. }
  64. }
  65. ts_eit_add_short_event_descriptor(eit, 4, 1, NOW, 3600, "aaaaaaaaBBBB", NULL);
  66. }
  67. void ts_eit_test() {
  68. struct ts_eit *eit;
  69. eit = ts_eit_alloc_init(1, 2, 3, 1, 0, 0);
  70. ts_eit_test1(eit);
  71. ts_eit_dump(eit);
  72. ts_eit_free(&eit);
  73. eit = ts_eit_alloc_init(1, 2, 3, 1, 0, 0);
  74. ts_eit_test2(eit);
  75. ts_eit_dump(eit);
  76. ts_eit_free(&eit);
  77. eit = ts_eit_alloc_init(1, 2, 3, 1, 0, 0);
  78. ts_eit_test3(eit);
  79. ts_eit_dump(eit);
  80. ts_eit_free(&eit);
  81. eit = ts_eit_alloc_init(1, 2, 3, 1, 0, 0);
  82. ts_eit_test4(eit);
  83. ts_eit_dump(eit);
  84. ts_eit_free(&eit);
  85. // write(1, eit->section_header->packet_data, eit->section_header->num_packets * TS_PACKET_SIZE);
  86. }
  87. int main() {
  88. ts_pat_test();
  89. ts_sdt_test();
  90. ts_eit_test();
  91. return 0;
  92. }