@@ -137,7 +137,7 @@ void *gm_audio_thread(void)
137137 (gm_aud_cb )(& outFrame );
138138 }
139139 }
140- }
140+ }
141141 }
142142abort :
143143 HAL_INFO ("gm_venc" , "Shutting down encoding thread...\n" );
@@ -148,7 +148,7 @@ int gm_channel_bind(char index)
148148{
149149 int ret ;
150150
151- _gm_venc_fds [index ].bind =
151+ _gm_venc_fds [index ].bind =
152152 gm_lib .fnBind (_gm_cap_grp , _gm_cap_dev , _gm_venc_dev [index ]);
153153 _gm_venc_fds [index ].evType = GM_POLL_READ ;
154154
@@ -228,7 +228,7 @@ void gm_region_destroy(char handle)
228228}
229229
230230int gm_region_setbitmap (char handle , hal_bitmap * bitmap )
231- {
231+ {
232232 gm_osd_imgs bitmaps = {
233233 .image = {
234234 {
@@ -293,7 +293,7 @@ int gm_video_create(char index, hal_vidconfig *config)
293293 break ;
294294 case HAL_VIDPROFILE_HIGH :
295295 h264chn .profile = GM_VENC_H264PROF_HIGH ;
296- break ;
296+ break ;
297297 }
298298 h264chn .level = 41 ;
299299 gm_lib .fnSetDeviceConfig (_gm_venc_dev [index ], & h264chn );
@@ -419,25 +419,27 @@ void *gm_video_thread(void)
419419 outPack [0 ].offset = 0 ;
420420 outPack [0 ].timestamp = pack -> timestamp ;
421421
422- signed char n = 0 ;
423- for (unsigned int p = 0 ; p < pack -> bsSize - 4 ; p ++ ) {
424- if (pack -> bsData [p ] || pack -> bsData [p + 1 ] ||
425- pack -> bsData [p + 2 ] || pack -> bsData [p + 3 ] != 1 ) continue ;
426- outPack [0 ].nalu [n ].type = pack -> bsData [p + 4 ] & 0x1F ;
427- outPack [0 ].nalu [n ++ ].offset = p ;
428- if (n == (pack -> isKeyFrame ? 3 : 1 )) break ;
422+ unsigned int n = 0 , sc , scanOff = 0 ;
423+ unsigned int pktLen = pack -> bsSize ;
424+ while ((sc = nal_find_startcode (pack -> bsData , scanOff , pktLen )) < pktLen ) {
425+ unsigned int scLen = (pack -> bsData [sc + 2 ] == 1 ) ? 3 : 4 ;
426+ outPack [0 ].nalu [n ].type = pack -> bsData [sc + scLen ] & 0x1F ;
427+ outPack [0 ].nalu [n ].offset = sc ;
428+ n ++ ;
429+ scanOff = sc + scLen ;
430+ if (n == (pack -> isKeyFrame ? 3u : 1u )) break ;
429431 }
430432 outPack [0 ].naluCnt = n ;
431- outPack [0 ].nalu [n ].offset = pack -> bsSize ;
433+ outPack [0 ].nalu [n ].offset = pktLen ;
432434 for (n = 0 ; n < outPack [0 ].naluCnt ; n ++ )
433- outPack [0 ].nalu [n ].length =
435+ outPack [0 ].nalu [n ].length =
434436 outPack [0 ].nalu [n + 1 ].offset -
435437 outPack [0 ].nalu [n ].offset ;
436438
437439 outStrm .pack = outPack ;
438440 (* gm_vid_cb )(i , & outStrm );
439441 }
440- }
442+ }
441443 }
442444abort :
443445 HAL_INFO ("gm_venc" , "Shutting down encoding thread...\n" );
@@ -464,4 +466,4 @@ int gm_system_init(void)
464466 return EXIT_SUCCESS ;
465467}
466468
467- #endif
469+ #endif
0 commit comments