Mercurial > mplayer.hg
comparison libao2/ao_mpegpes.c @ 30241:02b9c1a452e1
Add support for distinguishing between little- and big-endian SPDIF AC3
and converting between both.
author | reimar |
---|---|
date | Mon, 11 Jan 2010 20:27:52 +0000 |
parents | 2eff450157cd |
children | ce6171e05d55 |
comparison
equal
deleted
inserted
replaced
30240:1c55c7f6874b | 30241:02b9c1a452e1 |
---|---|
248 ao_data.channels=2; | 248 ao_data.channels=2; |
249 ao_data.outburst=2000; | 249 ao_data.outburst=2000; |
250 switch(format){ | 250 switch(format){ |
251 case AF_FORMAT_S16_BE: | 251 case AF_FORMAT_S16_BE: |
252 case AF_FORMAT_MPEG2: | 252 case AF_FORMAT_MPEG2: |
253 case AF_FORMAT_AC3: | 253 case AF_FORMAT_AC3_BE: |
254 ao_data.format=format; | 254 ao_data.format=format; |
255 break; | |
256 case AF_FORMAT_AC3_LE: | |
257 ao_data.format=AF_FORMAT_AC3_BE; | |
255 break; | 258 break; |
256 default: | 259 default: |
257 ao_data.format=AF_FORMAT_S16_BE; | 260 ao_data.format=AF_FORMAT_S16_BE; |
258 } | 261 } |
259 | 262 |
331 else { | 334 else { |
332 int i; | 335 int i; |
333 unsigned short *s=data; | 336 unsigned short *s=data; |
334 // if(len>2000) len=2000; | 337 // if(len>2000) len=2000; |
335 // printf("ao_mpegpes: len=%d \n",len); | 338 // printf("ao_mpegpes: len=%d \n",len); |
336 if(ao_data.format==AF_FORMAT_AC3) | |
337 for(i=0;i<len/2;i++) s[i]=(s[i]>>8)|(s[i]<<8); // le<->be | |
338 send_mpeg_lpcm_packet(data, len, 0xA0, ao_data.pts, freq_id, my_ao_write); | 339 send_mpeg_lpcm_packet(data, len, 0xA0, ao_data.pts, freq_id, my_ao_write); |
339 } | 340 } |
340 return len; | 341 return len; |
341 } | 342 } |
342 | 343 |