summaryrefslogtreecommitdiff
path: root/src/mov_encoder_writer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/mov_encoder_writer.cc')
-rw-r--r--src/mov_encoder_writer.cc103
1 files changed, 19 insertions, 84 deletions
diff --git a/src/mov_encoder_writer.cc b/src/mov_encoder_writer.cc
index 2ed6879..c3e4207 100644
--- a/src/mov_encoder_writer.cc
+++ b/src/mov_encoder_writer.cc
@@ -31,6 +31,9 @@
/*
* $Log$
+ * Revision 1.4 2005/06/14 12:29:40 deva
+ * Incorporated the use of the Info object everywhere... also using the log functionality.
+ *
* Revision 1.3 2005/05/26 21:32:39 deva
* *** empty log message ***
*
@@ -54,21 +57,19 @@
#include <config.h>
#include "mov_encoder_writer.h"
-MovEncoderWriter::MovEncoderWriter(const char* fname, FramePriorityQueue *q, sem_t *s, pthread_mutex_t *m)
+MovEncoderWriter::MovEncoderWriter(const char* cpr,
+ FramePriorityQueue *q,
+ sem_t *s,
+ pthread_mutex_t *m,
+ Info *i)
{
- // Append suffix
- char f[256];
- sprintf(f, "%s.mpg", fname);
-
- filename = string(fname);
-
- file = open(f,
- O_CREAT | O_WRONLY | O_SYNC, //| O_LARGEFILE
- S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
- if(file == -1) {
- fprintf(stderr, "Could not open file for writing: %s\n", strerror(errno));
- return;
- }
+ info = i;
+
+ // TODO: build filename from cpr and date
+ char fname[256];
+ sprintf(fname, "/tmp/somefile");
+
+ file = new File(fname, "mpg", info);
sem = s;
queue = q;
@@ -76,23 +77,17 @@ MovEncoderWriter::MovEncoderWriter(const char* fname, FramePriorityQueue *q, sem
mutex = m;
running = true;
-
- sequence_number = 0;
}
MovEncoderWriter::~MovEncoderWriter()
{
- if(file != -1) close(file);
+ delete file;
}
void MovEncoderWriter::run()
{
- // fprintf(stderr, "\t\t\t\t\t\t\t\t\tFile Writer ready!\n"); fflush(stderr);
-
Frame *frame;
- if(file == -1) return;
-
while(running) {
sem_wait(sem);
@@ -103,73 +98,13 @@ void MovEncoderWriter::run()
if(frame->number == frame_number) queue->pop();
pthread_mutex_unlock(mutex);
- /*
- if(!frame) {
- fprintf(stderr, "\t\t\t\t\t\t\t\t\tNULL frame detected");
- continue;
- }
- */
-
- // fprintf(stderr, "\t\t\t\t\t\t\t\t\tChecking frame [%d] against expected [%d]\n",
- // frame->number, frame_number); fflush(stderr);
while(frame->number == frame_number) {
- int ret;
-
- ret = write(file, frame->data, frame->size);
- if(ret != frame->size) {
- fprintf(stderr, "Error in filewriter\n"); fflush(stderr);
- switch(errno) {
- case EAGAIN: // Non-blocking I/O has been selected using O_NONBLOCK and the write would block.
- case EBADF: // fd is not a valid file descriptor or is not open for writing.
- case EFAULT: // buf is outside your accessible address space.
- case EINTR: // The call was interrupted by a signal before any data was written.
- case EINVAL: // fd is attached to an object which is unsuitable for writing.
- case EIO: // A low-level I/O error occurred while modifying the inode.
- case ENOSPC: // The device containing the file referred to by fd has no room for the data.
- case EPIPE: // fd is connected to a pipe or socket whose reading end is closed. When this hap-
- // pens the writing process will also receive a SIGPIPE signal. (Thus, the write
- // return value is seen only if the program catches, blocks or ignores this sig-
- // nal.)
- fprintf(stderr, "Could not write to file: %s\n", strerror(errno)); fflush(stderr);
- return;
-
- case EFBIG: // An attempt was made to write a file that exceeds the implementation-defined max-
- // imum file size or the process' file size limit, or to write at a position past
- // than the maximum allowed offset.
- fprintf(stderr, "Attempting to write to a new file\n"); fflush(stderr);
- // Close current file
- if(file != -1) close(file);
- {
- sequence_number++;
- // Create new filename
- char f[256];
- sprintf(f, "%s-%d.mpg", filename.c_str(), sequence_number);
-
- // Open new file
- file = open(f,
- O_CREAT | O_WRONLY | O_SYNC, //| O_LARGEFILE
- S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
- if(file == -1) {
- fprintf(stderr, "Could not open file for writing: %s\n", strerror(errno)); fflush(stderr);
- return;
- }
- }
- // Do write again.
- ret = write(file, frame->data, frame->size);
- if(ret == -1) {
- fprintf(stderr, "Could not write to file: %s\n", strerror(errno)); fflush(stderr);
- return;
- }
- fprintf(stderr, "Success\n"); fflush(stderr);
- break;
- }
- }
-
+ int ret = file->Write(frame->data, frame->size);
delete frame;
-
- // fprintf(stderr, "\t\t\t\t\t\t\t\t\tWrite frame [%d]\n", frame->number); fflush(stderr);
+ if(ret == -1) return;
+
frame_number++;
pthread_mutex_lock(mutex);