亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mpeg.c

?? 本程序為ST公司開發(fā)的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 * $Copyright: 
 * ----------------------------------------------------------------
 * This confidential and proprietary software may be used only as
 * authorised by a licensing agreement from Optomech, Co., Ltd.
 *   (C) COPYRIGHT 2006 Optomech, Co., Ltd.
 *       ALL RIGHTS RESERVED
 * The entire notice above must be reproduced on all authorised
 * copies and copies may only be made to the extent permitted
 * by a licensing agreement from Optomech, Co., Ltd..
 * ----------------------------------------------------------------
 * File:     mpeg.c,v
 * Revision: 1.0
 * ----------------------------------------------------------------
 * $
 *
 * Implementation of mpeg demuxer
 */

#include "gendef.h"

#if (0 != HAVE_AAC)

#include "xfile.h"
#include "constants.h"
#include "storage.h"
#include "mpeg.h"

#define MP4_INVALID_AUDIO_TYPE			0x00
#define MP4_MPEG4_AUDIO_TYPE			0x40
#define MP4_MPEG2_AAC_MAIN_AUDIO_TYPE	0x66
#define MP4_MPEG2_AAC_LC_AUDIO_TYPE		0x67
#define MP4_MPEG2_AAC_SSR_AUDIO_TYPE	0x68
#define MP4_MPEG2_AAC_AUDIO_TYPE		MP4_MPEG2_AAC_MAIN_AUDIO_TYPE

#define AAC_Decoder ((tAAC_Decoder *) handle)

#define MP4_IS_MPEG2_AAC_AUDIO_TYPE(type) \
	(((type) >= MP4_MPEG2_AAC_MAIN_AUDIO_TYPE \
		&& (type) <= MP4_MPEG2_AAC_SSR_AUDIO_TYPE))

#define MP4_GET_UINT(p)     (((p)[0]<<24)|((p)[1]<<16)|((p)[2]<<8)|(p)[3])

#define MP4_INDEX           ((tMpegIndex*)buf)

#define AAC_CHANNEL_BUFFER_SIZE (6144>>3)  // 6144 bits per channel

static const char iDemux_DefaultSpeakers[9][4] =
{
    { 0,0,0,0 },
    { 1,0,0,0 },
    { 2,0,0,0 },
    { 3,0,0,0 },
    { 3,0,1,0 },
    { 3,0,2,0 },
    { 3,0,2,1 },
    { 5,0,2,0 },
    { 5,0,2,1 }
};  // from demux.c

static void iDemux_AssignDefaultPositions(oDecoderHandle handle, int nChans)
{
  if (0 == nChans)  // if CC == 0
  {
    nChans = 2;   // suppose!
  }
  AAC_Decoder->Hdr_NumberOfChannels = (char) nChans;

  if (nChans<=8)
  {
    const char *speakers = iDemux_DefaultSpeakers[nChans];

    AAC_Decoder->Hdr_NumberOfFrontChannels = speakers[0];
    AAC_Decoder->Hdr_NumberOfSideChannels  = speakers[1];
    AAC_Decoder->Hdr_NumberOfBackChannels  = speakers[2];
    AAC_Decoder->Hdr_NumberOfLFEChannels   = speakers[3];
  }
  else
  {
    AAC_Decoder->Hdr_NumberOfFrontChannels = (char) nChans;
    AAC_Decoder->Hdr_NumberOfSideChannels  = 0;
    AAC_Decoder->Hdr_NumberOfBackChannels  = 0;
    AAC_Decoder->Hdr_NumberOfLFEChannels   = 0;
  }
}

eDecoderStatus mpeg_find_tag(unsigned int tag, char** ppos, unsigned int* psize)
{
    char target;
    char* pos;
    char* max;
    if(*psize < sizeof(unsigned int))
    {
        return kDecoderStatus_Error;
    }

    target = (char)(0xFF & (tag >> 24));
    pos = *ppos;
    max = pos + (*psize - 3);
    while(pos < max)
    {
        if(*pos == target)
        {
            if(tag == MPEG_GET_TAG(pos))
            {
                pos -= 4;
                *ppos = pos;
                *psize = MPEG_MAKE_SIZE(pos);
                if((max + 3) < (pos + (*psize)))
                {
                    return kDecoderStatus_MoreData;
                }
                return kDecoderStatus_NoError;
            }
        }
        pos ++;
    }
    return kDecoderStatus_Error;
}

