| OLD | NEW |
| 1 /* | 1 /* |
| 2 * ALAC (Apple Lossless Audio Codec) decoder | 2 * ALAC (Apple Lossless Audio Codec) decoder |
| 3 * Copyright (c) 2005 David Hammerton | 3 * Copyright (c) 2005 David Hammerton |
| 4 * | 4 * |
| 5 * This file is part of FFmpeg. | 5 * This file is part of FFmpeg. |
| 6 * | 6 * |
| 7 * FFmpeg is free software; you can redistribute it and/or | 7 * FFmpeg is free software; you can redistribute it and/or |
| 8 * modify it under the terms of the GNU Lesser General Public | 8 * modify it under the terms of the GNU Lesser General Public |
| 9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
| 10 * version 2.1 of the License, or (at your option) any later version. | 10 * version 2.1 of the License, or (at your option) any later version. |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 int context_initialized; | 70 int context_initialized; |
| 71 | 71 |
| 72 int numchannels; | 72 int numchannels; |
| 73 int bytespersample; | 73 int bytespersample; |
| 74 | 74 |
| 75 /* buffers */ | 75 /* buffers */ |
| 76 int32_t *predicterror_buffer[MAX_CHANNELS]; | 76 int32_t *predicterror_buffer[MAX_CHANNELS]; |
| 77 | 77 |
| 78 int32_t *outputsamples_buffer[MAX_CHANNELS]; | 78 int32_t *outputsamples_buffer[MAX_CHANNELS]; |
| 79 | 79 |
| 80 int32_t *wasted_bits_buffer[MAX_CHANNELS]; |
| 81 |
| 80 /* stuff from setinfo */ | 82 /* stuff from setinfo */ |
| 81 uint32_t setinfo_max_samples_per_frame; /* 0x1000 = 4096 */ /* max sample
s per frame? */ | 83 uint32_t setinfo_max_samples_per_frame; /* 0x1000 = 4096 */ /* max sample
s per frame? */ |
| 82 uint8_t setinfo_sample_size; /* 0x10 */ | 84 uint8_t setinfo_sample_size; /* 0x10 */ |
| 83 uint8_t setinfo_rice_historymult; /* 0x28 */ | 85 uint8_t setinfo_rice_historymult; /* 0x28 */ |
| 84 uint8_t setinfo_rice_initialhistory; /* 0x0a */ | 86 uint8_t setinfo_rice_initialhistory; /* 0x0a */ |
| 85 uint8_t setinfo_rice_kmodifier; /* 0x0e */ | 87 uint8_t setinfo_rice_kmodifier; /* 0x0e */ |
| 86 /* end setinfo stuff */ | 88 /* end setinfo stuff */ |
| 87 | 89 |
| 90 int wasted_bits; |
| 88 } ALACContext; | 91 } ALACContext; |
| 89 | 92 |
| 90 static void allocate_buffers(ALACContext *alac) | 93 static void allocate_buffers(ALACContext *alac) |
| 91 { | 94 { |
| 92 int chan; | 95 int chan; |
| 93 for (chan = 0; chan < MAX_CHANNELS; chan++) { | 96 for (chan = 0; chan < MAX_CHANNELS; chan++) { |
| 94 alac->predicterror_buffer[chan] = | 97 alac->predicterror_buffer[chan] = |
| 95 av_malloc(alac->setinfo_max_samples_per_frame * 4); | 98 av_malloc(alac->setinfo_max_samples_per_frame * 4); |
| 96 | 99 |
| 97 alac->outputsamples_buffer[chan] = | 100 alac->outputsamples_buffer[chan] = |
| 98 av_malloc(alac->setinfo_max_samples_per_frame * 4); | 101 av_malloc(alac->setinfo_max_samples_per_frame * 4); |
| 102 |
| 103 alac->wasted_bits_buffer[chan] = av_malloc(alac->setinfo_max_samples_per
_frame * 4); |
| 99 } | 104 } |
| 100 } | 105 } |
| 101 | 106 |
| 102 static int alac_set_info(ALACContext *alac) | 107 static int alac_set_info(ALACContext *alac) |
| 103 { | 108 { |
| 104 const unsigned char *ptr = alac->avctx->extradata; | 109 const unsigned char *ptr = alac->avctx->extradata; |
| 105 | 110 |
| 106 ptr += 4; /* size */ | 111 ptr += 4; /* size */ |
| 107 ptr += 4; /* alac */ | 112 ptr += 4; /* alac */ |
| 108 ptr += 4; /* 0 ? */ | 113 ptr += 4; /* 0 ? */ |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 391 int16_t left, right; | 396 int16_t left, right; |
| 392 | 397 |
| 393 left = buffer[0][i]; | 398 left = buffer[0][i]; |
| 394 right = buffer[1][i]; | 399 right = buffer[1][i]; |
| 395 | 400 |
| 396 buffer_out[i*numchannels] = left; | 401 buffer_out[i*numchannels] = left; |
| 397 buffer_out[i*numchannels + 1] = right; | 402 buffer_out[i*numchannels + 1] = right; |
| 398 } | 403 } |
| 399 } | 404 } |
| 400 | 405 |
| 406 static void decorrelate_stereo_24(int32_t *buffer[MAX_CHANNELS], |
| 407 int32_t *buffer_out, |
| 408 int32_t *wasted_bits_buffer[MAX_CHANNELS], |
| 409 int wasted_bits, |
| 410 int numchannels, int numsamples, |
| 411 uint8_t interlacing_shift, |
| 412 uint8_t interlacing_leftweight) |
| 413 { |
| 414 int i; |
| 415 |
| 416 if (numsamples <= 0) |
| 417 return; |
| 418 |
| 419 /* weighted interlacing */ |
| 420 if (interlacing_leftweight) { |
| 421 for (i = 0; i < numsamples; i++) { |
| 422 int32_t a, b; |
| 423 |
| 424 a = buffer[0][i]; |
| 425 b = buffer[1][i]; |
| 426 |
| 427 a -= (b * interlacing_leftweight) >> interlacing_shift; |
| 428 b += a; |
| 429 |
| 430 if (wasted_bits) { |
| 431 b = (b << wasted_bits) | wasted_bits_buffer[0][i]; |
| 432 a = (a << wasted_bits) | wasted_bits_buffer[1][i]; |
| 433 } |
| 434 |
| 435 buffer_out[i * numchannels] = b << 8; |
| 436 buffer_out[i * numchannels + 1] = a << 8; |
| 437 } |
| 438 } else { |
| 439 for (i = 0; i < numsamples; i++) { |
| 440 int32_t left, right; |
| 441 |
| 442 left = buffer[0][i]; |
| 443 right = buffer[1][i]; |
| 444 |
| 445 if (wasted_bits) { |
| 446 left = (left << wasted_bits) | wasted_bits_buffer[0][i]; |
| 447 right = (right << wasted_bits) | wasted_bits_buffer[1][i]; |
| 448 } |
| 449 |
| 450 buffer_out[i * numchannels] = left << 8; |
| 451 buffer_out[i * numchannels + 1] = right << 8; |
| 452 } |
| 453 } |
| 454 } |
| 455 |
| 401 static int alac_decode_frame(AVCodecContext *avctx, | 456 static int alac_decode_frame(AVCodecContext *avctx, |
| 402 void *outbuffer, int *outputsize, | 457 void *outbuffer, int *outputsize, |
| 403 AVPacket *avpkt) | 458 AVPacket *avpkt) |
| 404 { | 459 { |
| 405 const uint8_t *inbuffer = avpkt->data; | 460 const uint8_t *inbuffer = avpkt->data; |
| 406 int input_buffer_size = avpkt->size; | 461 int input_buffer_size = avpkt->size; |
| 407 ALACContext *alac = avctx->priv_data; | 462 ALACContext *alac = avctx->priv_data; |
| 408 | 463 |
| 409 int channels; | 464 int channels; |
| 410 unsigned int outputsamples; | 465 unsigned int outputsamples; |
| 411 int hassize; | 466 int hassize; |
| 412 unsigned int readsamplesize; | 467 unsigned int readsamplesize; |
| 413 int wasted_bytes; | |
| 414 int isnotcompressed; | 468 int isnotcompressed; |
| 415 uint8_t interlacing_shift; | 469 uint8_t interlacing_shift; |
| 416 uint8_t interlacing_leftweight; | 470 uint8_t interlacing_leftweight; |
| 417 | 471 |
| 418 /* short-circuit null buffers */ | 472 /* short-circuit null buffers */ |
| 419 if (!inbuffer || !input_buffer_size) | 473 if (!inbuffer || !input_buffer_size) |
| 420 return input_buffer_size; | 474 return input_buffer_size; |
| 421 | 475 |
| 422 /* initialize from the extradata */ | 476 /* initialize from the extradata */ |
| 423 if (!alac->context_initialized) { | 477 if (!alac->context_initialized) { |
| (...skipping 21 matching lines...) Expand all Loading... |
| 445 /* 2^result = something to do with output waiting. | 499 /* 2^result = something to do with output waiting. |
| 446 * perhaps matters if we read > 1 frame in a pass? | 500 * perhaps matters if we read > 1 frame in a pass? |
| 447 */ | 501 */ |
| 448 skip_bits(&alac->gb, 4); | 502 skip_bits(&alac->gb, 4); |
| 449 | 503 |
| 450 skip_bits(&alac->gb, 12); /* unknown, skip 12 bits */ | 504 skip_bits(&alac->gb, 12); /* unknown, skip 12 bits */ |
| 451 | 505 |
| 452 /* the output sample size is stored soon */ | 506 /* the output sample size is stored soon */ |
| 453 hassize = get_bits1(&alac->gb); | 507 hassize = get_bits1(&alac->gb); |
| 454 | 508 |
| 455 wasted_bytes = get_bits(&alac->gb, 2); /* unknown ? */ | 509 alac->wasted_bits = get_bits(&alac->gb, 2) << 3; |
| 456 | 510 |
| 457 /* whether the frame is compressed */ | 511 /* whether the frame is compressed */ |
| 458 isnotcompressed = get_bits1(&alac->gb); | 512 isnotcompressed = get_bits1(&alac->gb); |
| 459 | 513 |
| 460 if (hassize) { | 514 if (hassize) { |
| 461 /* now read the number of samples as a 32bit integer */ | 515 /* now read the number of samples as a 32bit integer */ |
| 462 outputsamples = get_bits_long(&alac->gb, 32); | 516 outputsamples = get_bits_long(&alac->gb, 32); |
| 463 if(outputsamples > alac->setinfo_max_samples_per_frame){ | 517 if(outputsamples > alac->setinfo_max_samples_per_frame){ |
| 464 av_log(avctx, AV_LOG_ERROR, "outputsamples %d > %d\n", outputsamples
, alac->setinfo_max_samples_per_frame); | 518 av_log(avctx, AV_LOG_ERROR, "outputsamples %d > %d\n", outputsamples
, alac->setinfo_max_samples_per_frame); |
| 465 return -1; | 519 return -1; |
| 466 } | 520 } |
| 467 } else | 521 } else |
| 468 outputsamples = alac->setinfo_max_samples_per_frame; | 522 outputsamples = alac->setinfo_max_samples_per_frame; |
| 469 | 523 |
| 524 switch (alac->setinfo_sample_size) { |
| 525 case 16: avctx->sample_fmt = SAMPLE_FMT_S16; |
| 526 alac->bytespersample = channels << 1; |
| 527 break; |
| 528 case 24: avctx->sample_fmt = SAMPLE_FMT_S32; |
| 529 alac->bytespersample = channels << 2; |
| 530 break; |
| 531 default: av_log(avctx, AV_LOG_ERROR, "Sample depth %d is not supported.\n", |
| 532 alac->setinfo_sample_size); |
| 533 return -1; |
| 534 } |
| 535 |
| 470 if(outputsamples > *outputsize / alac->bytespersample){ | 536 if(outputsamples > *outputsize / alac->bytespersample){ |
| 471 av_log(avctx, AV_LOG_ERROR, "sample buffer too small\n"); | 537 av_log(avctx, AV_LOG_ERROR, "sample buffer too small\n"); |
| 472 return -1; | 538 return -1; |
| 473 } | 539 } |
| 474 | 540 |
| 475 *outputsize = outputsamples * alac->bytespersample; | 541 *outputsize = outputsamples * alac->bytespersample; |
| 476 readsamplesize = alac->setinfo_sample_size - (wasted_bytes * 8) + channels -
1; | 542 readsamplesize = alac->setinfo_sample_size - (alac->wasted_bits) + channels
- 1; |
| 477 if (readsamplesize > MIN_CACHE_BITS) { | 543 if (readsamplesize > MIN_CACHE_BITS) { |
| 478 av_log(avctx, AV_LOG_ERROR, "readsamplesize too big (%d)\n", readsamples
ize); | 544 av_log(avctx, AV_LOG_ERROR, "readsamplesize too big (%d)\n", readsamples
ize); |
| 479 return -1; | 545 return -1; |
| 480 } | 546 } |
| 481 | 547 |
| 482 if (!isnotcompressed) { | 548 if (!isnotcompressed) { |
| 483 /* so it is compressed */ | 549 /* so it is compressed */ |
| 484 int16_t predictor_coef_table[channels][32]; | 550 int16_t predictor_coef_table[channels][32]; |
| 485 int predictor_coef_num[channels]; | 551 int predictor_coef_num[channels]; |
| 486 int prediction_type[channels]; | 552 int prediction_type[channels]; |
| 487 int prediction_quantitization[channels]; | 553 int prediction_quantitization[channels]; |
| 488 int ricemodifier[channels]; | 554 int ricemodifier[channels]; |
| 489 int i, chan; | 555 int i, chan; |
| 490 | 556 |
| 491 interlacing_shift = get_bits(&alac->gb, 8); | 557 interlacing_shift = get_bits(&alac->gb, 8); |
| 492 interlacing_leftweight = get_bits(&alac->gb, 8); | 558 interlacing_leftweight = get_bits(&alac->gb, 8); |
| 493 | 559 |
| 494 for (chan = 0; chan < channels; chan++) { | 560 for (chan = 0; chan < channels; chan++) { |
| 495 prediction_type[chan] = get_bits(&alac->gb, 4); | 561 prediction_type[chan] = get_bits(&alac->gb, 4); |
| 496 prediction_quantitization[chan] = get_bits(&alac->gb, 4); | 562 prediction_quantitization[chan] = get_bits(&alac->gb, 4); |
| 497 | 563 |
| 498 ricemodifier[chan] = get_bits(&alac->gb, 3); | 564 ricemodifier[chan] = get_bits(&alac->gb, 3); |
| 499 predictor_coef_num[chan] = get_bits(&alac->gb, 5); | 565 predictor_coef_num[chan] = get_bits(&alac->gb, 5); |
| 500 | 566 |
| 501 /* read the predictor table */ | 567 /* read the predictor table */ |
| 502 for (i = 0; i < predictor_coef_num[chan]; i++) | 568 for (i = 0; i < predictor_coef_num[chan]; i++) |
| 503 predictor_coef_table[chan][i] = (int16_t)get_bits(&alac->gb, 16)
; | 569 predictor_coef_table[chan][i] = (int16_t)get_bits(&alac->gb, 16)
; |
| 504 } | 570 } |
| 505 | 571 |
| 506 if (wasted_bytes) | 572 if (alac->wasted_bits) { |
| 507 av_log(avctx, AV_LOG_ERROR, "FIXME: unimplemented, unhandling of was
ted_bytes\n"); | 573 int i, ch; |
| 508 | 574 for (i = 0; i < outputsamples; i++) { |
| 575 for (ch = 0; ch < channels; ch++) |
| 576 alac->wasted_bits_buffer[ch][i] = get_bits(&alac->gb, alac->
wasted_bits); |
| 577 } |
| 578 } |
| 509 for (chan = 0; chan < channels; chan++) { | 579 for (chan = 0; chan < channels; chan++) { |
| 510 bastardized_rice_decompress(alac, | 580 bastardized_rice_decompress(alac, |
| 511 alac->predicterror_buffer[chan], | 581 alac->predicterror_buffer[chan], |
| 512 outputsamples, | 582 outputsamples, |
| 513 readsamplesize, | 583 readsamplesize, |
| 514 alac->setinfo_rice_initialhistory, | 584 alac->setinfo_rice_initialhistory, |
| 515 alac->setinfo_rice_kmodifier, | 585 alac->setinfo_rice_kmodifier, |
| 516 ricemodifier[chan] * alac->setinfo_rice_
historymult / 4, | 586 ricemodifier[chan] * alac->setinfo_rice_
historymult / 4, |
| 517 (1 << alac->setinfo_rice_kmodifier) - 1)
; | 587 (1 << alac->setinfo_rice_kmodifier) - 1)
; |
| 518 | 588 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 531 * just a boolean?) runs adaptive fir twice.. like: | 601 * just a boolean?) runs adaptive fir twice.. like: |
| 532 * predictor_decompress_fir_adapt(predictor_error, tempout, ...) | 602 * predictor_decompress_fir_adapt(predictor_error, tempout, ...) |
| 533 * predictor_decompress_fir_adapt(predictor_error, outputsamples
...) | 603 * predictor_decompress_fir_adapt(predictor_error, outputsamples
...) |
| 534 * little strange.. | 604 * little strange.. |
| 535 */ | 605 */ |
| 536 } | 606 } |
| 537 } | 607 } |
| 538 } else { | 608 } else { |
| 539 /* not compressed, easy case */ | 609 /* not compressed, easy case */ |
| 540 int i, chan; | 610 int i, chan; |
| 611 if (alac->setinfo_sample_size <= 16) { |
| 541 for (i = 0; i < outputsamples; i++) | 612 for (i = 0; i < outputsamples; i++) |
| 542 for (chan = 0; chan < channels; chan++) { | 613 for (chan = 0; chan < channels; chan++) { |
| 543 int32_t audiobits; | 614 int32_t audiobits; |
| 544 | 615 |
| 545 audiobits = get_sbits_long(&alac->gb, alac->setinfo_sample_size)
; | 616 audiobits = get_sbits_long(&alac->gb, alac->setinfo_sample_size)
; |
| 546 | 617 |
| 547 alac->outputsamples_buffer[chan][i] = audiobits; | 618 alac->outputsamples_buffer[chan][i] = audiobits; |
| 548 } | 619 } |
| 549 /* wasted_bytes = 0; */ | 620 } else { |
| 621 for (i = 0; i < outputsamples; i++) { |
| 622 for (chan = 0; chan < channels; chan++) { |
| 623 alac->outputsamples_buffer[chan][i] = get_bits(&alac->gb, |
| 624 alac->setinfo_sample_s
ize); |
| 625 alac->outputsamples_buffer[chan][i] = sign_extend(alac->outp
utsamples_buffer[chan][i], |
| 626 alac->seti
nfo_sample_size); |
| 627 } |
| 628 } |
| 629 } |
| 630 alac->wasted_bits = 0; |
| 550 interlacing_shift = 0; | 631 interlacing_shift = 0; |
| 551 interlacing_leftweight = 0; | 632 interlacing_leftweight = 0; |
| 552 } | 633 } |
| 553 if (get_bits(&alac->gb, 3) != 7) | 634 if (get_bits(&alac->gb, 3) != 7) |
| 554 av_log(avctx, AV_LOG_ERROR, "Error : Wrong End Of Frame\n"); | 635 av_log(avctx, AV_LOG_ERROR, "Error : Wrong End Of Frame\n"); |
| 555 | 636 |
| 556 switch(alac->setinfo_sample_size) { | 637 switch(alac->setinfo_sample_size) { |
| 557 case 16: | 638 case 16: |
| 558 if (channels == 2) { | 639 if (channels == 2) { |
| 559 reconstruct_stereo_16(alac->outputsamples_buffer, | 640 reconstruct_stereo_16(alac->outputsamples_buffer, |
| 560 (int16_t*)outbuffer, | 641 (int16_t*)outbuffer, |
| 561 alac->numchannels, | 642 alac->numchannels, |
| 562 outputsamples, | 643 outputsamples, |
| 563 interlacing_shift, | 644 interlacing_shift, |
| 564 interlacing_leftweight); | 645 interlacing_leftweight); |
| 565 } else { | 646 } else { |
| 566 int i; | 647 int i; |
| 567 for (i = 0; i < outputsamples; i++) { | 648 for (i = 0; i < outputsamples; i++) { |
| 568 int16_t sample = alac->outputsamples_buffer[0][i]; | 649 ((int16_t*)outbuffer)[i] = alac->outputsamples_buffer[0][i]; |
| 569 ((int16_t*)outbuffer)[i * alac->numchannels] = sample; | |
| 570 } | 650 } |
| 571 } | 651 } |
| 572 break; | 652 break; |
| 573 case 20: | |
| 574 case 24: | 653 case 24: |
| 575 // It is not clear if there exist any encoder that creates 24 bit ALAC | 654 if (channels == 2) { |
| 576 // files. iTunes convert 24 bit raw files to 16 bit before encoding. | 655 decorrelate_stereo_24(alac->outputsamples_buffer, |
| 577 case 32: | 656 outbuffer, |
| 578 av_log(avctx, AV_LOG_ERROR, "FIXME: unimplemented sample size %i\n", ala
c->setinfo_sample_size); | 657 alac->wasted_bits_buffer, |
| 579 break; | 658 alac->wasted_bits, |
| 580 default: | 659 alac->numchannels, |
| 660 outputsamples, |
| 661 interlacing_shift, |
| 662 interlacing_leftweight); |
| 663 } else { |
| 664 int i; |
| 665 for (i = 0; i < outputsamples; i++) |
| 666 ((int32_t *)outbuffer)[i] = alac->outputsamples_buffer[0][i] <<
8; |
| 667 } |
| 581 break; | 668 break; |
| 582 } | 669 } |
| 583 | 670 |
| 584 if (input_buffer_size * 8 - get_bits_count(&alac->gb) > 8) | 671 if (input_buffer_size * 8 - get_bits_count(&alac->gb) > 8) |
| 585 av_log(avctx, AV_LOG_ERROR, "Error : %d bits left\n", input_buffer_size
* 8 - get_bits_count(&alac->gb)); | 672 av_log(avctx, AV_LOG_ERROR, "Error : %d bits left\n", input_buffer_size
* 8 - get_bits_count(&alac->gb)); |
| 586 | 673 |
| 587 return input_buffer_size; | 674 return input_buffer_size; |
| 588 } | 675 } |
| 589 | 676 |
| 590 static av_cold int alac_decode_init(AVCodecContext * avctx) | 677 static av_cold int alac_decode_init(AVCodecContext * avctx) |
| 591 { | 678 { |
| 592 ALACContext *alac = avctx->priv_data; | 679 ALACContext *alac = avctx->priv_data; |
| 593 alac->avctx = avctx; | 680 alac->avctx = avctx; |
| 594 alac->context_initialized = 0; | 681 alac->context_initialized = 0; |
| 595 | 682 |
| 596 alac->numchannels = alac->avctx->channels; | 683 alac->numchannels = alac->avctx->channels; |
| 597 alac->bytespersample = 2 * alac->numchannels; | |
| 598 avctx->sample_fmt = SAMPLE_FMT_S16; | |
| 599 | 684 |
| 600 return 0; | 685 return 0; |
| 601 } | 686 } |
| 602 | 687 |
| 603 static av_cold int alac_decode_close(AVCodecContext *avctx) | 688 static av_cold int alac_decode_close(AVCodecContext *avctx) |
| 604 { | 689 { |
| 605 ALACContext *alac = avctx->priv_data; | 690 ALACContext *alac = avctx->priv_data; |
| 606 | 691 |
| 607 int chan; | 692 int chan; |
| 608 for (chan = 0; chan < MAX_CHANNELS; chan++) { | 693 for (chan = 0; chan < MAX_CHANNELS; chan++) { |
| 609 av_free(alac->predicterror_buffer[chan]); | 694 av_freep(&alac->predicterror_buffer[chan]); |
| 610 av_free(alac->outputsamples_buffer[chan]); | 695 av_freep(&alac->outputsamples_buffer[chan]); |
| 696 av_freep(&alac->wasted_bits_buffer[chan]); |
| 611 } | 697 } |
| 612 | 698 |
| 613 return 0; | 699 return 0; |
| 614 } | 700 } |
| 615 | 701 |
| 616 AVCodec alac_decoder = { | 702 AVCodec alac_decoder = { |
| 617 "alac", | 703 "alac", |
| 618 CODEC_TYPE_AUDIO, | 704 CODEC_TYPE_AUDIO, |
| 619 CODEC_ID_ALAC, | 705 CODEC_ID_ALAC, |
| 620 sizeof(ALACContext), | 706 sizeof(ALACContext), |
| 621 alac_decode_init, | 707 alac_decode_init, |
| 622 NULL, | 708 NULL, |
| 623 alac_decode_close, | 709 alac_decode_close, |
| 624 alac_decode_frame, | 710 alac_decode_frame, |
| 625 .long_name = NULL_IF_CONFIG_SMALL("ALAC (Apple Lossless Audio Codec)"), | 711 .long_name = NULL_IF_CONFIG_SMALL("ALAC (Apple Lossless Audio Codec)"), |
| 626 }; | 712 }; |
| OLD | NEW |