mirror of
https://github.com/mpv-player/mpv
synced 2025-04-11 04:01:31 +00:00
Add a file= suboption to set output file.
Patch by Olivier Rolland (( billl |at| users <dot> sf <dot> net )). git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@14096 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
44d693368f
commit
8e4b3a0ccb
@ -2896,6 +2896,8 @@ It supports the YV12, RGB (24 bpp) and BGR (24 bpp) format.
|
||||
Write the output as interlaced frames, top field first.
|
||||
.IPs interlaced_bf
|
||||
Write the output as interlaced frames, bottom field first.
|
||||
.IPs file=<filename>
|
||||
Write the output to the given file instead of the default stream.yuv.
|
||||
.REss
|
||||
.PD 1
|
||||
.RS
|
||||
|
@ -866,7 +866,7 @@ static char help_text[]=
|
||||
#define MSGTR_VO_YUV4MPEG_InterlacedInputNotRGB "Input not RGB, can't separate chrominance by fields!"
|
||||
#define MSGTR_VO_YUV4MPEG_WidthDivisibleBy2 "Image width must be divisible by 2."
|
||||
#define MSGTR_VO_YUV4MPEG_NoMemRGBFrameBuf "Not enough memory to allocate RGB framebuffer."
|
||||
#define MSGTR_VO_YUV4MPEG_OutFileOpenError "Can't get memory or file handle to write \"stream.yuv\"!"
|
||||
#define MSGTR_VO_YUV4MPEG_OutFileOpenError "Can't get memory or file handle to write \"%s\"!"
|
||||
#define MSGTR_VO_YUV4MPEG_OutFileWriteError "Error writing image to output!"
|
||||
#define MSGTR_VO_YUV4MPEG_UnknownSubDev "Unknown subdevice: %s"
|
||||
#define MSGTR_VO_YUV4MPEG_InterlacedTFFMode "Using interlaced output mode, top-field first."
|
||||
|
@ -43,7 +43,7 @@
|
||||
|
||||
static vo_info_t info =
|
||||
{
|
||||
"yuv4mpeg output for mjpegtools (to \"stream.yuv\")",
|
||||
"yuv4mpeg output for mjpegtools",
|
||||
"yuv4mpeg",
|
||||
"Robert Kesterson <robertk@robertk.com>",
|
||||
""
|
||||
@ -62,6 +62,8 @@ static uint8_t *image_v = NULL;
|
||||
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 @@ static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width,
|
||||
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 @@ static void uninit(void)
|
||||
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 void check_events(void)
|
||||
|
||||
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 */
|
||||
|
Loading…
Reference in New Issue
Block a user