static int writeData(void* _call) { WriterAVCallData_t* call = (WriterAVCallData_t*) _call; ac3_printf(10, "\n"); unsigned char PesHeader[PES_MAX_HEADER_SIZE]; if (call == NULL) { ac3_err("call data is NULL...\n"); return 0; } ac3_printf(10, "AudioPts %lld\n", call->Pts); if ((call->data == NULL) || (call->len <= 0)) { ac3_err("parsing NULL Data. ignoring...\n"); return 0; } if (call->fd < 0) { ac3_err("file pointer < 0. ignoring ...\n"); return 0; } struct iovec iov[3]; iov[0].iov_base = PesHeader; iov[0].iov_len = InsertPesHeader (PesHeader, call->len, MPEG_AUDIO_PES_START_CODE, call->Pts, 0); //+ sizeof(AC3_SYNC_HEADER) //PesHeader[6] = 0x81; //PesHeader[7] = 0x80; //PesHeader[8] = 0x09; //iov[1].iov_base = AC3_SYNC_HEADER; //iov[1].iov_len = sizeof(AC3_SYNC_HEADER); iov[1].iov_base = call->data; iov[1].iov_len = call->len; ac3_printf(40, "PES HEADER LEN %d\n", iov[0].iov_len); return writev_with_retry(call->fd, iov, 2); }
static int writeData(void* _call) { WriterAVCallData_t* call = (WriterAVCallData_t*) _call; ac3_printf(10, "\n"); unsigned char PesHeader[PES_MAX_HEADER_SIZE]; if (call == NULL) { ac3_err("call data is NULL...\n"); return 0; } ac3_printf(10, "AudioPts %lld\n", call->Pts); if ((call->data == NULL) || (call->len <= 0)) { ac3_err("parsing NULL Data. ignoring...\n"); return 0; } if (call->fd < 0) { ac3_err("file pointer < 0. ignoring ...\n"); return 0; } int HeaderLength = InsertPesHeader (PesHeader, call->len, PRIVATE_STREAM_1_PES_START_CODE, call->Pts, 0); unsigned char* PacketStart = malloc(call->len + HeaderLength); memcpy (PacketStart, PesHeader, HeaderLength); memcpy (PacketStart + HeaderLength, call->data, call->len); int len = write(call->fd, PacketStart, call->len + HeaderLength); free(PacketStart); return len; }