// plays 'len' bytes of 'data' // it should round it down to outburst*n // return: number of bytes played static int play(void* data,int len,int flags){ // printf("\nao_mpegpes: play(%d) freq=%d\n",len,freq_id); if(ao_data.format==AF_FORMAT_MPEG2) send_mpeg_pes_packet (data, len, 0x1C0, ao_data.pts, 1, my_ao_write); else { // if(len>2000) len=2000; // printf("ao_mpegpes: len=%d \n",len); send_mpeg_lpcm_packet(data, len, 0xA0, ao_data.pts, freq_id, my_ao_write); } return len; }
// plays 'len' bytes of 'data' // it should round it down to outburst*n // return: number of bytes played static int play(void* data,int len,int flags){ // printf("\nao_mpegpes: play(%d) freq=%d\n",len,freq_id); if(ao_data.format==AF_FORMAT_MPEG2) send_mpeg_pes_packet (data, len, 0x1C0, ao_data.pts, 1, my_ao_write); else { int i; unsigned short *s=data; // if(len>2000) len=2000; // printf("ao_mpegpes: len=%d \n",len); if(ao_data.format==AF_FORMAT_S16_LE || ao_data.format==AF_FORMAT_AC3) for(i=0;i<len/2;i++) s[i]=(s[i]>>8)|(s[i]<<8); // le<->be send_mpeg_lpcm_packet(data, len, 0xA0, ao_data.pts, freq_id, my_ao_write); } return len; }
static void dxr2_send_lpcm_packet(unsigned char* data,int len,int id,unsigned int timestamp,int freq_id) { extern int write_dxr2(unsigned char *data, int len); if(dxr2_fd < 0) { mp_msg(MSGT_AO,MSGL_ERR,"DXR2 fd is not valid\n"); return; } if(last_freq_id != freq_id) { ioctl(dxr2_fd, DXR2_IOC_SET_AUDIO_SAMPLE_FREQUENCY, &freq_id); last_freq_id = freq_id; } send_mpeg_lpcm_packet (data, len, id, timestamp, freq_id, write_dxr2); }
void send_lpcm_packet(unsigned char* data,int len,int id,unsigned int timestamp,int freq_id){ send_mpeg_lpcm_packet(data, len, id, timestamp, freq_id, my_write); }