static int writeData(void* _call) { WriterAVCallData_t* call = (WriterAVCallData_t*) _call; unsigned char PesHeader[PES_MAX_HEADER_SIZE]; flac_printf(10, "\n"); if (call == NULL) { flac_err("call data is NULL...\n"); return 0; } flac_printf(10, "AudioPts %lld\n", call->Pts); if ((call->data == NULL) || (call->len <= 0)) { flac_err("parsing NULL Data. ignoring...\n"); return 0; } if (call->fd < 0) { flac_err("file pointer < 0. ignoring ...\n"); return 0; } int HeaderLength = InsertPesHeader (PesHeader, call->len , MPEG_AUDIO_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); flac_printf(10, "flac_Write-< len=%d\n", len); return len; }
static int writeData(void *_call) { WriterAVCallData_t *call = (WriterAVCallData_t *) _call; unsigned char PesHeader[PES_MAX_HEADER_SIZE]; flac_printf(10, "\n"); if (call == NULL) { flac_err("call data is NULL...\n"); return 0; } flac_printf(10, "AudioPts %lld\n", call->Pts); if ((call->data == NULL) || (call->len <= 0)) { flac_err("parsing NULL Data. ignoring...\n"); return 0; } if (call->fd < 0) { flac_err("file pointer < 0. ignoring ...\n"); return 0; } struct iovec iov[2]; iov[0].iov_base = PesHeader; iov[0].iov_len = InsertPesHeader(PesHeader, call->len , MPEG_AUDIO_PES_START_CODE, call->Pts, 0); iov[1].iov_base = call->data; iov[1].iov_len = call->len; int len = writev(call->fd, iov, 2); flac_printf(10, "flac_Write-< len=%d\n", len); return len; }
void hexdump(const char *filename, const FLAC__byte *buf, unsigned bytes, const char *indent) { unsigned i, left = bytes; const FLAC__byte *b = buf; for(i = 0; i < bytes; i += 16) { flac_printf("%s%s", filename? filename:"", filename? ":":""); printf("%s%08X: " "%02X %02X %02X %02X %02X %02X %02X %02X " "%02X %02X %02X %02X %02X %02X %02X %02X " "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", indent, i, left > 0? (unsigned char)b[ 0] : 0, left > 1? (unsigned char)b[ 1] : 0, left > 2? (unsigned char)b[ 2] : 0, left > 3? (unsigned char)b[ 3] : 0, left > 4? (unsigned char)b[ 4] : 0, left > 5? (unsigned char)b[ 5] : 0, left > 6? (unsigned char)b[ 6] : 0, left > 7? (unsigned char)b[ 7] : 0, left > 8? (unsigned char)b[ 8] : 0, left > 9? (unsigned char)b[ 9] : 0, left > 10? (unsigned char)b[10] : 0, left > 11? (unsigned char)b[11] : 0, left > 12? (unsigned char)b[12] : 0, left > 13? (unsigned char)b[13] : 0, left > 14? (unsigned char)b[14] : 0, left > 15? (unsigned char)b[15] : 0, (left > 0) ? (local_isprint(b[ 0]) ? b[ 0] : '.') : ' ', (left > 1) ? (local_isprint(b[ 1]) ? b[ 1] : '.') : ' ', (left > 2) ? (local_isprint(b[ 2]) ? b[ 2] : '.') : ' ', (left > 3) ? (local_isprint(b[ 3]) ? b[ 3] : '.') : ' ', (left > 4) ? (local_isprint(b[ 4]) ? b[ 4] : '.') : ' ', (left > 5) ? (local_isprint(b[ 5]) ? b[ 5] : '.') : ' ', (left > 6) ? (local_isprint(b[ 6]) ? b[ 6] : '.') : ' ', (left > 7) ? (local_isprint(b[ 7]) ? b[ 7] : '.') : ' ', (left > 8) ? (local_isprint(b[ 8]) ? b[ 8] : '.') : ' ', (left > 9) ? (local_isprint(b[ 9]) ? b[ 9] : '.') : ' ', (left > 10) ? (local_isprint(b[10]) ? b[10] : '.') : ' ', (left > 11) ? (local_isprint(b[11]) ? b[11] : '.') : ' ', (left > 12) ? (local_isprint(b[12]) ? b[12] : '.') : ' ', (left > 13) ? (local_isprint(b[13]) ? b[13] : '.') : ' ', (left > 14) ? (local_isprint(b[14]) ? b[14] : '.') : ' ', (left > 15) ? (local_isprint(b[15]) ? b[15] : '.') : ' ' ); left -= 16; b += 16; } }
FLAC__bool do_shorthand_operation__streaminfo(const char *filename, FLAC__bool prefix_with_filename, FLAC__Metadata_Chain *chain, const Operation *operation, FLAC__bool *needs_write) { unsigned i; FLAC__bool ok = true; FLAC__StreamMetadata *block; FLAC__Metadata_Iterator *iterator = FLAC__metadata_iterator_new(); if(0 == iterator) die("out of memory allocating iterator"); FLAC__metadata_iterator_init(iterator, chain); block = FLAC__metadata_iterator_get_block(iterator); FLAC__ASSERT(0 != block); FLAC__ASSERT(block->type == FLAC__METADATA_TYPE_STREAMINFO); if(prefix_with_filename) flac_printf("%s:", filename); switch(operation->type) { case OP__SHOW_MD5SUM: for(i = 0; i < 16; i++) printf("%02x", block->data.stream_info.md5sum[i]); printf("\n"); break; case OP__SHOW_MIN_BLOCKSIZE: printf("%u\n", block->data.stream_info.min_blocksize); break; case OP__SHOW_MAX_BLOCKSIZE: printf("%u\n", block->data.stream_info.max_blocksize); break; case OP__SHOW_MIN_FRAMESIZE: printf("%u\n", block->data.stream_info.min_framesize); break; case OP__SHOW_MAX_FRAMESIZE: printf("%u\n", block->data.stream_info.max_framesize); break; case OP__SHOW_SAMPLE_RATE: printf("%u\n", block->data.stream_info.sample_rate); break; case OP__SHOW_CHANNELS: printf("%u\n", block->data.stream_info.channels); break; case OP__SHOW_BPS: printf("%u\n", block->data.stream_info.bits_per_sample); break; case OP__SHOW_TOTAL_SAMPLES: printf("%" PRIu64 "\n", block->data.stream_info.total_samples); break; case OP__SET_MD5SUM: memcpy(block->data.stream_info.md5sum, operation->argument.streaminfo_md5.value, 16); *needs_write = true; break; case OP__SET_MIN_BLOCKSIZE: block->data.stream_info.min_blocksize = operation->argument.streaminfo_uint32.value; *needs_write = true; break; case OP__SET_MAX_BLOCKSIZE: block->data.stream_info.max_blocksize = operation->argument.streaminfo_uint32.value; *needs_write = true; break; case OP__SET_MIN_FRAMESIZE: block->data.stream_info.min_framesize = operation->argument.streaminfo_uint32.value; *needs_write = true; break; case OP__SET_MAX_FRAMESIZE: block->data.stream_info.max_framesize = operation->argument.streaminfo_uint32.value; *needs_write = true; break; case OP__SET_SAMPLE_RATE: block->data.stream_info.sample_rate = operation->argument.streaminfo_uint32.value; *needs_write = true; break; case OP__SET_CHANNELS: block->data.stream_info.channels = operation->argument.streaminfo_uint32.value; *needs_write = true; break; case OP__SET_BPS: block->data.stream_info.bits_per_sample = operation->argument.streaminfo_uint32.value; *needs_write = true; break; case OP__SET_TOTAL_SAMPLES: block->data.stream_info.total_samples = operation->argument.streaminfo_uint64.value; *needs_write = true; break; default: ok = false; FLAC__ASSERT(0); break; }; FLAC__metadata_iterator_delete(iterator); return ok; }