@@ -326,6 +326,7 @@ static void load_intra_frame_mb_dependency(int p_videoFileIndex, int _stFrame, i
326
326
}
327
327
}
328
328
}
329
+ //memset(intraDep, 0, sizeof(interDep[0][0][0][0])*MAX_FRAME_NUM_IN_GOP*MAX_MB_H*MAX_MB_W*MAX_DEP_MB);
329
330
while (fgets (aLine , 40 , gVideoCodecCtxList [p_videoFileIndex ]-> g_intraDepF ) != NULL ) {
330
331
//parse the line
331
332
//get the frame number, mb position first
@@ -363,7 +364,7 @@ static void load_inter_frame_mb_dependency(int p_videoFileIndex, int _stFrame, i
363
364
if (gVideoCodecCtxList [p_videoFileIndex ]-> g_interDepF == NULL ) {
364
365
LOGE (1 , "no valid inter frame mb dependency!!!" );
365
366
}
366
- for (l_idxF = 0 ; l_idxF < MAX_FRAME_NUM_IN_GOP ; ++ l_idxF ) {
367
+ /* for (l_idxF = 0; l_idxF < MAX_FRAME_NUM_IN_GOP; ++l_idxF) {
367
368
for (l_idxH = 0; l_idxH < MAX_MB_H; ++l_idxH) {
368
369
for (l_idxW = 0; l_idxW < MAX_MB_W; ++l_idxW) {
369
370
for (l_curDepIdx = 0; l_curDepIdx < MAX_DEP_MB; ++l_curDepIdx) {
@@ -372,7 +373,8 @@ static void load_inter_frame_mb_dependency(int p_videoFileIndex, int _stFrame, i
372
373
}
373
374
}
374
375
}
375
- }
376
+ }*/
377
+ memset (interDep , 0 , sizeof (interDep [0 ][0 ][0 ][0 ])* MAX_FRAME_NUM_IN_GOP * MAX_MB_H * MAX_MB_W * MAX_DEP_MB );
376
378
while (fgets (aLine , 40 , gVideoCodecCtxList [p_videoFileIndex ]-> g_interDepF ) != NULL ) {
377
379
//get the frame number, mb position first
378
380
if ((aToken = strtok (aLine , ":" )) != NULL )
@@ -667,13 +669,14 @@ if we know the roi for the entire GOP, we can pre-calculate the needed mbs at ev
667
669
static void compute_mb_mask_from_inter_frame_dependency (int _stFrame , int _edFrame , int _stH , int _stW , int _edH , int _edW ) {
668
670
int l_i , l_j , l_k , l_m ;
669
671
LOGI (10 , "start of compute_mb_mask_from_inter_frame_dependency" );
670
- for (l_i = 0 ; l_i < MAX_FRAME_NUM_IN_GOP ; ++ l_i ) {
672
+ /* for (l_i = 0; l_i < MAX_FRAME_NUM_IN_GOP; ++l_i) {
671
673
for (l_j = 0; l_j < MAX_MB_H; ++l_j) {
672
674
for (l_k = 0; l_k < MAX_MB_W; ++l_k) {
673
675
interDepMask[l_i][l_j][l_k] = 0;
674
676
}
675
677
}
676
- }
678
+ }*/
679
+ memset (interDepMask , 0 , sizeof (interDepMask [0 ][0 ][0 ])* MAX_FRAME_NUM_IN_GOP * MAX_MB_H * MAX_MB_W );
677
680
//from last frame in the GOP, going backwards to the first frame of the GOP
678
681
//1. mark the roi as needed
679
682
for (l_i = _edFrame ; l_i >= _stFrame ; -- l_i ) {
@@ -687,12 +690,16 @@ static void compute_mb_mask_from_inter_frame_dependency(int _stFrame, int _edFra
687
690
//it's not necessary to process _stFrame, as there's no inter-dependency for it
688
691
// for (l_i = _edFrame; l_i >= _stFrame; --l_i) {
689
692
for (l_i = _edFrame ; l_i > _stFrame ; -- l_i ) {
693
+ //as we initialize the interDepMask to zero, we don't have a way to tell whether the upper left mb should be decoded, we always mark it as needed
694
+ interDepMask [l_i - 1 - _stFrame ][0 ][0 ] = 1 ;
690
695
for (l_j = 0 ; l_j <= MAX_MB_H ; ++ l_j ) {
691
696
for (l_k = 0 ; l_k <= MAX_MB_W ; ++ l_k ) {
692
697
if (interDepMask [l_i - _stFrame ][l_j ][l_k ] == 1 ) {
693
698
for (l_m = 0 ; l_m < MAX_DEP_MB ; ++ l_m ) {
694
699
//mark the needed mb in the previous frame
695
700
if ((interDep [l_i - _stFrame ][l_j ][l_k ][l_m ].h < 0 ) || (interDep [l_i - _stFrame ][l_j ][l_k ][l_m ].w < 0 ))
701
+ continue ;
702
+ if ((interDep [l_i - _stFrame ][l_j ][l_k ][l_m ].h == 0 ) && (interDep [l_i - _stFrame ][l_j ][l_k ][l_m ].w == 0 ))
696
703
continue ;
697
704
LOGI (20 , "%d,%d,%d,%d,%d,%d\n" , l_i , l_j , l_k , l_m , interDep [l_i - _stFrame ][l_j ][l_k ][l_m ].h , interDep [l_i - _stFrame ][l_j ][l_k ][l_m ].w );
698
705
interDepMask [l_i - 1 - _stFrame ][interDep [l_i - _stFrame ][l_j ][l_k ][l_m ].h ][interDep [l_i - _stFrame ][l_j ][l_k ][l_m ].w ] = 1 ;
0 commit comments