1/* 2 * Copyright (C) 2006-2008 Marcus Overhagen <marcus@overhagen.de>. All rights reserved. 3 * Copyright (C) 2008 Maurice Kalinowski <haiku@kaldience.com>. All rights reserved. 4 * 5 * Distributed under the terms of the MIT License. 6 */ 7#include "VideoAddOn.h" 8#include "VideoNode.h" 9#include "VideoView.h" 10#include "debug.h" 11 12 13#include <stdio.h> 14#include <string.h> 15 16 17VideoWindowAddOn::VideoWindowAddOn(image_id id) 18 : BMediaAddOn(id) 19{ 20 CALLED(); 21 22 fInputFormat.type = B_MEDIA_RAW_VIDEO; 23 fInputFormat.u.raw_video = media_raw_video_format::wildcard; 24 25 fInfo.internal_id = 0; 26 fInfo.name = strdup("VideoWindow Consumer"); 27 fInfo.info = strdup("This node displays a simple video window"); 28 fInfo.kinds = B_BUFFER_CONSUMER; 29 fInfo.flavor_flags = 0; 30 fInfo.possible_count = 0; 31 fInfo.in_format_count = 1; 32 fInfo.in_format_flags = 0; 33 fInfo.in_formats = &fInputFormat; 34 fInfo.out_format_count = 0; 35 fInfo.out_formats = 0; 36 fInfo.out_format_flags = 0; 37} 38 39 40VideoWindowAddOn::~VideoWindowAddOn() 41{ 42} 43 44 45 46bool 47VideoWindowAddOn::WantsAutoStart() 48{ 49 CALLED(); 50 return false; 51} 52 53 54int32 55VideoWindowAddOn::CountFlavors() 56{ 57 CALLED(); 58 return 1; 59} 60 61 62status_t 63VideoWindowAddOn::GetFlavorAt(int32 cookie, const flavor_info **flavorInfo) 64{ 65 CALLED(); 66 if (cookie != 0) 67 return B_BAD_INDEX; 68 69 *flavorInfo = &fInfo; 70 return B_OK; 71} 72 73 74BMediaNode* 75VideoWindowAddOn::InstantiateNodeFor(const flavor_info *info, BMessage*, status_t *outError) 76{ 77 CALLED(); 78 if (!outError) 79 return NULL; 80 81 if (info->in_formats[0].type != B_MEDIA_RAW_VIDEO) { 82 *outError = B_MEDIA_BAD_FORMAT; 83 return NULL; 84 } 85 86 BRect size; 87 if (info->in_formats[0].u.raw_video.display.line_width != 0) 88 size.right = info->in_formats[0].u.raw_video.display.line_width; 89 else 90 size.right = 320; 91 if (info->in_formats[0].u.raw_video.display.line_count != 0) 92 size.bottom = info->in_formats[0].u.raw_video.display.line_count; 93 else 94 size.bottom = 240; 95 96 VideoNode* node = new VideoNode("Video Node", this, info->internal_id); 97 98 return node; 99} 100 101 102extern "C" BMediaAddOn *make_media_addon(image_id id) 103{ 104 return new VideoWindowAddOn(id); 105} 106