You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-11-06 08:29:25 +02:00
intra_dc_precission>0 encoding support
Originally committed as revision 3093 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
@@ -17,7 +17,7 @@ extern "C" {
|
||||
|
||||
#define FFMPEG_VERSION_INT 0x000408
|
||||
#define FFMPEG_VERSION "0.4.8"
|
||||
#define LIBAVCODEC_BUILD 4710
|
||||
#define LIBAVCODEC_BUILD 4711
|
||||
|
||||
#define LIBAVCODEC_VERSION_INT FFMPEG_VERSION_INT
|
||||
#define LIBAVCODEC_VERSION FFMPEG_VERSION
|
||||
@@ -1584,6 +1584,13 @@ typedef struct AVCodecContext {
|
||||
* - decoding: unused
|
||||
*/
|
||||
int mb_threshold;
|
||||
|
||||
/**
|
||||
*
|
||||
* - encoding: set by user
|
||||
* - decoding: unused
|
||||
*/
|
||||
int intra_dc_precision;
|
||||
} AVCodecContext;
|
||||
|
||||
|
||||
|
||||
@@ -360,7 +360,7 @@ static void common_init(MpegEncContext *s)
|
||||
{
|
||||
|
||||
s->y_dc_scale_table=
|
||||
s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
|
||||
s->c_dc_scale_table= mpeg2_dc_scale_table[s->intra_dc_precision];
|
||||
|
||||
}
|
||||
|
||||
@@ -837,6 +837,27 @@ void ff_mpeg1_encode_init(MpegEncContext *s)
|
||||
|
||||
static inline void encode_dc(MpegEncContext *s, int diff, int component)
|
||||
{
|
||||
if(((unsigned) (diff+255)) >= 511){
|
||||
int index;
|
||||
|
||||
if(diff<0){
|
||||
index= av_log2_16bit(-2*diff);
|
||||
diff--;
|
||||
}else{
|
||||
index= av_log2_16bit(2*diff);
|
||||
}
|
||||
if (component == 0) {
|
||||
put_bits(
|
||||
&s->pb,
|
||||
vlc_dc_lum_bits[index] + index,
|
||||
(vlc_dc_lum_code[index]<<index) + (diff & ((1 << index) - 1)));
|
||||
}else{
|
||||
put_bits(
|
||||
&s->pb,
|
||||
vlc_dc_chroma_bits[index] + index,
|
||||
(vlc_dc_chroma_code[index]<<index) + (diff & ((1 << index) - 1)));
|
||||
}
|
||||
}else{
|
||||
if (component == 0) {
|
||||
put_bits(
|
||||
&s->pb,
|
||||
@@ -848,6 +869,7 @@ static inline void encode_dc(MpegEncContext *s, int diff, int component)
|
||||
mpeg1_chr_dc_uni[diff+255]&0xFF,
|
||||
mpeg1_chr_dc_uni[diff+255]>>8);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void mpeg1_encode_block(MpegEncContext *s,
|
||||
|
||||
@@ -890,6 +890,7 @@ int MPV_encode_init(AVCodecContext *avctx)
|
||||
s->quarter_sample= (avctx->flags & CODEC_FLAG_QPEL)!=0;
|
||||
s->mpeg_quant= avctx->mpeg_quant;
|
||||
s->rtp_mode= !!avctx->rtp_payload_size;
|
||||
s->intra_dc_precision= avctx->intra_dc_precision;
|
||||
|
||||
if (s->gop_size <= 1) {
|
||||
s->intra_only = 1;
|
||||
@@ -4009,7 +4010,7 @@ static int encode_thread(AVCodecContext *c, void *arg){
|
||||
for(i=0; i<3; i++){
|
||||
/* init last dc values */
|
||||
/* note: quant matrix value (8) is implied here */
|
||||
s->last_dc[i] = 128;
|
||||
s->last_dc[i] = 128 << s->intra_dc_precision;
|
||||
|
||||
s->current_picture_ptr->error[i] = 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user