eDecoderStatus mpeg_decode_esds(char* pos, unsigned int size, sMpegEsds* pesds)
{
    unsigned char value;
    unsigned char len;
    
    if(0x2C > size)
    {
        return kDecoderStatus_Fatal_BadBitstream;
    }

    value = (unsigned char)pos[0x19];
    len = (unsigned char)pos[0x2A];
    if(MP4_IS_MPEG2_AAC_AUDIO_TYPE(value))
    {
        pesds->Profile = value - MP4_MPEG2_AAC_MAIN_AUDIO_TYPE;
    }
    else if(MP4_MPEG4_AUDIO_TYPE == value)
    {
        if(1 > len)
        {
            return kDecoderStatus_Fatal_BadBitstream;
        }
        pesds->Profile = (pos[0x2B] >> 3) - 1;
    }
    else
    {
        return kDecoderStatus_Fatal_BadBitstream;
    }
    if(0x01 != pesds->Profile)
    {
        return kDecoderStatus_Fatal_UnsupportedFeature;
    }

    if(2 > len)
    {
        /* Ignore case for a while */
        return kDecoderStatus_Fatal_BadBitstream;
    }
    else
    {
        value = ((pos[0x2B] << 1) | (pos[0x2C] >> 7)) & 0x0F;
        /* Ignore 0x0F case for a while */
        if(eAAC_InvalidFrequency <= value)
        {
            return kDecoderStatus_Fatal_BadBitstream;
        }
        else
        {
            pesds->Frequency = (tAAC_Frequency)value;
            pesds->Channel = 0x0F & (pos[0x2C] >> 3);
            if(7 == pesds->Channel)
            {
                pesds->Channel = 8;
            }
        }
    }

    pesds->BitRate = MP4_GET_UINT(pos + 0x22);

    return kDecoderStatus_NoError;
}

eDecoderStatus mpeg_decode_stsc(char* pos, unsigned int size, void* buf)
{
    if(0x1C > size)
    {
        return kDecoderStatus_Fatal_BadBitstream;
    }

//    if(1 != MP4_GET_UINT(pos + 0x0C))   // entry count
//    {
//        return kDecoderStatus_Fatal_BadBitstream;
//    }
    if(1 != MP4_GET_UINT(pos + 0x10))   // 1st chuck
    {
        return kDecoderStatus_Fatal_BadBitstream;
    }
//    if(1 != MP4_GET_UINT(pos + 0x18))   // 1st sample
//    {
//        return kDecoderStatus_Fatal_BadBitstream;
//    }

    MP4_INDEX->framePerChunk = MP4_GET_UINT(pos + 0x14);
    if(0 == MP4_INDEX->framePerChunk)
    {
        return kDecoderStatus_Fatal_BadBitstream;
    }
    MP4_INDEX->chunkMax = (MP4_INDEX->size - sizeof(tMpegIndex) - sizeof(tFrame) - sizeof(tChunk))
                        / ((MP4_INDEX->framePerChunk * sizeof(tFrame)) + sizeof(tChunk));
    MP4_INDEX->frameMax = MP4_INDEX->framePerChunk * MP4_INDEX->chunkMax;
    MP4_INDEX->chunkCount = 0;
    MP4_INDEX->frameCount = 0;
    MP4_INDEX->chunk = (tChunk*)(MP4_INDEX + 1);
    MP4_INDEX->frame = (tFrame*)(MP4_INDEX->chunk + MP4_INDEX->chunkMax + 1);

    return kDecoderStatus_NoError;
}

eDecoderStatus mpeg_decode_stsz(char** ppos, unsigned int* psize, void* buf)
{
    unsigned int count;

    if(0x14 > *psize)
    {
        return kDecoderStatus_MoreData;
    }

    count = MP4_GET_UINT(*ppos + 0x10);
    if(count < MP4_INDEX->frameMax)
    {
        MP4_INDEX->frameMax = count;
    }
    *ppos += 0x14;
    *psize -= 0x14;
    
    return kDecoderStatus_NoError;
}

