yading@10: /* yading@10: * common code shared by all WMA variants yading@10: * yading@10: * This file is part of Libav. yading@10: * yading@10: * Libav is free software; you can redistribute it and/or yading@10: * modify it under the terms of the GNU Lesser General Public yading@10: * License as published by the Free Software Foundation; either yading@10: * version 2.1 of the License, or (at your option) any later version. yading@10: * yading@10: * Libav is distributed in the hope that it will be useful, yading@10: * but WITHOUT ANY WARRANTY; without even the implied warranty of yading@10: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU yading@10: * Lesser General Public License for more details. yading@10: * yading@10: * You should have received a copy of the GNU Lesser General Public yading@10: * License along with Libav; if not, write to the Free Software yading@10: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA yading@10: */ yading@10: yading@10: #include "libavutil/attributes.h" yading@10: #include "wma_common.h" yading@10: yading@10: /** yading@10: *@brief Get the samples per frame for this stream. yading@10: *@param sample_rate output sample_rate yading@10: *@param version wma version yading@10: *@param decode_flags codec compression features yading@10: *@return log2 of the number of output samples per frame yading@10: */ yading@10: av_cold int ff_wma_get_frame_len_bits(int sample_rate, int version, yading@10: unsigned int decode_flags) yading@10: { yading@10: yading@10: int frame_len_bits; yading@10: yading@10: if (sample_rate <= 16000) { yading@10: frame_len_bits = 9; yading@10: } else if (sample_rate <= 22050 || yading@10: (sample_rate <= 32000 && version == 1)) { yading@10: frame_len_bits = 10; yading@10: } else if (sample_rate <= 48000 || version < 3) { yading@10: frame_len_bits = 11; yading@10: } else if (sample_rate <= 96000) { yading@10: frame_len_bits = 12; yading@10: } else { yading@10: frame_len_bits = 13; yading@10: } yading@10: yading@10: if (version == 3) { yading@10: int tmp = decode_flags & 0x6; yading@10: if (tmp == 0x2) { yading@10: ++frame_len_bits; yading@10: } else if (tmp == 0x4) { yading@10: --frame_len_bits; yading@10: } else if (tmp == 0x6) { yading@10: frame_len_bits -= 2; yading@10: } yading@10: } yading@10: yading@10: return frame_len_bits; yading@10: }