[MPlayer-cvslog] CVS: main/libvo vo_yuv4mpeg.c,1.17,1.18
Reimar Döffinger CVS
syncmail at mplayerhq.hu
Fri Dec 3 22:02:15 CET 2004
CVS change done by Reimar Döffinger CVS
Update of /cvsroot/mplayer/main/libvo
In directory mail:/var2/tmp/cvs-serv2109/libvo
Modified Files:
vo_yuv4mpeg.c
Log Message:
Add a file= suboption to set output file.
Patch by Olivier Rolland (( billl |at| users <dot> sf <dot> net )).
Index: vo_yuv4mpeg.c
===================================================================
RCS file: /cvsroot/mplayer/main/libvo/vo_yuv4mpeg.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- vo_yuv4mpeg.c 28 Oct 2004 01:15:52 -0000 1.17
+++ vo_yuv4mpeg.c 3 Dec 2004 21:02:13 -0000 1.18
@@ -43,7 +43,7 @@
static vo_info_t info =
{
- "yuv4mpeg output for mjpegtools (to \"stream.yuv\")",
+ "yuv4mpeg output for mjpegtools",
"yuv4mpeg",
"Robert Kesterson <robertk at robertk.com>",
""
@@ -62,6 +62,8 @@
static uint8_t *rgb_buffer = NULL;
static uint8_t *rgb_line_buffer = NULL;
+static char *yuv_filename = NULL;
+
static int using_format = 0;
static FILE *yuv_out;
static int write_bytes;
@@ -126,11 +128,12 @@
write_bytes = image_width * image_height * 3 / 2;
image = malloc(write_bytes);
- yuv_out = fopen("stream.yuv", "wb");
+ yuv_out = fopen(yuv_filename ? yuv_filename : "stream.yuv", "wb");
if (!yuv_out || image == 0)
{
mp_msg(MSGT_VO,MSGL_FATAL,
- MSGTR_VO_YUV4MPEG_OutFileOpenError);
+ MSGTR_VO_YUV4MPEG_OutFileOpenError,
+ yuv_filename ? yuv_filename : "stream.yuv");
return -1;
}
image_y = image;
@@ -462,6 +465,10 @@
if(rgb_line_buffer)
free(rgb_line_buffer);
rgb_line_buffer = NULL;
+
+ if (yuv_filename)
+ free(yuv_filename);
+ yuv_filename = NULL;
}
@@ -472,28 +479,41 @@
static uint32_t preinit(const char *arg)
{
- int arg_unrecognized = 0;
-
if(arg)
{
- /* configure output mode */
- if (strcmp(arg, "interlaced"))
- arg_unrecognized++;
- else
- config_interlace = Y4M_ILACE_TOP_FIRST;
+ int parse_err = 0;
+ unsigned int parse_pos = 0;
- if (strcmp(arg, "interlaced_bf"))
- arg_unrecognized++;
- else
- config_interlace = Y4M_ILACE_BOTTOM_FIRST;
-
- /* If both tests failed the argument is invalid */
- if (arg_unrecognized == 2)
- {
- mp_msg(MSGT_VO,MSGL_FATAL,
- MSGTR_VO_YUV4MPEG_UnknownSubDev,arg);
- return -ENOSYS;
+ while (arg[parse_pos] && !parse_err) {
+ if (strncmp (&arg[parse_pos], "interlaced", 10) == 0) {
+ parse_pos += 10;
+ config_interlace = Y4M_ILACE_TOP_FIRST;
+ }
+ else if (strncmp (&arg[parse_pos], "interlaced_bf", 13) == 0) {
+ parse_pos += 13;
+ config_interlace = Y4M_ILACE_BOTTOM_FIRST;
+ }
+ else if (strncmp (&arg[parse_pos], "file=", 5) == 0) {
+ int file_len;
+ parse_pos += 5;
+ file_len = strcspn (&arg[parse_pos], ":");
+ if (file_len < 0) {
+ parse_err = 1;
+ break;
}
+ yuv_filename = malloc (file_len + 1);
+ memcpy (yuv_filename, &arg[parse_pos], file_len);
+ yuv_filename[file_len] = 0;
+ parse_pos += file_len;
+ }
+ if (arg[parse_pos] == ':') parse_pos++;
+ else if (arg[parse_pos]) parse_err = 1;
+ }
+ if (parse_err) {
+ mp_msg(MSGT_VO,MSGL_FATAL,
+ MSGTR_VO_YUV4MPEG_UnknownSubDev,arg);
+ return -1;
+ }
}
/* Inform user which output mode is used */
More information about the MPlayer-cvslog
mailing list