1/* 2 * common code shared by all WMA variants 3 * 4 * This file is part of FFmpeg. 5 * 6 * FFmpeg is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * FFmpeg is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with FFmpeg; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21#include "libavutil/attributes.h" 22#include "wma_common.h" 23 24/** 25 *@brief Get the samples per frame for this stream. 26 *@param sample_rate output sample_rate 27 *@param version wma version 28 *@param decode_flags codec compression features 29 *@return log2 of the number of output samples per frame 30 */ 31av_cold int ff_wma_get_frame_len_bits(int sample_rate, int version, 32 unsigned int decode_flags) 33{ 34 35 int frame_len_bits; 36 37 if (sample_rate <= 16000) { 38 frame_len_bits = 9; 39 } else if (sample_rate <= 22050 || 40 (sample_rate <= 32000 && version == 1)) { 41 frame_len_bits = 10; 42 } else if (sample_rate <= 48000 || version < 3) { 43 frame_len_bits = 11; 44 } else if (sample_rate <= 96000) { 45 frame_len_bits = 12; 46 } else { 47 frame_len_bits = 13; 48 } 49 50 if (version == 3) { 51 int tmp = decode_flags & 0x6; 52 if (tmp == 0x2) { 53 ++frame_len_bits; 54 } else if (tmp == 0x4) { 55 --frame_len_bits; 56 } else if (tmp == 0x6) { 57 frame_len_bits -= 2; 58 } 59 } 60 61 return frame_len_bits; 62} 63