|
|
|
@@ -32,6 +32,8 @@ |
|
|
|
#include "libavutil/log.h" |
|
|
|
#include "libavutil/opt.h" |
|
|
|
#include "libavutil/timecode.h" |
|
|
|
#include "libavutil/stereo3d.h" |
|
|
|
|
|
|
|
#include "avcodec.h" |
|
|
|
#include "bytestream.h" |
|
|
|
#include "mathops.h" |
|
|
|
@@ -388,6 +390,7 @@ void ff_mpeg1_encode_slice_header(MpegEncContext *s) |
|
|
|
|
|
|
|
void ff_mpeg1_encode_picture_header(MpegEncContext *s, int picture_number) |
|
|
|
{ |
|
|
|
AVFrameSideData *side_data; |
|
|
|
mpeg1_encode_sequence_header(s); |
|
|
|
|
|
|
|
/* mpeg1 picture header */ |
|
|
|
@@ -471,6 +474,44 @@ void ff_mpeg1_encode_picture_header(MpegEncContext *s, int picture_number) |
|
|
|
for (i = 0; i < sizeof(svcd_scan_offset_placeholder); i++) |
|
|
|
put_bits(&s->pb, 8, svcd_scan_offset_placeholder[i]); |
|
|
|
} |
|
|
|
side_data = av_frame_get_side_data(&s->current_picture_ptr->f, |
|
|
|
AV_FRAME_DATA_STEREO3D); |
|
|
|
if (side_data) { |
|
|
|
AVStereo3D *stereo = (AVStereo3D *)side_data->data; |
|
|
|
uint8_t fpa_type; |
|
|
|
|
|
|
|
switch (stereo->type) { |
|
|
|
case AV_STEREO3D_SIDEBYSIDE: |
|
|
|
fpa_type = 0x03; |
|
|
|
break; |
|
|
|
case AV_STEREO3D_TOPBOTTOM: |
|
|
|
fpa_type = 0x04; |
|
|
|
break; |
|
|
|
case AV_STEREO3D_2D: |
|
|
|
fpa_type = 0x08; |
|
|
|
break; |
|
|
|
case AV_STEREO3D_SIDEBYSIDE_QUINCUNX: |
|
|
|
fpa_type = 0x23; |
|
|
|
break; |
|
|
|
default: |
|
|
|
fpa_type = 0; |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
if (fpa_type != 0) { |
|
|
|
put_header(s, USER_START_CODE); |
|
|
|
put_bits(&s->pb, 8, 'J'); // S3D_video_format_signaling_identifier |
|
|
|
put_bits(&s->pb, 8, 'P'); |
|
|
|
put_bits(&s->pb, 8, '3'); |
|
|
|
put_bits(&s->pb, 8, 'D'); |
|
|
|
put_bits(&s->pb, 8, 0x03); // S3D_video_format_length |
|
|
|
|
|
|
|
put_bits(&s->pb, 1, 1); // reserved_bit |
|
|
|
put_bits(&s->pb, 7, fpa_type); // S3D_video_format_type |
|
|
|
put_bits(&s->pb, 8, 0x04); // reserved_data[0] |
|
|
|
put_bits(&s->pb, 8, 0xFF); // reserved_data[1] |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
s->mb_y = 0; |
|
|
|
ff_mpeg1_encode_slice_header(s); |
|
|
|
|