mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-26 19:01:44 +02:00
avformat/aadec: Don't unnecessarily reinitialize AVTEA context
We use ECB, not CBC mode here, so one does not need to reinitialize the context; for the same reason, one can also just let av_tea_crypt() loop over the blocks, avoiding a loop here. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
parent
a0900a318a
commit
c9b3099210
@ -173,6 +173,7 @@ static int aa_read_header(AVFormatContext *s)
|
||||
for (i = 0; i < 16; i++)
|
||||
av_log(s, AV_LOG_DEBUG, "%02x", c->file_key[i]);
|
||||
av_log(s, AV_LOG_DEBUG, "\n");
|
||||
av_tea_init(c->tea_ctx, c->file_key, 16);
|
||||
|
||||
/* decoder setup */
|
||||
st = avformat_new_stream(s, NULL);
|
||||
@ -246,9 +247,6 @@ static int aa_read_header(AVFormatContext *s)
|
||||
|
||||
static int aa_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
{
|
||||
int i;
|
||||
int blocks;
|
||||
uint8_t *buf;
|
||||
int ret;
|
||||
AADemuxContext *c = s->priv_data;
|
||||
uint64_t pos = avio_tell(s->pb);
|
||||
@ -279,15 +277,10 @@ static int aa_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
if (ret != c->current_codec_second_size)
|
||||
return AVERROR_EOF;
|
||||
|
||||
buf = pkt->data;
|
||||
// decrypt c->current_codec_second_size bytes
|
||||
// decrypt c->current_codec_second_size bytes in blocks of TEA_BLOCK_SIZE
|
||||
// trailing bytes are left unencrypted!
|
||||
blocks = c->current_codec_second_size / TEA_BLOCK_SIZE;
|
||||
for (i = 0; i < blocks; i++) {
|
||||
av_tea_init(c->tea_ctx, c->file_key, 16);
|
||||
av_tea_crypt(c->tea_ctx, buf, buf, 1, NULL, 1);
|
||||
buf += TEA_BLOCK_SIZE;
|
||||
}
|
||||
av_tea_crypt(c->tea_ctx, pkt->data, pkt->data,
|
||||
c->current_codec_second_size / TEA_BLOCK_SIZE, NULL, 1);
|
||||
|
||||
// update state
|
||||
c->current_chapter_size = c->current_chapter_size - c->current_codec_second_size;
|
||||
|
Loading…
Reference in New Issue
Block a user