int quicktime_find_acodec(quicktime_audio_map_t *atrack) { int i; char *compressor = atrack->track->mdia.minf.stbl.stsd.table[0].format; int compression_id = atrack->track->mdia.minf.stbl.stsd.table[0].compression_id; quicktime_codec_t *codec_base = (quicktime_codec_t*)atrack->codec; int32_t compressor_int = *(int32_t*)compressor; if(!total_acodecs) register_acodecs(); for(i = 0; i < total_acodecs; i++) { quicktime_codectable_t *table = &acodecs[i]; table->init_acodec(atrack); // For writing and reading Quicktime if(quicktime_match_32(compressor, codec_base->fourcc)) return 0; else // For reading AVI, sometimes the fourcc is 0 and the compression_id is used instead. // Sometimes the compression_id is the fourcc. if((compressor[0] == 0 || compressor_int == codec_base->wav_id) && codec_base->wav_id == compression_id) { quicktime_copy_char32(compressor, codec_base->fourcc); return 0; } else { codec_base->delete_acodec(atrack); codec_base->priv = 0; } } return -1; }
int quicktime_stsd_init_hint(quicktime_t *file, quicktime_stsd_t *stsd, int maxPktSize, int timeScale) { quicktime_stsd_table_t *table; quicktime_stsd_init_table(stsd); table = &(stsd->table[0]); quicktime_copy_char32(table->format, "rtp "); table->version = 1; table->revision = 1; table->maxPktSize = maxPktSize; table->tims.timeScale = timeScale; return 0; }
int quicktime_stsd_init_audio(quicktime_t *file, quicktime_stsd_t *stsd, int channels, int sample_rate, int bits, char *compressor) { quicktime_stsd_table_t *table; quicktime_stsd_init_table(stsd); table = &(stsd->table[0]); quicktime_copy_char32(table->format, compressor); table->channels = channels; table->sample_size = bits; table->sample_rate = sample_rate; return 0; }
int quicktime_stsd_init_video(quicktime_t *file, quicktime_stsd_t *stsd, int frame_w, int frame_h, float frame_rate, char *compression) { quicktime_stsd_table_t *table; quicktime_stsd_init_table(stsd); table = &(stsd->table[0]); quicktime_copy_char32(table->format, compression); table->width = frame_w; table->height = frame_h; table->frames_per_sample = 1; table->depth = 24; table->ctab_id = 65535; return 0; }