⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aac_ac3_parser.c

📁 ffmpeg移植到symbian的全部源代码
💻 C
字号:
/* * Common AAC and AC3 parser * Copyright (c) 2003 Fabrice Bellard. * Copyright (c) 2003 Michael Niedermayer. * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */#include "parser.h"#include "aac_ac3_parser.h"int ff_aac_ac3_parse(AVCodecParserContext *s1,                     AVCodecContext *avctx,                     const uint8_t **poutbuf, int *poutbuf_size,                     const uint8_t *buf, int buf_size){    AACAC3ParseContext *s = s1->priv_data;    ParseContext *pc = &s->pc;    int len, i;    int new_frame_start;get_next:    i=END_NOT_FOUND;    if(s->remaining_size <= buf_size){        if(s->remaining_size && !s->need_next_header){            i= s->remaining_size;            s->remaining_size = 0;        }else{ //we need a header first            len=0;            for(i=s->remaining_size; i<buf_size; i++){                s->state = (s->state<<8) + buf[i];                if((len=s->sync(s->state, s, &s->need_next_header, &new_frame_start)))                    break;            }            if(len<=0){                i=END_NOT_FOUND;            }else{                i-= s->header_size -1;                s->remaining_size = len;                if(!new_frame_start){                    s->remaining_size += i;                    goto get_next;                }            }        }    }    if(ff_combine_frame(pc, i, &buf, &buf_size)<0){        s->remaining_size -= FFMIN(s->remaining_size, buf_size);        *poutbuf = NULL;        *poutbuf_size = 0;        return buf_size;    }    *poutbuf = buf;    *poutbuf_size = buf_size;    /* update codec info */    avctx->sample_rate = s->sample_rate;    /* allow downmixing to stereo (or mono for AC3) */    if(avctx->request_channels > 0 &&            avctx->request_channels < s->channels &&            (avctx->request_channels <= 2 ||            (avctx->request_channels == 1 &&            avctx->codec_id == CODEC_ID_AC3))) {        avctx->channels = avctx->request_channels;    } else {        avctx->channels = s->channels;    }    avctx->bit_rate = s->bit_rate;    avctx->frame_size = s->samples;    return i;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -