mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
dpcm: misc pretty-printing
This commit is contained in:
parent
1de8401c56
commit
4bad464e7f
@ -84,13 +84,15 @@ static const int interplay_delta_table[] = {
|
||||
|
||||
};
|
||||
|
||||
static const int sol_table_old[16] =
|
||||
{ 0x0, 0x1, 0x2 , 0x3, 0x6, 0xA, 0xF, 0x15,
|
||||
-0x15, -0xF, -0xA, -0x6, -0x3, -0x2, -0x1, 0x0};
|
||||
static const int sol_table_old[16] = {
|
||||
0x0, 0x1, 0x2, 0x3, 0x6, 0xA, 0xF, 0x15,
|
||||
-0x15, -0xF, -0xA, -0x6, -0x3, -0x2, -0x1, 0x0
|
||||
};
|
||||
|
||||
static const int sol_table_new[16] =
|
||||
{ 0x0, 0x1, 0x2, 0x3, 0x6, 0xA, 0xF, 0x15,
|
||||
0x0, -0x1, -0x2, -0x3, -0x6, -0xA, -0xF, -0x15};
|
||||
static const int sol_table_new[16] = {
|
||||
0x0, 0x1, 0x2, 0x3, 0x6, 0xA, 0xF, 0x15,
|
||||
0x0, -0x1, -0x2, -0x3, -0x6, -0xA, -0xF, -0x15
|
||||
};
|
||||
|
||||
static const int sol_table_16[128] = {
|
||||
0x000, 0x008, 0x010, 0x020, 0x030, 0x040, 0x050, 0x060, 0x070, 0x080,
|
||||
@ -109,7 +111,6 @@ static const int sol_table_16[128] = {
|
||||
};
|
||||
|
||||
|
||||
|
||||
static av_cold int dpcm_decode_init(AVCodecContext *avctx)
|
||||
{
|
||||
DPCMContext *s = avctx->priv_data;
|
||||
@ -125,24 +126,23 @@ static av_cold int dpcm_decode_init(AVCodecContext *avctx)
|
||||
/* initialize square table */
|
||||
for (i = 0; i < 128; i++) {
|
||||
square = i * i;
|
||||
s->roq_square_array[i] = square;
|
||||
s->roq_square_array[i ] = square;
|
||||
s->roq_square_array[i + 128] = -square;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case CODEC_ID_SOL_DPCM:
|
||||
switch(avctx->codec_tag){
|
||||
case 1:
|
||||
s->sol_table=sol_table_old;
|
||||
s->sol_table = sol_table_old;
|
||||
s->sample[0] = s->sample[1] = 0x80;
|
||||
break;
|
||||
case 2:
|
||||
s->sol_table=sol_table_new;
|
||||
s->sol_table = sol_table_new;
|
||||
s->sample[0] = s->sample[1] = 0x80;
|
||||
break;
|
||||
case 3:
|
||||
s->sol_table=sol_table_16;
|
||||
s->sol_table = sol_table_16;
|
||||
break;
|
||||
default:
|
||||
av_log(avctx, AV_LOG_ERROR, "Unknown SOL subcodec\n");
|
||||
@ -162,8 +162,8 @@ static av_cold int dpcm_decode_init(AVCodecContext *avctx)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int dpcm_decode_frame(AVCodecContext *avctx,
|
||||
void *data, int *data_size,
|
||||
|
||||
static int dpcm_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
|
||||
AVPacket *avpkt)
|
||||
{
|
||||
const uint8_t *buf = avpkt->data;
|
||||
@ -219,7 +219,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx,
|
||||
/* decode the samples */
|
||||
while (buf < buf_end) {
|
||||
predictor[ch] += s->roq_square_array[*buf++];
|
||||
predictor[ch] = av_clip_int16(predictor[ch]);
|
||||
predictor[ch] = av_clip_int16(predictor[ch]);
|
||||
*output_samples++ = predictor[ch];
|
||||
|
||||
/* toggle channel */
|
||||
@ -238,7 +238,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx,
|
||||
ch = 0;
|
||||
while (buf < buf_end) {
|
||||
predictor[ch] += interplay_delta_table[*buf++];
|
||||
predictor[ch] = av_clip_int16(predictor[ch]);
|
||||
predictor[ch] = av_clip_int16(predictor[ch]);
|
||||
*output_samples++ = predictor[ch];
|
||||
|
||||
/* toggle channel */
|
||||
@ -294,7 +294,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx,
|
||||
while (buf < buf_end) {
|
||||
uint8_t n = *buf++;
|
||||
if (n & 0x80) s->sample[ch] -= s->sol_table[n & 0x7F];
|
||||
else s->sample[ch] += s->sol_table[n & 0x7F];
|
||||
else s->sample[ch] += s->sol_table[n & 0x7F];
|
||||
s->sample[ch] = av_clip_int16(s->sample[ch]);
|
||||
*output_samples++ = s->sample[ch];
|
||||
/* toggle channel */
|
||||
@ -320,6 +320,6 @@ AVCodec ff_ ## name_ ## _decoder = { \
|
||||
}
|
||||
|
||||
DPCM_DECODER(CODEC_ID_INTERPLAY_DPCM, interplay_dpcm, "DPCM Interplay");
|
||||
DPCM_DECODER(CODEC_ID_ROQ_DPCM, roq_dpcm, "DPCM id RoQ");
|
||||
DPCM_DECODER(CODEC_ID_SOL_DPCM, sol_dpcm, "DPCM Sol");
|
||||
DPCM_DECODER(CODEC_ID_XAN_DPCM, xan_dpcm, "DPCM Xan");
|
||||
DPCM_DECODER(CODEC_ID_ROQ_DPCM, roq_dpcm, "DPCM id RoQ");
|
||||
DPCM_DECODER(CODEC_ID_SOL_DPCM, sol_dpcm, "DPCM Sol");
|
||||
DPCM_DECODER(CODEC_ID_XAN_DPCM, xan_dpcm, "DPCM Xan");
|
||||
|
Loading…
Reference in New Issue
Block a user