annotate libvo/vo_yuv4mpeg.c @ 7743:a280cc3087ea

All right: The patch adresses two issues which I found, when I analyzed the input from some DVDs with known subtitle-dropouts: 1. The packet-size at the beginning of the packet, which is used to check, whether we got all fragments, is sometimes one byte too long. It seems to be always padded to an even number, while the actual size can be odd. 2. The original algorythm used to assemble the fragments relies on the timestamps to check, whether a new packet begins. This has proven to be unrelieable on some disks. So instead, I use the timestamp only to check, whether it's been too long (defined as 0,01sec) since the last fragment, which is probably indicating a broken packet, and normaly starting a new packet when the last one has been finished. patch by Christof Buergi <christof@buergi.lugs.ch>
author arpi
date Tue, 15 Oct 2002 00:47:17 +0000
parents 41d242c5bee1
children 5b39e79af5fe
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
1 /*
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
2 * vo_yuv4mpeg.c, yuv4mpeg (mjpegtools) interface
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
3 *
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
4 * Thrown together by
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
5 * Robert Kesterson <robertk@robertk.com>
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
6 * Based on the pgm output plugin, the rgb2rgb postproc filter, divxdec,
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
7 * and probably others.
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
8 *
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
9 * This is undoubtedly incomplete, inaccurate, or just plain wrong. :-)
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
10 *
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
11 * 2002/06/19 Klaus Stengel <Klaus.Stengel@asamnet.de>
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
12 * - added support for interlaced output
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
13 * Activate by using '-vo yuv4mpeg:interlaced'
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
14 * or '-vo yuv4mpeg:interlaced_bf' if your source has
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
15 * bottom fields first
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
16 * - added some additional checks to catch problems
5832
041bd56e41dc added support for output of subtitles - Juergen Hammelmann <juergen.hammelmann@gmx.de>
arpi
parents: 4737
diff changeset
17 *
041bd56e41dc added support for output of subtitles - Juergen Hammelmann <juergen.hammelmann@gmx.de>
arpi
parents: 4737
diff changeset
18 * 2002/04/17 Juergen Hammelmann <juergen.hammelmann@gmx.de>
041bd56e41dc added support for output of subtitles - Juergen Hammelmann <juergen.hammelmann@gmx.de>
arpi
parents: 4737
diff changeset
19 * - added support for output of subtitles
041bd56e41dc added support for output of subtitles - Juergen Hammelmann <juergen.hammelmann@gmx.de>
arpi
parents: 4737
diff changeset
20 * best, if you give option '-osdlevel 0' to mplayer for
041bd56e41dc added support for output of subtitles - Juergen Hammelmann <juergen.hammelmann@gmx.de>
arpi
parents: 4737
diff changeset
21 * no watching the seek+timer
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
22 */
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
23
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
24 #include <stdio.h>
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
25 #include <stdlib.h>
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
26 #include <string.h>
4640
ea3bd3328fc6 removed unused includes, added fastmemcpy support, removed local copy of rgb24toyv12 (using one in postproc/rgb2rgb.c)
alex
parents: 4633
diff changeset
27 #include <unistd.h>
4737
32e1f5042f65 I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents: 4706
diff changeset
28 #include <errno.h>
4640
ea3bd3328fc6 removed unused includes, added fastmemcpy support, removed local copy of rgb24toyv12 (using one in postproc/rgb2rgb.c)
alex
parents: 4633
diff changeset
29 #include <fcntl.h>
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
30
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
31 #include "config.h"
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
32 #include "video_out.h"
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
33 #include "video_out_internal.h"
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
34
5832
041bd56e41dc added support for output of subtitles - Juergen Hammelmann <juergen.hammelmann@gmx.de>
arpi
parents: 4737
diff changeset
35 #include "sub.h"
041bd56e41dc added support for output of subtitles - Juergen Hammelmann <juergen.hammelmann@gmx.de>
arpi
parents: 4737
diff changeset
36
4640
ea3bd3328fc6 removed unused includes, added fastmemcpy support, removed local copy of rgb24toyv12 (using one in postproc/rgb2rgb.c)
alex
parents: 4633
diff changeset
37 #include "fastmemcpy.h"
ea3bd3328fc6 removed unused includes, added fastmemcpy support, removed local copy of rgb24toyv12 (using one in postproc/rgb2rgb.c)
alex
parents: 4633
diff changeset
38 #include "../postproc/rgb2rgb.h"
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
39
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
40 LIBVO_EXTERN (yuv4mpeg)
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
41
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
42 static vo_info_t vo_info =
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
43 {
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
44 "yuv4mpeg output for mjpegtools (to \"stream.yuv\")",
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
45 "yuv4mpeg",
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
46 "Robert Kesterson <robertk@robertk.com>",
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
47 ""
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
48 };
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
49
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
50 static int image_width;
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
51 static int image_height;
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
52
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
53 static uint8_t *image = NULL;
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
54 static uint8_t *image_y = NULL;
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
55 static uint8_t *image_u = NULL;
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
56 static uint8_t *image_v = NULL;
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
57
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
58 static uint8_t *rgb_buffer = NULL;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
59 static uint8_t *rgb_line_buffer = NULL;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
60
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
61 static int using_format = 0;
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
62 static FILE *yuv_out;
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
63 static int write_bytes;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
64
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
65 #define Y4M_ILACE_NONE 'p' /* non-interlaced, progressive frame */
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
66 #define Y4M_ILACE_TOP_FIRST 't' /* interlaced, top-field first */
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
67 #define Y4M_ILACE_BOTTOM_FIRST 'b' /* interlaced, bottom-field first */
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
68
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
69 /* Set progressive mode as default */
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
70 static int config_interlace = Y4M_ILACE_NONE;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
71 #define Y4M_IS_INTERLACED (config_interlace != Y4M_ILACE_NONE)
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
72
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
73 static uint32_t config(uint32_t width, uint32_t height, uint32_t d_width,
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
74 uint32_t d_height, uint32_t fullscreen, char *title,
7124
eca7dbad0166 finally removed query_vaa, bes_da and vo_tune_info - the obsoleted libvo api
alex
parents: 6659
diff changeset
75 uint32_t format)
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
76 {
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
77 image_height = height;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
78 image_width = width;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
79 using_format = format;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
80
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
81 if (Y4M_IS_INTERLACED)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
82 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
83 if (height % 4)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
84 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
85 perror("yuv4mpeg: Interlaced mode requires image height to be divisable by 4");
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
86 return -1;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
87 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
88
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
89 rgb_line_buffer = malloc(image_width * 3);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
90 if (!rgb_line_buffer)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
91 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
92 perror("yuv4mpeg: Unable to allocate line buffer for interlaced mode");
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
93 return -1;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
94 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
95
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
96 if (using_format == IMGFMT_YV12)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
97 printf("yuv4mpeg: WARNING: Input not RGB; Can't seperate chrominance by fields!\n");
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
98 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
99
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
100 if (width % 2)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
101 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
102 perror("yuv4mpeg: Image width must be divisable by 2");
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
103 return -1;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
104 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
105
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
106 if(using_format != IMGFMT_YV12)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
107 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
108 rgb_buffer = malloc(image_width * image_height * 3);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
109 if (!rgb_buffer)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
110 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
111 perror("yuv4mpeg: Not enough memory to allocate RGB framebuffer");
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
112 return -1;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
113 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
114 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
115
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
116 write_bytes = image_width * image_height * 3 / 2;
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
117 image = malloc(write_bytes);
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
118
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
119 yuv_out = fopen("stream.yuv", "wb");
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
120 if (!yuv_out || image == 0)
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
121 {
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
122 perror("yuv4mpeg: Can't get memory or file handle to write stream.yuv");
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
123 return -1;
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
124 }
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
125 image_y = image;
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
126 image_u = image_y + image_width * image_height;
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
127 image_v = image_u + image_width * image_height / 4;
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
128
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
129 // This isn't right.
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
130 // But it should work as long as the file isn't interlaced
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
131 // or otherwise unusual (the "Ip A0:0" part).
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
132
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
133 /* At least the interlacing is ok now */
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
134 fprintf(yuv_out, "YUV4MPEG2 W%d H%d F%ld:%ld I%c A0:0\n",
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
135 image_width, image_height, (long)(vo_fps * 1000000.0),
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
136 (long)1000000, config_interlace);
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
137
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
138 fflush(yuv_out);
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
139 return 0;
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
140 }
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
141
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
142 static const vo_info_t* get_info(void)
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
143 {
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
144 return &vo_info;
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
145 }
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
146
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
147 /* Only use when h divisable by 2! */
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
148 static void swap_fields(uint8_t *ptr, const int h, const int stride)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
149 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
150 int i;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
151
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
152 for (i=0; i<h; i +=2)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
153 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
154 memcpy(rgb_line_buffer , ptr + stride * i , stride);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
155 memcpy(ptr + stride * i , ptr + stride * (i+1), stride);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
156 memcpy(ptr + stride * (i+1), rgb_line_buffer , stride);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
157 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
158 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
159
5832
041bd56e41dc added support for output of subtitles - Juergen Hammelmann <juergen.hammelmann@gmx.de>
arpi
parents: 4737
diff changeset
160 static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src,
041bd56e41dc added support for output of subtitles - Juergen Hammelmann <juergen.hammelmann@gmx.de>
arpi
parents: 4737
diff changeset
161 unsigned char *srca, int stride) {
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
162 switch (using_format)
5832
041bd56e41dc added support for output of subtitles - Juergen Hammelmann <juergen.hammelmann@gmx.de>
arpi
parents: 4737
diff changeset
163 {
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
164 case IMGFMT_YV12:
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
165 vo_draw_alpha_yv12(w, h, src, srca, stride,
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
166 image + y0 * image_width + x0, image_width);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
167 break;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
168
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
169 case IMGFMT_BGR|24:
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
170 case IMGFMT_RGB|24:
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
171 if (config_interlace != Y4M_ILACE_BOTTOM_FIRST)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
172 vo_draw_alpha_rgb24(w, h, src, srca, stride,
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
173 rgb_buffer + (y0 * image_width + x0) * 3, image_width * 3);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
174 else
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
175 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
176 swap_fields (rgb_buffer, image_height, image_width * 3);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
177
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
178 vo_draw_alpha_rgb24(w, h, src, srca, stride,
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
179 rgb_buffer + (y0 * image_width + x0) * 3, image_width * 3);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
180
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
181 swap_fields (rgb_buffer, image_height, image_width * 3);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
182 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
183 break;
5832
041bd56e41dc added support for output of subtitles - Juergen Hammelmann <juergen.hammelmann@gmx.de>
arpi
parents: 4737
diff changeset
184 }
041bd56e41dc added support for output of subtitles - Juergen Hammelmann <juergen.hammelmann@gmx.de>
arpi
parents: 4737
diff changeset
185 }
041bd56e41dc added support for output of subtitles - Juergen Hammelmann <juergen.hammelmann@gmx.de>
arpi
parents: 4737
diff changeset
186
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
187 static void draw_osd(void)
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
188 {
5832
041bd56e41dc added support for output of subtitles - Juergen Hammelmann <juergen.hammelmann@gmx.de>
arpi
parents: 4737
diff changeset
189 vo_draw_text(image_width, image_height, draw_alpha);
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
190 }
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
191
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
192 static void deinterleave_fields(uint8_t *ptr, const int stride,
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
193 const int img_height)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
194 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
195 unsigned int i, j, k_start = 1, modv = img_height - 1;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
196 unsigned char *line_state = malloc(modv);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
197
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
198 for (i=0; i<modv; i++)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
199 line_state[i] = 0;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
200
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
201 line_state[0] = 1;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
202
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
203 while(k_start < modv)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
204 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
205 i = j = k_start;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
206 memcpy(rgb_line_buffer, ptr + stride * i, stride);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
207
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
208 while (!line_state[j])
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
209 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
210 line_state[j] = 1;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
211 i = j;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
212 j = j * 2 % modv;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
213 memcpy(ptr + stride * i, ptr + stride * j, stride);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
214 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
215 memcpy(ptr + stride * i, rgb_line_buffer, stride);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
216
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
217 while(k_start < modv && line_state[k_start])
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
218 k_start++;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
219 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
220 free(line_state);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
221 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
222
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
223 static void vo_y4m_write(const void *ptr, const size_t num_bytes)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
224 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
225 if (fwrite(ptr, 1, num_bytes, yuv_out) != num_bytes)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
226 perror("yuv4mpeg: Error writing image to output!");
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
227 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
228
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
229 static void flip_page (void)
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
230 {
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
231 uint8_t *upper_y, *upper_u, *upper_v, *rgb_buffer_lower;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
232 int rgb_stride, uv_stride, field_height;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
233 unsigned int i, low_ofs;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
234
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
235 fprintf(yuv_out, "FRAME\n");
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
236
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
237 if (using_format != IMGFMT_YV12)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
238 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
239 rgb_stride = image_width * 3;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
240 uv_stride = image_width / 2;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
241
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
242 if (Y4M_IS_INTERLACED)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
243 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
244 field_height = image_height / 2;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
245
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
246 upper_y = image;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
247 upper_u = upper_y + image_width * field_height;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
248 upper_v = upper_u + image_width * field_height / 4;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
249 low_ofs = image_width * field_height * 3 / 2;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
250 rgb_buffer_lower = rgb_buffer + rgb_stride * field_height;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
251
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
252 deinterleave_fields(rgb_buffer, rgb_stride, image_height);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
253
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
254 rgb24toyv12(rgb_buffer, upper_y, upper_u, upper_v,
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
255 image_width, field_height,
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
256 image_width, uv_stride, rgb_stride);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
257 rgb24toyv12(rgb_buffer_lower, upper_y + low_ofs,
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
258 upper_u + low_ofs, upper_v + low_ofs,
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
259 image_width, field_height,
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
260 image_width, uv_stride, rgb_stride);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
261
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
262 /* Write Y plane */
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
263 for(i = 0; i < field_height; i++)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
264 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
265 vo_y4m_write(upper_y + image_width * i, image_width);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
266 vo_y4m_write(upper_y + image_width * i + low_ofs, image_width);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
267 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
268
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
269 /* Write U and V plane */
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
270 for(i = 0; i < field_height / 2; i++)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
271 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
272 vo_y4m_write(upper_u + uv_stride * i, uv_stride);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
273 vo_y4m_write(upper_u + uv_stride * i + low_ofs, uv_stride);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
274 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
275 for(i = 0; i < field_height / 2; i++)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
276 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
277 vo_y4m_write(upper_v + uv_stride * i, uv_stride);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
278 vo_y4m_write(upper_v + uv_stride * i + low_ofs, uv_stride);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
279 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
280 return; /* Image written; We have to stop here */
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
281 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
282
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
283 rgb24toyv12(rgb_buffer, image_y, image_u, image_v,
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
284 image_width, image_height,
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
285 image_width, uv_stride, rgb_stride);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
286 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
287
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
288 /* Write progressive frame */
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
289 vo_y4m_write(image, write_bytes);
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
290 }
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
291
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
292 static uint32_t draw_slice(uint8_t *srcimg[], int stride[], int w,int h,int x,int y)
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
293 {
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
294 int i;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
295 uint8_t *dst, *src = srcimg[0];
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
296
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
297 switch (using_format)
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
298 {
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
299 case IMGFMT_YV12:
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
300
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
301 // copy Y:
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
302 dst = image_y + image_width * y + x;
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
303 for (i = 0; i < h; i++)
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
304 {
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
305 memcpy(dst, src, w);
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
306 src += stride[0];
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
307 dst += image_width;
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
308 }
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
309 {
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
310 // copy U + V:
4706
a4400910be9f yv12 slices fix by Robert Kesterson <robertk@robertk.com>
arpi
parents: 4640
diff changeset
311 int imgstride = image_width >> 1;
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
312 uint8_t *src1 = srcimg[1];
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
313 uint8_t *src2 = srcimg[2];
4706
a4400910be9f yv12 slices fix by Robert Kesterson <robertk@robertk.com>
arpi
parents: 4640
diff changeset
314 uint8_t *dstu = image_u + imgstride * (y >> 1) + (x >> 1);
a4400910be9f yv12 slices fix by Robert Kesterson <robertk@robertk.com>
arpi
parents: 4640
diff changeset
315 uint8_t *dstv = image_v + imgstride * (y >> 1) + (x >> 1);
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
316 for (i = 0; i < h / 2; i++)
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
317 {
4706
a4400910be9f yv12 slices fix by Robert Kesterson <robertk@robertk.com>
arpi
parents: 4640
diff changeset
318 memcpy(dstu, src1 , w >> 1);
a4400910be9f yv12 slices fix by Robert Kesterson <robertk@robertk.com>
arpi
parents: 4640
diff changeset
319 memcpy(dstv, src2, w >> 1);
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
320 src1 += stride[1];
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
321 src2 += stride[2];
4706
a4400910be9f yv12 slices fix by Robert Kesterson <robertk@robertk.com>
arpi
parents: 4640
diff changeset
322 dstu += imgstride;
a4400910be9f yv12 slices fix by Robert Kesterson <robertk@robertk.com>
arpi
parents: 4640
diff changeset
323 dstv += imgstride;
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
324 }
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
325 }
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
326 break;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
327
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
328 case IMGFMT_BGR24:
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
329 case IMGFMT_RGB24:
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
330 dst = rgb_buffer + (image_width * y + x) * 3;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
331 for (i = 0; i < h; i++)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
332 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
333 memcpy(dst, src, w * 3);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
334 src += stride[0];
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
335 dst += image_width * 3;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
336 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
337 break;
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
338 }
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
339 return 0;
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
340 }
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
341
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
342 static uint32_t draw_frame(uint8_t * src[])
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
343 {
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
344 switch(using_format)
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
345 {
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
346 case IMGFMT_YV12:
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
347 // gets done in draw_slice
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
348 break;
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
349
7688
41d242c5bee1 since draw_slice() can handle packed RGB too, set the VFCAP_ACCEPT_STRIDE flag
arpi
parents: 7124
diff changeset
350 case IMGFMT_BGR24:
41d242c5bee1 since draw_slice() can handle packed RGB too, set the VFCAP_ACCEPT_STRIDE flag
arpi
parents: 7124
diff changeset
351 case IMGFMT_RGB24:
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
352 memcpy(rgb_buffer, src[0], image_width * image_height * 3);
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
353 break;
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
354 }
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
355 return 0;
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
356 }
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
357
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
358 static uint32_t query_format(uint32_t format)
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
359 {
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
360
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
361 if (Y4M_IS_INTERLACED)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
362 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
363 /* When processing interlaced material we want to get the raw RGB
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
364 * data and do the YV12 conversion ourselves to have the chrominance
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
365 * information sampled correct. */
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
366
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
367 switch(format)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
368 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
369 case IMGFMT_YV12:
7688
41d242c5bee1 since draw_slice() can handle packed RGB too, set the VFCAP_ACCEPT_STRIDE flag
arpi
parents: 7124
diff changeset
370 return VFCAP_CSP_SUPPORTED|VFCAP_OSD|VFCAP_ACCEPT_STRIDE;
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
371 case IMGFMT_BGR|24:
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
372 case IMGFMT_RGB|24:
7688
41d242c5bee1 since draw_slice() can handle packed RGB too, set the VFCAP_ACCEPT_STRIDE flag
arpi
parents: 7124
diff changeset
373 return VFCAP_CSP_SUPPORTED|VFCAP_CSP_SUPPORTED_BY_HW|VFCAP_OSD|VFCAP_ACCEPT_STRIDE;
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
374 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
375 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
376 else
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
377 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
378
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
379 switch(format)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
380 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
381 case IMGFMT_YV12:
7688
41d242c5bee1 since draw_slice() can handle packed RGB too, set the VFCAP_ACCEPT_STRIDE flag
arpi
parents: 7124
diff changeset
382 return VFCAP_CSP_SUPPORTED|VFCAP_CSP_SUPPORTED_BY_HW|VFCAP_OSD|VFCAP_ACCEPT_STRIDE;
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
383 case IMGFMT_BGR|24:
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
384 case IMGFMT_RGB|24:
7688
41d242c5bee1 since draw_slice() can handle packed RGB too, set the VFCAP_ACCEPT_STRIDE flag
arpi
parents: 7124
diff changeset
385 return VFCAP_CSP_SUPPORTED|VFCAP_OSD|VFCAP_ACCEPT_STRIDE;
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
386 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
387 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
388 return 0;
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
389 }
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
390
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
391 static void uninit(void)
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
392 {
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
393 if(image)
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
394 free(image);
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
395 image = NULL;
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
396
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
397 if(yuv_out)
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
398 fclose(yuv_out);
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
399 yuv_out = NULL;
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
400
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
401 if(rgb_buffer)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
402 free(rgb_buffer);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
403 rgb_buffer = NULL;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
404
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
405 if(rgb_line_buffer)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
406 free(rgb_line_buffer);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
407 rgb_line_buffer = NULL;
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
408 }
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
409
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
410
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
411 static void check_events(void)
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
412 {
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
413 }
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
414
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
415
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
416 static uint32_t preinit(const char *arg)
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
417 {
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
418 int arg_unrecognized = 0;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
419
4737
32e1f5042f65 I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents: 4706
diff changeset
420 if(arg)
32e1f5042f65 I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents: 4706
diff changeset
421 {
6659
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
422 /* configure output mode */
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
423 if (strcmp(arg, "interlaced"))
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
424 arg_unrecognized++;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
425 else
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
426 config_interlace = Y4M_ILACE_TOP_FIRST;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
427
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
428 if (strcmp(arg, "interlaced_bf"))
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
429 arg_unrecognized++;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
430 else
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
431 config_interlace = Y4M_ILACE_BOTTOM_FIRST;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
432
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
433 /* If both tests failed the argument is invalid */
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
434 if (arg_unrecognized == 2)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
435 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
436 printf("vo_yuv4mpeg: Unknown subdevice: %s\n", arg);
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
437 return ENOSYS;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
438 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
439 }
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
440
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
441 /* Inform user which output mode is used */
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
442 switch (config_interlace)
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
443 {
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
444 case Y4M_ILACE_TOP_FIRST:
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
445 printf("vo_yuv4mpeg: Interlaced output mode, top-field first\n");
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
446 break;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
447 case Y4M_ILACE_BOTTOM_FIRST:
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
448 printf("vo_yuv4mpeg: Interlaced output mode, bottom-field first\n");
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
449 break;
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
450 default:
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
451 printf("vo_yuv4mpeg: Using (default) progressive frame mode\n");
715d93d492c3 interlacing support - Klaus Stengel <ks1@inter-ject.de>
arpi
parents: 6213
diff changeset
452 break;
4737
32e1f5042f65 I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents: 4706
diff changeset
453 }
32e1f5042f65 I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents: 4706
diff changeset
454 return 0;
4597
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
455 }
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
456
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
457 static uint32_t control(uint32_t request, void *data, ...)
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
458 {
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
459 switch (request) {
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
460 case VOCTRL_QUERY_FORMAT:
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
461 return query_format(*((uint32_t*)data));
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
462 }
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
463 return VO_NOTIMPL;
4ba62f7d04c6 yuv4mpeg output, by Robert Kesterson <robertk@robertk.com>
arpi
parents:
diff changeset
464 }