diff options
Diffstat (limited to 'src/kitsource.c')
-rw-r--r-- | src/kitsource.c | 125 |
1 files changed, 11 insertions, 114 deletions
diff --git a/src/kitsource.c b/src/kitsource.c index c947ea1..d8cfe53 100644 --- a/src/kitsource.c +++ b/src/kitsource.c @@ -6,14 +6,12 @@ #include <stdlib.h> #include <string.h> +#include <assert.h> Kit_Source* Kit_CreateSourceFromUrl(const char *url) { - AVFormatContext *format_ctx = NULL; + assert(url != NULL); - if(url == NULL) { - Kit_SetError("Source URL must not be NULL"); - return NULL; - } + AVFormatContext *format_ctx = NULL; // Attempt to open source if(avformat_open_input(&format_ctx, url, NULL, NULL) < 0) { @@ -45,103 +43,16 @@ exit_0: return NULL; } -int Kit_InitSourceCodecs(Kit_Source *src) { - AVCodecContext *acodec_ctx = NULL; - AVCodecContext *vcodec_ctx = NULL; - AVCodec *acodec = NULL; - AVCodec *vcodec = NULL; - - if(src == NULL) { - Kit_SetError("Source must not be NULL"); - return 1; - } - if(src->acodec_ctx || src->vcodec_ctx) { - Kit_SetError("Source codecs already initialized"); - return 1; - } - - // Make sure indexes seem correct - AVFormatContext *format_ctx = (AVFormatContext *)src->format_ctx; - if(src->astream_idx < 0 || src->astream_idx >= format_ctx->nb_streams) { - Kit_SetError("Invalid audio stream index"); - return 1; - } - if(src->vstream_idx < 0 || src->vstream_idx >= format_ctx->nb_streams) { - Kit_SetError("Invalid video stream index"); - return 1; - } - - // Find video decoder - vcodec = avcodec_find_decoder(format_ctx->streams[src->vstream_idx]->codec->codec_id); - if(!vcodec) { - Kit_SetError("No suitable video decoder found"); - goto exit_0; - } - - // Copy the original video codec context - vcodec_ctx = avcodec_alloc_context3(vcodec); - if(avcodec_copy_context(vcodec_ctx, format_ctx->streams[src->vstream_idx]->codec) != 0) { - Kit_SetError("Unable to copy video codec context"); - goto exit_0; - } - - // Create a video decoder context - if(avcodec_open2(vcodec_ctx, vcodec, NULL) < 0) { - Kit_SetError("Unable to allocate video codec context"); - goto exit_1; - } - - // Find audio decoder - acodec = avcodec_find_decoder(format_ctx->streams[src->astream_idx]->codec->codec_id); - if(!acodec) { - Kit_SetError("No suitable audio decoder found"); - goto exit_2; - } - - // Copy the original audio codec context - acodec_ctx = avcodec_alloc_context3(acodec); - if(avcodec_copy_context(acodec_ctx, format_ctx->streams[src->astream_idx]->codec) != 0) { - Kit_SetError("Unable to copy audio codec context"); - goto exit_2; - } - - // Create an audio decoder context - if(avcodec_open2(acodec_ctx, acodec, NULL) < 0) { - Kit_SetError("Unable to allocate audio codec context"); - goto exit_3; - } - - src->acodec = acodec; - src->vcodec = vcodec; - src->acodec_ctx = acodec_ctx; - src->vcodec_ctx = vcodec_ctx; - return 0; - -exit_3: - avcodec_free_context(&acodec_ctx); -exit_2: - avcodec_close(vcodec_ctx); -exit_1: - avcodec_free_context(&vcodec_ctx); -exit_0: - return 1; -} - void Kit_CloseSource(Kit_Source *src) { - if(src == NULL) return; - avcodec_close((AVCodecContext*)src->acodec_ctx); - avcodec_close((AVCodecContext*)src->vcodec_ctx); - avcodec_free_context((AVCodecContext**)&src->acodec_ctx); - avcodec_free_context((AVCodecContext**)&src->vcodec_ctx); + assert(src != NULL); avformat_close_input((AVFormatContext **)&src->format_ctx); free(src); } int Kit_GetSourceStreamInfo(const Kit_Source *src, Kit_StreamInfo *info, int index) { - if(src == NULL) { - Kit_SetError("Source must not be NULL"); - return 1; - } + assert(src != NULL); + assert(info != NULL); + AVFormatContext *format_ctx = (AVFormatContext *)src->format_ctx; if(index < 0 || index >= format_ctx->nb_streams) { Kit_SetError("Invalid stream index"); @@ -162,16 +73,11 @@ int Kit_GetSourceStreamInfo(const Kit_Source *src, Kit_StreamInfo *info, int ind } info->index = index; - info->width = stream->codec->width; - info->height = stream->codec->height; return 0; } int Kit_GetBestSourceStream(const Kit_Source *src, const Kit_streamtype type) { - if(src == NULL) { - Kit_SetError("Source must not be NULL"); - return -1; - } + assert(src != NULL); int avmedia_type = 0; switch(type) { case KIT_STREAMTYPE_VIDEO: avmedia_type = AVMEDIA_TYPE_VIDEO; break; @@ -182,10 +88,7 @@ int Kit_GetBestSourceStream(const Kit_Source *src, const Kit_streamtype type) { } int Kit_SetSourceStream(Kit_Source *src, const Kit_streamtype type, int index) { - if(src == NULL) { - Kit_SetError("Source must not be NULL"); - return 1; - } + assert(src != NULL); switch(type) { case KIT_STREAMTYPE_AUDIO: src->astream_idx = index; break; case KIT_STREAMTYPE_VIDEO: src->vstream_idx = index; break; @@ -197,10 +100,7 @@ int Kit_SetSourceStream(Kit_Source *src, const Kit_streamtype type, int index) { } int Kit_GetSourceStream(const Kit_Source *src, const Kit_streamtype type) { - if(src == NULL) { - Kit_SetError("Source must not be NULL"); - return -1; - } + assert(src != NULL); switch(type) { case KIT_STREAMTYPE_AUDIO: return src->astream_idx; case KIT_STREAMTYPE_VIDEO: return src->vstream_idx; @@ -211,9 +111,6 @@ int Kit_GetSourceStream(const Kit_Source *src, const Kit_streamtype type) { } int Kit_GetSourceStreamCount(const Kit_Source *src) { - if(src == NULL) { - Kit_SetError("Source must not be NULL"); - return -1; - } + assert(src != NULL); return ((AVFormatContext *)src->format_ctx)->nb_streams; } |