@@ -785,7 +785,7 @@ static void atrac3_init_static_data(void)
785785
786786static int static_init_done;
787787
788- ATRAC3Context *atrac3_alloc (int channels, int block_align, const uint8_t *extra_data, int extra_data_size) {
788+ ATRAC3Context *atrac3_alloc (int channels, int * block_align, const uint8_t *extra_data, int extra_data_size) {
789789 int i, ret;
790790 int version, delay, samples_per_frame, frame_factor;
791791
@@ -798,7 +798,13 @@ ATRAC3Context *atrac3_alloc(int channels, int block_align, const uint8_t *extra_
798798
799799 ATRAC3Context *q = (ATRAC3Context *)av_mallocz (sizeof (ATRAC3Context));
800800 q->channels = channels;
801- q->block_align = block_align;
801+ if (*block_align) {
802+ q->block_align = *block_align;
803+ } else {
804+ // Atrac3 (unlike Atrac3+) requires a specified block align.
805+ atrac3_free (q);
806+ return nullptr ;
807+ }
802808
803809 if (!static_init_done)
804810 atrac3_init_static_data ();
@@ -824,9 +830,9 @@ ATRAC3Context *atrac3_alloc(int channels, int block_align, const uint8_t *extra_
824830 q->coding_mode = q->coding_mode ? JOINT_STEREO : STEREO;
825831 q->scrambled_stream = 0 ;
826832
827- if (block_align != 96 * channels * frame_factor &&
828- block_align != 152 * channels * frame_factor &&
829- block_align != 192 * channels * frame_factor) {
833+ if (q-> block_align != 96 * channels * frame_factor &&
834+ q-> block_align != 152 * channels * frame_factor &&
835+ q-> block_align != 192 * channels * frame_factor) {
830836 av_log (AV_LOG_ERROR, " Unknown frame/channel/frame_factor "
831837 " configuration %d/%d/%d\n " , block_align,
832838 channels, frame_factor);
@@ -887,7 +893,7 @@ ATRAC3Context *atrac3_alloc(int channels, int block_align, const uint8_t *extra_
887893 return nullptr ;
888894 }
889895
890- q->decoded_bytes_buffer = (uint8_t *)av_mallocz (FFALIGN (block_align, 4 ) + AV_INPUT_BUFFER_PADDING_SIZE);
896+ q->decoded_bytes_buffer = (uint8_t *)av_mallocz (FFALIGN (q-> block_align , 4 ) + AV_INPUT_BUFFER_PADDING_SIZE);
891897
892898 /* initialize the MDCT transform */
893899 if ((ret = ff_mdct_init (&q->mdct_ctx , 9 , 1 , 1.0 / 32768 )) < 0 ) {
0 commit comments