summaryrefslogtreecommitdiff
path: root/src/kitsource.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/kitsource.c')
-rw-r--r--src/kitsource.c125
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;
}