int Private_Impl_Still::createEncoder() {
    if ( mmal_component_create ( MMAL_COMPONENT_DEFAULT_IMAGE_ENCODER, &encoder ) ) {
        cout << API_NAME << ": Could not create encoder component.\n";
        destroyEncoder();
        return -1;
    }
    if ( !encoder->input_num || !encoder->output_num ) {
        cout << API_NAME << ": Encoder does not have input/output ports.\n";
        destroyEncoder();
        return -1;
    }

    encoder_input_port = encoder->input[0];
    encoder_output_port = encoder->output[0];

    mmal_format_copy ( encoder_output_port->format, encoder_input_port->format );
    encoder_output_port->format->encoding = convertEncoding ( encoding ); // Set output encoding
    encoder_output_port->buffer_size = encoder_output_port->buffer_size_recommended;
    if ( encoder_output_port->buffer_size < encoder_output_port->buffer_size_min )
        encoder_output_port->buffer_size = encoder_output_port->buffer_size_min;
    encoder_output_port->buffer_num = encoder_output_port->buffer_num_recommended;
    if ( encoder_output_port->buffer_num < encoder_output_port->buffer_num_min )
        encoder_output_port->buffer_num = encoder_output_port->buffer_num_min;

    if ( mmal_port_format_commit ( encoder_output_port ) ) {
        cout << API_NAME << ": Could not set format on encoder output port.\n";
        destroyEncoder();
        return -1;
    }
    if ( mmal_component_enable ( encoder ) ) {
        cout << API_NAME << ": Could not enable encoder component.\n";
        destroyEncoder();
        return -1;
    }
    if ( ! ( encoder_pool = mmal_port_pool_create ( encoder_output_port, encoder_output_port->buffer_num, encoder_output_port->buffer_size ) ) ) {
        cout << API_NAME << ": Failed to create buffer header pool for encoder output port.\n";
        destroyEncoder();
        return -1;
    }
    return 0;
}
Exemplo n.º 2
0
void tearDown() {
	if (expectClean) {
		EncoderError err = getEncoderError(encoder);
		TEST_ASSERT_EQUAL(0, err.errorMask);
		TEST_ASSERT_EQUAL(0, err.errors);
	}

	encoder = destroyEncoder(encoder);
	TEST_ASSERT_FALSE(IsValid(encoder));
	TEST_ASSERT_EQUAL(PinNoOccupation, pinOccupation(testPin1));
	TEST_ASSERT_EQUAL(PinNoOccupation, pinOccupation(testPin2));
	TEST_ASSERT_EQUAL(0, countEncoders());

	destroy_fake_port();
	tearDownPinChangeInterrupts();
}
Exemplo n.º 3
0
void test_two_encoders() {
	Encoder encoder2 = newEncoder(0, 2, 3, testPin3, testPin4, 0);
	TEST_ASSERT(encoderValid(encoder2));

	TEST_ASSERT_EQUAL(0, encoderState(encoder));
	TEST_ASSERT_EQUAL(0, encoderState(encoder2));

	trigger(TRUE);
	trigger(TRUE);
	TEST_ASSERT_EQUAL(2*4, encoderState(encoder));
	TEST_ASSERT_EQUAL(0, encoderState(encoder2));

	invokePinChangeInterrupt(0, _BV(2));
	invokePinChangeInterrupt(0, _BV(2) | _BV(3));
	invokePinChangeInterrupt(0, _BV(3));
	invokePinChangeInterrupt(0, 0);
	TEST_ASSERT_EQUAL(2*4, encoderState(encoder));
	TEST_ASSERT_EQUAL(1*4, encoderState(encoder2));	

	encoder2 = destroyEncoder(encoder2);
	TEST_ASSERT_FALSE(IsValid(encoder2));
}
Exemplo n.º 4
0
void SpeexPlugin::endSession() {
	disablePreprocessing();
	destroyEncoder();
	destroyDecoder();
}
Exemplo n.º 5
0
SpeexPlugin::~SpeexPlugin() {
	if (encoder)
		destroyEncoder();
	if (decoder)
		destroyDecoder();
}