Skip to content

Commit ac037b0

Browse files
committed
upipe_ts_mux: add s302m audio support
1 parent 6bdcaed commit ac037b0

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

lib/upipe-ts/upipe_ts_mux.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@
119119
#define BS_ADTS_12 12804
120120
/** ADTS buffer size for <= 48 channels */
121121
#define BS_ADTS_48 51216
122+
/** s302m buffer size (SMPTE 302m) */
123+
#define BS_S302M 65024
122124
/** Teletext buffer size */
123125
#define BS_TELX 1504
124126
/** DVB subtitles buffer size (ETSI EN 300 743 5.) */
@@ -1175,7 +1177,8 @@ static int upipe_ts_mux_input_set_flow_def(struct upipe *upipe,
11751177
} else if (!ubase_ncmp(sub_def, ".ac3.") ||
11761178
!ubase_ncmp(sub_def, ".eac3.") ||
11771179
!ubase_ncmp(sub_def, ".dts.") ||
1178-
!ubase_ncmp(sub_def, ".opus.")) {
1180+
!ubase_ncmp(sub_def, ".opus.") ||
1181+
!ubase_ncmp(sub_def, ".s302m.")) {
11791182
UBASE_FATAL(upipe, uref_ts_flow_set_pes_id(
11801183
flow_def_dup, PES_STREAM_ID_PRIVATE_1));
11811184
}
@@ -1275,6 +1278,7 @@ static int upipe_ts_mux_input_set_flow_def(struct upipe *upipe,
12751278

12761279
} else if (strstr(def, ".sound.") != NULL) {
12771280
uint64_t pes_min_duration = upipe_ts_mux->pes_min_duration;
1281+
uint64_t tb_rate = TB_RATE_AUDIO;
12781282
buffer_size = BS_ADTS_2;
12791283

12801284
if (!ubase_ncmp(def, "block.mp2.") || !ubase_ncmp(def, "block.mp3.") ||
@@ -1302,9 +1306,16 @@ static int upipe_ts_mux_input_set_flow_def(struct upipe *upipe,
13021306
pes_min_duration = 0;
13031307
} else if (!ubase_ncmp(def, "block.dts.")) {
13041308
pes_min_duration = 0;
1309+
} else if (!ubase_ncmp(def, "block.s302m.")) {
1310+
buffer_size = BS_S302M;
1311+
pes_min_duration = 0;
1312+
uint64_t max_octetrate = octetrate;
1313+
uref_block_flow_get_max_octetrate(flow_def, &max_octetrate);
1314+
/* SMPTE s302m-2007 7.6 */
1315+
tb_rate = max_octetrate * 6 / 5;
13051316
}
13061317

1307-
UBASE_FATAL(upipe, uref_ts_flow_set_tb_rate(flow_def_dup, TB_RATE_AUDIO));
1318+
UBASE_FATAL(upipe, uref_ts_flow_set_tb_rate(flow_def_dup, tb_rate));
13081319
if (!ubase_check(uref_ts_flow_get_pes_min_duration(flow_def_dup,
13091320
&pes_min_duration)))
13101321
UBASE_FATAL(upipe, uref_ts_flow_set_pes_min_duration(flow_def_dup,

lib/upipe-ts/upipe_ts_psi_generator.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,9 @@ static int upipe_ts_psig_flow_check_inner(struct upipe *upipe,
377377
default:
378378
break;
379379
}
380+
else if (!ubase_ncmp(sub_def, ".s302m.")) {
381+
*descriptors_size_p += DESC05_HEADER_SIZE;
382+
}
380383
else if (ubase_ncmp(sub_def, ".mp2.") &&
381384
ubase_ncmp(sub_def, ".mp3.")) {
382385
upipe_warn_va(upipe, "unknown flow definition \"%s\"", raw_def);
@@ -882,6 +885,10 @@ static int upipe_ts_psig_flow_build_inner(struct upipe *upipe, uint8_t *es,
882885
default:
883886
break;
884887
}
888+
} else if (!ubase_ncmp(sub_def, ".s302m.")) {
889+
desc = descs_get_desc(descs, k++);
890+
desc05_init(desc);
891+
desc05_set_identifier(desc, (const uint8_t *)"BSSD");
885892
}
886893
} else if (strstr(raw_def, ".metadata.")) {
887894
if (!ubase_ncmp(sub_def, ".id3.")) {

0 commit comments

Comments
 (0)