summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Marc Valin <jmvalin@amazon.com>2022-11-28 16:34:28 -0500
committerJean-Marc Valin <jmvalin@amazon.com>2022-11-28 16:35:00 -0500
commit43779321d5cf41b3133f62c8e1ad30b066af124f (patch)
treef2b56e533b86f9275c5613c7bc2df2c4559faef9
parentea237b20ea1ef6c8974ff1476e7de70b22648c73 (diff)
downloadopus-43779321d5cf41b3133f62c8e1ad30b066af124f.tar.gz
wip
-rw-r--r--src/opus_encoder.c11
-rw-r--r--src/opus_private.h2
-rw-r--r--src/repacketizer.c9
3 files changed, 19 insertions, 3 deletions
diff --git a/src/opus_encoder.c b/src/opus_encoder.c
index 75f23f8e..a8afbf89 100644
--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -1003,6 +1003,7 @@ static opus_int32 encode_multiframe_packet(OpusEncoder *st,
}
}
+ /* FIXME: Handle extensions here. */
ret = opus_repacketizer_out_range_impl(rp, 0, nb_frames, data, repacketize_len, 0, !st->use_vbr, NULL, 0);
if (ret<0)
@@ -2178,7 +2179,15 @@ opus_int32 opus_encode_native(OpusEncoder *st, const opus_val16 *pcm, int frame_
}
/* Count ToC and redundancy */
ret += 1+redundancy_bytes;
- if (!st->use_vbr)
+ if (1) {
+ opus_extension_data extension = {33, 0, (const unsigned char *)"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 50};
+ ret = opus_packet_pad_impl(data, ret, max_data_bytes, !st->use_vbr, &extension, 1);
+ if (ret < 0)
+ {
+ RESTORE_STACK;
+ return OPUS_INTERNAL_ERROR;
+ }
+ } else if (!st->use_vbr)
{
if (opus_packet_pad(data, ret, max_data_bytes) != OPUS_OK)
{
diff --git a/src/opus_private.h b/src/opus_private.h
index fe1cc755..113071fa 100644
--- a/src/opus_private.h
+++ b/src/opus_private.h
@@ -210,4 +210,6 @@ opus_int32 opus_packet_extensions_parse(const unsigned char *data, opus_int32 le
opus_int32 opus_packet_extensions_generate(unsigned char *data, opus_int32 len, const opus_extension_data *extensions, int nb_extensions, int pad);
+opus_int32 opus_packet_pad_impl(unsigned char *data, opus_int32 len, opus_int32 new_len, int pad, const opus_extension_data *extensions, int nb_extensions);
+
#endif /* OPUS_PRIVATE_H */
diff --git a/src/repacketizer.c b/src/repacketizer.c
index 0e1e157b..3ae8ee36 100644
--- a/src/repacketizer.c
+++ b/src/repacketizer.c
@@ -251,7 +251,7 @@ opus_int32 opus_repacketizer_out(OpusRepacketizer *rp, unsigned char *data, opus
return opus_repacketizer_out_range_impl(rp, 0, rp->nb_frames, data, maxlen, 0, 0, NULL, 0);
}
-int opus_packet_pad(unsigned char *data, opus_int32 len, opus_int32 new_len)
+opus_int32 opus_packet_pad_impl(unsigned char *data, opus_int32 len, opus_int32 new_len, int pad, const opus_extension_data *extensions, int nb_extensions)
{
OpusRepacketizer rp;
opus_int32 ret;
@@ -267,7 +267,12 @@ int opus_packet_pad(unsigned char *data, opus_int32 len, opus_int32 new_len)
ret = opus_repacketizer_cat(&rp, data+new_len-len, len);
if (ret != OPUS_OK)
return ret;
- ret = opus_repacketizer_out_range_impl(&rp, 0, rp.nb_frames, data, new_len, 0, 1, NULL, 0);
+ return opus_repacketizer_out_range_impl(&rp, 0, rp.nb_frames, data, new_len, 0, pad, extensions, nb_extensions);
+}
+
+int opus_packet_pad(unsigned char *data, opus_int32 len, opus_int32 new_len)
+{
+ opus_int32 ret = opus_packet_pad_impl(data, len, new_len, 1, NULL, 0);
if (ret > 0)
return OPUS_OK;
else