eDecoderStatus mpeg_read_stsz(char** ppos, unsigned int size, void* buf)
{
    tFrame* out;
    char* read;
    char* end;

    size >>= 2;
    if((MP4_INDEX->frameCount + size) > MP4_INDEX->frameMax)
    {
        size = MP4_INDEX->frameMax - MP4_INDEX->frameCount;
    }

    read = *ppos;
    end = read + (size << 2);
    out = MP4_INDEX->frame + MP4_INDEX->frameCount;
    while(read < end)
    {
        *out ++ = ((read[2] << 8) | read[3]);
        read += 4;
    }
    *out = 0;
    MP4_INDEX->frameCount += size;
    *ppos = read;

    return (MP4_INDEX->frameMax > MP4_INDEX->frameCount) ? kDecoderStatus_MoreData
                                                         : kDecoderStatus_NoError;
}

eDecoderStatus mpeg_decode_stco(char** ppos, unsigned int* psize, void* buf)
{
    unsigned int count;

    if(0x10 > *psize)
    {
        return kDecoderStatus_MoreData;
    }

    count = MP4_GET_UINT(*ppos + 0x0C);
    if(count < MP4_INDEX->chunkMax)
    {
        MP4_INDEX->chunkMax = count;
    }
    *ppos += 0x10;
    *psize -= 0x10;

    return kDecoderStatus_NoError;
}

