comparison libmpdemux/demuxer.c @ 26926:1e6241274552

added and reused demux_flush() instead of emptying the demux_stream buffers; patch by Bryan Henderson - giraffedata gmail com
author nicodvb
date Mon, 02 Jun 2008 10:17:48 +0000
parents d99d0f7c0e80
children 66cda68db746
comparison
equal deleted inserted replaced
26925:3f6d2ca29727 26926:1e6241274552
941 correct_pts = demux_control(res, DEMUXER_CTRL_CORRECT_PTS, NULL) == DEMUXER_CTRL_OK; 941 correct_pts = demux_control(res, DEMUXER_CTRL_CORRECT_PTS, NULL) == DEMUXER_CTRL_OK;
942 return res; 942 return res;
943 } 943 }
944 944
945 945
946 void demux_flush(demuxer_t *demuxer) {
947 ds_free_packs(demuxer->video);
948 ds_free_packs(demuxer->audio);
949 ds_free_packs(demuxer->sub);
950 }
951
946 int demux_seek(demuxer_t *demuxer,float rel_seek_secs,float audio_delay,int flags){ 952 int demux_seek(demuxer_t *demuxer,float rel_seek_secs,float audio_delay,int flags){
947 demux_stream_t *d_audio=demuxer->audio; 953 demux_stream_t *d_audio=demuxer->audio;
948 demux_stream_t *d_video=demuxer->video; 954 demux_stream_t *d_video=demuxer->video;
949 sh_audio_t *sh_audio=d_audio->sh; 955 sh_audio_t *sh_audio=d_audio->sh;
950 sh_video_t *sh_video=d_video->sh; 956 sh_video_t *sh_video=d_video->sh;
961 else 967 else
962 mp_msg(MSGT_SEEK,MSGL_WARN,MSGTR_CantSeekFile); 968 mp_msg(MSGT_SEEK,MSGL_WARN,MSGTR_CantSeekFile);
963 return 0; 969 return 0;
964 } 970 }
965 971
972 demux_flush(demuxer);
966 // clear demux buffers: 973 // clear demux buffers:
967 if(sh_audio){ ds_free_packs(d_audio);sh_audio->a_buffer_len=0;} 974 if(sh_audio) sh_audio->a_buffer_len=0;
968 ds_free_packs(d_video);
969 ds_free_packs(demuxer->sub);
970
971 demuxer->stream->eof=0; // clear eof flag 975 demuxer->stream->eof=0; // clear eof flag
972 demuxer->video->eof=0; 976 demuxer->video->eof=0;
973 demuxer->audio->eof=0; 977 demuxer->audio->eof=0;
974 978
975 #if 0 979 #if 0
1195 ris = stream_control(demuxer->stream, STREAM_CTRL_GET_CURRENT_CHAPTER, &current); 1199 ris = stream_control(demuxer->stream, STREAM_CTRL_GET_CURRENT_CHAPTER, &current);
1196 if(ris == STREAM_UNSUPPORTED) return -1; 1200 if(ris == STREAM_UNSUPPORTED) return -1;
1197 chapter += current; 1201 chapter += current;
1198 } 1202 }
1199 1203
1200 if(demuxer->video->sh) 1204 demux_flush(demuxer);
1201 ds_free_packs(demuxer->video);
1202
1203 if(demuxer->audio->sh)
1204 ds_free_packs(demuxer->audio);
1205
1206 if(demuxer->sub->id >= 0)
1207 ds_free_packs(demuxer->sub);
1208 1205
1209 ris = stream_control(demuxer->stream, STREAM_CTRL_SEEK_TO_CHAPTER, &chapter); 1206 ris = stream_control(demuxer->stream, STREAM_CTRL_SEEK_TO_CHAPTER, &chapter);
1210 if(ris != STREAM_UNSUPPORTED) 1207 if(ris != STREAM_UNSUPPORTED)
1211 demux_control(demuxer, DEMUXER_CTRL_RESYNC, NULL); 1208 demux_control(demuxer, DEMUXER_CTRL_RESYNC, NULL);
1212 if(sh_video) { 1209 if(sh_video) {
1367 sh_audio_t *sh_audio = demuxer->audio->sh; 1364 sh_audio_t *sh_audio = demuxer->audio->sh;
1368 1365
1369 angles = demuxer_angles_count(demuxer); 1366 angles = demuxer_angles_count(demuxer);
1370 if((angles < 1) || (angle > angles)) return -1; 1367 if((angles < 1) || (angle > angles)) return -1;
1371 1368
1372 if(demuxer->video->sh) 1369 demux_flush(demuxer);
1373 ds_free_packs(demuxer->video);
1374
1375 if(demuxer->audio->sh)
1376 ds_free_packs(demuxer->audio);
1377
1378 if(demuxer->sub->id >= 0)
1379 ds_free_packs(demuxer->sub);
1380 1370
1381 ris = stream_control(demuxer->stream, STREAM_CTRL_SET_ANGLE, &angle); 1371 ris = stream_control(demuxer->stream, STREAM_CTRL_SET_ANGLE, &angle);
1382 if(ris == STREAM_UNSUPPORTED) return -1; 1372 if(ris == STREAM_UNSUPPORTED) return -1;
1383 1373
1384 demux_control(demuxer, DEMUXER_CTRL_RESYNC, NULL); 1374 demux_control(demuxer, DEMUXER_CTRL_RESYNC, NULL);