[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11676] branches/soc-2007-hcube/intern/ tinySND/ffmpeg: ffmpegProvider is renamed to ffmpegReader.

Csaba Hruska csaba.hruska at gmail.com
Sun Aug 19 12:29:50 CEST 2007


Revision: 11676
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11676
Author:   hcube
Date:     2007-08-19 12:29:50 +0200 (Sun, 19 Aug 2007)

Log Message:
-----------
ffmpegProvider is renamed to ffmpegReader.

Added Paths:
-----------
    branches/soc-2007-hcube/intern/tinySND/ffmpeg/ffmpegReader.cpp
    branches/soc-2007-hcube/intern/tinySND/ffmpeg/ffmpegReader.h

Removed Paths:
-------------
    branches/soc-2007-hcube/intern/tinySND/ffmpeg/ffmpegProvider.cpp
    branches/soc-2007-hcube/intern/tinySND/ffmpeg/ffmpegProvider.h

Deleted: branches/soc-2007-hcube/intern/tinySND/ffmpeg/ffmpegProvider.cpp
===================================================================
--- branches/soc-2007-hcube/intern/tinySND/ffmpeg/ffmpegProvider.cpp	2007-08-19 10:28:57 UTC (rev 11675)
+++ branches/soc-2007-hcube/intern/tinySND/ffmpeg/ffmpegProvider.cpp	2007-08-19 10:29:50 UTC (rev 11676)
@@ -1,474 +0,0 @@
-#include <ffmpeg/avformat.h>
-#include <ffmpeg/avcodec.h>
-#include <ffmpeg/rational.h>
-
-#include "ffmpegProvider.h"
-
-ffmpegProvider::ffmpegProvider( char *filename )
-{
-	mIsFormatSupported = false;
-	return;
-/*
-long sound_hdaudio_get_duration(struct hdaudio * hdaudio, int frame_rate)
-	return hdaudio->pFormatCtx->duration * frame_rate / AV_TIME_BASE;
-*/
-
-/*
-	struct hdaudio * rval;
-	int            i, audioStream;
-
-	AVCodec *pCodec;
-	AVFormatContext *pFormatCtx;
-	AVCodecContext *pCodecCtx;
-
-	do_init_ffmpeg();
-
-	if(av_open_input_file(&pFormatCtx, filename, NULL, 0, NULL)!=0) {
-		return 0;
-	}
-
-	if(av_find_stream_info(pFormatCtx)<0) {
-		av_close_input_file(pFormatCtx);
-		return 0;
-	}
-
-	dump_format(pFormatCtx, 0, filename, 0);
-
-
-    // Find the first audio stream
-	audioStream=-1;
-	for(i=0; i<pFormatCtx->nb_streams; i++)
-		if(get_codec_from_stream(pFormatCtx->streams[i])
-		   ->codec_type == CODEC_TYPE_AUDIO)
-		{
-			audioStream=i;
-			break;
-		}
-
-	if(audioStream == -1) {
-		av_close_input_file(pFormatCtx);
-		return 0;
-	}
-
-	pCodecCtx = get_codec_from_stream(pFormatCtx->streams[audioStream]);
-
-        // Find the decoder for the audio stream 
-	pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
-	if(pCodec == NULL) {
-		av_close_input_file(pFormatCtx);
-		return 0;
-	}
-
-	if(avcodec_open(pCodecCtx, pCodec)<0) {
-		av_close_input_file(pFormatCtx);
-		return 0;
-	}
-
-	rval = (struct hdaudio *)MEM_mallocN(sizeof(struct hdaudio), 
-					     "hdaudio struct");
-
-	rval->filename = strdup(filename);
-	rval->sample_rate = pCodecCtx->sample_rate;
-	rval->channels = pCodecCtx->channels;
-
-	rval->pFormatCtx = pFormatCtx;
-	rval->pCodecCtx = pCodecCtx;
-	rval->pCodec = pCodec;
-	rval->audioStream = audioStream;
-	rval->frame_position = -10;
-
-	rval->frame_duration = AV_TIME_BASE / 10;
-	rval->frame_alloc_duration = AV_TIME_BASE;
-	rval->decode_cache_size = 
-		(long long) rval->sample_rate * rval->channels
-		* rval->frame_alloc_duration / AV_TIME_BASE
-		* 2;
-
-	rval->decode_cache = (short*) MEM_mallocN(
-		rval->decode_cache_size * sizeof(short)
-		+ AVCODEC_MAX_AUDIO_FRAME_SIZE, 
-		"hdaudio decode cache");
-	rval->decode_cache_zero = rval->decode_cache;
-	rval->decode_pos = 0;
-	rval->target_channels = -1;
-	rval->target_rate = -1;
-	rval->resampler = 0;
-	rval->resample_cache = 0;
-	rval->resample_samples_written = 0;
-	rval->resample_samples_in = 0;
-	return rval;
-*/
-	mIsFormatSupported = true;
-}
-
-ffmpegProvider::~ffmpegProvider(void)
-{
-/*
-	if (hdaudio) {
-		avcodec_close(hdaudio->pCodecCtx);
-		av_close_input_file(hdaudio->pFormatCtx);
-		MEM_freeN (hdaudio->decode_cache);
-		if (hdaudio->resample_cache) {
-			MEM_freeN(hdaudio->resample_cache);
-		}
-		free(hdaudio->filename);
-		MEM_freeN (hdaudio);
-	}
-*/
-}
-
-bool ffmpegProvider::isFormatSupported(void)
-{
-	return mIsFormatSupported;
-}
-    
-void ffmpegProvider::seek( int frameNum )
-{
-}
-
-int ffmpegProvider::fillBuffer( float *buffer, int framesNum )
-{
-	return 0;
-}
-/*
-static void sound_hdaudio_extract_small_block(
-	struct hdaudio * hdaudio, 
-	short * target_buffer,
-	int sample_position, // units of target_rate 
-	int target_rate,
-	int target_channels,
-	int nb_samples )// in target 
-{
-	AVPacket packet;
-	int frame_position;
-	int frame_size = (long long) target_rate 
-		* hdaudio->frame_duration / AV_TIME_BASE;
-	int in_frame_size = (long long) hdaudio->sample_rate
-		* hdaudio->frame_duration / AV_TIME_BASE;
-	int rate_conversion = 
-		(target_rate != hdaudio->sample_rate) 
-		|| (target_channels != hdaudio->channels);
-	int sample_ofs = target_channels * (sample_position % frame_size);
-
-	frame_position = sample_position / frame_size; 
-
-	if (hdaudio == 0) return;
-
-	if (rate_conversion) {
-		if (hdaudio->resampler && 
-		    (hdaudio->target_rate != target_rate
-		     || hdaudio->target_channels != target_channels)) {
-			audio_resample_close(hdaudio->resampler);
-			hdaudio->resampler = 0;
-		}
-		if (!hdaudio->resampler) {
-			hdaudio->resampler = audio_resample_init(
-				target_channels, hdaudio->channels,
-				target_rate, hdaudio->sample_rate);
-			hdaudio->target_rate = target_rate;
-			hdaudio->target_channels = target_channels;
-			if (hdaudio->resample_cache) {
-				MEM_freeN(hdaudio->resample_cache);
-			}
-			
-
-			hdaudio->resample_cache = (short*) MEM_mallocN(
-				(long long) 
-				hdaudio->target_channels 
-				* frame_size * 2
-				* sizeof(short), 
-				"hdaudio resample cache");
-			if (frame_position == hdaudio->frame_position) {
-				hdaudio->resample_samples_in = 
-					in_frame_size * 7 / 4;
-				hdaudio->resample_samples_written
-					= audio_resample(
-						hdaudio->resampler,
-						hdaudio->resample_cache,
-						hdaudio->decode_cache_zero,
-						in_frame_size * 7 / 4);
-			}
-		}
-	}
-
-	if (frame_position == hdaudio->frame_position + 1
-	    && in_frame_size * hdaudio->channels <= hdaudio->decode_pos) {
-		int bl_size = in_frame_size * hdaudio->channels;
-		int decode_pos = hdaudio->decode_pos;
-	       
-		hdaudio->frame_position = frame_position;
-
-		memmove(hdaudio->decode_cache,
-			hdaudio->decode_cache + bl_size,
-			(decode_pos - bl_size) * sizeof(short));
-		
-		decode_pos -= bl_size;
-
-		memset(hdaudio->decode_cache + decode_pos, 0,
-		       (hdaudio->decode_cache_size - decode_pos) 
-		       * sizeof(short));
-		       
-
-		while(av_read_frame(hdaudio->pFormatCtx, &packet) >= 0) {
-			int data_size;
-			int len;
-			uint8_t *audio_pkt_data;
-			int audio_pkt_size;
-
-			if(packet.stream_index != hdaudio->audioStream) {
-				av_free_packet(&packet);
-				continue;
-			}
-
-			audio_pkt_data = packet.data;
-			audio_pkt_size = packet.size;
-
-			while (audio_pkt_size > 0) {
-				len = avcodec_decode_audio(
-					hdaudio->pCodecCtx, 
-					hdaudio->decode_cache 
-					+ decode_pos, 
-					&data_size, 
-					audio_pkt_data, 
-					audio_pkt_size);
-				if (len <= 0) {
-					audio_pkt_size = 0;
-					break;
-				}
-				
-				audio_pkt_size -= len;
-				audio_pkt_data += len;
-
-				if (data_size <= 0) {
-					continue;
-				}
-				
-				decode_pos += data_size / sizeof(short);
-				if (decode_pos + data_size
-				    / sizeof(short)
-				    > hdaudio->decode_cache_size) {
-					break;
-				}
-			}
-			av_free_packet(&packet);
-
-			if (decode_pos + data_size / sizeof(short)
-			    > hdaudio->decode_cache_size) {
-				break;
-			}
-		}
-
-		if (rate_conversion) {
-			int written = hdaudio->resample_samples_written
-				* target_channels;
-			int ofs = target_channels * frame_size;
-			int recycle = written - ofs;
-			int next_in = in_frame_size 
-				+ (3.0/4.0 
-				   - (double) recycle / (double) 
-				   (frame_size * target_channels)
-					) * in_frame_size;
-
-			memmove(hdaudio->resample_cache,
-				hdaudio->resample_cache + ofs,
-			        recycle * sizeof(short));
-
-			hdaudio->resample_samples_written
-			       = audio_resample(
-				       hdaudio->resampler,
-				       hdaudio->resample_cache + recycle,
-				       hdaudio->decode_cache_zero
-				       + hdaudio->resample_samples_in
-				       * hdaudio->channels
-				       - bl_size,
-				       next_in)
-				+ recycle / target_channels;
-
-			hdaudio->resample_samples_in = next_in;
-		}
-
-		hdaudio->decode_pos = decode_pos;
-	}
-
-	if (frame_position != hdaudio->frame_position) { 
-		long decode_pos = 0;
-		long long st_time = hdaudio->pFormatCtx
-			->streams[hdaudio->audioStream]->start_time;
-		double time_base = 
-			av_q2d(hdaudio->pFormatCtx
-			       ->streams[hdaudio->audioStream]->time_base);
-		long long pos = (long long) frame_position * AV_TIME_BASE
-			* hdaudio->frame_duration / AV_TIME_BASE;
-
-		long long seek_pos;
-
-		hdaudio->frame_position = frame_position;
-
-		if (st_time == AV_NOPTS_VALUE) {
-			st_time = 0;
-		}
-
-		pos += st_time * AV_TIME_BASE * time_base;
-
-		// seek a little bit before the target position,
-		//   (ffmpeg seek algorithm doesn't seem to work always as
-		//   specified...)
-		
-
-		seek_pos = pos - (AV_TIME_BASE
-				 * hdaudio->frame_duration 
-				  / AV_TIME_BASE / 10);
-		if (seek_pos < 0) {
-			seek_pos = pos;
-		}
-
-		av_seek_frame(hdaudio->pFormatCtx, -1, 
-			      seek_pos, 
-			      AVSEEK_FLAG_ANY | AVSEEK_FLAG_BACKWARD);
-		avcodec_flush_buffers(hdaudio->pCodecCtx);
-
-		memset(hdaudio->decode_cache, 0,
-		       hdaudio->decode_cache_size * sizeof(short));
-
-		hdaudio->decode_cache_zero = hdaudio->decode_cache;
-
-		while(av_read_frame(hdaudio->pFormatCtx, &packet) >= 0) {
-			int data_size;
-			int len;
-			uint8_t *audio_pkt_data;
-			int audio_pkt_size;
-
-			if(packet.stream_index != hdaudio->audioStream) {
-				av_free_packet(&packet);
-				continue;
-			}
-
-			audio_pkt_data = packet.data;
-			audio_pkt_size = packet.size;
-
-			if (!hdaudio->decode_cache_zero 
-			    && audio_pkt_size > 0) { 
-				long long diff;
-
-				if (packet.pts == AV_NOPTS_VALUE) {
-					fprintf(stderr,
-						"hdaudio: audio "
-						"pts=NULL audio "
-						"distortion!\n");
-					diff = 0;
-				} else {
-					long long pts = packet.pts;
-					long long spts = (long long) (
-						pos / time_base / AV_TIME_BASE 
-						+ 0.5);
-					diff = spts - pts;
-					if (diff < 0) {
-						fprintf(stderr,
-							"hdaudio: "
-							"negative seek: "
-							"%lld < %lld "
-							"(pos=%lld) "
-							"audio distortion!!\n",
-							spts, pts, pos);
-						diff = 0;
-					}
-				}
-
-
-				diff *= hdaudio->sample_rate * time_base;
-				diff *= hdaudio->channels;
-
-				if (diff > hdaudio->decode_cache_size / 2) {
-					fprintf(stderr,
-						"hdaudio: audio "
-						"diff too large!!\n");
-					diff = 0;
-				}
-
-				hdaudio->decode_cache_zero
-					= hdaudio->decode_cache + diff;
-			}
-
-			while (audio_pkt_size > 0) {
-				len = avcodec_decode_audio(
-					hdaudio->pCodecCtx, 
-					hdaudio->decode_cache 
-					+ decode_pos, 
-					&data_size, 
-					audio_pkt_data, 
-					audio_pkt_size);
-				if (len <= 0) {
-					audio_pkt_size = 0;
-					break;
-				}
-				
-				audio_pkt_size -= len;
-				audio_pkt_data += len;
-
-				if (data_size <= 0) {
-					continue;
-				}
-				
-				decode_pos += data_size / sizeof(short);
-				if (decode_pos + data_size
-				    / sizeof(short)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list