Changeset 25444
- Timestamp:
- 05/10/08 21:07:01 (5 days ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
haiku/trunk/src/add-ons/media/plugins/mov_reader/libMOV/MOVFileReader.cpp
r18488 r25444 440 440 } 441 441 442 const AudioMetaData *MOVFileReader::AudioFormat(uint32 stream_index , size_t *size)442 const AudioMetaData *MOVFileReader::AudioFormat(uint32 stream_index) 443 443 { 444 444 if (IsAudio(stream_index)) { haiku/trunk/src/add-ons/media/plugins/mov_reader/libMOV/MOVFileReader.h
r13811 r25444 114 114 115 115 // Return all Audio Meta Data 116 const AudioMetaData *AudioFormat(uint32 stream_index , size_t *size = 0);116 const AudioMetaData *AudioFormat(uint32 stream_index); 117 117 // Return all Video Meta Data 118 118 const VideoMetaData *VideoFormat(uint32 stream_index); haiku/trunk/src/add-ons/media/plugins/mov_reader/mov_reader.cpp
r24471 r25444 253 253 format->u.raw_audio.buffer_size = stream_header->suggested_buffer_size; 254 254 } else { 255 255 256 description.family = B_QUICKTIME_FORMAT_FAMILY; 256 257 description.u.quicktime.codec = audio_format->compression; … … 279 280 format->u.encoded_audio.output.channel_count = audio_format->NoOfChannels; 280 281 break; 282 case AUDIO_IMA4: 283 281 284 default: 282 285 TRACE("OTHER\n"); … … 288 291 } 289 292 290 /* if (audio_format->compression == 0x0001) {291 // a raw PCM format292 description.family = B_BEOS_FORMAT_FAMILY;293 description.u.beos.format = B_BEOS_FORMAT_RAW_AUDIO;294 if (B_OK != formats.GetFormatFor(description, format))295 format->type = B_MEDIA_RAW_AUDIO;296 format->u.raw_audio.frame_rate = audio_format->SampleRate;297 format->u.raw_audio.channel_count = audio_format->NoOfChannels;298 if (audio_format->bits_per_sample <= 8)299 format->u.raw_audio.format = B_AUDIO_FORMAT_UINT8;300 else if (audio_format->bits_per_sample <= 16)301 format->u.raw_audio.format = B_AUDIO_FORMAT_INT16;302 else if (audio_format->bits_per_sample <= 24)303 format->u.raw_audio.format = B_AUDIO_FORMAT_INT24;304 else if (audio_format->bits_per_sample <= 32)305 format->u.raw_audio.format = B_AUDIO_FORMAT_INT32;306 else {307 ERROR("movReader::AllocateCookie: unhandled bits per sample %d\n", audio_format->bits_per_sample);308 return B_ERROR;309 }310 format->u.raw_audio.format |= B_AUDIO_FORMAT_CHANNEL_ORDER_WAVE;311 format->u.raw_audio.byte_order = B_MEDIA_BIG_ENDIAN;312 format->u.raw_audio.buffer_size = stream_header->suggested_buffer_size;313 } else {314 // some encoded format315 description.family = B_WAV_FORMAT_FAMILY;316 description.u.wav.codec = audio_format->compression;317 if (B_OK != formats.GetFormatFor(description, format))318 format->type = B_MEDIA_ENCODED_AUDIO;319 format->u.encoded_audio.bit_rate = 8 * audio_format->PacketSize;320 TRACE("bit_rate %.3f\n", format->u.encoded_audio.bit_rate);321 format->u.encoded_audio.output.frame_rate = audio_format->SampleRate;322 format->u.encoded_audio.output.channel_count = audio_format->NoOfChannels;323 }324 */325 293 // this doesn't seem to work (it's not even a fourcc) 326 294 format->user_data_type = B_CODEC_TYPE_INFO; 327 295 *(uint32 *)format->user_data = audio_format->compression; format->user_data[4] = 0; 328 296 329 // put the Audio struct, including extra data, into the format meta data. 330 size_t size; 331 const void *data = theFileReader->AudioFormat(cookie->stream, &size); 332 format->SetMetaData(data, size); 297 // Some codecs have additional setup data that they need, put it in metadata 298 size_t size = audio_format->VOLSize; 299 const void *data = audio_format->theVOL; 300 if (size > 0) { 301 format->SetMetaData(data, size); 302 } 333 303 334 304 #ifdef TRACE_MOV_READER … … 383 353 format->user_data_type = B_CODEC_TYPE_INFO; 384 354 *(uint32 *)format->user_data = description.u.quicktime.codec; format->user_data[4] = 0; 355 385 356 format->u.encoded_video.max_bit_rate = 8 * theFileReader->MovMainHeader()->max_bytes_per_sec; 386 357 format->u.encoded_video.avg_bit_rate = format->u.encoded_video.max_bit_rate / 2; // XXX fix this … … 392 363 format->u.encoded_video.output.pixel_width_aspect = 1; 393 364 format->u.encoded_video.output.pixel_height_aspect = 1; 394 // format->u.encoded_video.output.display.format = 0;395 365 format->u.encoded_video.output.display.line_width = theFileReader->MovMainHeader()->width; 396 366 format->u.encoded_video.output.display.line_count = cookie->line_count; … … 403 373 TRACE("field_rate %.3f\n", format->u.encoded_video.output.field_rate); 404 374 405 // S et the VOL406 if (video_format->VOLSize > 0) {407 TRACE("VOL SIZE %ld\n", video_format->VOLSize);408 size_t size = video_format->VOLSize;409 const void *data = video_format->theVOL;375 // Some decoders need additional metadata passed via a special Atom 376 size_t size = video_format->VOLSize; 377 const void *data = video_format->theVOL; 378 if (size > 0) { 379 TRACE("VOL SIZE %ld\n", size); 410 380 format->SetMetaData(data, size); 411 381 } … … 440 410 *duration = cookie->duration; 441 411 *format = cookie->format; 442 *infoBuffer = 0; 443 *infoSize = 0; 412 413 // Copy metadata to infoBuffer 414 if (theFileReader->IsVideo(cookie->stream)) { 415 const VideoMetaData *video_format = theFileReader->VideoFormat(cookie->stream); 416 *infoBuffer = video_format->theVOL; 417 *infoSize = video_format->VOLSize; 418 } else { 419 const AudioMetaData *audio_format = theFileReader->AudioFormat(cookie->stream); 420 *infoBuffer = audio_format->theVOL; 421 *infoSize = audio_format->VOLSize; 422 } 423 444 424 return B_OK; 445 425 }
