# HG changeset patch # User michael # Date 1096499536 0 # Node ID cadd9e82b3628e558769db982a65bfac3692effc # Parent 870597ca3e7a49f8f0b0f91ee9fc76d54120a397 broken mess removial diff -r 870597ca3e7a -r cadd9e82b362 avcodec.c --- a/avcodec.c Tue Sep 28 23:31:59 2004 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,173 +0,0 @@ -/** - * @file avcodec.c - * avcodec. - */ - -#include "errno.h" -#include "avcodec.h" - -#ifndef MKTAG -#define MKTAG(a,b,c,d) (a | (b << 8) | (c << 16) | (d << 24)) -#endif - -// private structure used to hide all internal memory allocations -// and structures used for de/encoding - end user should -// never see any complicated structure -typedef struct private_handle -{ - AVCodec* avcodec; - AVCodecContext avcontext; - struct private_handle* next; - struct private_handle* prev; -} private_handle_t; - -static private_handle_t* handle_first = 0; - -static AVCodec* avcodec_find_by_fcc(uint32_t fcc) -{ - // translation table - static const struct fcc_to_avcodecid { - enum CodecID codec; - uint32_t list[4]; // maybe we could map more fcc to same codec - } lc[] = { - { CODEC_ID_H263, { MKTAG('U', '2', '6', '3'), 0 } }, - { CODEC_ID_H263I, { MKTAG('I', '2', '6', '3'), 0 } }, - { CODEC_ID_MSMPEG4V3, { MKTAG('D', 'I', 'V', '3'), 0 } }, - { CODEC_ID_MPEG4, { MKTAG('D', 'I', 'V', 'X'), MKTAG('D', 'X', '5', '0'), 0 } }, - { CODEC_ID_MSMPEG4V2, { MKTAG('M', 'P', '4', '2'), 0 } }, - { CODEC_ID_MJPEG, { MKTAG('M', 'J', 'P', 'G'), 0 } }, - { CODEC_ID_MPEG1VIDEO, { MKTAG('P', 'I', 'M', '1'), 0 } }, - { CODEC_ID_AC3, { 0x2000, 0 } }, - { CODEC_ID_DTS, { 0x10, 0 } }, - { CODEC_ID_MP2, { 0x50, 0x55, 0 } }, - { CODEC_ID_FLV1, { MKTAG('F', 'L', 'V', '1'), 0 } }, - - { CODEC_ID_NONE, {0}} - }; - const struct fcc_to_avcodecid* c; - - for (c = lc; c->codec != CODEC_ID_NONE; c++) - { - int i = 0; - while (c->list[i] != 0) - if (c->list[i++] == fcc) - return avcodec_find_decoder(c->codec); - } - - return NULL; -} - -static private_handle_t* create_handle(void) -{ - private_handle_t* t = av_malloc(sizeof(private_handle_t)); - if (!t) - return NULL; - memset(t, 0, sizeof(*t)); - - // register and fill - if (!handle_first) - { - avcodec_init(); - avcodec_register_all(); - handle_first = t; - } - else - { - t->prev = handle_first->next; - handle_first->next = t; - t->next = handle_first; - } - - return t; -} - -static void destroy_handle(private_handle_t* handle) -{ - if (handle) - { - if (handle->avcodec) - { - avcodec_close(&handle->avcontext); - } - av_free(handle); - - // count referencies - } -} - -int avcodec(void* handle, avc_cmd_t cmd, void* pin, void* pout) -{ - AVCodecContext* ctx = handle; - switch (cmd) - { - case AVC_OPEN_BY_NAME: - { - // pin char* codec name - private_handle_t* h = create_handle(); - (private_handle_t**)pout = h; - if (!h) - return -ENOMEM; - if (!h->avcodec) - { - destroy_handle(h); - (private_handle_t**)pout = NULL; - return -1;// better error - } - return 0; - } - case AVC_OPEN_BY_CODEC_ID: - { - // pin uint32_t codec fourcc - private_handle_t* h = create_handle(); - (private_handle_t**)pout = h; - if (!h) - return -ENOMEM; - - if (!h->avcodec) - { - destroy_handle(h); - (private_handle_t**)pout = NULL; - return -1;// better error - } - return 0; - } - case AVC_OPEN_BY_FOURCC: - { - // pin uint32_t codec fourcc - private_handle_t* h = create_handle(); - (private_handle_t**)pout = h; - if (!h) - return -ENOMEM; - h->avcodec = avcodec_find_by_fcc((uint32_t) pin); - if (!h->avcodec) - { - destroy_handle(h); - (private_handle_t**)pout = NULL; - return -1;// better error - } - return 0; - } - case AVC_CLOSE: - // uninit part - // eventually close all allocated space if this was last - // instance - destroy_handle(handle); - break; - - case AVC_FLUSH: - break; - - case AVC_DECODE: - break; - - case AVC_ENCODE: - break; - - case AVC_GET_VERSION: - (int*) pout = 500; - default: - return -1; - - } - return 0; -} diff -r 870597ca3e7a -r cadd9e82b362 avcodec.h --- a/avcodec.h Tue Sep 28 23:31:59 2004 +0000 +++ b/avcodec.h Wed Sep 29 23:12:16 2004 +0000 @@ -2103,82 +2103,6 @@ */ int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding); -/** - * Interface for 0.5.0 version - * - * do not even think about it's usage for this moment - */ - -typedef struct { - /// compressed size used from given memory buffer - int size; - /// I/P/B frame type - int frame_type; -} avc_enc_result_t; - -/** - * Commands - * order can't be changed - once it was defined - */ -typedef enum { - // general commands - AVC_OPEN_BY_NAME = 0xACA000, - AVC_OPEN_BY_CODEC_ID, - AVC_OPEN_BY_FOURCC, - AVC_CLOSE, - - AVC_FLUSH, - // pin - struct { uint8_t* src, uint_t src_size } - // pout - struct { AVPicture* img, consumed_bytes, - AVC_DECODE, - // pin - struct { AVPicture* img, uint8_t* dest, uint_t dest_size } - // pout - uint_t used_from_dest_size - AVC_ENCODE, - - // query/get video commands - AVC_GET_VERSION = 0xACB000, - AVC_GET_WIDTH, - AVC_GET_HEIGHT, - AVC_GET_DELAY, - AVC_GET_QUANT_TABLE, - // ... - - // query/get audio commands - AVC_GET_FRAME_SIZE = 0xABC000, - - // maybe define some simple structure which - // might be passed to the user - but they can't - // contain any codec specific parts and these - // calls are usualy necessary only few times - - // set video commands - AVC_SET_WIDTH = 0xACD000, - AVC_SET_HEIGHT, - - // set video encoding commands - AVC_SET_FRAME_RATE = 0xACD800, - AVC_SET_QUALITY, - AVC_SET_HURRY_UP, - - // set audio commands - AVC_SET_SAMPLE_RATE = 0xACE000, - AVC_SET_CHANNELS, - -} avc_cmd_t; - -/** - * \param handle allocated private structure by libavcodec - * for initialization pass NULL - will be returned pout - * user is supposed to know nothing about its structure - * \param cmd type of operation to be performed - * \param pint input parameter - * \param pout output parameter - * - * \returns command status - eventually for query command it might return - * integer resulting value - */ -int avcodec(void* handle, avc_cmd_t cmd, void* pin, void* pout); - /* frame parsing */ typedef struct AVCodecParserContext { void *priv_data;