private MMalPort[] CreatePorts(MMal.MMAL_PORT_T **ports, uint numPort, string[] subFormat) { MMalPort[] array = new MMalPort[numPort]; for (int i = 0; i < numPort; i++) { switch (ports[i]->format->type) { case MMal.MMAL_ES_TYPE_T.MMAL_ES_TYPE_UNKNOWN: array[i] = new MMalPort(ports[i], subFormat); break; case MMal.MMAL_ES_TYPE_T.MMAL_ES_TYPE_CONTROL: array[i] = new MMalPort(ports[i], new string[] { }); break; case MMal.MMAL_ES_TYPE_T.MMAL_ES_TYPE_VIDEO: array[i] = new MMalVideoPort(ports[i], subFormat); break; case MMal.MMAL_ES_TYPE_T.MMAL_ES_TYPE_AUDIO: array[i] = new MMalAudioPort(ports[i], subFormat); break; // TODO case MMal.MMAL_ES_TYPE_T.MMAL_ES_TYPE_SUBPICTURE: default: throw new Exception(String.Format("Invalid port format type {0}", ports[i]->format->type)); } } return(array); }
public MMalBaseComponent() { // mmal_check( // mmal.mmal_component_create(self.component_type, self._component), // prefix = "Failed to create MMAL component %s" % self.component_type) //if self._component[0].input_num != len(self.opaque_input_subformats): // raise PiCameraRuntimeError( // 'Expected %d inputs but found %d on component %s' % ( // len(self.opaque_input_subformats), // self._component[0].input_num, // self.component_type)) // if self._component[0].output_num != len(self.opaque_output_subformats): // raise PiCameraRuntimeError( // 'Expected %d outputs but found %d on component %s' % ( // len(self.opaque_output_subformats), // self._component[0].output_num, // self.component_type)) MMal.MMAL_STATUS_T status; MMal.MMAL_COMPONENT_T *component = null; status = MMal.mmal_component_create(ComponentType, &component); if (status != MMal.MMAL_STATUS_T.MMAL_SUCCESS) { throw new Exception(String.Format("Unable to create component {0}, status {1}. Is it enabled ?", ComponentType, status)); } _component = component; #if !_WIN32_ if (_component->input_num != OpaqueInputSubformats.Length) { throw new Exception(String.Format("Expected {0} inputs but found {1} on component {2}", OpaqueInputSubformats.Length, _component->input_num, ComponentType)); } if (_component->output_num != OpaqueOutputSubformats.Length) { throw new Exception(String.Format("Expected {0} outputs but found {1} on component {2}", OpaqueOutputSubformats.Length, _component->output_num, ComponentType)); } #endif Control = new MMalControlPort(_component->control); MMal.MMAL_PORT_T **ports = _component->output; Outputs = CreatePorts(ports, _component->output_num, OpaqueOutputSubformats); ports = _component->input; Inputs = CreatePorts(ports, _component->input_num, OpaqueInputSubformats); //port_class = { // mmal.MMAL_ES_TYPE_UNKNOWN: MMALPort, // mmal.MMAL_ES_TYPE_CONTROL: MMALControlPort, // mmal.MMAL_ES_TYPE_VIDEO: MMALVideoPort, // mmal.MMAL_ES_TYPE_AUDIO: MMALAudioPort, // mmal.MMAL_ES_TYPE_SUBPICTURE: MMALSubPicturePort, // } //self._inputs = tuple( // port_class[self._component[0].input[n][0].format[0].type]( // self._component[0].input[n], opaque_subformat) //for n, opaque_subformat in enumerate(self.opaque_input_subformats)) // self._outputs = tuple( // port_class[self._component[0].output[n][0].format[0].type]( // self._component[0].output[n], opaque_subformat) //for n, opaque_subformat in enumerate(self.opaque_output_subformats)) //Outputs = new MMalPort[_component->output_num]; //MMal.MMAL_PORT_T** ports = _component->output; //for (int i = 0; i < _component->output_num; i++) // Outputs[i] = new MMalPort(ports[i]); //Inputs = new MMalPort[_component->input_num]; //ports = _component->input; //for (int i = 0; i < _component->input_num; i++) // Inputs[i] = new MMalPort(ports[i]); }