int iec958buf_fill_zero() { int zero_filled_cnt=0,i2s_status=0,write_ret=0; char zerobuf[2048]={0}; ioctl(dev_fd, AUDIO_SPDIF_GET_I2S_ENABLE_STATUS, &i2s_status); while((zero_filled_cnt<iec958_buffer_size) && i2s_status ) { write_ret=iec958_packed_frame_write_958buf(zerobuf,2048); if(write_ret) break; zero_filled_cnt+=2048; ioctl(dev_fd, AUDIO_SPDIF_GET_I2S_ENABLE_STATUS, &i2s_status); } return 0; }
int dts_transenc_process_frame() { int rv; if(write_success_flag) { rv=pcmenc_read_pcm(stream, input_size);//xujian if(rv==0)/* no enough pcm data in the buffer */ { //adec_print("=====read data failed :%d input_size:%d \n",rv,input_size); if(iec958_check_958buf_level() == 0){ adec_print("transenc:insert zero pcm data \n"); memset(stream,0,input_size);//insert zero pcm data when 958 hw buffer underrun } else{ usleep(1000); return -1; } } #ifdef DUMP_FILE FILE *fp1=fopen("/mnt/sda4/a.pcm","a+"); fwrite(stream,1,input_size,fp1); fclose(fp1); #endif rv = enc_ops.enc_encode(dts_transenc_info, stream, output, &output_size);//encode frame #ifdef DUMP_FILE FILE *fp2=fopen("/mnt/sda4/a.dts","a+"); fwrite(output,1,output_size,fp2); fclose(fp2); #endif rv = iec958_pack_frame(output, output_size); } rv = iec958_packed_frame_write_958buf(output, output_size); if(rv==-1){ write_success_flag=0; usleep(1000); } else write_success_flag=1; //adec_print("===pack frame write 958 ret:%d size:%d \n",rv,output_size); return 1; }