6410H264編碼rtp串流

2021-07-10 03:48:08 字數 3087 閱讀 1691

,,,,,,,,,,,,,,,,,,,,,,,,

case s3c_fimc_flag_irq_x:

dev_dbg(ctrl->dev, "irq flag is x\n");

s3c_fimc_enable_lastirq(ctrl);

s3c_fimc_disable_lastirq(ctrl);

fset_handle_irq(ctrl);

fset_irq_last(ctrl);

+++ret = s3c_fimc_frame_take;

---ret = s3c_fimc_frame_skip;

break;

,,,,,,,,,,,,,,,,,,,,,,,,

,,,,,,,,,,,,,,,,,,,,,,,,

p_demux->pf_control= control;

p_demux->p_sys     = p_sys = malloc( sizeof( demux_sys_t ) );

p_sys->p_es        = null;

p_sys->i_dts       = 0;

p_sys->f_fps       = 29.988;//修改為ov9650輸出幀率:29.988

,,,,,,,,,,,,,,,,,,,,,,,,

1、6410的camera介面輸出24mhz時鐘不精準,是不是導致輸出30幀率不準確的主要原因?雖然9650裡面有微調幀率的暫存器0x92 0x93 0x2a 0x2b。但是我只能調整到29.988。 2、

main input error: es_out_set_(group_)pcr  is called too late (pts_delay increased to 1000 ms) 和

main mux warning: late buffer for mux input

兩種輸出,這是否是因為6410產生h264資料報的時間戳有問題引起的?

總結:採集壓縮程式:

/* main process(camera previewing) */

printf("vidioc_querybuf err\n");

return -1;

}buffers[numbufs].length = buf.length;

// 轉換成相對位址

buffers[numbufs].start = mmap(null, buf.length,

prot_read | prot_write,

map_shared,

cam_c_fp, buf.m.offset);

if (buffers[numbufs].start == map_failed)

// 放入快取佇列

if (ioctl(cam_c_fp, vidioc_qbuf, &buf) == -1)

}#endif

printf("\n[8. camera preview & mfc encoding]\n");

printf("forlinx embedded, %s\n", version);

printf("using ip          : mfc, post processor, lcd, camera\n");

printf("display size      : (%dx%d)\n", g_lcd_width, g_lcd_height);

/***************** encoding thread *****************/

void encoding_thread(void)

if (encoding_flag == true)

/* codec start */

start = 1;

ret = ioctl(cam_c_fp, vidioc_streamon, &start);

if (ret < 0)

struct timeval t_start, t_end;

long cost_time = 0;

for (yuv_cnt = 0; yuv_cnt < frame_num; yuv_cnt++)

#endif

#if 1

ret = ioctl(cam_c_fp, vidioc_dqbuf, &buf);

if (ret < 0)

#endif

#if 1

if(frame_count == 1)

encoded_buf = mfc_encoder_exe(handle, g_yuv, g_yuv_frame_buffer_size, 1, &encoded_size);

else

encoded_buf = mfc_encoder_exe(handle, g_yuv, g_yuv_frame_buffer_size, 0, &encoded_size);

#endif

gettimeofday(&t_end, null);

cost_time = t_end.tv_usec - t_start.tv_usec;

printf("cost a time: %ld us\n", cost_time);

//重新放入快取佇列

if (ioctl(cam_c_fp, vidioc_qbuf, &buf) == -1)

fwrite(encoded_buf, 1, encoded_size, encoded_fp);

}frame_count = 0;

/* codec stop */

start = 0;

ret = ioctl(cam_c_fp, vidioc_streamoff, &start);

if (ret < 0)

printf("100 frames were encoded\n");

printf("\nselect ==> ");

mfc_encoder_free(handle);

fclose(encoded_fp);

encoding_flag = false;

pthread_mutex_unlock(&mutex);}}

} ————————ov9650 配置vga 30fps————————

H 264RTP封包原理

1.引言 2.rtp 協議關鍵引數的設定 其中比較關鍵的引數設定解釋如下 1 標示位 m 1 位,該標示位的含義一般由具體的 應用框架 profile 定義,目的在於標記處rtp 流中的重要事件。3 序號 16 位,每傳送乙個 rtp 資料報,序號加 1。接受者可以用它來檢測分組丟失和恢復分組順序。...

H264 RTP封包原理

1.引言 2.rtp 協議關鍵引數的設定 其中比較關鍵的引數設定解釋如下 1 標示位 m 1 位,該標示位的含義一般由具體的 應用框架 profile 定義,目的在於標記處rtp 流中的重要事件。3 序號 16 位,每傳送乙個 rtp 資料報,序號加 1。接受者可以用它來檢測分組丟失和恢復分組順序。...

RTP封裝H264詳解

nalu buff nal資料buff len nal資料長度 cnt 包數 max fu size 每包長度,一般1400 nalu type nal型別 cnt len max fu size 0 len max fu size len max fu size 1 nalu type buff ...