mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Bugfix in editing mechanism
This commit is contained in:
parent
9de548ee59
commit
d17452dcfa
5
HISTORY
5
HISTORY
@ -506,7 +506,7 @@ Video Disk Recorder Revision History
|
|||||||
- Fixed removing recordings with Lifetime = 99.
|
- Fixed removing recordings with Lifetime = 99.
|
||||||
- Improved channel switching.
|
- Improved channel switching.
|
||||||
|
|
||||||
2001-06-14: Version 0.82
|
2001-06-15: Version 0.82
|
||||||
|
|
||||||
- Increased timeout until reporting "broken video data stream" when recording.
|
- Increased timeout until reporting "broken video data stream" when recording.
|
||||||
- Modified method of turning off PIDs when switching channel.
|
- Modified method of turning off PIDs when switching channel.
|
||||||
@ -526,4 +526,5 @@ Video Disk Recorder Revision History
|
|||||||
|
|
||||||
This will create packets for the second audio track that are small enough
|
This will create packets for the second audio track that are small enough
|
||||||
to multiplex smoothly with the video data.
|
to multiplex smoothly with the video data.
|
||||||
|
- Fixed a bug in the editing mechanism (didn't work with recordings that
|
||||||
|
consist of more than one data file).
|
||||||
|
52
dvbapi.c
52
dvbapi.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: dvbapi.c 1.73 2001/06/14 15:10:16 kls Exp $
|
* $Id: dvbapi.c 1.74 2001/06/15 14:11:21 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dvbapi.h"
|
#include "dvbapi.h"
|
||||||
@ -595,6 +595,22 @@ void cRecordBuffer::Output(void)
|
|||||||
dsyslog(LOG_INFO, "output thread ended (pid=%d)", getpid());
|
dsyslog(LOG_INFO, "output thread ended (pid=%d)", getpid());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --- ReadFrame -------------------------------------------------------------
|
||||||
|
|
||||||
|
int ReadFrame(int f, uchar *b, int Length, int Max)
|
||||||
|
{
|
||||||
|
if (Length == -1)
|
||||||
|
Length = Max; // this means we read up to EOF (see cIndex)
|
||||||
|
else if (Length > Max) {
|
||||||
|
esyslog(LOG_ERR, "ERROR: frame larger than buffer (%d > %d)", Length, Max);
|
||||||
|
Length = Max;
|
||||||
|
}
|
||||||
|
int r = read(f, b, Length);
|
||||||
|
if (r < 0)
|
||||||
|
LOG_ERROR;
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
// --- cReplayBuffer ---------------------------------------------------------
|
// --- cReplayBuffer ---------------------------------------------------------
|
||||||
|
|
||||||
class cReplayBuffer : public cRingBuffer {
|
class cReplayBuffer : public cRingBuffer {
|
||||||
@ -614,7 +630,6 @@ private:
|
|||||||
bool NextFile(uchar FileNumber = 0, int FileOffset = -1);
|
bool NextFile(uchar FileNumber = 0, int FileOffset = -1);
|
||||||
void Clear(bool Block = false);
|
void Clear(bool Block = false);
|
||||||
void Close(void);
|
void Close(void);
|
||||||
int ReadFrame(uchar *b, int Length, int Max);
|
|
||||||
void StripAudioPackets(uchar *b, int Length, uchar Except = 0x00);
|
void StripAudioPackets(uchar *b, int Length, uchar Except = 0x00);
|
||||||
void DisplayFrame(uchar *b, int Length);
|
void DisplayFrame(uchar *b, int Length);
|
||||||
int Resume(void);
|
int Resume(void);
|
||||||
@ -708,7 +723,7 @@ void cReplayBuffer::Input(void)
|
|||||||
}
|
}
|
||||||
lastIndex = Index;
|
lastIndex = Index;
|
||||||
playIndex = -1;
|
playIndex = -1;
|
||||||
r = ReadFrame(b, Length, sizeof(b));
|
r = ReadFrame(replayFile, b, Length, sizeof(b));
|
||||||
StripAudioPackets(b, r);
|
StripAudioPackets(b, r);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -718,7 +733,7 @@ void cReplayBuffer::Input(void)
|
|||||||
int FileOffset, Length;
|
int FileOffset, Length;
|
||||||
if (!(index->Get(playIndex, &FileNumber, &FileOffset, NULL, &Length) && NextFile(FileNumber, FileOffset)))
|
if (!(index->Get(playIndex, &FileNumber, &FileOffset, NULL, &Length) && NextFile(FileNumber, FileOffset)))
|
||||||
break;
|
break;
|
||||||
r = ReadFrame(b, Length, sizeof(b));
|
r = ReadFrame(replayFile, b, Length, sizeof(b));
|
||||||
StripAudioPackets(b, r, audioTrack);
|
StripAudioPackets(b, r, audioTrack);
|
||||||
}
|
}
|
||||||
if (r > 0) {
|
if (r > 0) {
|
||||||
@ -775,22 +790,6 @@ void cReplayBuffer::Output(void)
|
|||||||
dsyslog(LOG_INFO, "output thread ended (pid=%d)", getpid());
|
dsyslog(LOG_INFO, "output thread ended (pid=%d)", getpid());
|
||||||
}
|
}
|
||||||
|
|
||||||
int cReplayBuffer::ReadFrame(uchar *b, int Length, int Max)
|
|
||||||
{
|
|
||||||
if (Length > Max) {
|
|
||||||
esyslog(LOG_ERR, "ERROR: frame larger than buffer (%d > %d)", Length, Max);
|
|
||||||
Length = Max;
|
|
||||||
}
|
|
||||||
int r = read(replayFile, b, Length);
|
|
||||||
if (r >= 0) {
|
|
||||||
if (r != Length)
|
|
||||||
esyslog(LOG_ERR, "ERROR: got %d byte while reading %d", r, Length);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
LOG_ERROR;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void cReplayBuffer::StripAudioPackets(uchar *b, int Length, uchar Except)
|
void cReplayBuffer::StripAudioPackets(uchar *b, int Length, uchar Except)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < Length - 6; i++) {
|
for (int i = 0; i < Length - 6; i++) {
|
||||||
@ -988,7 +987,7 @@ void cReplayBuffer::Goto(int Index, bool Still)
|
|||||||
stillIndex = Index;
|
stillIndex = Index;
|
||||||
playIndex = -1;
|
playIndex = -1;
|
||||||
uchar b[MAXFRAMESIZE];
|
uchar b[MAXFRAMESIZE];
|
||||||
int r = ReadFrame(b, Length, sizeof(b));
|
int r = ReadFrame(replayFile, b, Length, sizeof(b));
|
||||||
if (r > 0)
|
if (r > 0)
|
||||||
DisplayFrame(b, r);
|
DisplayFrame(b, r);
|
||||||
fileOffset += Length;
|
fileOffset += Length;
|
||||||
@ -1230,16 +1229,9 @@ void cCuttingBuffer::Action(void)
|
|||||||
CurrentFileNumber = FileNumber;
|
CurrentFileNumber = FileNumber;
|
||||||
}
|
}
|
||||||
if (fromFile >= 0) {
|
if (fromFile >= 0) {
|
||||||
if (Length <= (int)sizeof(buffer)) {
|
Length = ReadFrame(fromFile, buffer, Length, sizeof(buffer));
|
||||||
if (read(fromFile, buffer, Length) < 0) {
|
if (Length < 0)
|
||||||
LOG_ERROR;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
esyslog(LOG_ERR, "ERROR: frame larger than buffer (%d > %d)", Length, sizeof(buffer));
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user