1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * codec2 utility functions 3cabdff1aSopenharmony_ci * Copyright (c) 2017 Tomas Härdin 4cabdff1aSopenharmony_ci * 5cabdff1aSopenharmony_ci * This file is part of FFmpeg. 6cabdff1aSopenharmony_ci * 7cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or 8cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public 9cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either 10cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version. 11cabdff1aSopenharmony_ci * 12cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful, 13cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 14cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15cabdff1aSopenharmony_ci * Lesser General Public License for more details. 16cabdff1aSopenharmony_ci * 17cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public 18cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software 19cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20cabdff1aSopenharmony_ci */ 21cabdff1aSopenharmony_ci 22cabdff1aSopenharmony_ci#include <string.h> 23cabdff1aSopenharmony_ci#include "internal.h" 24cabdff1aSopenharmony_ci#include "libavcodec/codec2utils.h" 25cabdff1aSopenharmony_ci 26cabdff1aSopenharmony_ci#if LIBAVCODEC_VERSION_MAJOR < 59 27cabdff1aSopenharmony_ciint avpriv_codec2_mode_bit_rate(void *logctx, int mode) 28cabdff1aSopenharmony_ci{ 29cabdff1aSopenharmony_ci int frame_size = avpriv_codec2_mode_frame_size(logctx, mode); 30cabdff1aSopenharmony_ci int block_align = avpriv_codec2_mode_block_align(logctx, mode); 31cabdff1aSopenharmony_ci 32cabdff1aSopenharmony_ci if (frame_size <= 0 || block_align <= 0) { 33cabdff1aSopenharmony_ci return 0; 34cabdff1aSopenharmony_ci } 35cabdff1aSopenharmony_ci 36cabdff1aSopenharmony_ci return 8 * 8000 * block_align / frame_size; 37cabdff1aSopenharmony_ci} 38cabdff1aSopenharmony_ci 39cabdff1aSopenharmony_ciint avpriv_codec2_mode_frame_size(void *logctx, int mode) 40cabdff1aSopenharmony_ci{ 41cabdff1aSopenharmony_ci int frame_size_table[CODEC2_MODE_MAX+1] = { 42cabdff1aSopenharmony_ci 160, // 3200 43cabdff1aSopenharmony_ci 160, // 2400 44cabdff1aSopenharmony_ci 320, // 1600 45cabdff1aSopenharmony_ci 320, // 1400 46cabdff1aSopenharmony_ci 320, // 1300 47cabdff1aSopenharmony_ci 320, // 1200 48cabdff1aSopenharmony_ci 320, // 700 49cabdff1aSopenharmony_ci 320, // 700B 50cabdff1aSopenharmony_ci 320, // 700C 51cabdff1aSopenharmony_ci }; 52cabdff1aSopenharmony_ci 53cabdff1aSopenharmony_ci if (mode < 0 || mode > CODEC2_MODE_MAX) { 54cabdff1aSopenharmony_ci av_log(logctx, AV_LOG_ERROR, "unknown codec2 mode %i, can't find frame_size\n", mode); 55cabdff1aSopenharmony_ci return 0; 56cabdff1aSopenharmony_ci } else { 57cabdff1aSopenharmony_ci return frame_size_table[mode]; 58cabdff1aSopenharmony_ci } 59cabdff1aSopenharmony_ci} 60cabdff1aSopenharmony_ci 61cabdff1aSopenharmony_ciint avpriv_codec2_mode_block_align(void *logctx, int mode) 62cabdff1aSopenharmony_ci{ 63cabdff1aSopenharmony_ci int block_align_table[CODEC2_MODE_MAX+1] = { 64cabdff1aSopenharmony_ci 8, // 3200 65cabdff1aSopenharmony_ci 6, // 2400 66cabdff1aSopenharmony_ci 8, // 1600 67cabdff1aSopenharmony_ci 7, // 1400 68cabdff1aSopenharmony_ci 7, // 1300 69cabdff1aSopenharmony_ci 6, // 1200 70cabdff1aSopenharmony_ci 4, // 700 71cabdff1aSopenharmony_ci 4, // 700B 72cabdff1aSopenharmony_ci 4, // 700C 73cabdff1aSopenharmony_ci }; 74cabdff1aSopenharmony_ci 75cabdff1aSopenharmony_ci if (mode < 0 || mode > CODEC2_MODE_MAX) { 76cabdff1aSopenharmony_ci av_log(logctx, AV_LOG_ERROR, "unknown codec2 mode %i, can't find block_align\n", mode); 77cabdff1aSopenharmony_ci return 0; 78cabdff1aSopenharmony_ci } else { 79cabdff1aSopenharmony_ci return block_align_table[mode]; 80cabdff1aSopenharmony_ci } 81cabdff1aSopenharmony_ci} 82cabdff1aSopenharmony_ci#endif 83