Skip to content

Commit

Permalink
upipe_ts_mux: add s302m audio support
Browse files Browse the repository at this point in the history
  • Loading branch information
quarium authored and cmassiot committed Dec 7, 2024
1 parent b42e4f4 commit 28f6c4c
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 2 deletions.
15 changes: 13 additions & 2 deletions lib/upipe-ts/upipe_ts_mux.c
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,8 @@
#define BS_ADTS_12 12804
/** ADTS buffer size for <= 48 channels */
#define BS_ADTS_48 51216
/** s302m buffer size (SMPTE 302m) */
#define BS_S302M 65024
/** Teletext buffer size */
#define BS_TELX 1504
/** DVB subtitles buffer size (ETSI EN 300 743 5.) */
Expand Down Expand Up @@ -1175,7 +1177,8 @@ static int upipe_ts_mux_input_set_flow_def(struct upipe *upipe,
} else if (!ubase_ncmp(sub_def, ".ac3.") ||
!ubase_ncmp(sub_def, ".eac3.") ||
!ubase_ncmp(sub_def, ".dts.") ||
!ubase_ncmp(sub_def, ".opus.")) {
!ubase_ncmp(sub_def, ".opus.") ||
!ubase_ncmp(sub_def, ".s302m.")) {
UBASE_FATAL(upipe, uref_ts_flow_set_pes_id(
flow_def_dup, PES_STREAM_ID_PRIVATE_1));
}
Expand Down Expand Up @@ -1275,6 +1278,7 @@ static int upipe_ts_mux_input_set_flow_def(struct upipe *upipe,

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

if (!ubase_ncmp(def, "block.mp2.") || !ubase_ncmp(def, "block.mp3.") ||
Expand Down Expand Up @@ -1302,9 +1306,16 @@ static int upipe_ts_mux_input_set_flow_def(struct upipe *upipe,
pes_min_duration = 0;
} else if (!ubase_ncmp(def, "block.dts.")) {
pes_min_duration = 0;
} else if (!ubase_ncmp(def, "block.s302m.")) {
buffer_size = BS_S302M;
pes_min_duration = 0;
uint64_t max_octetrate = octetrate;
uref_block_flow_get_max_octetrate(flow_def, &max_octetrate);
/* SMPTE s302m-2007 7.6 */
tb_rate = max_octetrate * 6 / 5;
}

UBASE_FATAL(upipe, uref_ts_flow_set_tb_rate(flow_def_dup, TB_RATE_AUDIO));
UBASE_FATAL(upipe, uref_ts_flow_set_tb_rate(flow_def_dup, tb_rate));
if (!ubase_check(uref_ts_flow_get_pes_min_duration(flow_def_dup,
&pes_min_duration)))
UBASE_FATAL(upipe, uref_ts_flow_set_pes_min_duration(flow_def_dup,
Expand Down
7 changes: 7 additions & 0 deletions lib/upipe-ts/upipe_ts_psi_generator.c
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,9 @@ static int upipe_ts_psig_flow_check_inner(struct upipe *upipe,
default:
break;
}
else if (!ubase_ncmp(sub_def, ".s302m.")) {
*descriptors_size_p += DESC05_HEADER_SIZE;
}
else if (ubase_ncmp(sub_def, ".mp2.") &&
ubase_ncmp(sub_def, ".mp3.")) {
upipe_warn_va(upipe, "unknown flow definition \"%s\"", raw_def);
Expand Down Expand Up @@ -882,6 +885,10 @@ static int upipe_ts_psig_flow_build_inner(struct upipe *upipe, uint8_t *es,
default:
break;
}
} else if (!ubase_ncmp(sub_def, ".s302m.")) {
desc = descs_get_desc(descs, k++);
desc05_init(desc);
desc05_set_identifier(desc, (const uint8_t *)"BSSD");
}
} else if (strstr(raw_def, ".metadata.")) {
if (!ubase_ncmp(sub_def, ".id3.")) {
Expand Down

0 comments on commit 28f6c4c

Please sign in to comment.