Commit 92d6b7fd authored by Baptiste Coudurier's avatar Baptiste Coudurier

imx dump header bitstream filter, modifies bitstream to fit in mov and be...

imx dump header bitstream filter, modifies bitstream to fit in mov and be decoded by final cut pro decoder

Originally committed as revision 8218 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 895c2c00
......@@ -269,5 +269,6 @@ void avcodec_register_all(void)
av_register_bitstream_filter(&mp3_header_compress_bsf);
av_register_bitstream_filter(&mp3_header_decompress_bsf);
av_register_bitstream_filter(&mjpega_dump_header_bsf);
av_register_bitstream_filter(&imx_dump_header_bsf);
}
......@@ -37,8 +37,8 @@ extern "C" {
#define AV_STRINGIFY(s) AV_TOSTRING(s)
#define AV_TOSTRING(s) #s
#define LIBAVCODEC_VERSION_INT ((51<<16)+(37<<8)+0)
#define LIBAVCODEC_VERSION 51.37.0
#define LIBAVCODEC_VERSION_INT ((51<<16)+(38<<8)+0)
#define LIBAVCODEC_VERSION 51.38.0
#define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT
#define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION)
......@@ -2974,6 +2974,7 @@ extern AVBitStreamFilter noise_bsf;
extern AVBitStreamFilter mp3_header_compress_bsf;
extern AVBitStreamFilter mp3_header_decompress_bsf;
extern AVBitStreamFilter mjpega_dump_header_bsf;
extern AVBitStreamFilter imx_dump_header_bsf;
/* memory */
......
......@@ -31,6 +31,7 @@
#include "mpegvideo.h"
#include "mpeg12data.h"
#include "bytestream.h"
//#undef NDEBUG
//#include <assert.h>
......@@ -3522,6 +3523,35 @@ AVCodecParser mpegvideo_parser = {
};
#endif /* !CONFIG_MPEGVIDEO_PARSER */
static int imx_dump_header(AVBitStreamFilterContext *bsfc, AVCodecContext *avctx, const char *args,
uint8_t **poutbuf, int *poutbuf_size,
const uint8_t *buf, int buf_size, int keyframe)
{
/* MXF essence element key */
static const uint8_t imx_header[16] = { 0x06,0x0e,0x2b,0x34,0x01,0x02,0x01,0x01,0x0d,0x01,0x03,0x01,0x05,0x01,0x01,0x00 };
uint8_t *poutbufp;
if (avctx->codec_id != CODEC_ID_MPEG2VIDEO) {
av_log(avctx, AV_LOG_ERROR, "imx bitstream filter only applies to mpeg2video codec\n");
return 0;
}
*poutbuf = av_malloc(buf_size + 20 + FF_INPUT_BUFFER_PADDING_SIZE);
poutbufp = *poutbuf;
bytestream_put_buffer(&poutbufp, imx_header, 16);
bytestream_put_byte(&poutbufp, 0x83); /* KLV BER long form */
bytestream_put_be24(&poutbufp, buf_size);
bytestream_put_buffer(&poutbufp, buf, buf_size);
*poutbuf_size = poutbufp - *poutbuf;
return 1;
}
AVBitStreamFilter imx_dump_header_bsf = {
"imxdump",
0,
imx_dump_header,
};
/* this is ugly i know, but the alternative is too make
hundreds of vars global and prefix them with ff_mpeg1_
which is far uglier. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment