seek.c
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:3k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. #include "../mpeg3private.h"
  2. #include "../mpeg3protos.h"
  3. #include "mpeg3video.h"
  4. #include <stdlib.h>
  5. #include <string.h>
  6. unsigned int mpeg3bits_next_startcode(mpeg3_bits_t* stream)
  7. {
  8.   /* Perform forwards search */
  9.   mpeg3bits_byte_align(stream);
  10. //printf("mpeg3bits_next_startcode 1 %lld %lldn", 
  11. // stream->demuxer->titles[0]->fs->current_byte, 
  12. // stream->demuxer->titles[0]->fs->total_bytes);
  13. //mpeg3_read_next_packet(stream->demuxer);
  14. //printf("mpeg3bits_next_startcode 2 %d %dn", 
  15. // stream->demuxer->titles[0]->fs->current_byte, 
  16. // stream->demuxer->titles[0]->fs->total_bytes);
  17. /* Perform search */
  18.   while(1)
  19.     {
  20.       unsigned int code = mpeg3bits_showbits32_noptr(stream);
  21.       //printf("mpeg3bits_next_startcode 2 %lxn", code);
  22.       if((code >> 8) == MPEG3_PACKET_START_CODE_PREFIX) break;
  23.       if(mpeg3bits_eof(stream)) break;
  24.       mpeg3bits_getbyte_noptr(stream);
  25.       /*
  26.        * printf("mpeg3bits_next_startcode 3 %08x %d %dn", 
  27.        *  mpeg3bits_showbits32_noptr(stream), 
  28.        *  stream->demuxer->titles[0]->fs->current_byte, 
  29.        *  stream->demuxer->titles[0]->fs->total_bytes);
  30.        */
  31.     }
  32.   //printf("mpeg3bits_next_startcode 4 %d %dn", 
  33.   // stream->demuxer->titles[0]->fs->current_byte, 
  34.   // stream->demuxer->titles[0]->fs->total_bytes);
  35.   return mpeg3bits_showbits32_noptr(stream);
  36. }
  37. #if 0
  38. /* Line up on the beginning of the next code. */
  39. int mpeg3video_next_code(mpeg3_bits_t* stream, unsigned int code)
  40. {
  41.   while(!mpeg3bits_eof(stream) && 
  42. mpeg3bits_showbits32_noptr(stream) != code)
  43.     {
  44.       mpeg3bits_getbyte_noptr(stream);
  45.     }
  46.   return mpeg3bits_eof(stream);
  47. }
  48. #endif
  49. long mpeg3video_goptimecode_to_frame(mpeg3video_t *video)
  50. {
  51.   /*  printf("mpeg3video_goptimecode_to_frame %d %d %d %d %fn",  */
  52.   /*   video->gop_timecode.hour, video->gop_timecode.minute, video->gop_timecode.second, video->gop_timecode.frame, video->frame_rate); */
  53.   return (long)(video->gop_timecode.hour * 3600 * video->frame_rate + 
  54. video->gop_timecode.minute * 60 * video->frame_rate +
  55. video->gop_timecode.second * video->frame_rate +
  56. video->gop_timecode.frame) - 1 - video->first_frame;
  57. }
  58. int mpeg3video_match_refframes(mpeg3video_t *video)
  59. {
  60.   unsigned char *dst, *src;
  61.   int i, j, size;
  62.   for(i = 0; i < 3; i++)
  63.     {
  64.       if(video->newframe[i])
  65. {
  66.   if(video->newframe[i] == video->refframe[i])
  67.     {
  68.       src = video->refframe[i];
  69.       dst = video->oldrefframe[i];
  70.     }
  71.   else
  72.     {
  73.       src = video->oldrefframe[i];
  74.       dst = video->refframe[i];
  75.     }
  76.   if(i == 0)
  77.     size = video->coded_picture_width * video->coded_picture_height + 32 * video->coded_picture_width;
  78.   else 
  79.     size = video->chrom_width * video->chrom_height + 32 * video->chrom_width;
  80.   memcpy(dst, src, size);
  81. }
  82.     }
  83.   return 0;
  84. }