AVCodecEncoder/AVFormatReader: Remove kNoPTSValue hack

This commit is contained in:
Barrett17
2018-08-05 11:04:59 +02:00
parent 9467826d31
commit b5d0ce85f4
2 changed files with 10 additions and 18 deletions
@@ -533,11 +533,6 @@ AVCodecEncoder::_CloseCodecIfNeeded()
} }
static const int64 kNoPTSValue = 0x8000000000000000LL;
// NOTE: For some reasons, I have trouble with the avcodec.h define:
// #define AV_NOPTS_VALUE INT64_C(0x8000000000000000)
// INT64_C is not defined here.
status_t status_t
AVCodecEncoder::_EncodeAudio(const void* _buffer, int64 frameCount, AVCodecEncoder::_EncodeAudio(const void* _buffer, int64 frameCount,
media_encode_info* info) media_encode_info* info)
@@ -49,9 +49,6 @@ extern "C" {
#define ERROR(a...) fprintf(stderr, a) #define ERROR(a...) fprintf(stderr, a)
static const int64 kNoPTSValue = AV_NOPTS_VALUE;
static uint32 static uint32
avformat_to_beos_byte_order(AVSampleFormat format) avformat_to_beos_byte_order(AVSampleFormat format)
{ {
@@ -432,9 +429,9 @@ StreamBase::Duration() const
// for a couple of streams and are in line with the documentation, but // for a couple of streams and are in line with the documentation, but
// unfortunately, libavformat itself seems to set the time_base and // unfortunately, libavformat itself seems to set the time_base and
// duration wrongly sometimes. :-( // duration wrongly sometimes. :-(
if ((int64)fStream->duration != kNoPTSValue) if ((int64)fStream->duration != AV_NOPTS_VALUE)
return _ConvertFromStreamTimeBase(fStream->duration); return _ConvertFromStreamTimeBase(fStream->duration);
else if ((int64)fContext->duration != kNoPTSValue) else if ((int64)fContext->duration != AV_NOPTS_VALUE)
return (bigtime_t)fContext->duration; return (bigtime_t)fContext->duration;
return 0; return 0;
@@ -508,7 +505,7 @@ StreamBase::Seek(uint32 flags, int64* frame, bigtime_t* time)
// know where we really seeked. // know where we really seeked.
fReusePacket = false; fReusePacket = false;
if (_NextPacket(true) == B_OK) { if (_NextPacket(true) == B_OK) {
while (fPacket.pts == kNoPTSValue) { while (fPacket.pts == AV_NOPTS_VALUE) {
fReusePacket = false; fReusePacket = false;
if (_NextPacket(true) != B_OK) if (_NextPacket(true) != B_OK)
return B_ERROR; return B_ERROR;
@@ -642,7 +639,7 @@ StreamBase::Seek(uint32 flags, int64* frame, bigtime_t* time)
fReusePacket = false; fReusePacket = false;
if (_NextPacket(true) == B_OK) { if (_NextPacket(true) == B_OK) {
if (fPacket.pts != kNoPTSValue) if (fPacket.pts != AV_NOPTS_VALUE)
foundTime = _ConvertFromStreamTimeBase(fPacket.pts); foundTime = _ConvertFromStreamTimeBase(fPacket.pts);
else else
TRACE_SEEK(" no PTS in packet after seeking\n"); TRACE_SEEK(" no PTS in packet after seeking\n");
@@ -704,9 +701,9 @@ StreamBase::GetNextChunk(const void** chunkBuffer,
// series (even for videos that contain B-frames). // series (even for videos that contain B-frames).
// \see http://git.videolan.org/?p=ffmpeg.git;a=blob;f=libavformat/avformat.h;h=1e8a6294890d580cd9ebc684eaf4ce57c8413bd8;hb=9153b33a742c4e2a85ff6230aea0e75f5a8b26c2#l1623 // \see http://git.videolan.org/?p=ffmpeg.git;a=blob;f=libavformat/avformat.h;h=1e8a6294890d580cd9ebc684eaf4ce57c8413bd8;hb=9153b33a742c4e2a85ff6230aea0e75f5a8b26c2#l1623
bigtime_t presentationTimeStamp; bigtime_t presentationTimeStamp;
if (fPacket.dts != kNoPTSValue) if (fPacket.dts != AV_NOPTS_VALUE)
presentationTimeStamp = fPacket.dts; presentationTimeStamp = fPacket.dts;
else if (fPacket.pts != kNoPTSValue) else if (fPacket.pts != AV_NOPTS_VALUE)
presentationTimeStamp = fPacket.pts; presentationTimeStamp = fPacket.pts;
else else
presentationTimeStamp = lastStreamDTS; presentationTimeStamp = lastStreamDTS;
@@ -740,7 +737,7 @@ StreamBase::GetNextChunk(const void** chunkBuffer,
// static bigtime_t lastPrintTime = system_time(); // static bigtime_t lastPrintTime = system_time();
// static BLocker printLock; // static BLocker printLock;
// if (fStream->index < 2) { // if (fStream->index < 2) {
// if (fPacket.pts != kNoPTSValue) // if (fPacket.pts != AV_NOPTS_VALUE)
// pts[fStream->index] = _ConvertFromStreamTimeBase(fPacket.pts); // pts[fStream->index] = _ConvertFromStreamTimeBase(fPacket.pts);
// printLock.Lock(); // printLock.Lock();
// bigtime_t now = system_time(); // bigtime_t now = system_time();
@@ -872,7 +869,7 @@ StreamBase::_ConvertToStreamTimeBase(bigtime_t time) const
{ {
int64 timeStamp = int64_t((double)time * fStream->time_base.den int64 timeStamp = int64_t((double)time * fStream->time_base.den
/ (1000000.0 * fStream->time_base.num) + 0.5); / (1000000.0 * fStream->time_base.num) + 0.5);
if (fStream->start_time != kNoPTSValue) if (fStream->start_time != AV_NOPTS_VALUE)
timeStamp += fStream->start_time; timeStamp += fStream->start_time;
return timeStamp; return timeStamp;
} }
@@ -881,7 +878,7 @@ StreamBase::_ConvertToStreamTimeBase(bigtime_t time) const
bigtime_t bigtime_t
StreamBase::_ConvertFromStreamTimeBase(int64_t time) const StreamBase::_ConvertFromStreamTimeBase(int64_t time) const
{ {
if (fStream->start_time != kNoPTSValue) if (fStream->start_time != AV_NOPTS_VALUE)
time -= fStream->start_time; time -= fStream->start_time;
return bigtime_t(1000000.0 * time * fStream->time_base.num return bigtime_t(1000000.0 * time * fStream->time_base.num
@@ -1207,7 +1204,7 @@ AVFormatReader::Stream::GetStreamInfo(int64* frameCount,
TRACE(" frameRate: %.4f\n", frameRate); TRACE(" frameRate: %.4f\n", frameRate);
#ifdef TRACE_AVFORMAT_READER #ifdef TRACE_AVFORMAT_READER
if (fStream->start_time != kNoPTSValue) { if (fStream->start_time != AV_NOPTS_VALUE) {
bigtime_t startTime = _ConvertFromStreamTimeBase(fStream->start_time); bigtime_t startTime = _ConvertFromStreamTimeBase(fStream->start_time);
TRACE(" start_time: %lld or %.5fs\n", startTime, TRACE(" start_time: %lld or %.5fs\n", startTime,
startTime / 1000000.0); startTime / 1000000.0);