// Instantiate a frame and metadata utility object. void MetadataDriver::handleCreate() { LOGV("handleCreate"); int error = 0; OSCL_HeapString<OsclMemAllocator> outputFrameTypeString; GetFormatString(PVMF_YUV420, outputFrameTypeString); OSCL_TRY(error, mUtil = PVFrameAndMetadataFactory::CreateFrameAndMetadataUtility(outputFrameTypeString.get_str(), this, this, this)); if (error || mUtil->SetMode(PV_FRAME_METADATA_INTERFACE_MODE_SOURCE_METADATA_AND_THUMBNAIL) != PVMFSuccess) { handleCommandFailure(); } else { mState = STATE_ADD_DATA_SOURCE; RunIfNotReady(); } }
//============================================================================== // InitializeReporting PUBLIC STATIC //============================================================================== // OSCL_EXPORT_REF void UT::CM::InitializeReporting ( const char* a_pszTestname, OSCL_HeapString<OsclMemAllocator>& a_filename, FILE* a_pFileStreamParent, FILE*& a_pFileStreamChild ) { a_pFileStreamChild = a_pFileStreamParent; if (0 == a_pszTestname || 0 >= a_filename.get_size() || 0 == a_pFileStreamParent) return; Oscl_FileServer fs; fs.Connect(); Oscl_File f; if (0 == f.Open(a_filename.get_cstr(), Oscl_File::MODE_READWRITE | Oscl_File::MODE_TEXT, fs)) { _STRING xfr = xml_test_interpreter::unexpected_termination_interpretation(a_pszTestname); f.Write(xfr.c_str(), sizeof(char), oscl_strlen(xfr.c_str())); f.Close(); } else { fprintf(a_pFileStreamParent, "ERROR: Failed to open XML test summary log file (%s).\n", a_filename.get_cstr()); } fs.Close(); OSCL_HeapString<OsclMemAllocator> outFilename(a_filename); outFilename += ".out"; // open a new stream to file and return it to client a_pFileStreamChild = fopen(outFilename.get_cstr(), "w"); }
// How to better manage these constant strings? bool MetadataDriver::containsSupportedKey(const OSCL_HeapString<OsclMemAllocator>& str) const { LOGV("containsSupportedKey"); const char* cStr = str.get_cstr(); for (uint32 i = 0; i < NUM_METADATA_KEYS; ++i) { if (strcasestr(cStr, METADATA_KEYS[i])) { return true; } } // Key "graphic" is a special metadata key for retrieving album art image. if (strcasestr(cStr, "graphic")) { return true; } return false; }
//============================================================================== // FinalizeReporting PUBLIC STATIC //============================================================================== // OSCL_EXPORT_REF void UT::CM::FinalizeReporting ( const char* a_pszTestname, OSCL_HeapString<OsclMemAllocator> &a_filename, const test_result& a_tr, FILE* a_pFileStreamParent, FILE* a_pFileStreamChild ) { if (0 == a_pFileStreamChild) return; // report the textual representation of the test results text_test_interpreter interp; _STRING rs = interp.interpretation(a_tr); fprintf(a_pFileStreamChild, "%s", rs.c_str()); if (0 == a_pszTestname || 0 >= a_filename.get_size() || 0 == a_pFileStreamParent) return; _STRING strChild; fclose(a_pFileStreamChild); // close the stream OSCL_HeapString<OsclMemAllocator> outFilename(a_filename); outFilename += ".out"; FILE* pFile = fopen(outFilename.get_cstr(), "rb"); if (0 == pFile) fprintf(a_pFileStreamParent, "ERROR: Failed to open file (%s) for capturing test output!\n", outFilename.get_cstr()); else { fseek(pFile, 0, SEEK_END); long lSize = ftell(pFile); rewind(pFile); char* buffer = new char[lSize]; fread(buffer, 1, lSize, pFile); strChild = _STRING(buffer, lSize); fprintf(a_pFileStreamParent, "%s", strChild.c_str()); // send the captured output back out the parent stream delete [] buffer; fclose(pFile); } Oscl_FileServer fs; fs.Connect(); Oscl_File f; if (0 == f.Open(a_filename.get_str(), Oscl_File::MODE_READWRITE | Oscl_File::MODE_TEXT, fs)) { _STRING xfr = xml_test_interpreter::interpretation(a_tr, a_pszTestname, &strChild); fprintf(a_pFileStreamParent, "\nWrote xml-formatted test results to file: %s\n", a_filename.get_cstr()); f.Write(xfr.c_str(), sizeof(char), oscl_strlen(xfr.c_str())); f.Close(); } else { fprintf(a_pFileStreamParent, "\nERROR: Failed to open file (%s) for xml-formatted test results\n", a_filename.get_cstr()); } fs.Close(); }
OSCL_wHeapString<OsclMemAllocator> MovieHeaderAtom::convertTimeToDate(uint32 time) { OSCL_HeapString<OsclMemAllocator> date; char buf[64]; int32 numDaysInMonth[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int32 numDaysInMonthLeap[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int32 refYear = 1904; // (365*4 + 1) * 24 * 3600 int32 numSecsInABlkofFourYears = 126230400; // 365*24*3600 int32 numSecInYear = 31536000; int32 numBlksOfFour = (time / numSecsInABlkofFourYears); int32 leftOverSecs = (time - (numBlksOfFour * numSecsInABlkofFourYears)); int32 leftOverYears = 0; int32 year = 0; int32 numDays = 0; int32 numHrs = 0; int32 numMins = 0; int32 month = 0; int32 milliSecs = 0; if (leftOverSecs > numSecInYear) { /*To take in to consideration at least 1 year among the number of years as leap among leftOverYear*/ leftOverSecs -= (24 * 3600); leftOverYears = (leftOverSecs / numSecInYear); leftOverSecs -= (leftOverYears * numSecInYear); numDays = (uint16)(leftOverSecs / (24 * 3600)); leftOverSecs -= (numDays * 24 * 3600); for (uint32 i = 0; i < 12; i++) { if (numDays >= numDaysInMonth[i]) { numDays = (numDays - numDaysInMonth[i]); } else { month = (i + 1); break; } } } else { numDays = (leftOverSecs / (24 * 3600)); leftOverSecs -= (numDays * 24 * 3600); for (int32 i = 0; i < 12; i++) { if (numDays >= numDaysInMonthLeap[i]) { numDays = (numDays - numDaysInMonthLeap[i]); } else { month = (i + 1); break; } } } // Considering a situation where by the date is 1st Jan of any year // the leftOverSecs would be less than the sec available in a day resulting numDays // as 0, however that is 1st Jan from user perspective. So a day adjustment factor // is added into numDays. numDays += ADJUST_DAY_COUNT_USER_PERSPECTIVE_FOR_FIRST_DAY_OF_YEAR; numHrs = (leftOverSecs / 3600); leftOverSecs -= (numHrs * 3600); numMins = (leftOverSecs / 60); leftOverSecs -= (numMins * 60); year = (refYear + (numBlksOfFour * 4) + leftOverYears); oscl_snprintf(buf, 256, "%04d%02d%02dT%02d%02d%02d.%03dZ", year, month, numDays, numHrs, numMins, leftOverSecs, milliSecs); date += buf; /* convert to unicode */ uint32 wDateBufLen = 64 * sizeof(oscl_wchar); oscl_wchar wDate[64*sizeof(oscl_wchar)]; oscl_memset((OsclAny*)wDate, 0, wDateBufLen); oscl_UTF8ToUnicode(date.get_cstr(), (int32)(date.get_size()), wDate, (int32)(wDateBufLen)); OSCL_wHeapString<OsclMemAllocator> wDateStr; wDateStr += wDate; return (wDateStr); }
void AuthorDriver::handleSetAudioEncoder(set_audio_encoder_command *ac) { LOGV("AuthorDriver::handleSetAudioEncoder(%d)", ac->ae); int error = 0; OSCL_HeapString<OsclMemAllocator> iAudioEncoderMimeType; if (ac->ae == AUDIO_ENCODER_DEFAULT) ac->ae = AUDIO_ENCODER_AMR_NB; switch(ac->ae) { case AUDIO_ENCODER_AMR_NB: iAudioEncoderMimeType = "/x-pvmf/audio/encode/amr-nb"; // AMR_NB only supports 8kHz sampling rate if (mSamplingRate == 0) { // Sampling rate not set, use the default mSamplingRate = 8000; } else if (mSamplingRate != 8000) { LOGE("Only valid sampling rate for AMR_NB is 8kHz."); commandFailed(ac); return; } // AMR_NB only supports mono (IE 1 channel) if (mNumberOfChannels == 0) { // Number of channels not set, use the default mNumberOfChannels = 1; } else if (mNumberOfChannels != 1) { LOGE("Only valid number of channels for ANR_NB is 1."); commandFailed(ac); return; } break; case AUDIO_ENCODER_AMR_WB: iAudioEncoderMimeType = "/x-pvmf/audio/encode/amr-wb"; // AMR_WB only supports 16kHz sampling rate if (mSamplingRate == 0) { // Sampling rate not set, use the default mSamplingRate = 16000; } else if (mSamplingRate != 16000) { LOGE("Only valid sampling rate for AMR_WB is 16kHz."); commandFailed(ac); return; } // AMR_WB only supports mono (IE 1 channel) if (mNumberOfChannels == 0) { // Number of channels not set, use the default mNumberOfChannels = 1; } else if (mNumberOfChannels != 1) { LOGE("Only valid number of channels for ANR_WB is 1."); commandFailed(ac); return; } break; case AUDIO_ENCODER_AAC: // Check the sampling rate if (mSamplingRate == 0) { // No sampling rate set, use the default mSamplingRate = DEFAULT_AUDIO_SAMPLING_RATE; } // Check the number of channels if (mNumberOfChannels == 0) { // Number of channels not set, use the default mNumberOfChannels = DEFAULT_AUDIO_NUMBER_OF_CHANNELS; } // Is file container type AAC-ADIF? if(mOutputFormat == OUTPUT_FORMAT_AAC_ADIF) { // This is an audio only file container, set the correct encoder iAudioEncoderMimeType = "/x-pvmf/audio/encode/aac/adif"; } // AAC-ADTS? else if (mOutputFormat == OUTPUT_FORMAT_AAC_ADTS) { // This is an audio only file container, set the correct encoder iAudioEncoderMimeType = "/x-pvmf/audio/encode/aac/adts"; } // else MPEG4 or 3GPP container ... use AAC-RAW else { // AAC for mixed audio/video containers iAudioEncoderMimeType = "/x-pvmf/audio/encode/X-MPEG4-AUDIO"; } break; case AUDIO_ENCODER_AAC_PLUS: case AUDIO_ENCODER_EAAC_PLUS: // Added for future use. Not currently supported by pvauthor LOGE("AAC_PLUS and EAAC_PLUS audio formats are currently not supported"); // NO BREAK! Fall through from the unsupported AAC_PLUS and EAAC_PLUS cases into default case default: commandFailed(ac); return; } LOGV("AuthorDriver::handleSetAudioEncoder() set %d %d \"%s\"", mSamplingRate, mNumberOfChannels, iAudioEncoderMimeType.get_cstr()); // Set the sampling rate and number of channels if (!mAudioInputMIO->setAudioSamplingRate(mSamplingRate)) { LOGE("Failed to set the sampling rate %d", mSamplingRate); commandFailed(ac); return; } if (!mAudioInputMIO->setAudioNumChannels(mNumberOfChannels)) { LOGE("Failed to set the number of channels %d", mNumberOfChannels); commandFailed(ac); return; } mAudioEncoder = ac->ae; OSCL_TRY(error, mAuthor->AddMediaTrack(*mAudioNode, iAudioEncoderMimeType, mSelectedComposer, mAudioEncoderConfig, ac)); OSCL_FIRST_CATCH_ANY(error, commandFailed(ac)); }
// Pull out source file name from arguments // -source sometestfile.mp4 // // void FindSourceFile(cmd_line* command_line, OSCL_HeapString<OsclMemAllocator>& aFileNameInfo, PVMFFormatType& aInputFileFormatType, FILE* aFile) { aFileNameInfo = SOURCENAME_PREPEND_STRING; aFileNameInfo += DEFAULTSOURCEFILENAME; aInputFileFormatType = DEFAULTSOURCEFORMATTYPE; int iFileArgument = 0; bool iFileFound = false; bool cmdline_iswchar = command_line->is_wchar(); int count = command_line->get_count(); // Search for the "-source" argument // Go through each argument for (int iFileSearch = 0; iFileSearch < count; iFileSearch++) { char argstr[128]; // Convert to UTF8 if necessary if (cmdline_iswchar) { oscl_wchar* argwstr = NULL; command_line->get_arg(iFileSearch, argwstr); oscl_UnicodeToUTF8(argwstr, oscl_strlen(argwstr), argstr, 128); argstr[127] = NULL; } else { char* tmpstr = NULL; command_line->get_arg(iFileSearch, tmpstr); int32 tmpstrlen = oscl_strlen(tmpstr) + 1; if (tmpstrlen > 128) { tmpstrlen = 128; } oscl_strncpy(argstr, tmpstr, tmpstrlen); argstr[tmpstrlen-1] = NULL; } // Do the string compare if (oscl_strcmp(argstr, "-help") == NULL) { fprintf(aFile, "Source specification option. Default is 'test.mp4':\n"); fprintf(aFile, " -source sourcename\n"); fprintf(aFile, " Specify the source filename or URL to use for test cases which\n"); fprintf(aFile, " allow user-specified source name. The unit test determines the\n"); fprintf(aFile, " source format type using extension or URL header.\n\n"); } else if (oscl_strcmp(argstr, "-source") == NULL) { iFileFound = true; iFileArgument = ++iFileSearch; break; } } if (iFileFound) { // Convert to UTF8 if necessary if (cmdline_iswchar) { oscl_wchar* cmd; command_line->get_arg(iFileArgument, cmd); char tmpstr[256]; oscl_UnicodeToUTF8(cmd, oscl_strlen(cmd), tmpstr, 256); tmpstr[255] = NULL; aFileNameInfo = tmpstr; } else { char* cmdlinefilename = NULL; command_line->get_arg(iFileArgument, cmdlinefilename); aFileNameInfo = cmdlinefilename; } // Check the file extension to determine format type // AAC file if (oscl_strstr(aFileNameInfo.get_cstr(), ".aac") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".AAC") != NULL) { aInputFileFormatType = PVMF_MIME_AACFF; } // MP3 file else if (oscl_strstr(aFileNameInfo.get_cstr(), ".mp3") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".MP3") != NULL) { aInputFileFormatType = PVMF_MIME_MP3FF; } // AMR file (IETF and IF2) else if (oscl_strstr(aFileNameInfo.get_cstr(), ".amr") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".AMR") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".cod") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".COD") != NULL) { aInputFileFormatType = PVMF_MIME_AMRFF; } // RTSP URL else if ((!oscl_strncmp("rtsp", aFileNameInfo.get_cstr(), 4)) || (!oscl_strncmp("RTSP", aFileNameInfo.get_cstr(), 4))) { aInputFileFormatType = PVMF_MIME_DATA_SOURCE_RTSP_URL; } // HTTP URL else if (oscl_strstr(aFileNameInfo.get_cstr(), "http:") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), "HTTP:") != NULL) { aInputFileFormatType = PVMF_MIME_DATA_SOURCE_HTTP_URL; } // MP4/3GP file else if (oscl_strstr(aFileNameInfo.get_cstr(), ".mp4") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".MP4") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".3gp") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".3GP") != NULL) { aInputFileFormatType = PVMF_MIME_MPEG4FF; } // ASF file else if (oscl_strstr(aFileNameInfo.get_cstr(), ".asf") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".ASF") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".wma") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".WMA") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".wmv") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".WMV") != NULL) { aInputFileFormatType = PVMF_MIME_ASFFF; } // SDP file else if (oscl_strstr(aFileNameInfo.get_cstr(), ".sdp") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".SDP") != NULL) { aInputFileFormatType = PVMF_MIME_DATA_SOURCE_SDP_FILE; } // PVX file else if (oscl_strstr(aFileNameInfo.get_cstr(), ".pvx") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".PVX") != NULL) { aInputFileFormatType = PVMF_MIME_DATA_SOURCE_PVX_FILE; } // WAV file else if (oscl_strstr(aFileNameInfo.get_cstr(), ".wav") != NULL || oscl_strstr(aFileNameInfo.get_cstr(), ".WAV") != NULL) { aInputFileFormatType = PVMF_MIME_WAVFF; } // Unknown so set to unknown and let the player engine determine the format type else { fprintf(file, "Source type unknown so setting to unknown and have the utility recognize it\n"); aInputFileFormatType = PVMF_MIME_FORMAT_UNKNOWN; } } }