OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 13 matching lines...) Expand all Loading... |
24 | 24 |
25 void MediaFile::DestroyMediaFile(MediaFile* module) | 25 void MediaFile::DestroyMediaFile(MediaFile* module) |
26 { | 26 { |
27 delete static_cast<MediaFileImpl*>(module); | 27 delete static_cast<MediaFileImpl*>(module); |
28 } | 28 } |
29 | 29 |
30 MediaFileImpl::MediaFileImpl(const int32_t id) | 30 MediaFileImpl::MediaFileImpl(const int32_t id) |
31 : _id(id), | 31 : _id(id), |
32 _crit(CriticalSectionWrapper::CreateCriticalSection()), | 32 _crit(CriticalSectionWrapper::CreateCriticalSection()), |
33 _callbackCrit(CriticalSectionWrapper::CreateCriticalSection()), | 33 _callbackCrit(CriticalSectionWrapper::CreateCriticalSection()), |
34 _ptrFileUtilityObj(NULL), | 34 _ptrFileUtilityObj(nullptr), |
35 codec_info_(), | 35 codec_info_(), |
36 _ptrInStream(NULL), | 36 _ptrInStream(nullptr), |
37 _ptrOutStream(NULL), | 37 _ptrOutStream(nullptr), |
38 _fileFormat((FileFormats)-1), | 38 _fileFormat((FileFormats)-1), |
39 _recordDurationMs(0), | 39 _recordDurationMs(0), |
40 _playoutPositionMs(0), | 40 _playoutPositionMs(0), |
41 _notificationMs(0), | 41 _notificationMs(0), |
42 _playingActive(false), | 42 _playingActive(false), |
43 _recordingActive(false), | 43 _recordingActive(false), |
44 _isStereo(false), | 44 _isStereo(false), |
45 _openFile(false), | 45 _openFile(false), |
46 _fileName(), | 46 _fileName(), |
47 _ptrCallback(NULL) | 47 _ptrCallback(nullptr) { |
48 { | 48 WEBRTC_TRACE(kTraceMemory, kTraceFile, id, "Created"); |
49 WEBRTC_TRACE(kTraceMemory, kTraceFile, id, "Created"); | |
50 | 49 |
51 codec_info_.plname[0] = '\0'; | 50 codec_info_.plname[0] = '\0'; |
52 _fileName[0] = '\0'; | 51 _fileName[0] = '\0'; |
53 } | 52 } |
54 | 53 |
55 | 54 |
56 MediaFileImpl::~MediaFileImpl() | 55 MediaFileImpl::~MediaFileImpl() |
57 { | 56 { |
58 WEBRTC_TRACE(kTraceMemory, kTraceFile, _id, "~MediaFileImpl()"); | 57 WEBRTC_TRACE(kTraceMemory, kTraceFile, _id, "~MediaFileImpl()"); |
59 { | 58 { |
60 CriticalSectionScoped lock(_crit); | 59 CriticalSectionScoped lock(_crit); |
61 | 60 |
62 if(_playingActive) | 61 if(_playingActive) |
63 { | 62 { |
64 StopPlaying(); | 63 StopPlaying(); |
65 } | 64 } |
66 | 65 |
67 if(_recordingActive) | 66 if(_recordingActive) |
68 { | 67 { |
69 StopRecording(); | 68 StopRecording(); |
70 } | 69 } |
71 | 70 |
72 delete _ptrFileUtilityObj; | 71 delete _ptrFileUtilityObj; |
73 | 72 |
74 if(_openFile) | 73 if(_openFile) |
75 { | 74 { |
76 delete _ptrInStream; | 75 delete _ptrInStream; |
77 _ptrInStream = NULL; | 76 _ptrInStream = nullptr; |
78 delete _ptrOutStream; | 77 delete _ptrOutStream; |
79 _ptrOutStream = NULL; | 78 _ptrOutStream = nullptr; |
80 } | 79 } |
81 } | 80 } |
82 | 81 |
83 delete _crit; | 82 delete _crit; |
84 delete _callbackCrit; | 83 delete _callbackCrit; |
85 } | 84 } |
86 | 85 |
87 int64_t MediaFileImpl::TimeUntilNextProcess() | 86 int64_t MediaFileImpl::TimeUntilNextProcess() |
88 { | 87 { |
89 WEBRTC_TRACE( | 88 WEBRTC_TRACE( |
(...skipping 13 matching lines...) Expand all Loading... |
103 int32_t MediaFileImpl::PlayoutAudioData(int8_t* buffer, | 102 int32_t MediaFileImpl::PlayoutAudioData(int8_t* buffer, |
104 size_t& dataLengthInBytes) | 103 size_t& dataLengthInBytes) |
105 { | 104 { |
106 WEBRTC_TRACE(kTraceStream, kTraceFile, _id, | 105 WEBRTC_TRACE(kTraceStream, kTraceFile, _id, |
107 "MediaFileImpl::PlayoutData(buffer= 0x%x, bufLen= %" PRIuS ")", | 106 "MediaFileImpl::PlayoutData(buffer= 0x%x, bufLen= %" PRIuS ")", |
108 buffer, dataLengthInBytes); | 107 buffer, dataLengthInBytes); |
109 | 108 |
110 const size_t bufferLengthInBytes = dataLengthInBytes; | 109 const size_t bufferLengthInBytes = dataLengthInBytes; |
111 dataLengthInBytes = 0; | 110 dataLengthInBytes = 0; |
112 | 111 |
113 if(buffer == NULL || bufferLengthInBytes == 0) | 112 if (buffer == nullptr || bufferLengthInBytes == 0) { |
114 { | 113 WEBRTC_TRACE(kTraceError, kTraceFile, _id, |
115 WEBRTC_TRACE(kTraceError, kTraceFile, _id, | 114 "Buffer pointer or length is null!"); |
116 "Buffer pointer or length is NULL!"); | 115 return -1; |
117 return -1; | |
118 } | 116 } |
119 | 117 |
120 int32_t bytesRead = 0; | 118 int32_t bytesRead = 0; |
121 { | 119 { |
122 CriticalSectionScoped lock(_crit); | 120 CriticalSectionScoped lock(_crit); |
123 | 121 |
124 if(!_playingActive) | 122 if(!_playingActive) |
125 { | 123 { |
126 WEBRTC_TRACE(kTraceWarning, kTraceFile, _id, | 124 WEBRTC_TRACE(kTraceWarning, kTraceFile, _id, |
127 "Not currently playing!"); | 125 "Not currently playing!"); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 WEBRTC_TRACE(kTraceStream, kTraceFile, _id, | 233 WEBRTC_TRACE(kTraceStream, kTraceFile, _id, |
236 "MediaFileImpl::PlayoutStereoData(Left = 0x%x, Right = 0x%x," | 234 "MediaFileImpl::PlayoutStereoData(Left = 0x%x, Right = 0x%x," |
237 " Len= %" PRIuS ")", | 235 " Len= %" PRIuS ")", |
238 bufferLeft, | 236 bufferLeft, |
239 bufferRight, | 237 bufferRight, |
240 dataLengthInBytes); | 238 dataLengthInBytes); |
241 | 239 |
242 const size_t bufferLengthInBytes = dataLengthInBytes; | 240 const size_t bufferLengthInBytes = dataLengthInBytes; |
243 dataLengthInBytes = 0; | 241 dataLengthInBytes = 0; |
244 | 242 |
245 if(bufferLeft == NULL || bufferRight == NULL || bufferLengthInBytes == 0) | 243 if (bufferLeft == nullptr || bufferRight == nullptr || |
246 { | 244 bufferLengthInBytes == 0) { |
247 WEBRTC_TRACE(kTraceError, kTraceFile, _id, | 245 WEBRTC_TRACE(kTraceError, kTraceFile, _id, |
248 "A buffer pointer or the length is NULL!"); | 246 "A buffer pointer or the length is null!"); |
249 return -1; | 247 return -1; |
250 } | 248 } |
251 | 249 |
252 bool playEnded = false; | 250 bool playEnded = false; |
253 uint32_t callbackNotifyMs = 0; | 251 uint32_t callbackNotifyMs = 0; |
254 { | 252 { |
255 CriticalSectionScoped lock(_crit); | 253 CriticalSectionScoped lock(_crit); |
256 | 254 |
257 if(!_playingActive || !_isStereo) | 255 if(!_playingActive || !_isStereo) |
258 { | 256 { |
259 WEBRTC_TRACE(kTraceWarning, kTraceFile, _id, | 257 WEBRTC_TRACE(kTraceWarning, kTraceFile, _id, |
260 "Not currently playing stereo!"); | 258 "Not currently playing stereo!"); |
261 return -1; | 259 return -1; |
262 } | 260 } |
263 | 261 |
264 if(!_ptrFileUtilityObj) | 262 if(!_ptrFileUtilityObj) |
265 { | 263 { |
266 WEBRTC_TRACE( | 264 WEBRTC_TRACE(kTraceError, kTraceFile, _id, |
267 kTraceError, | 265 "Playing stereo, but the FileUtility objects is null!"); |
268 kTraceFile, | 266 StopPlaying(); |
269 _id, | 267 return -1; |
270 "Playing stereo, but the FileUtility objects is NULL!"); | |
271 StopPlaying(); | |
272 return -1; | |
273 } | 268 } |
274 | 269 |
275 // Stereo playout only supported for WAV files. | 270 // Stereo playout only supported for WAV files. |
276 int32_t bytesRead = 0; | 271 int32_t bytesRead = 0; |
277 switch(_fileFormat) | 272 switch(_fileFormat) |
278 { | 273 { |
279 case kFileFormatWavFile: | 274 case kFileFormatWavFile: |
280 bytesRead = _ptrFileUtilityObj->ReadWavDataAsStereo( | 275 bytesRead = _ptrFileUtilityObj->ReadWavDataAsStereo( |
281 *_ptrInStream, | 276 *_ptrInStream, |
282 bufferLeft, | 277 bufferLeft, |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
357 WEBRTC_TRACE( | 352 WEBRTC_TRACE( |
358 kTraceError, | 353 kTraceError, |
359 kTraceFile, | 354 kTraceFile, |
360 _id, | 355 _id, |
361 "specified notification time is longer than amount of ms that will\ | 356 "specified notification time is longer than amount of ms that will\ |
362 be played"); | 357 be played"); |
363 return -1; | 358 return -1; |
364 } | 359 } |
365 | 360 |
366 FileWrapper* inputStream = FileWrapper::Create(); | 361 FileWrapper* inputStream = FileWrapper::Create(); |
367 if(inputStream == NULL) | 362 if (inputStream == nullptr) { |
368 { | 363 WEBRTC_TRACE(kTraceMemory, kTraceFile, _id, |
369 WEBRTC_TRACE(kTraceMemory, kTraceFile, _id, | 364 "Failed to allocate input stream for file %s", fileName); |
370 "Failed to allocate input stream for file %s", fileName); | 365 return -1; |
371 return -1; | |
372 } | 366 } |
373 | 367 |
374 if (!inputStream->OpenFile(fileName, true)) { | 368 if (!inputStream->OpenFile(fileName, true)) { |
375 delete inputStream; | 369 delete inputStream; |
376 WEBRTC_TRACE(kTraceError, kTraceFile, _id, "Could not open input file %s", | 370 WEBRTC_TRACE(kTraceError, kTraceFile, _id, "Could not open input file %s", |
377 fileName); | 371 fileName); |
378 return -1; | 372 return -1; |
379 } | 373 } |
380 | 374 |
381 if(StartPlayingStream(*inputStream, loop, notificationTimeMs, | 375 if(StartPlayingStream(*inputStream, loop, notificationTimeMs, |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
429 { | 423 { |
430 WEBRTC_TRACE( | 424 WEBRTC_TRACE( |
431 kTraceError, | 425 kTraceError, |
432 kTraceFile, | 426 kTraceFile, |
433 _id, | 427 _id, |
434 "StartPlaying called, but already playing or recording file %s", | 428 "StartPlaying called, but already playing or recording file %s", |
435 (_fileName[0] == '\0') ? "(name not set)" : _fileName); | 429 (_fileName[0] == '\0') ? "(name not set)" : _fileName); |
436 return -1; | 430 return -1; |
437 } | 431 } |
438 | 432 |
439 if(_ptrFileUtilityObj != NULL) | 433 if (_ptrFileUtilityObj != nullptr) { |
440 { | 434 WEBRTC_TRACE(kTraceError, kTraceFile, _id, |
441 WEBRTC_TRACE(kTraceError, | 435 "StartPlaying called, but FileUtilityObj already exists!"); |
442 kTraceFile, | 436 StopPlaying(); |
443 _id, | 437 return -1; |
444 "StartPlaying called, but FileUtilityObj already exists!"); | |
445 StopPlaying(); | |
446 return -1; | |
447 } | 438 } |
448 | 439 |
449 _ptrFileUtilityObj = new ModuleFileUtility(_id); | 440 _ptrFileUtilityObj = new ModuleFileUtility(_id); |
450 if(_ptrFileUtilityObj == NULL) | 441 if (_ptrFileUtilityObj == nullptr) { |
451 { | 442 WEBRTC_TRACE(kTraceMemory, kTraceFile, _id, |
452 WEBRTC_TRACE(kTraceMemory, kTraceFile, _id, | 443 "Failed to create FileUtilityObj!"); |
453 "Failed to create FileUtilityObj!"); | 444 return -1; |
454 return -1; | |
455 } | 445 } |
456 | 446 |
457 switch(format) | 447 switch(format) |
458 { | 448 { |
459 case kFileFormatWavFile: | 449 case kFileFormatWavFile: |
460 { | 450 { |
461 if(_ptrFileUtilityObj->InitWavReading(stream, startPointMs, | 451 if(_ptrFileUtilityObj->InitWavReading(stream, startPointMs, |
462 stopPointMs) == -1) | 452 stopPointMs) == -1) |
463 { | 453 { |
464 WEBRTC_TRACE(kTraceError, kTraceFile, _id, | 454 WEBRTC_TRACE(kTraceError, kTraceFile, _id, |
(...skipping 15 matching lines...) Expand all Loading... |
480 return -1; | 470 return -1; |
481 } | 471 } |
482 _fileFormat = kFileFormatCompressedFile; | 472 _fileFormat = kFileFormatCompressedFile; |
483 break; | 473 break; |
484 } | 474 } |
485 case kFileFormatPcm8kHzFile: | 475 case kFileFormatPcm8kHzFile: |
486 case kFileFormatPcm16kHzFile: | 476 case kFileFormatPcm16kHzFile: |
487 case kFileFormatPcm32kHzFile: | 477 case kFileFormatPcm32kHzFile: |
488 { | 478 { |
489 // ValidFileFormat() called in the beginneing of this function | 479 // ValidFileFormat() called in the beginneing of this function |
490 // prevents codecInst from being NULL here. | 480 // prevents codecInst from being null here. |
491 assert(codecInst != NULL); | 481 assert(codecInst != nullptr); |
492 if(!ValidFrequency(codecInst->plfreq) || | 482 if(!ValidFrequency(codecInst->plfreq) || |
493 _ptrFileUtilityObj->InitPCMReading(stream, startPointMs, | 483 _ptrFileUtilityObj->InitPCMReading(stream, startPointMs, |
494 stopPointMs, | 484 stopPointMs, |
495 codecInst->plfreq) == -1) | 485 codecInst->plfreq) == -1) |
496 { | 486 { |
497 WEBRTC_TRACE(kTraceError, kTraceFile, _id, | 487 WEBRTC_TRACE(kTraceError, kTraceFile, _id, |
498 "Not a valid raw 8 or 16 KHz PCM file!"); | 488 "Not a valid raw 8 or 16 KHz PCM file!"); |
499 StopPlaying(); | 489 StopPlaying(); |
500 return -1; | 490 return -1; |
501 } | 491 } |
502 | 492 |
503 _fileFormat = format; | 493 _fileFormat = format; |
504 break; | 494 break; |
505 } | 495 } |
506 case kFileFormatPreencodedFile: | 496 case kFileFormatPreencodedFile: |
507 { | 497 { |
508 // ValidFileFormat() called in the beginneing of this function | 498 // ValidFileFormat() called in the beginneing of this function |
509 // prevents codecInst from being NULL here. | 499 // prevents codecInst from being null here. |
510 assert(codecInst != NULL); | 500 assert(codecInst != nullptr); |
511 if(_ptrFileUtilityObj->InitPreEncodedReading(stream, *codecInst) == | 501 if(_ptrFileUtilityObj->InitPreEncodedReading(stream, *codecInst) == |
512 -1) | 502 -1) |
513 { | 503 { |
514 WEBRTC_TRACE(kTraceError, kTraceFile, _id, | 504 WEBRTC_TRACE(kTraceError, kTraceFile, _id, |
515 "Not a valid PreEncoded file!"); | 505 "Not a valid PreEncoded file!"); |
516 StopPlaying(); | 506 StopPlaying(); |
517 return -1; | 507 return -1; |
518 } | 508 } |
519 | 509 |
520 _fileFormat = kFileFormatPreencodedFile; | 510 _fileFormat = kFileFormatPreencodedFile; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
553 } | 543 } |
554 | 544 |
555 int32_t MediaFileImpl::StopPlaying() | 545 int32_t MediaFileImpl::StopPlaying() |
556 { | 546 { |
557 | 547 |
558 CriticalSectionScoped lock(_crit); | 548 CriticalSectionScoped lock(_crit); |
559 _isStereo = false; | 549 _isStereo = false; |
560 if(_ptrFileUtilityObj) | 550 if(_ptrFileUtilityObj) |
561 { | 551 { |
562 delete _ptrFileUtilityObj; | 552 delete _ptrFileUtilityObj; |
563 _ptrFileUtilityObj = NULL; | 553 _ptrFileUtilityObj = nullptr; |
564 } | 554 } |
565 if(_ptrInStream) | 555 if(_ptrInStream) |
566 { | 556 { |
567 // If MediaFileImpl opened the InStream it must be reclaimed here. | 557 // If MediaFileImpl opened the InStream it must be reclaimed here. |
568 if(_openFile) | 558 if(_openFile) |
569 { | 559 { |
570 delete _ptrInStream; | 560 delete _ptrInStream; |
571 _openFile = false; | 561 _openFile = false; |
572 } | 562 } |
573 _ptrInStream = NULL; | 563 _ptrInStream = nullptr; |
574 } | 564 } |
575 | 565 |
576 codec_info_.pltype = 0; | 566 codec_info_.pltype = 0; |
577 codec_info_.plname[0] = '\0'; | 567 codec_info_.plname[0] = '\0'; |
578 | 568 |
579 if(!_playingActive) | 569 if(!_playingActive) |
580 { | 570 { |
581 WEBRTC_TRACE(kTraceWarning, kTraceFile, _id, | 571 WEBRTC_TRACE(kTraceWarning, kTraceFile, _id, |
582 "playing is not active!"); | 572 "playing is not active!"); |
583 return -1; | 573 return -1; |
(...skipping 11 matching lines...) Expand all Loading... |
595 } | 585 } |
596 | 586 |
597 int32_t MediaFileImpl::IncomingAudioData( | 587 int32_t MediaFileImpl::IncomingAudioData( |
598 const int8_t* buffer, | 588 const int8_t* buffer, |
599 const size_t bufferLengthInBytes) | 589 const size_t bufferLengthInBytes) |
600 { | 590 { |
601 WEBRTC_TRACE(kTraceStream, kTraceFile, _id, | 591 WEBRTC_TRACE(kTraceStream, kTraceFile, _id, |
602 "MediaFile::IncomingData(buffer= 0x%x, bufLen= %" PRIuS, | 592 "MediaFile::IncomingData(buffer= 0x%x, bufLen= %" PRIuS, |
603 buffer, bufferLengthInBytes); | 593 buffer, bufferLengthInBytes); |
604 | 594 |
605 if(buffer == NULL || bufferLengthInBytes == 0) | 595 if (buffer == nullptr || bufferLengthInBytes == 0) { |
606 { | 596 WEBRTC_TRACE(kTraceError, kTraceFile, _id, |
607 WEBRTC_TRACE(kTraceError, kTraceFile, _id, | 597 "Buffer pointer or length is null!"); |
608 "Buffer pointer or length is NULL!"); | 598 return -1; |
609 return -1; | |
610 } | 599 } |
611 | 600 |
612 bool recordingEnded = false; | 601 bool recordingEnded = false; |
613 uint32_t callbackNotifyMs = 0; | 602 uint32_t callbackNotifyMs = 0; |
614 { | 603 { |
615 CriticalSectionScoped lock(_crit); | 604 CriticalSectionScoped lock(_crit); |
616 | 605 |
617 if(!_recordingActive) | 606 if(!_recordingActive) |
618 { | 607 { |
619 WEBRTC_TRACE(kTraceWarning, kTraceFile, _id, | 608 WEBRTC_TRACE(kTraceWarning, kTraceFile, _id, |
620 "Not currently recording!"); | 609 "Not currently recording!"); |
621 return -1; | 610 return -1; |
622 } | 611 } |
623 if(_ptrOutStream == NULL) | 612 if (_ptrOutStream == nullptr) { |
624 { | 613 WEBRTC_TRACE(kTraceError, kTraceFile, _id, |
625 WEBRTC_TRACE(kTraceError, kTraceFile, _id, | 614 "Recording is active, but output stream is null!"); |
626 "Recording is active, but output stream is NULL!"); | 615 assert(false); |
627 assert(false); | 616 return -1; |
628 return -1; | |
629 } | 617 } |
630 | 618 |
631 int32_t bytesWritten = 0; | 619 int32_t bytesWritten = 0; |
632 uint32_t samplesWritten = codec_info_.pacsize; | 620 uint32_t samplesWritten = codec_info_.pacsize; |
633 if(_ptrFileUtilityObj) | 621 if(_ptrFileUtilityObj) |
634 { | 622 { |
635 switch(_fileFormat) | 623 switch(_fileFormat) |
636 { | 624 { |
637 case kFileFormatPcm8kHzFile: | 625 case kFileFormatPcm8kHzFile: |
638 case kFileFormatPcm16kHzFile: | 626 case kFileFormatPcm16kHzFile: |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
733 if(!ValidFileName(fileName)) | 721 if(!ValidFileName(fileName)) |
734 { | 722 { |
735 return -1; | 723 return -1; |
736 } | 724 } |
737 if(!ValidFileFormat(format,&codecInst)) | 725 if(!ValidFileFormat(format,&codecInst)) |
738 { | 726 { |
739 return -1; | 727 return -1; |
740 } | 728 } |
741 | 729 |
742 FileWrapper* outputStream = FileWrapper::Create(); | 730 FileWrapper* outputStream = FileWrapper::Create(); |
743 if(outputStream == NULL) | 731 if (outputStream == nullptr) { |
744 { | 732 WEBRTC_TRACE(kTraceMemory, kTraceFile, _id, |
745 WEBRTC_TRACE(kTraceMemory, kTraceFile, _id, | 733 "Failed to allocate memory for output stream"); |
746 "Failed to allocate memory for output stream"); | 734 return -1; |
747 return -1; | |
748 } | 735 } |
749 | 736 |
750 if (!outputStream->OpenFile(fileName, false)) { | 737 if (!outputStream->OpenFile(fileName, false)) { |
751 delete outputStream; | 738 delete outputStream; |
752 WEBRTC_TRACE(kTraceError, kTraceFile, _id, | 739 WEBRTC_TRACE(kTraceError, kTraceFile, _id, |
753 "Could not open output file '%s' for writing!", fileName); | 740 "Could not open output file '%s' for writing!", fileName); |
754 return -1; | 741 return -1; |
755 } | 742 } |
756 | 743 |
757 if(maxSizeBytes) | 744 if(maxSizeBytes) |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
791 { | 778 { |
792 WEBRTC_TRACE( | 779 WEBRTC_TRACE( |
793 kTraceError, | 780 kTraceError, |
794 kTraceFile, | 781 kTraceFile, |
795 _id, | 782 _id, |
796 "StartRecording called, but already recording or playing file %s!", | 783 "StartRecording called, but already recording or playing file %s!", |
797 _fileName); | 784 _fileName); |
798 return -1; | 785 return -1; |
799 } | 786 } |
800 | 787 |
801 if(_ptrFileUtilityObj != NULL) | 788 if (_ptrFileUtilityObj != nullptr) { |
802 { | 789 WEBRTC_TRACE(kTraceError, kTraceFile, _id, |
803 WEBRTC_TRACE( | 790 "StartRecording called, but fileUtilityObj already exists!"); |
804 kTraceError, | 791 StopRecording(); |
805 kTraceFile, | 792 return -1; |
806 _id, | |
807 "StartRecording called, but fileUtilityObj already exists!"); | |
808 StopRecording(); | |
809 return -1; | |
810 } | 793 } |
811 | 794 |
812 _ptrFileUtilityObj = new ModuleFileUtility(_id); | 795 _ptrFileUtilityObj = new ModuleFileUtility(_id); |
813 if(_ptrFileUtilityObj == NULL) | 796 if (_ptrFileUtilityObj == nullptr) { |
814 { | 797 WEBRTC_TRACE(kTraceMemory, kTraceFile, _id, |
815 WEBRTC_TRACE(kTraceMemory, kTraceFile, _id, | 798 "Cannot allocate fileUtilityObj!"); |
816 "Cannot allocate fileUtilityObj!"); | 799 return -1; |
817 return -1; | |
818 } | 800 } |
819 | 801 |
820 CodecInst tmpAudioCodec; | 802 CodecInst tmpAudioCodec; |
821 memcpy(&tmpAudioCodec, &codecInst, sizeof(CodecInst)); | 803 memcpy(&tmpAudioCodec, &codecInst, sizeof(CodecInst)); |
822 switch(format) | 804 switch(format) |
823 { | 805 { |
824 case kFileFormatWavFile: | 806 case kFileFormatWavFile: |
825 { | 807 { |
826 if(_ptrFileUtilityObj->InitWavWriting(stream, codecInst) == -1) | 808 if(_ptrFileUtilityObj->InitWavWriting(stream, codecInst) == -1) |
827 { | 809 { |
828 WEBRTC_TRACE(kTraceError, kTraceFile, _id, | 810 WEBRTC_TRACE(kTraceError, kTraceFile, _id, |
829 "Failed to initialize WAV file!"); | 811 "Failed to initialize WAV file!"); |
830 delete _ptrFileUtilityObj; | 812 delete _ptrFileUtilityObj; |
831 _ptrFileUtilityObj = NULL; | 813 _ptrFileUtilityObj = nullptr; |
832 return -1; | 814 return -1; |
833 } | 815 } |
834 _fileFormat = kFileFormatWavFile; | 816 _fileFormat = kFileFormatWavFile; |
835 break; | 817 break; |
836 } | 818 } |
837 case kFileFormatCompressedFile: | 819 case kFileFormatCompressedFile: |
838 { | 820 { |
839 // Write compression codec name at beginning of file | 821 // Write compression codec name at beginning of file |
840 if(_ptrFileUtilityObj->InitCompressedWriting(stream, codecInst) == | 822 if(_ptrFileUtilityObj->InitCompressedWriting(stream, codecInst) == |
841 -1) | 823 -1) |
842 { | 824 { |
843 WEBRTC_TRACE(kTraceError, kTraceFile, _id, | 825 WEBRTC_TRACE(kTraceError, kTraceFile, _id, |
844 "Failed to initialize Compressed file!"); | 826 "Failed to initialize Compressed file!"); |
845 delete _ptrFileUtilityObj; | 827 delete _ptrFileUtilityObj; |
846 _ptrFileUtilityObj = NULL; | 828 _ptrFileUtilityObj = nullptr; |
847 return -1; | 829 return -1; |
848 } | 830 } |
849 _fileFormat = kFileFormatCompressedFile; | 831 _fileFormat = kFileFormatCompressedFile; |
850 break; | 832 break; |
851 } | 833 } |
852 case kFileFormatPcm8kHzFile: | 834 case kFileFormatPcm8kHzFile: |
853 case kFileFormatPcm16kHzFile: | 835 case kFileFormatPcm16kHzFile: |
854 { | 836 { |
855 if(!ValidFrequency(codecInst.plfreq) || | 837 if(!ValidFrequency(codecInst.plfreq) || |
856 _ptrFileUtilityObj->InitPCMWriting(stream, codecInst.plfreq) == | 838 _ptrFileUtilityObj->InitPCMWriting(stream, codecInst.plfreq) == |
857 -1) | 839 -1) |
858 { | 840 { |
859 WEBRTC_TRACE(kTraceError, kTraceFile, _id, | 841 WEBRTC_TRACE(kTraceError, kTraceFile, _id, |
860 "Failed to initialize 8 or 16KHz PCM file!"); | 842 "Failed to initialize 8 or 16KHz PCM file!"); |
861 delete _ptrFileUtilityObj; | 843 delete _ptrFileUtilityObj; |
862 _ptrFileUtilityObj = NULL; | 844 _ptrFileUtilityObj = nullptr; |
863 return -1; | 845 return -1; |
864 } | 846 } |
865 _fileFormat = format; | 847 _fileFormat = format; |
866 break; | 848 break; |
867 } | 849 } |
868 case kFileFormatPreencodedFile: | 850 case kFileFormatPreencodedFile: |
869 { | 851 { |
870 if(_ptrFileUtilityObj->InitPreEncodedWriting(stream, codecInst) == | 852 if(_ptrFileUtilityObj->InitPreEncodedWriting(stream, codecInst) == |
871 -1) | 853 -1) |
872 { | 854 { |
873 WEBRTC_TRACE(kTraceError, kTraceFile, _id, | 855 WEBRTC_TRACE(kTraceError, kTraceFile, _id, |
874 "Failed to initialize Pre-Encoded file!"); | 856 "Failed to initialize Pre-Encoded file!"); |
875 delete _ptrFileUtilityObj; | 857 delete _ptrFileUtilityObj; |
876 _ptrFileUtilityObj = NULL; | 858 _ptrFileUtilityObj = nullptr; |
877 return -1; | 859 return -1; |
878 } | 860 } |
879 | 861 |
880 _fileFormat = kFileFormatPreencodedFile; | 862 _fileFormat = kFileFormatPreencodedFile; |
881 break; | 863 break; |
882 } | 864 } |
883 default: | 865 default: |
884 { | 866 { |
885 WEBRTC_TRACE(kTraceError, kTraceFile, _id, | 867 WEBRTC_TRACE(kTraceError, kTraceFile, _id, |
886 "Invalid file format %d specified!", format); | 868 "Invalid file format %d specified!", format); |
887 delete _ptrFileUtilityObj; | 869 delete _ptrFileUtilityObj; |
888 _ptrFileUtilityObj = NULL; | 870 _ptrFileUtilityObj = nullptr; |
889 return -1; | 871 return -1; |
890 } | 872 } |
891 } | 873 } |
892 _isStereo = (tmpAudioCodec.channels == 2); | 874 _isStereo = (tmpAudioCodec.channels == 2); |
893 if(_isStereo) | 875 if(_isStereo) |
894 { | 876 { |
895 if(_fileFormat != kFileFormatWavFile) | 877 if(_fileFormat != kFileFormatWavFile) |
896 { | 878 { |
897 WEBRTC_TRACE(kTraceWarning, kTraceFile, _id, | 879 WEBRTC_TRACE(kTraceWarning, kTraceFile, _id, |
898 "Stereo is only allowed for WAV files"); | 880 "Stereo is only allowed for WAV files"); |
(...skipping 27 matching lines...) Expand all Loading... |
926 CriticalSectionScoped lock(_crit); | 908 CriticalSectionScoped lock(_crit); |
927 if(!_recordingActive) | 909 if(!_recordingActive) |
928 { | 910 { |
929 WEBRTC_TRACE(kTraceWarning, kTraceFile, _id, | 911 WEBRTC_TRACE(kTraceWarning, kTraceFile, _id, |
930 "recording is not active!"); | 912 "recording is not active!"); |
931 return -1; | 913 return -1; |
932 } | 914 } |
933 | 915 |
934 _isStereo = false; | 916 _isStereo = false; |
935 | 917 |
936 if(_ptrFileUtilityObj != NULL) | 918 if (_ptrFileUtilityObj != nullptr) { |
937 { | 919 // Both AVI and WAV header has to be updated before closing the stream |
938 // Both AVI and WAV header has to be updated before closing the stream | 920 // because they contain size information. |
939 // because they contain size information. | 921 if ((_fileFormat == kFileFormatWavFile) && (_ptrOutStream != nullptr)) { |
940 if((_fileFormat == kFileFormatWavFile) && | 922 _ptrFileUtilityObj->UpdateWavHeader(*_ptrOutStream); |
941 (_ptrOutStream != NULL)) | 923 } |
942 { | 924 delete _ptrFileUtilityObj; |
943 _ptrFileUtilityObj->UpdateWavHeader(*_ptrOutStream); | 925 _ptrFileUtilityObj = nullptr; |
944 } | |
945 delete _ptrFileUtilityObj; | |
946 _ptrFileUtilityObj = NULL; | |
947 } | 926 } |
948 | 927 |
949 if(_ptrOutStream != NULL) | 928 if (_ptrOutStream != nullptr) { |
950 { | 929 // If MediaFileImpl opened the OutStream it must be reclaimed here. |
951 // If MediaFileImpl opened the OutStream it must be reclaimed here. | 930 if (_openFile) { |
952 if(_openFile) | 931 delete _ptrOutStream; |
953 { | 932 _openFile = false; |
954 delete _ptrOutStream; | 933 } |
955 _openFile = false; | 934 _ptrOutStream = nullptr; |
956 } | |
957 _ptrOutStream = NULL; | |
958 } | 935 } |
959 | 936 |
960 _recordingActive = false; | 937 _recordingActive = false; |
961 codec_info_.pltype = 0; | 938 codec_info_.pltype = 0; |
962 codec_info_.plname[0] = '\0'; | 939 codec_info_.plname[0] = '\0'; |
963 | 940 |
964 return 0; | 941 return 0; |
965 } | 942 } |
966 | 943 |
967 bool MediaFileImpl::IsRecording() | 944 bool MediaFileImpl::IsRecording() |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1009 if(!ValidFileName(fileName)) | 986 if(!ValidFileName(fileName)) |
1010 { | 987 { |
1011 return -1; | 988 return -1; |
1012 } | 989 } |
1013 if(!ValidFrequency(freqInHz)) | 990 if(!ValidFrequency(freqInHz)) |
1014 { | 991 { |
1015 return -1; | 992 return -1; |
1016 } | 993 } |
1017 | 994 |
1018 ModuleFileUtility* utilityObj = new ModuleFileUtility(_id); | 995 ModuleFileUtility* utilityObj = new ModuleFileUtility(_id); |
1019 if(utilityObj == NULL) | 996 if (utilityObj == nullptr) { |
1020 { | 997 WEBRTC_TRACE(kTraceError, kTraceFile, _id, |
1021 WEBRTC_TRACE(kTraceError, kTraceFile, _id, | 998 "failed to allocate utility object!"); |
1022 "failed to allocate utility object!"); | 999 return -1; |
1023 return -1; | |
1024 } | 1000 } |
1025 | 1001 |
1026 const int32_t duration = utilityObj->FileDurationMs(fileName, format, | 1002 const int32_t duration = utilityObj->FileDurationMs(fileName, format, |
1027 freqInHz); | 1003 freqInHz); |
1028 delete utilityObj; | 1004 delete utilityObj; |
1029 if(duration == -1) | 1005 if(duration == -1) |
1030 { | 1006 { |
1031 durationMs = 0; | 1007 durationMs = 0; |
1032 return -1; | 1008 return -1; |
1033 } | 1009 } |
(...skipping 30 matching lines...) Expand all Loading... |
1064 _playingActive ? "Playback" : "Recording"); | 1040 _playingActive ? "Playback" : "Recording"); |
1065 return -1; | 1041 return -1; |
1066 } | 1042 } |
1067 memcpy(&codecInst,&codec_info_,sizeof(CodecInst)); | 1043 memcpy(&codecInst,&codec_info_,sizeof(CodecInst)); |
1068 return 0; | 1044 return 0; |
1069 } | 1045 } |
1070 | 1046 |
1071 bool MediaFileImpl::ValidFileFormat(const FileFormats format, | 1047 bool MediaFileImpl::ValidFileFormat(const FileFormats format, |
1072 const CodecInst* codecInst) | 1048 const CodecInst* codecInst) |
1073 { | 1049 { |
1074 if(codecInst == NULL) | 1050 if (codecInst == nullptr) { |
1075 { | 1051 if (format == kFileFormatPreencodedFile || |
1076 if(format == kFileFormatPreencodedFile || | 1052 format == kFileFormatPcm8kHzFile || format == kFileFormatPcm16kHzFile || |
1077 format == kFileFormatPcm8kHzFile || | 1053 format == kFileFormatPcm32kHzFile) { |
1078 format == kFileFormatPcm16kHzFile || | 1054 WEBRTC_TRACE(kTraceError, kTraceFile, -1, |
1079 format == kFileFormatPcm32kHzFile) | 1055 "Codec info required for file format specified!"); |
1080 { | 1056 return false; |
1081 WEBRTC_TRACE(kTraceError, kTraceFile, -1, | 1057 } |
1082 "Codec info required for file format specified!"); | |
1083 return false; | |
1084 } | |
1085 } | 1058 } |
1086 return true; | 1059 return true; |
1087 } | 1060 } |
1088 | 1061 |
1089 bool MediaFileImpl::ValidFileName(const char* fileName) | 1062 bool MediaFileImpl::ValidFileName(const char* fileName) |
1090 { | 1063 { |
1091 if((fileName == NULL) ||(fileName[0] == '\0')) | 1064 if ((fileName == nullptr) || (fileName[0] == '\0')) { |
1092 { | 1065 WEBRTC_TRACE(kTraceError, kTraceFile, -1, "FileName not specified!"); |
1093 WEBRTC_TRACE(kTraceError, kTraceFile, -1, "FileName not specified!"); | 1066 return false; |
1094 return false; | |
1095 } | 1067 } |
1096 return true; | 1068 return true; |
1097 } | 1069 } |
1098 | 1070 |
1099 | 1071 |
1100 bool MediaFileImpl::ValidFilePositions(const uint32_t startPointMs, | 1072 bool MediaFileImpl::ValidFilePositions(const uint32_t startPointMs, |
1101 const uint32_t stopPointMs) | 1073 const uint32_t stopPointMs) |
1102 { | 1074 { |
1103 if(startPointMs == 0 && stopPointMs == 0) // Default values | 1075 if(startPointMs == 0 && stopPointMs == 0) // Default values |
1104 { | 1076 { |
(...skipping 18 matching lines...) Expand all Loading... |
1123 { | 1095 { |
1124 if((frequency == 8000) || (frequency == 16000)|| (frequency == 32000)) | 1096 if((frequency == 8000) || (frequency == 16000)|| (frequency == 32000)) |
1125 { | 1097 { |
1126 return true; | 1098 return true; |
1127 } | 1099 } |
1128 WEBRTC_TRACE(kTraceError, kTraceFile, -1, | 1100 WEBRTC_TRACE(kTraceError, kTraceFile, -1, |
1129 "Frequency should be 8000, 16000 or 32000 (Hz)"); | 1101 "Frequency should be 8000, 16000 or 32000 (Hz)"); |
1130 return false; | 1102 return false; |
1131 } | 1103 } |
1132 } // namespace webrtc | 1104 } // namespace webrtc |
OLD | NEW |