|
|
@ -696,16 +696,14 @@ rm_ac3_swap_bytes (AVStream *st, AVPacket *pkt) |
|
|
|
* Perform 4-bit block reordering for SIPR data. |
|
|
|
* Perform 4-bit block reordering for SIPR data. |
|
|
|
* @todo This can be optimized, e.g. use memcpy() if data blocks are aligned |
|
|
|
* @todo This can be optimized, e.g. use memcpy() if data blocks are aligned |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
static void |
|
|
|
void ff_rm_reorder_sipr_data(uint8_t *buf, int sub_packet_h, int framesize) |
|
|
|
rm_reorder_sipr_data (RMStream *ast) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
int n, bs = ast->sub_packet_h * ast->audio_framesize * 2 / 96; // nibbles per subpacket
|
|
|
|
int n, bs = sub_packet_h * framesize * 2 / 96; // nibbles per subpacket
|
|
|
|
|
|
|
|
|
|
|
|
for (n = 0; n < 38; n++) { |
|
|
|
for (n = 0; n < 38; n++) { |
|
|
|
int j; |
|
|
|
int j; |
|
|
|
int i = bs * sipr_swaps[n][0]; |
|
|
|
int i = bs * sipr_swaps[n][0]; |
|
|
|
int o = bs * sipr_swaps[n][1]; |
|
|
|
int o = bs * sipr_swaps[n][1]; |
|
|
|
uint8_t *buf = ast->pkt.data; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* swap 4bit-nibbles of block 'i' with 'o' */ |
|
|
|
/* swap 4bit-nibbles of block 'i' with 'o' */ |
|
|
|
for (j = 0; j < bs; j++, i++, o++) { |
|
|
|
for (j = 0; j < bs; j++, i++, o++) { |
|
|
@ -766,7 +764,7 @@ ff_rm_parse_packet (AVFormatContext *s, ByteIOContext *pb, |
|
|
|
if (++(ast->sub_packet_cnt) < h) |
|
|
|
if (++(ast->sub_packet_cnt) < h) |
|
|
|
return -1; |
|
|
|
return -1; |
|
|
|
if (st->codec->codec_id == CODEC_ID_SIPR) |
|
|
|
if (st->codec->codec_id == CODEC_ID_SIPR) |
|
|
|
rm_reorder_sipr_data(ast); |
|
|
|
ff_rm_reorder_sipr_data(ast->pkt.data, h, w); |
|
|
|
|
|
|
|
|
|
|
|
ast->sub_packet_cnt = 0; |
|
|
|
ast->sub_packet_cnt = 0; |
|
|
|
rm->audio_stream_num = st->index; |
|
|
|
rm->audio_stream_num = st->index; |
|
|
|