Author: tack
Date: Sun Feb 24 12:28:07 2008
New Revision: 3128
Log:
Remove deprecated code from old method of frame-to-shmem output.
Modified:
trunk/xine/src/drivers/kaa.c
trunk/xine/src/drivers/x11.c
Modified: trunk/xine/src/drivers/kaa.c
==============================================================================
--- trunk/xine/src/drivers/kaa.c (original)
+++ trunk/xine/src/drivers/kaa.c Sun Feb 24 12:28:07 2008
@@ -29,20 +29,11 @@
int yv12_strides[3];
// Frame notification
- //yuv2rgb_factory_t *yuv2rgb_factory;
uint8_t *shmem, *buffers[NUM_FRAME_BUFFERS];
int do_notify_frame, notify_fd, shm_id, cur_buffer_idx, buffer_size;
- // Not used right now.
- int notify_frame_width, notify_frame_height;
-
} kaa_vo_user_data;
-typedef struct _kaa_frame_user_data {
- //yuv2rgb_t *yuv2rgb;
-} kaa_frame_user_data;
-
-
typedef struct {
uint8_t lock;
uint16_t width, height, stride;
@@ -55,92 +46,6 @@
char padding[8];
} notify_packet_t;
-
-#if 0
-
-static void
-_alloc_yv12(kaa_vo_user_data *user_data, int width, int height)
-{
- int i;
-
- user_data->yv12_strides[0] = 8*((width + 7) / 8);
- user_data->yv12_strides[1] = 8*((width + 15) / 16);
- user_data->yv12_strides[2] = 8*((width + 15) / 16);
-
- for (i = 0; i < 3; i++) {
- if (user_data->yv12_planes[i])
- free(user_data->yv12_planes[i]);
-
- user_data->yv12_planes[i] = (uint8_t *)memalign(16,
user_data->yv12_strides[i] * (height >> (i > 0)));
- }
- user_data->yv12_width = width;
- user_data->yv12_height = height;
-}
-
-
-static void
-_kaa_frame_to_buffer(kaa_vo_user_data *user_data, vo_frame_t *frame,
kaa_frame_user_data *frame_user_data,
- int dst_width, int dst_height)
-{
- int y_stride = frame->pitches[0],
- uv_stride = frame->pitches[1];
- if (dst_width <= 0 || dst_height <= 0)
- return;
-
- // TODO: use swscaler when it's available.
-
- if (frame->format == XINE_IMGFMT_YUY2 && dst_width*dst_height >
YUY2_SIZE_THRESHOLD) {
- y_stride = 8*((frame->width + 7) / 8);
- uv_stride = 8*((frame->width + 15) / 16);
- }
-
- if (frame->width != frame_user_data->yuv2rgb->source_width ||
- frame->height != frame_user_data->yuv2rgb->source_height ||
- (frame->format == XINE_IMGFMT_YV12 && (
- y_stride != frame_user_data->yuv2rgb->y_stride ||
- uv_stride != frame_user_data->yuv2rgb->uv_stride)
- ) ||
- (frame->format == XINE_IMGFMT_YUY2 &&
- y_stride != frame_user_data->yuv2rgb->y_stride
- ) ||
- dst_width != frame_user_data->yuv2rgb->dest_width ||
- dst_height != frame_user_data->yuv2rgb->dest_height) {
-
- frame_user_data->yuv2rgb->configure(frame_user_data->yuv2rgb,
frame->width, frame->height,
- y_stride, uv_stride, dst_width, dst_height, 4*dst_width);
-
- }
-
- if (frame->format == XINE_IMGFMT_YV12) {
- frame_user_data->yuv2rgb->yuv2rgb_fun(frame_user_data->yuv2rgb,
- user_data->frame_buffer + 16, frame->base[0], frame->base[1],
frame->base[2]);
- } else {
- if (dst_width * dst_height > YUY2_SIZE_THRESHOLD) {
- // Naive optimization: yuv2rgb has an accelerated version
- // but yuy22rgb doesn't. So when the area of the image is
- // greater than the size threshold (determined empirically)
- // first convert the yuy2 image to yv12 and then convert
- // yv12 to rgb, both operations of which are accelerated.
- if (user_data->yv12_width != frame->width ||
user_data->yv12_height != frame->height)
- _alloc_yv12(user_data, frame->width, frame->height);
-
- yuy2_to_yv12(frame->base[0], frame->pitches[0],
- user_data->yv12_planes[0], user_data->yv12_strides[0],
- user_data->yv12_planes[1], user_data->yv12_strides[1],
- user_data->yv12_planes[2], user_data->yv12_strides[2],
- frame->width, frame->height);
- frame_user_data->yuv2rgb->yuv2rgb_fun (frame_user_data->yuv2rgb,
user_data->frame_buffer + 16,
- user_data->yv12_planes[0],
- user_data->yv12_planes[1],
- user_data->yv12_planes[2]);
- } else {
- frame_user_data->yuv2rgb->yuy22rgb_fun(frame_user_data->yuv2rgb,
user_data->frame_buffer + 16,
- frame->base[0]);
- }
- }
-}
-#endif
-
static int
setup_shmem(kaa_vo_user_data *user_data, int stride, int height)
{
@@ -196,12 +101,16 @@
handle_frame_cb(int cmd, vo_frame_t *frame, void **frame_user_data_gen, void
*data)
{
kaa_vo_user_data *user_data = (kaa_vo_user_data *)data;
- //kaa_frame_user_data *frame_user_data = *(kaa_frame_user_data
**)frame_user_data_gen;
if (cmd == KAA_VO_HANDLE_FRAME_DISPLAY_PRE_OSD &&
user_data->do_notify_frame) {
uint8_t *lock, *y_dst, *u_dst, *v_dst;
int stride = (frame->format == XINE_IMGFMT_YUY2) ? frame->pitches[0]
>> 1: frame->pitches[0];
+ if (user_data->notify_fd == -1) {
+ printf("[export] no notify_fd specified, can't export frame.\n");
+ return 0;
+ }
+
if (32 + stride*frame->height*2 > user_data->buffer_size)
setup_shmem(user_data, stride, frame->height);
@@ -243,7 +152,7 @@
memcpy(user_data->buffers[user_data->cur_buffer_idx], &header,
sizeof(header));
*lock = 1;
- // TODO: check return value
+ // TODO: check return value for write()
write(user_data->notify_fd, ¬ify, sizeof(notify));
fsync(user_data->notify_fd);
@@ -256,65 +165,6 @@
if (user_data->cur_buffer_idx == NUM_FRAME_BUFFERS)
user_data->cur_buffer_idx = 0;
}
-
-#if 0
- switch (cmd) {
- case KAA_VO_HANDLE_FRAME_DISPLAY_PRE_OSD:
- {
- case KAA_VO_HANDLE_FRAME_ALLOC:
- *frame_user_data_gen = malloc(sizeof(kaa_frame_user_data));
- frame_user_data = *(kaa_frame_user_data **)frame_user_data_gen;
- memset(frame_user_data, 0, sizeof(kaa_frame_user_data));
- frame_user_data->yuv2rgb =
user_data->yuv2rgb_factory->create_converter(user_data->yuv2rgb_factory);
- break;
-
-
- case KAA_VO_HANDLE_FRAME_DISPOSE:
- frame_user_data->yuv2rgb->dispose(frame_user_data->yuv2rgb);
- free(*frame_user_data_gen);
- break;
-
- case KAA_VO_HANDLE_FRAME_DISPLAY_PRE_OSD: {
- struct { short lock, width, height; double aspect; } header = {
.lock = 0x10 };
- struct timeval curtime;
- struct timezone tz;
- double start_time, now;
- int dst_width = user_data->notify_frame_width,
- dst_height = user_data->notify_frame_height;
-
- if (!user_data->frame_buffer || !user_data->do_notify_frame)
- break;
-
- // Wait at most 0.1 seconds for the client to unlock the buffer.
- gettimeofday(&curtime, &tz);
- start_time = now = curtime.tv_sec +
(curtime.tv_usec/(1000.0*1000));
- while (user_data->frame_buffer[0] == 0x20 && now - start_time <
0.1) {
- gettimeofday(&curtime, &tz);
- now = curtime.tv_sec + (curtime.tv_usec/(1000.0*1000));
- usleep(1);
- }
- if (now - start_time >= 0.1)
- break;
-
- if (dst_width == -1)
- dst_width = frame->width;
- if (dst_height == -1)
- dst_height = frame->height;
-
- _kaa_frame_to_buffer(user_data, frame, frame_user_data, dst_width,
dst_height);
-
- header.width = dst_width;
- header.height = dst_height;
- header.aspect = frame->ratio;
- memcpy(user_data->frame_buffer, &header, sizeof(header));
- *user_data->frame_buffer = 0x20;
-
- // TODO: could callback into python to notify new frame. (Note:
- // we're in a thread here, will require GIL.)
- break;
- }
- }
-#endif
return 0;
}
@@ -355,10 +205,10 @@
args = Py_BuildValue("(iid)", width, height, aspect);
result = PyEval_CallObject(user_data->osd_configure_cb, args);
if (result) {
- PyObject *py_osd_buffer, *py_frame_buffer = 0;
+ PyObject *py_osd_buffer;
int buflen = -1;
- if (!PyArg_ParseTuple(result, "Oi|O", &py_osd_buffer,
buffer_stride_return, &py_frame_buffer))
+ if (!PyArg_ParseTuple(result, "Oi", &py_osd_buffer,
buffer_stride_return))
goto bail;
if ((*buffer_return = _get_ptr_from_pyobject(py_osd_buffer, &buflen))
== 0)
@@ -367,14 +217,6 @@
PyErr_Format(PyExc_ValueError, "OSD buffer is not big enough");
goto bail;
}
-/*
- if (py_frame_buffer && (frame_buffer =
_get_ptr_from_pyobject(py_frame_buffer, &buflen)))
- user_data->frame_buffer = frame_buffer;
- if (buflen != -1 && buflen < width * height * 4) {
- PyErr_Format(PyExc_ValueError, "Frame buffer is not big enough");
- goto bail;
- }
-*/
}
bail:
@@ -411,10 +253,6 @@
type_check(cmd_arg, Bool, "Argument must be a boolean");
user_data->do_notify_frame = PyLong_AsLong(cmd_arg);
}
- else if (!strcmp(command, "set_notify_frame_size")) {
- if (!PyArg_ParseTuple(cmd_arg, "ii", &user_data->notify_frame_width,
&user_data->notify_frame_height))
- return NULL;
- }
else if (!strcmp(command, "set_passthrough")) {
type_check(cmd_arg, Bool, "Argument must be a boolean");
gui_send(SET_PASSTHROUGH, PyLong_AsLong(cmd_arg));
@@ -490,7 +328,6 @@
if (user_data->passthrough_visual)
free(user_data->passthrough_visual);
- //user_data->yuv2rgb_factory->dispose(user_data->yuv2rgb_factory);
for (i = 0; i < 3; i++) {
if (user_data->yv12_planes[i])
free(user_data->yv12_planes[i]);
@@ -582,11 +419,8 @@
user_data->common.dealloc_cb = kaa_driver_dealloc;
user_data->passthrough_visual = passthrough_visual;
user_data->passthrough_driver_info = passthrough_driver_info;
- user_data->notify_frame_width = -1;
- user_data->notify_frame_height = -1;
user_data->do_notify_frame = 0;
user_data->notify_fd = notify_fd;
- //user_data->yuv2rgb_factory = yuv2rgb_factory_init(MODE_32_RGB,
0, NULL);
vis.osd_configure_cb_data = user_data;
vis.handle_frame_cb_data = user_data;
Modified: trunk/xine/src/drivers/x11.c
==============================================================================
--- trunk/xine/src/drivers/x11.c (original)
+++ trunk/xine/src/drivers/x11.c Sun Feb 24 12:28:07 2008
@@ -169,7 +169,7 @@
frame_output_callback = PyDict_GetItemString(kwargs, "frame_output_cb");
dest_size_callback = PyDict_GetItemString(kwargs, "dest_size_cb");
- if (!frame_output_callback || !dest_size_callback) {
+ if (!frame_output_callback && !dest_size_callback) {
PyErr_Format(xine_error, "Must specify frame_output_cb or
dest_size_cb");
return 0;
}
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog