Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15531821
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类:

2009-07-13 20:44:06

:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://kware.blogbus.com/logs/30741670.html

1. 帧解码器接口的定义
   帧解码器负责实施解码一个 MPEG 音频帧
   回顾:当前该接口太薄,应该增加诸如说明输出缓冲、合成过滤以及其他可能的解码器对象等方法。
   public interface FrameDecoder {
     // 解码一帧 MPEG 音频
     public void decodeFrame();
   }

2. MP3 分层帧解码器的选择
   protected FrameDecoder retrieveDecoder(Header header, Bitstream stream, int layer)
   throws DecoderException {
     FrameDecoder decoder = null;                 // 帧解码器变量
     // 评论:允许通道输出选择类型(LEFT, RIGHT, BOTH, DOWNMIX)
     switch (layer) {                             // 每帧的层号不同,帧解码器就不同
     case 3:                                      // 对层 Layer III
       if (l3decoder==null) {                     // 如果L3层帧解码器没创建,
         l3decoder = new LayerIIIDecoder(stream,  //  就创建它
           header, filter1, filter2,              //  把流、头、过滤器、输出池、需要的通道数传给它
           output, OutputChannels.BOTH_CHANNELS);
       }
       decoder = l3decoder; break;                // 当前帧解码器就是它;退出;
     case 2:
       if (l2decoder==null) {                     // 如果L2层帧解码器没创建,
         l2decoder = new LayerIIDecoder();        //   就创建它
         l2decoder.create(stream, header, filter1, filter2, output, OutputChannels.BOTH_CHANNELS);
       }
       decoder = l2decoder; break;                // 当前帧解码器就是它;退出;
     case 1:
       if (l1decoder==null) {                     // 如果L1层帧解码器没创建,
         l1decoder = new LayerIDecoder();         //   就创建它
         l1decoder.create(stream, header, filter1, filter2, output, OutputChannels.BOTH_CHANNELS);
       }
       decoder = l1decoder; break;                // 当前帧解码器就是它;退出;
     }

     if (decoder==null)                           // 如果当前帧解码器没选上;抛出异常;
       throw newDecoderException(UNSUPPORTED_LAYER, null);

     return decoder;                              // 返回选择的帧解码器;
   }


收藏到:Del.icio.us
阅读(947) | 评论(0) | 转发(3) |
给主人留下些什么吧!~~