|
119 | 119 | #define BS_ADTS_12 12804 |
120 | 120 | /** ADTS buffer size for <= 48 channels */ |
121 | 121 | #define BS_ADTS_48 51216 |
| 122 | +/** s302m buffer size (SMPTE 302m) */ |
| 123 | +#define BS_S302M 65024 |
122 | 124 | /** Teletext buffer size */ |
123 | 125 | #define BS_TELX 1504 |
124 | 126 | /** 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, |
1175 | 1177 | } else if (!ubase_ncmp(sub_def, ".ac3.") || |
1176 | 1178 | !ubase_ncmp(sub_def, ".eac3.") || |
1177 | 1179 | !ubase_ncmp(sub_def, ".dts.") || |
1178 | | - !ubase_ncmp(sub_def, ".opus.")) { |
| 1180 | + !ubase_ncmp(sub_def, ".opus.") || |
| 1181 | + !ubase_ncmp(sub_def, ".s302m.")) { |
1179 | 1182 | UBASE_FATAL(upipe, uref_ts_flow_set_pes_id( |
1180 | 1183 | flow_def_dup, PES_STREAM_ID_PRIVATE_1)); |
1181 | 1184 | } |
@@ -1275,6 +1278,7 @@ static int upipe_ts_mux_input_set_flow_def(struct upipe *upipe, |
1275 | 1278 |
|
1276 | 1279 | } else if (strstr(def, ".sound.") != NULL) { |
1277 | 1280 | uint64_t pes_min_duration = upipe_ts_mux->pes_min_duration; |
| 1281 | + uint64_t tb_rate = TB_RATE_AUDIO; |
1278 | 1282 | buffer_size = BS_ADTS_2; |
1279 | 1283 |
|
1280 | 1284 | 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, |
1302 | 1306 | pes_min_duration = 0; |
1303 | 1307 | } else if (!ubase_ncmp(def, "block.dts.")) { |
1304 | 1308 | 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; |
1305 | 1316 | } |
1306 | 1317 |
|
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)); |
1308 | 1319 | if (!ubase_check(uref_ts_flow_get_pes_min_duration(flow_def_dup, |
1309 | 1320 | &pes_min_duration))) |
1310 | 1321 | UBASE_FATAL(upipe, uref_ts_flow_set_pes_min_duration(flow_def_dup, |
|
0 commit comments