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

📄 ad_libdv.c

📁 自己移植的linux下的流媒体播放器原代码,支持mms协议,支持ftp和http协议.
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <unistd.h>#include <math.h>#include "config.h"#ifdef HAVE_LIBDV095#include "img_format.h"#include <libdv/dv.h>#include <libdv/dv_types.h>#include "stream.h"#include "demuxer.h"#include "stheader.h"#include "ad_internal.h"static ad_info_t info ={	"Raw DV Audio Decoder",	"libdv",	"Alexander Neundorf <neundorf@kde.org>",	"http://libdv.sf.net",	""};LIBAD_EXTERN(libdv)// defined in vd_libdv.c:dv_decoder_t*  init_global_rawdv_decoder();static int preinit(sh_audio_t *sh_audio){  sh_audio->audio_out_minsize=4*DV_AUDIO_MAX_SAMPLES*2;  return 1;}static int16_t *audioBuffers[4]={NULL,NULL,NULL,NULL};static int init(sh_audio_t *sh){  int i;  WAVEFORMATEX *h=sh->wf;  if(!h) return 0;     sh->i_bps=h->nAvgBytesPerSec;  sh->channels=h->nChannels;  sh->samplerate=h->nSamplesPerSec;  sh->samplesize=(h->wBitsPerSample+7)/8;  sh->context=init_global_rawdv_decoder();  for (i=0; i < 4; i++)    audioBuffers[i] = malloc(2*DV_AUDIO_MAX_SAMPLES);  return 1;}static void uninit(sh_audio_t *sh_audio){  int i;  for (i=0; i < 4; i++)    free(audioBuffers[i]);}static int control(sh_audio_t *sh,int cmd,void* arg, ...){    // TODO!!!  return CONTROL_UNKNOWN;}static int decode_audio(sh_audio_t *audio, unsigned char *buf, int minlen, int maxlen){   int len=0;   dv_decoder_t* decoder=audio->context;  //global_rawdv_decoder;   unsigned char* dv_audio_frame=NULL;   int xx=ds_get_packet(audio->ds,&dv_audio_frame);   if(xx<=0 || !dv_audio_frame) return 0; // EOF?   dv_parse_header(decoder, dv_audio_frame);      if(xx!=decoder->frame_size)       printf("warning! audio framesize differs! read=%d  hdr=%d  \n",           xx, decoder->frame_size);   if (dv_decode_full_audio(decoder, dv_audio_frame,(int16_t**) audioBuffers))   {      /* Interleave the audio into a single buffer */      int i=0;      int16_t *bufP=(int16_t*)buf;      //      printf("samples=%d/%d  chans=%d  mem=%d  \n",decoder->audio->samples_this_frame,DV_AUDIO_MAX_SAMPLES,//          decoder->audio->num_channels, decoder->audio->samples_this_frame*decoder->audio->num_channels*2);//   return (44100/30)*4;      for (i=0; i < decoder->audio->samples_this_frame; i++)      {         int ch;         for (ch=0; ch < decoder->audio->num_channels; ch++)            bufP[len++] = audioBuffers[ch][i];      }   }   return len*2;}#endif

⌨️ 快捷键说明

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