int64_t MediaPictureImpl::logMetadata(char* buffer, size_t len) { RefPointer<Rational> tb = getTimeBase(); char pts[48]; if (getPts() == Global::NO_PTS) { snprintf(pts, sizeof(pts), "NONE"); } else snprintf(pts, sizeof(pts), "%" PRId64, getPts()); return snprintf(buffer, len, "MediaPictureo@%p:[pts:%s;tb:%" PRId64 "/%" PRId64 ";w:%" PRId64 ";h:%" PRId64 ";fo:%" PRId64 ";co:%s]", this, pts, (int64_t)(tb?tb->getNumerator():0), (int64_t)(tb?tb->getDenominator():0), (int64_t)getWidth(), (int64_t)getHeight(), (int64_t)getFormat(), isComplete()?"true":"false" ); }
void StreamCoderTest :: testTimestamps() { LoggerStack stack; stack.setGlobalLevel(Logger::LEVEL_WARN, false); Helper hr; hr.setupReading("testfile_h264_mp4a_tmcd.mov"); RefPointer<IStreamCoder> ac; RefPointer<IStreamCoder> vc; if (hr.first_input_audio_stream >= 0) ac = hr.coders[hr.first_input_audio_stream]; if (hr.first_input_video_stream >= 0) vc = hr.coders[hr.first_input_video_stream]; hw->setupWriting("StreamCoderTest_7_output.flv", vc ? "flv" : 0, ac ? "libmp3lame" : 0, "flv", vc ? vc->getPixelType() : IPixelFormat::YUV420P, vc ? vc->getWidth() : 0, vc ? vc->getHeight() : 0, false, ac ? ac->getSampleRate() : 0, ac ? ac->getChannels() : 0, true); RefPointer<IVideoPicture> frame; if (vc) { frame = IVideoPicture::make( vc->getPixelType(), vc->getWidth(), vc->getHeight()); } RefPointer<IAudioSamples> samples; if (ac) { samples = IAudioSamples::make(10000, ac->getChannels()); } int retval = -1; int numReads = 0; int maxReads = 10000; while ((retval = hr.readNextDecodedObject(samples.value(), frame.value())) > 0 && numReads < maxReads) { int result = retval; numReads++; VS_TUT_ENSURE("should only return 1 or 2", retval == 1 || retval == 2); if (retval == 1) { VS_TUT_ENSURE("something should be complete...", samples->isComplete()); retval = hw->writeSamples(samples.value()); VS_TUT_ENSURE("could not write audio", retval >= 0); } if (retval == 2) { VS_TUT_ENSURE("something should be complete...", frame->isComplete()); retval = hw->writeFrame(frame.value()); VS_TUT_ENSURE("could not write video", retval >= 0); } { RefPointer<IRational> timebase = hr.coders[hr.packet->getStreamIndex()]->getTimeBase(); ICodec::Type type = hr.coders[hr.packet->getStreamIndex()]->getCodecType(); (void) type; (void) result; VS_LOG_TRACE("Packet stream: %d.%d; pts: %lld; dts: %lld; spts: %lld; fpts: %lld; tb: %d/%d; ret: %d," "samps: %d", hr.packet->getStreamIndex(), type, hr.packet->getPts(), hr.packet->getDts(), samples ? samples->getPts() : -1, frame ? frame->getPts() : -1, timebase->getNumerator(), timebase->getDenominator(), result, samples ? samples->getNumSamples() : 0); } } VS_TUT_ENSURE("should return some data", numReads > 0); }