- Mine
- Thursday, October 6th, 2011 at 7:29:11pm MDT
- diff --git a/mythtv/libs/libmyth/programinfo.cpp b/mythtv/libs/libmyth/programinfo.cpp
- index 8793940..e09f5fb 100644
- --- a/mythtv/libs/libmyth/programinfo.cpp
- +++ b/mythtv/libs/libmyth/programinfo.cpp
- @@ -3559,7 +3559,7 @@ void ProgramInfo::SaveTotalFrames(int64_t frames)
- query.bindValue(":DATA", (uint)(frames));
- if (!query.exec())
- - MythDB::DBError("Frames insert", query);
- + MythDB::DBError("Total Frames insert", query);
- }
- /// \brief Store the Resolution at frame in the recordedmarkup table
- diff --git a/mythtv/libs/libmythtv/dtvrecorder.cpp b/mythtv/libs/libmythtv/dtvrecorder.cpp
- index e0a5335..4ea842a 100644
- --- a/mythtv/libs/libmythtv/dtvrecorder.cpp
- +++ b/mythtv/libs/libmythtv/dtvrecorder.cpp
- @@ -75,13 +75,18 @@ DTVRecorder::DTVRecorder(TVRec *rec) :
- // statistics
- _packet_count(0),
- _continuity_error_count(0),
- - _frames_seen_count(0), _frames_written_count(0)
- + _frames_seen_count(0), _frames_written_count(0),
- + _duration(0)
- {
- SetPositionMapType(MARK_GOP_BYFRAME);
- _payload_buffer.reserve(TSPacket::kSize * (50 + 1));
- memset(_stream_id, 0, sizeof(_stream_id));
- memset(_pid_status, 0, sizeof(_pid_status));
- memset(_continuity_counter, 0, sizeof(_continuity_counter));
- + pc = new ParseContext1;
- + memset(pc, 0, sizeof(struct ParseContext1));
- + s = new AVCodecParserContext;
- + memset(s, 0, sizeof(struct AVCodecParserContext));
- }
- DTVRecorder::~DTVRecorder()
- @@ -101,6 +106,12 @@ DTVRecorder::~DTVRecorder()
- delete _input_pmt;
- _input_pmt = NULL;
- }
- +
- + if (pc)
- + {
- + delete pc;
- + pc = NULL;
- + }
- }
- void DTVRecorder::SetOption(const QString &name, const QString &value)
- @@ -155,6 +166,9 @@ void DTVRecorder::FinishRecording(void)
- if (ringBuffer)
- curRecording->SaveFilesize(ringBuffer->GetRealFileSize());
- SavePositionMap(true);
- + LOG(VB_RECORD, LOG_INFO, LOC + "Storing duration and total frames");
- + SetDuration(_duration);
- + SetTotalFrames(_frames_written_count);
- }
- // positionMapLock.lock();
- // positionMap.clear();
- @@ -339,7 +353,6 @@ bool DTVRecorder::FindMPEG2Keyframes(const TSPacket* tspacket)
- // (there are others that we don't care about)
- const uint8_t *bufptr = tspacket->data() + tspacket->AFCOffset();
- const uint8_t *bufend = tspacket->data() + TSPacket::kSize;
- - int progressive_sequence = 0;
- int ext_type, bytes_left;
- int picture_structure, top_field_first, repeat_first_field, progressive_frame;
- int repeat_pict = 0;
- @@ -384,7 +397,7 @@ bool DTVRecorder::FindMPEG2Keyframes(const TSPacket* tspacket)
- case 0x1: /* sequence extension */
- if (bytes_left >= 6)
- {
- - progressive_sequence = bufptr[1] & (1 << 3);
- + pc->progressive_sequence = bufptr[1] & (1 << 3);
- }
- break;
- case 0x8: /* picture coding extension */
- @@ -399,7 +412,7 @@ bool DTVRecorder::FindMPEG2Keyframes(const TSPacket* tspacket)
- repeat_pict = 1;
- if (repeat_first_field)
- {
- - if (progressive_sequence)
- + if (pc->progressive_sequence)
- {
- if (top_field_first)
- repeat_pict = 5;
- @@ -441,6 +454,11 @@ bool DTVRecorder::FindMPEG2Keyframes(const TSPacket* tspacket)
- _frames_seen_count++;
- if (!_wait_for_keyframe_option || _first_keyframe>=0)
- _frames_written_count++;
- + _duration += (int64_t)((1.0f / frameRate / 1000.0f) +
- + (repeat_pict * 0.5) / (frameRate / 1000.0f)
- + * 1000000);
- + LOG(VB_RECORD, LOG_INFO, LOC + QString("Duration = %1 (%2 %3)")
- + .arg(_duration).arg(_frames_written_count).arg(frameRate));
- }
- if ((aspectRatio > 0) && (aspectRatio != m_videoAspect))
- diff --git a/mythtv/libs/libmythtv/dtvrecorder.h b/mythtv/libs/libmythtv/dtvrecorder.h
- index 25b8c7e..64d66df 100644
- --- a/mythtv/libs/libmythtv/dtvrecorder.h
- +++ b/mythtv/libs/libmythtv/dtvrecorder.h
- @@ -18,6 +18,10 @@ using namespace std;
- #include "recorderbase.h"
- #include "H264Parser.h"
- +extern "C" {
- +#include "libavcodec/parser.h"
- +}
- +
- class MPEGStreamData;
- class TSPacket;
- class QTime;
- @@ -132,6 +136,10 @@ class DTVRecorder :
- unsigned int _video_bytes_remaining;
- unsigned int _other_bytes_remaining;
- + // used for storing sequence header information
- + ParseContext1 *pc;
- + AVCodecParserContext *s;
- +
- // H.264 support
- bool _pes_synced;
- bool _seen_sps;
- @@ -169,6 +177,7 @@ class DTVRecorder :
- mutable unsigned long long _continuity_error_count;
- unsigned long long _frames_seen_count;
- unsigned long long _frames_written_count;
- + unsigned long long _duration;
- // constants
- /// If the number of regular frames detected since the last
- diff --git a/mythtv/libs/libmythtv/mythcommflagplayer.cpp b/mythtv/libs/libmythtv/mythcommflagplayer.cpp
- index 4f104b4..dc1a1b7 100644
- --- a/mythtv/libs/libmythtv/mythcommflagplayer.cpp
- +++ b/mythtv/libs/libmythtv/mythcommflagplayer.cpp
- @@ -186,6 +186,7 @@ bool MythCommFlagPlayer::RebuildSeekTable(
- cout << "\r \r" << flush;
- SaveTotalDuration();
- + SaveTotalFrames();
- SetPlaying(false);
- killdecoder = true;
- diff --git a/mythtv/libs/libmythtv/mythplayer.cpp b/mythtv/libs/libmythtv/mythplayer.cpp
- index 99fd103..297b478 100644
- --- a/mythtv/libs/libmythtv/mythplayer.cpp
- +++ b/mythtv/libs/libmythtv/mythplayer.cpp
- @@ -4808,6 +4808,14 @@ void MythPlayer::ResetTotalDuration(void)
- decoder->ResetTotalDuration();
- }
- +void MythPlayer::SaveTotalFrames(void)
- +{
- + if (!decoder)
- + return;
- +
- + decoder->SaveTotalFrames();
- +}
- +
- static unsigned dbg_ident(const MythPlayer *player)
- {
- static QMutex dbg_lock;
- diff --git a/mythtv/libs/libmythtv/mythplayer.h b/mythtv/libs/libmythtv/mythplayer.h
- index 9434d7e..3cd8783 100644
- --- a/mythtv/libs/libmythtv/mythplayer.h
- +++ b/mythtv/libs/libmythtv/mythplayer.h
- @@ -304,6 +304,8 @@ class MTV_PUBLIC MythPlayer
- void SaveTotalDuration(void);
- void ResetTotalDuration(void);
- + void SaveTotalFrames(void);
- +
- protected:
- // Initialization
- void OpenDummy(void);
- diff --git a/mythtv/libs/libmythtv/recorderbase.cpp b/mythtv/libs/libmythtv/recorderbase.cpp
- index ed7c0e0..90a95be 100644
- --- a/mythtv/libs/libmythtv/recorderbase.cpp
- +++ b/mythtv/libs/libmythtv/recorderbase.cpp
- @@ -454,6 +454,13 @@ void RecorderBase::SetDuration(uint64_t duration)
- curRecording->SaveTotalDuration(duration);
- }
- +void RecorderBase::SetTotalFrames(uint64_t total_frames)
- +{
- + if (curRecording)
- + curRecording->SaveTotalFrames(total_frames);
- +}
- +
- +
- RecorderBase *RecorderBase::CreateRecorder(
- diff --git a/mythtv/libs/libmythtv/recorderbase.h b/mythtv/libs/libmythtv/recorderbase.h
- index 34a444d..c2f8635 100644
- --- a/mythtv/libs/libmythtv/recorderbase.h
- +++ b/mythtv/libs/libmythtv/recorderbase.h
- @@ -248,6 +248,10 @@ class MTV_PUBLIC RecorderBase : public QRunnable
- */
- void SetDuration(uint64_t duration);
- + /** \brief Note the total frames in the recordedmark table
- + */
- + void SetTotalFrames(uint64_t total_frames);
- +
- TVRec *tvrec;
- RingBuffer *ringBuffer;
- bool weMadeBuffer;
advertising
Update the Post
Either update this post and resubmit it with changes, or make a new post.
You may also comment on this post.
Please note that information posted here will expire by default in one month. If you do not want it to expire, please set the expiry time above. If it is set to expire, web search engines will not be allowed to index it prior to it expiring. Items that are not marked to expire will be indexable by search engines. Be careful with your passwords. All illegal activities will be reported and any information will be handed over to the authorities, so be good.