eDecoderStatus mpeg_read_stco(char** ppos, unsigned int size, void* buf)
{
    tChunk* out;
    char* read;
    char* end;

    size >>= 2;
    if((MP4_INDEX->chunkCount + size) > MP4_INDEX->chunkMax)
    {
        size = MP4_INDEX->chunkMax - MP4_INDEX->chunkCount;
    }

    read = *ppos;
    end = read + (size << 2);
    out = MP4_INDEX->chunk + MP4_INDEX->chunkCount;
    while(read < end)
    {
        *out ++ = MPEG_MAKE_SIZE(read);
        read += 4;
    }
    *out = 0;
    MP4_INDEX->chunkCount += size;
    *ppos = read;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情五月激情综合网| 色吧成人激情小说| 经典三级一区二区| 91视视频在线直接观看在线看网页在线看| 欧美日韩一二三| 国产喂奶挤奶一区二区三区| 婷婷激情综合网| 色哟哟国产精品| 国产精品色哟哟网站| 狠狠色综合日日| 日韩丝袜情趣美女图片| 亚洲第一福利视频在线| 成人18精品视频| 国产无人区一区二区三区| 国产成人午夜99999| 久久亚洲综合色一区二区三区| 91精品欧美久久久久久动漫| 国产亚洲成年网址在线观看| 91免费观看视频在线| 亚洲成人一区在线| www国产精品av| 91在线视频观看| 亚洲特黄一级片| 色综合视频一区二区三区高清| 日韩欧美高清一区| 奇米综合一区二区三区精品视频 | 99久久久精品| 亚洲国产视频在线| 欧美亚洲国产怡红院影院| 国产精品久久影院| 成人激情黄色小说| 一个色在线综合| 欧美日韩一级片在线观看| 久草这里只有精品视频| 亚洲日本在线看| 精品国产一区二区精华| 国产在线视视频有精品| 亚洲精品中文字幕乱码三区| 在线观看日韩一区| 石原莉奈在线亚洲三区| 日韩限制级电影在线观看| www.欧美.com| 亚洲国产美女搞黄色| 欧美经典一区二区| 蜜桃精品在线观看| 久久久久久久久久久电影| 从欧美一区二区三区| 亚洲欧美日韩中文播放| 欧美性三三影院| 成人av资源下载| 久久国产夜色精品鲁鲁99| 国产亚洲欧美色| 91精品国产综合久久久久| 91在线视频网址| 成人精品免费视频| 久久99久国产精品黄毛片色诱| 欧美一级二级三级乱码| 欧美午夜精品免费| 91首页免费视频| 福利一区在线观看| 亚洲在线一区二区三区| 精品国产91洋老外米糕| 欧美一三区三区四区免费在线看| 亚洲免费观看高清完整版在线观看熊| 国产风韵犹存在线视精品| 美女网站一区二区| 国产色91在线| 久久蜜臀精品av| 精品视频全国免费看| 亚洲激情自拍视频| 中文字幕乱码日本亚洲一区二区| 亚洲h在线观看| 中文字幕一区二区视频| 成人午夜视频在线观看| 久草中文综合在线| 毛片av一区二区| 麻豆国产精品官网| 喷水一区二区三区| 日韩不卡一区二区三区| 中文字幕亚洲不卡| 国产欧美精品一区aⅴ影院| 久久久国产精品麻豆| 国产性色一区二区| 国产精品私人影院| 国产精品三级av| 中文字幕在线观看不卡| 日韩一区在线免费观看| 亚洲免费观看高清完整版在线观看熊| 欧美日韩精品福利| 北岛玲一区二区三区四区| 国产精品99久久久| 毛片一区二区三区| 国产曰批免费观看久久久| 亚洲高清中文字幕| 丝袜美腿亚洲色图| 日韩va亚洲va欧美va久久| 蜜臀a∨国产成人精品| 国产又黄又大久久| 成人精品小蝌蚪| 在线精品视频免费观看| 91精品欧美久久久久久动漫 | 一区二区三区在线免费| 亚洲男人天堂av网| www.日韩精品| 91黄色激情网站| 欧美日韩国产高清一区二区| 日韩视频免费观看高清在线视频| 国产精品2024| 色域天天综合网| 欧美日精品一区视频| 日韩欧美区一区二| 中文字幕一区在线| 婷婷亚洲久悠悠色悠在线播放| 日韩美女视频一区| 日韩精品免费专区| 国产乱码精品一品二品| 91久久精品一区二区三区| 欧美电影免费观看高清完整版在线 | 亚洲一二三四区不卡| 欧美aⅴ一区二区三区视频| 国产69精品久久99不卡| 91亚洲大成网污www| 欧美一区二区久久久| 国产欧美日韩不卡| 午夜精品久久久久久久久久| 国产98色在线|日韩| 欧美视频一区在线| 热久久久久久久| 成人午夜短视频| 91麻豆精品国产91久久久使用方法| 92国产精品观看| 日韩一区二区在线观看| 亚洲欧美日韩人成在线播放| 久久国产福利国产秒拍| 色成年激情久久综合| www久久久久| 日韩有码一区二区三区| 一本色道久久综合狠狠躁的推荐 | 亚洲成人综合网站| 成人综合激情网| 欧美不卡一区二区| 久久久久久免费| 午夜精品久久久久久久| 91在线国产福利| 久久精品夜色噜噜亚洲aⅴ| 天堂成人免费av电影一区| 国产成a人无v码亚洲福利| 欧美mv日韩mv国产| 日韩在线a电影| 91精彩视频在线观看| 国产精品免费免费| 极品少妇xxxx偷拍精品少妇| 在线不卡欧美精品一区二区三区| 色综合天天综合狠狠| 99在线精品免费| 国产视频一区二区在线| 精品一区二区在线视频| 欧美一区二区三区思思人| 亚洲香肠在线观看| 欧美专区日韩专区| 亚洲人吸女人奶水| 99久久国产综合精品麻豆| 国产欧美日韩视频一区二区| 久久精品999| 亚洲精品在线电影| 久久99热国产| 欧美精品一区二区久久久| 欧美日韩一区小说| 亚洲欧美一区二区三区国产精品 | 国产欧美一区视频| 精品无人区卡一卡二卡三乱码免费卡| 国产福利不卡视频| xvideos.蜜桃一区二区| 久久99国产精品久久99果冻传媒| 成人av网站在线| 中文字幕中文乱码欧美一区二区| 夜夜爽夜夜爽精品视频| 在线观看国产精品网站| 亚洲成人中文在线| 在线不卡免费av| 国产在线视频一区二区三区| 精品国产乱子伦一区| 国产美女精品在线| 国产精品天干天干在观线| 一本色道久久加勒比精品| 亚洲中国最大av网站| 欧美福利一区二区| 久久国产综合精品| 国产精品乱人伦中文| 色综合久久综合中文综合网| 亚洲国产日韩a在线播放| 欧美一区二区大片| 风间由美中文字幕在线看视频国产欧美 | 麻豆精品视频在线观看免费| 日韩欧美国产综合在线一区二区三区 | 国内不卡的二区三区中文字幕| 在线观看一区二区视频| 亚洲福利一二三区| 精品福利在线导航| 99视频热这里只有精品免费|