⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 seek.c

📁 MPEG-4编解码的实现(包括MPEG4视音频编解码)
💻 C
字号:
#include "../mpeg3private.h"
#include "../mpeg3protos.h"
#include "mpeg3video.h"
#include <stdlib.h>
#include <string.h>

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;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -