@@ -184,7 +184,9 @@ void free_selected_decoding_fields(int p_videoFileIndex, int _mbHeight) {
184
184
}
185
185
186
186
int * mbStartPos ;
187
+ int mapStLen ;
187
188
int * mbEndPos ;
189
+ int mapEdLen ;
188
190
189
191
struct MBIdx intraDep [MAX_FRAME_NUM_IN_GOP ][MAX_MB_H ][MAX_MB_W ][MAX_DEP_MB ];
190
192
struct MBIdx interDep [MAX_FRAME_NUM_IN_GOP ][MAX_MB_H ][MAX_MB_W ][MAX_DEP_MB ];
@@ -237,6 +239,15 @@ int interDepMask[MAX_FRAME_NUM_IN_GOP][MAX_MB_H][MAX_MB_W];
237
239
}
238
240
LOGI(10, "+++++load_frame_mb_index finished, exit the function");
239
241
}*/
242
+
243
+ void unload_frame_mb_stindex (void ) {
244
+ munmap (mbStartPos , mapStLen );
245
+ }
246
+
247
+ void unload_frame_mb_edindex (void ) {
248
+ munmap (mbEndPos , mapEdLen );
249
+ }
250
+
240
251
void load_frame_mb_stindex (int p_videoFileIndex ) {
241
252
char curDir [100 ];
242
253
int fd ;
@@ -265,6 +276,7 @@ void load_frame_mb_stindex(int p_videoFileIndex) {
265
276
//mbStartPos = mmap((caddr_t)0, sbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
266
277
//mbStartPos = mmap(0, sbuf.st_size, PROT_READ, MAP_SHARED, fd, 0);
267
278
//mbStartPos = mmap(0, sbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
279
+ mapStLen = sbuf .st_size ;
268
280
mbStartPos = mmap (0 , sbuf .st_size , PROT_READ , MAP_PRIVATE , fd , 0 ) ;
269
281
//mbStartPos = mmap(0, sbuf.st_size, PROT_READ, MAP_SHARED, fd, 0);
270
282
if (mbStartPos == MAP_FAILED ) {
@@ -276,7 +288,7 @@ void load_frame_mb_stindex(int p_videoFileIndex) {
276
288
LOGI (10 , "+++++load_frame_mb_stindex finished, exit the function" );
277
289
}
278
290
279
- static void load_frame_mb_edindex (int p_videoFileIndex ) {
291
+ void load_frame_mb_edindex (int p_videoFileIndex ) {
280
292
int fd ;
281
293
struct stat sbuf ;
282
294
LOGI (10 , "+++++load_frame_mb_edindex, file: %s" , gVideoCodecCtxList [p_videoFileIndex ]-> g_mbEdPosFileName );
@@ -291,6 +303,7 @@ static void load_frame_mb_edindex(int p_videoFileIndex) {
291
303
LOGI (10 , "file size: %ld" , sbuf .st_size );
292
304
//mbEndPos = mmap((caddr_t)0, sbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
293
305
//mbEndPos = mmap(0, sbuf.st_size, PROT_READ, MAP_SHARED, fd, 0);
306
+ mbEndPos = sbuf .st_size ;
294
307
mbEndPos = mmap (0 , sbuf .st_size , PROT_READ , MAP_PRIVATE , fd , 0 );
295
308
if (mbEndPos == MAP_FAILED ) {
296
309
LOGE (1 , "mmap error" );
@@ -822,7 +835,8 @@ void decode_a_video_packet(int p_videoFileIndex, int _roiStH, int _roiStW, int _
822
835
#ifdef DUMP_SELECTED_MB_MASK
823
836
FILE * l_maskF ;
824
837
#endif
825
- FILE * l_yuvF ;
838
+ //FILE *l_yuvF;
839
+ FILE * lTestF ;
826
840
/*read the next video packet*/
827
841
LOGI (10 , "decode_a_video_packet %d: (%d, %d) (%d, %d)" , gVideoPacketNum , _roiStH , _roiStW , _roiEdH , _roiEdW );
828
842
if (gVideoCodecCtxList [p_videoFileIndex ]-> debug_selective == 1 ) {
@@ -979,6 +993,7 @@ void decode_a_video_packet(int p_videoFileIndex, int _roiStH, int _roiStW, int _
979
993
fclose (l_maskF );
980
994
#endif
981
995
//based on the mask, compose the video packet
996
+ lTestF = fopen ("test.txt" , "a+" );
982
997
int * lMbStPos = mbStartPos , * lMbEdPos = mbEndPos ;
983
998
l_selectiveDecodingDataSize = 0 ;
984
999
lMbStPos += (gVideoPacketNum - gStFrame )* l_mbHeight * l_mbWidth ;
@@ -994,10 +1009,14 @@ void decode_a_video_packet(int p_videoFileIndex, int _roiStH, int _roiStW, int _
994
1009
l_selectiveDecodingDataSize += ((* lMbEdPos ) - (* lMbStPos ));
995
1010
++ lMbEdPos ;
996
1011
++ lMbStPos ;
997
- }
1012
+ } else {
1013
+ ++ lMbEdPos ;
1014
+ ++ lMbStPos ;
1015
+ }
998
1016
}
999
1017
}
1000
1018
LOGI (10 , "total number of bits: %d" , l_selectiveDecodingDataSize );
1019
+ fprintf (lTestF , "%d\n" , l_selectiveDecodingDataSize );
1001
1020
l_numOfStuffingBits = (l_selectiveDecodingDataSize + 7 ) / 8 * 8 - l_selectiveDecodingDataSize ;
1002
1021
l_selectiveDecodingDataSize = (l_selectiveDecodingDataSize + 7 ) / 8 ;
1003
1022
LOGI (10 , "total number of bytes: %d; number of stuffing bits: %d" , l_selectiveDecodingDataSize , l_numOfStuffingBits );
@@ -1006,6 +1025,7 @@ void decode_a_video_packet(int p_videoFileIndex, int _roiStH, int _roiStW, int _
1006
1025
gVideoPacket2 .size = l_selectiveDecodingDataSize ;
1007
1026
memset (gVideoPacket2 .data , 0 , gVideoPacket2 .size + FF_INPUT_BUFFER_PADDING_SIZE );
1008
1027
l_bufPos = 0 ;
1028
+ lMbStPos = mbStartPos , lMbEdPos = mbEndPos ;
1009
1029
lMbStPos += (gVideoPacketNum - gStFrame )* l_mbHeight * l_mbWidth ;
1010
1030
lMbEdPos += (gVideoPacketNum - gStFrame )* l_mbHeight * l_mbWidth ;
1011
1031
//l_bufPos = copy_bits(gVideoPacket.data, gVideoPacket2.data, 0, mbStartPos[gVideoPacketNum - gStFrame][0][0], l_bufPos);
@@ -1015,10 +1035,17 @@ void decode_a_video_packet(int p_videoFileIndex, int _roiStH, int _roiStW, int _
1015
1035
for (l_j = 0 ; l_j < l_mbWidth ; ++ l_j ) {
1016
1036
//put the data bits into the composed video packet
1017
1037
if (gVideoCodecCtxList [p_videoFileIndex ]-> selected_mb_mask [l_i ][l_j ] == 1 ) {
1018
- l_bufPos = copy_bits (gVideoPacket .data , gVideoPacket2 .data , * lMbStPos , * lMbEdPos - * lMbStPos , l_bufPos );
1019
- }
1038
+ l_bufPos = copy_bits (gVideoPacket .data , gVideoPacket2 .data , * lMbStPos , (* lMbEdPos ) - (* lMbStPos ), l_bufPos );
1039
+ fprintf (lTestF , "%d:%d:%d:%d\n" , l_i , l_j , (* lMbStPos ), (* lMbEdPos ));
1040
+ ++ lMbEdPos ;
1041
+ ++ lMbStPos ;
1042
+ } else {
1043
+ ++ lMbEdPos ;
1044
+ ++ lMbStPos ;
1045
+ }
1020
1046
}
1021
1047
}
1048
+ fflush (lTestF );
1022
1049
//stuffing the last byte
1023
1050
for (l_i = 0 ; l_i < l_numOfStuffingBits ; ++ l_i ) {
1024
1051
gVideoPacket2 .data [l_selectiveDecodingDataSize - 1 ] |= (0x01 << l_i );
@@ -1045,12 +1072,13 @@ void decode_a_video_packet(int p_videoFileIndex, int _roiStH, int _roiStW, int _
1045
1072
#endif
1046
1073
avcodec_decode_video2 (gVideoCodecCtxList [p_videoFileIndex ], l_videoFrame , & l_numOfDecodedFrames , & gVideoPacket );
1047
1074
#endif
1048
- l_yuvF = fopen ("./test.yuv" , "w" );
1075
+ //this part of the code is dump a yuv file
1076
+ /*l_yuvF = fopen("./test.yuv", "w");
1049
1077
fwrite(l_videoFrame->data[0], 1, l_videoFrame->linesize[0]*l_videoFrame->linesize[1], l_yuvF);
1050
1078
fwrite(l_videoFrame->data[1], 1, l_videoFrame->linesize[0]*l_videoFrame->linesize[1]/4, l_yuvF);
1051
1079
fwrite(l_videoFrame->data[2], 1, l_videoFrame->linesize[0]*l_videoFrame->linesize[1]/4, l_yuvF);
1052
1080
fclose(l_yuvF);
1053
- exit (0 );
1081
+ exit(0);*/
1054
1082
1055
1083
LOGI (10 , "avcodec_decode_video2 result: %d" , l_numOfDecodedFrames );
1056
1084
if (l_numOfDecodedFrames ) {
0 commit comments