Skip to content

Commit 078d0c9

Browse files
committed
fixed the bug
1 parent 9e26f7d commit 078d0c9

File tree

3 files changed

+41
-7
lines changed

3 files changed

+41
-7
lines changed

dependency.c

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,9 @@ void free_selected_decoding_fields(int p_videoFileIndex, int _mbHeight) {
184184
}
185185

186186
int *mbStartPos;
187+
int mapStLen;
187188
int *mbEndPos;
189+
int mapEdLen;
188190

189191
struct MBIdx intraDep[MAX_FRAME_NUM_IN_GOP][MAX_MB_H][MAX_MB_W][MAX_DEP_MB];
190192
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];
237239
}
238240
LOGI(10, "+++++load_frame_mb_index finished, exit the function");
239241
}*/
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+
240251
void load_frame_mb_stindex(int p_videoFileIndex) {
241252
char curDir[100];
242253
int fd;
@@ -265,6 +276,7 @@ void load_frame_mb_stindex(int p_videoFileIndex) {
265276
//mbStartPos = mmap((caddr_t)0, sbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
266277
//mbStartPos = mmap(0, sbuf.st_size, PROT_READ, MAP_SHARED, fd, 0);
267278
//mbStartPos = mmap(0, sbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
279+
mapStLen = sbuf.st_size;
268280
mbStartPos = mmap(0, sbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0) ;
269281
//mbStartPos = mmap(0, sbuf.st_size, PROT_READ, MAP_SHARED, fd, 0);
270282
if (mbStartPos == MAP_FAILED) {
@@ -276,7 +288,7 @@ void load_frame_mb_stindex(int p_videoFileIndex) {
276288
LOGI(10, "+++++load_frame_mb_stindex finished, exit the function");
277289
}
278290

279-
static void load_frame_mb_edindex(int p_videoFileIndex) {
291+
void load_frame_mb_edindex(int p_videoFileIndex) {
280292
int fd;
281293
struct stat sbuf;
282294
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) {
291303
LOGI(10, "file size: %ld", sbuf.st_size);
292304
//mbEndPos = mmap((caddr_t)0, sbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
293305
//mbEndPos = mmap(0, sbuf.st_size, PROT_READ, MAP_SHARED, fd, 0);
306+
mbEndPos = sbuf.st_size;
294307
mbEndPos = mmap(0, sbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
295308
if (mbEndPos == MAP_FAILED) {
296309
LOGE(1, "mmap error");
@@ -822,7 +835,8 @@ void decode_a_video_packet(int p_videoFileIndex, int _roiStH, int _roiStW, int _
822835
#ifdef DUMP_SELECTED_MB_MASK
823836
FILE *l_maskF;
824837
#endif
825-
FILE *l_yuvF;
838+
//FILE *l_yuvF;
839+
FILE *lTestF;
826840
/*read the next video packet*/
827841
LOGI(10, "decode_a_video_packet %d: (%d, %d) (%d, %d)", gVideoPacketNum, _roiStH, _roiStW, _roiEdH, _roiEdW);
828842
if (gVideoCodecCtxList[p_videoFileIndex]->debug_selective == 1) {
@@ -979,6 +993,7 @@ void decode_a_video_packet(int p_videoFileIndex, int _roiStH, int _roiStW, int _
979993
fclose(l_maskF);
980994
#endif
981995
//based on the mask, compose the video packet
996+
lTestF = fopen("test.txt", "a+");
982997
int *lMbStPos = mbStartPos, *lMbEdPos = mbEndPos;
983998
l_selectiveDecodingDataSize = 0;
984999
lMbStPos += (gVideoPacketNum - gStFrame)*l_mbHeight*l_mbWidth;
@@ -994,10 +1009,14 @@ void decode_a_video_packet(int p_videoFileIndex, int _roiStH, int _roiStW, int _
9941009
l_selectiveDecodingDataSize += ((*lMbEdPos) - (*lMbStPos));
9951010
++lMbEdPos;
9961011
++lMbStPos;
997-
}
1012+
} else {
1013+
++lMbEdPos;
1014+
++lMbStPos;
1015+
}
9981016
}
9991017
}
10001018
LOGI(10, "total number of bits: %d", l_selectiveDecodingDataSize);
1019+
fprintf(lTestF, "%d\n", l_selectiveDecodingDataSize);
10011020
l_numOfStuffingBits = (l_selectiveDecodingDataSize + 7) / 8 * 8 - l_selectiveDecodingDataSize;
10021021
l_selectiveDecodingDataSize = (l_selectiveDecodingDataSize + 7) / 8;
10031022
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 _
10061025
gVideoPacket2.size = l_selectiveDecodingDataSize;
10071026
memset(gVideoPacket2.data, 0, gVideoPacket2.size + FF_INPUT_BUFFER_PADDING_SIZE);
10081027
l_bufPos = 0;
1028+
lMbStPos = mbStartPos, lMbEdPos = mbEndPos;
10091029
lMbStPos += (gVideoPacketNum - gStFrame)*l_mbHeight*l_mbWidth;
10101030
lMbEdPos += (gVideoPacketNum - gStFrame)*l_mbHeight*l_mbWidth;
10111031
//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 _
10151035
for (l_j = 0; l_j < l_mbWidth; ++l_j) {
10161036
//put the data bits into the composed video packet
10171037
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+
}
10201046
}
10211047
}
1048+
fflush(lTestF);
10221049
//stuffing the last byte
10231050
for (l_i = 0; l_i < l_numOfStuffingBits; ++l_i) {
10241051
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 _
10451072
#endif
10461073
avcodec_decode_video2(gVideoCodecCtxList[p_videoFileIndex], l_videoFrame, &l_numOfDecodedFrames, &gVideoPacket);
10471074
#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");
10491077
fwrite(l_videoFrame->data[0], 1, l_videoFrame->linesize[0]*l_videoFrame->linesize[1], l_yuvF);
10501078
fwrite(l_videoFrame->data[1], 1, l_videoFrame->linesize[0]*l_videoFrame->linesize[1]/4, l_yuvF);
10511079
fwrite(l_videoFrame->data[2], 1, l_videoFrame->linesize[0]*l_videoFrame->linesize[1]/4, l_yuvF);
10521080
fclose(l_yuvF);
1053-
exit(0);
1081+
exit(0);*/
10541082

10551083
LOGI(10, "avcodec_decode_video2 result: %d", l_numOfDecodedFrames);
10561084
if (l_numOfDecodedFrames) {

dependency.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,4 +110,7 @@ int load_gop_info(FILE* p_gopRecFile, int *p_startF, int *p_endF);
110110
int if_dependency_complete(int p_videoFileIndex, int p_gopNum);
111111
void prepare_decode_of_gop(int p_videoFileIndex, int _stFrame, int _edFrame, int _roiSh, int _roiSw, int _roiEh, int _roiEw);
112112
void load_frame_mb_stindex(int p_videoFileIndex);
113+
void load_frame_mb_edindex(int p_videoFileIndex);
114+
void unload_frame_mb_stindex(void);
115+
void unload_frame_mb_edindex(void);
113116

ffplay.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,9 @@ static void render_a_frame(int _width, int _height, float _roiSh, float _roiSw,
150150
wait_get_dependency();
151151
sprintf(l_depGopRecFileName, "./%s_goprec_gop%d.txt", gVideoFileNameList[gCurrentDecodingVideoFileIndex], g_decode_gop_num);
152152
gVideoCodecCtxList[gCurrentDecodingVideoFileIndex]->g_gopF = fopen(l_depGopRecFileName, "r");
153+
//unmap the files
154+
unload_frame_mb_stindex();
155+
unload_frame_mb_edindex();
153156
load_gop_info(gVideoCodecCtxList[gCurrentDecodingVideoFileIndex]->g_gopF, &gGopStart, &gGopEnd);
154157
}
155158
}

0 commit comments

Comments
 (0)