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