|
1
|
1 #include "StdAfx.h"
|
|
|
2 #include "packet_decoder_mp3_common.h"
|
|
|
3 #include "mp3_utils.h"
|
|
|
4
|
|
|
5 unsigned packet_decoder_mp3_common::parseDecoderSetup( const GUID & p_owner,t_size p_param1,const void * p_param2,t_size p_param2size )
|
|
|
6 {
|
|
|
7 if (p_owner == owner_MP3) return 3;
|
|
|
8 else if (p_owner == owner_MP2) return 2;
|
|
|
9 else if (p_owner == owner_MP1) return 1;
|
|
|
10 else if (p_owner == owner_MP4)
|
|
|
11 {
|
|
|
12 switch(p_param1)
|
|
|
13 {
|
|
|
14 case 0x6B:
|
|
|
15 return 3;
|
|
|
16 break;
|
|
|
17 case 0x69:
|
|
|
18 return 3;
|
|
|
19 break;
|
|
|
20 default:
|
|
|
21 return 0;
|
|
|
22 }
|
|
|
23 }
|
|
|
24 else if (p_owner == owner_matroska)
|
|
|
25 {
|
|
|
26 if (p_param2size==sizeof(matroska_setup))
|
|
|
27 {
|
|
|
28 const matroska_setup * setup = (const matroska_setup*) p_param2;
|
|
|
29 if (!strcmp(setup->codec_id,"A_MPEG/L3")) return 3;
|
|
|
30 else if (!strcmp(setup->codec_id,"A_MPEG/L2")) return 2;
|
|
|
31 else if (!strcmp(setup->codec_id,"A_MPEG/L1")) return 1;
|
|
|
32 else return 0;
|
|
|
33 }
|
|
|
34 else return 0;
|
|
|
35 }
|
|
|
36 else return 0;
|
|
|
37 }
|
|
|
38
|
|
|
39 unsigned packet_decoder_mp3_common::layer_from_frame(const void * frame, size_t size) {
|
|
|
40 using namespace mp3_utils;
|
|
|
41 TMPEGFrameInfo info;
|
|
|
42 if (!ParseMPEGFrameHeader(info, frame, size)) throw exception_io_data();
|
|
|
43 return info.m_layer;
|
|
|
44 }
|