www.pudn.com > NETVIDEO.rar > seek.c
#include "../mpeg3private.h" #include "../mpeg3protos.h" #include "mpeg3video.h" #include#include unsigned int mpeg3bits_next_startcode(mpeg3_bits_t* stream) { /* Perform forwards search */ mpeg3bits_byte_align(stream); //printf("mpeg3bits_next_startcode 1 %lld %lld\n", // stream->demuxer->titles[0]->fs->current_byte, // stream->demuxer->titles[0]->fs->total_bytes); //mpeg3_read_next_packet(stream->demuxer); //printf("mpeg3bits_next_startcode 2 %d %d\n", // stream->demuxer->titles[0]->fs->current_byte, // stream->demuxer->titles[0]->fs->total_bytes); /* Perform search */ while(1) { unsigned int code = mpeg3bits_showbits32_noptr(stream); //printf("mpeg3bits_next_startcode 2 %lx\n", code); if((code >> 8) == MPEG3_PACKET_START_CODE_PREFIX) break; if(mpeg3bits_eof(stream)) break; mpeg3bits_getbyte_noptr(stream); /* * printf("mpeg3bits_next_startcode 3 %08x %d %d\n", * mpeg3bits_showbits32_noptr(stream), * stream->demuxer->titles[0]->fs->current_byte, * stream->demuxer->titles[0]->fs->total_bytes); */ } //printf("mpeg3bits_next_startcode 4 %d %d\n", // stream->demuxer->titles[0]->fs->current_byte, // stream->demuxer->titles[0]->fs->total_bytes); return mpeg3bits_showbits32_noptr(stream); } #if 0 /* Line up on the beginning of the next code. */ int mpeg3video_next_code(mpeg3_bits_t* stream, unsigned int code) { while(!mpeg3bits_eof(stream) && mpeg3bits_showbits32_noptr(stream) != code) { mpeg3bits_getbyte_noptr(stream); } return mpeg3bits_eof(stream); } #endif long mpeg3video_goptimecode_to_frame(mpeg3video_t *video) { /* printf("mpeg3video_goptimecode_to_frame %d %d %d %d %f\n", */ /* video->gop_timecode.hour, video->gop_timecode.minute, video->gop_timecode.second, video->gop_timecode.frame, video->frame_rate); */ return (long)(video->gop_timecode.hour * 3600 * video->frame_rate + video->gop_timecode.minute * 60 * video->frame_rate + video->gop_timecode.second * video->frame_rate + video->gop_timecode.frame) - 1 - video->first_frame; } int mpeg3video_match_refframes(mpeg3video_t *video) { unsigned char *dst, *src; int i, j, size; for(i = 0; i < 3; i++) { if(video->newframe[i]) { if(video->newframe[i] == video->refframe[i]) { src = video->refframe[i]; dst = video->oldrefframe[i]; } else { src = video->oldrefframe[i]; dst = video->refframe[i]; } if(i == 0) size = video->coded_picture_width * video->coded_picture_height + 32 * video->coded_picture_width; else size = video->chrom_width * video->chrom_height + 32 * video->chrom_width; memcpy(dst, src, size); } } return 0; }