Ejemplo n.º 1
0
bool StreamReader::rwAsync()
{
  if (nullptr == pool)
    {
      pool = std::make_shared<ZMBCommon::ThreadsPool>(2);
      file_pkt_q->imbue(pool);
    }
  ZMBCommon::CallableDoubleFunc readTask;
  readTask.functor = [=]()
  {
      AVPacket pkt;
      ::memset(&pkt, 0x00, sizeof(AVPacket));
      av_init_packet(&pkt);
      int res = ff.read_frame(&pkt);
      if (res < 0)
        {
          return;
        }
      //dispatch the packet for writing:
      auto avpkt = std::make_shared<av::Packet> ();
      avpkt->deep_copy(&pkt);
      av::Rational tb(*ff.get_timebase());
      avpkt->setTimeBase(tb);
      assert(avpkt->getSize() > 0);

      ZMBCommon::CallableDoubleFunc writeTask;
      writeTask.functor = [=]()
      {
          file_pkt_q->writeAsync(avpkt);
      };
      pool->submit(writeTask);

    };
  pool->submit(readTask);
}
Ejemplo n.º 2
0
void
MediaPictureImpl::copy(AVFrame* src, bool complete) {
  if (!src)
    VS_THROW(HumbleInvalidArgument("no src"));
  // release any memory we have
  av_frame_unref(mFrame);
  // and copy any data in.
  av_frame_ref(mFrame, src);
  RefPointer<Rational> timeBase = getTimeBase();
  setTimeBase(timeBase.value());
  mComplete=complete;
}
Ejemplo n.º 3
0
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void init(void)
{
	play_led_en();
	play_led_off();

	dbg_led_en();
	dbg_led_on();

	// initialize effects
	sfx_init();

	// initialize SPI EEPROM support
	spie_init();

	// initialize USART
	uart_init();

	// setup the UART receive interrupt handler
	uartBeginReceive(&receiveCallback);

	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	// establish event timer & handler
	// timer1, event timer
	// Set CTC mode (Clear Timer on Compare Match) (p.133)
	// Have to set OCR1A *before anything else*, otherwise it gets reset to 0!
	PRR		&=	~(1<<PRTIM1);
	OCR1A	=	(F_CPU / SAMPLE_RATE);
	TCCR1A	=	0;
	TCCR1B	=	(1<<WGM12) |	// CTC
				(1<<CS10);
	TIMSK1	=	(1<<OCIE1A);

	setTimeBase(SAMPLE_RATE);

	// setup sleep mode
	set_sleep_mode(SLEEP_MODE_PWR_DOWN);
	sleep_enable();

	// setup switch input
	SWITCH_DDR		&= ~(1<<SWITCH_PIN);
	SWITCH_PINS		|= (1<<SWITCH_PIN);
	SWITCH_PCMSK	|= (1<<SWITCH_PCINT);
	PCICR			|= (1<<SWITCH_PCICR);


	registerHighPriorityEvent(fadeStatusLed, 0, EVENT_STATE_NONE);
	registerEvent(readNextStatusVal, 500, EVENT_STATE_NONE);

	// enable all interrupts
	sei();
}
Ejemplo n.º 4
0
bool StreamReader::rwSync()
{
  AVPacket pkt;
  av_init_packet(&pkt);

  int res = ff.read_frame(&pkt);
  if (res >= 0)
    {
      /*copy contents*/
      auto avpkt = std::make_shared<av::Packet> (&pkt);
      av::Rational tb(*ff.get_timebase());
      avpkt->setTimeBase(tb);
      assert(avpkt->getSize() > 0);
      file_pkt_q->writeSync(avpkt);
    }
  return res >= 0;
}
Ejemplo n.º 5
0
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - -
// initialize the application
void init(void)
{
	_lastChannel			= 0;
	_samples[CHANNEL_BLU]	= 0;
	_samples[CHANNEL_GRN]	= 0;


	// enable ADC & timer1
	PRR =	(1<<PRTWI) |
			(1<<PRTIM2) |
			(0<<PRTIM1) |
			(1<<PRTIM0)	|
			(0<<PRADC);
	
	// prepare ADC
	ADMUX =	(0<<REFS1) |
			(1<<REFS0) |
			(1<<ADLAR);			// left adjust (ADCH has the most-significant 8 bits)

	// setup
	ADCSRA = (1<<ADEN) |
			(0<<ADSC) |
			(0<<ADATE) |
			(1<<ADIF) |
			(1<<ADIE) |
			(1<<ADPS2) |	// prescale should be ~160 (20mHz/125kHz = 160)
			(0<<ADPS1) |
			(1<<ADPS0);

	// setup
	ADCSRB = (0<<ACME) |
			(0<<ADTS2) |
			(0<<ADTS1) |
			(0<<ADTS0);

	// disable digial inputs
	DIDR0 &= ~((1<<ADC1D) | (1<<ADC0D));

	// setup the input channels
	DDRC &= ~((1<<ADC0D) | (1<<ADC1D));

	// setup the LEDs
	leds_en();

	// setup the amp mute	
	aud_ctrl_en();
	AUD_CTRL_PORT	|= (1<<AUD_CTRL_PIN);

	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	// establish event timer & handler
	// timer1, event timer
	// Set CTC mode (Clear Timer on Compare Match) (p.133)
	// Have to set OCR1A *before anything else*, otherwise it gets reset to 0!
	OCR1A	=	(F_CPU / SAMPLE_RATE);
	TCCR1A	=	0;
	TCCR1B	=	(1<<WGM12) |	// CTC
				(1<<CS10);
	TIMSK1	=	(1<<OCIE1A);

	setTimeBase(SAMPLE_RATE);
	
	sei();
}
Ejemplo n.º 6
0
void
MediaRaw::setTimeBase(Rational* timeBase)
{
  setTimeBase(timeBase, Rational::ROUND_DOWN);
}